Révision datée du 7 décembre 2021 à 11:28 par Barbeaujp (discussion | contributions) (nouveau script python de Michele avec l'option -o)

Authentification à deux facteurs (A2F)

Guide rapide pour l'Authentification à deux facteurs (A2F) à l'UdeM.

Qu'est-ce que c'est?

Un 2e facteur d'authentification est un code numérique qui est ajouté à votre code d'usager et votre mot de passe pour vous authentifier aux divers systèmes informatique de l'Université. Ce code numérique vous sera demandé aléatoirement quand vous vous brancherez à un système qui utilise cette fonction, comme par exemple le VPN ou vos courriels sur Office365.

Pourquoi?

Un code d'usager ne change pratiquement jamais et un mot de passe change seulement une ou deux fois par année, ce qui les rend vulnérables à être volés, interceptés ou même devinés. Ajouter un 2e facteur d'authentification permet de protéger votre compte car le code numérique change à chaque fois que vous l'utilisez, ce qui le rend très difficile à intercepter ou voler.

Comment?

Les TI ont définis 5 façons de recevoir le 2e facteur d'authentification:

  • recevoir le code numérique via un message texte sur votre téléphone cellulaire
  • recevoir le code numérique via l'application Microsoft Authenticator sur votre téléphone cellulaire ou tablette Android ou iOS
  • recevoir le code numérique via l'application Oracle Authenticator sur votre ordinateur roulant sous Windows
  • recevoir le code numérique via l'application KeePassXC sur votre ordinateur roulant sous Windows, macOS ou Linux
  • recevoir un appel vocal sur votre téléphone cellulaire, personnel ou de bureau, (dans ce cas-ci vous ne recevrez pas un code numérique, mais devrez plutôt appuyer sur le touche # lorsque demandé)

Quelle façon choisir?

C'est à vous de déterminer quelle façon choisir selon votre situation et les appareils que vous avez à votre disposition. Voici les recommandations des TI:

Situation 2e facteur à privilégier
J’ai un téléphone intelligent et je voyage rarement Toutes les façons sont bonnes
J’ai un téléphone intelligent et je voyage fréquemment Application d’authentification
J’ai un téléphone cellulaire sans accès aux données Appel téléphonique ou message texte
J’ai une tablette android ou ios Application Microsoft Authenticator
Je suis en télétravail sans téléphone cellulaire Appel téléphonique ou application d’authentification

Faut-il avoir plus qu'une façon?

Nous vous recommandons très fortement de toujours avoir au minimum 2 façons différentes de recevoir le 2e facteur d'authentification. Vous pouvez perdre ou vous faire voler un téléphone cellulaire, même chose pour un ordinateur portable ou une tablette, c'est donc important d'avoir une 2e façon de vous authentifier si jamais ça se produit.

Vous pouvez par exemple recevoir un message sur votre cellulaire et avoir une application d'authentification sur votre ordinateur comme 2e option.

Pour plus de détails

Veuillez consulter l'article publié sur le Wiki des TI, ceci est la documentation officielle pour tout ce qui touche au 2FA:

https://wiki.umontreal.ca/pages/viewpage.action?pageId=184126772

Pour configurer vos accès 2FA, utilisez ce site:

http://a2f.umontreal.ca/

Obtenir un code via un script Python

si pour une raison quelconque vous ne pouvez utiliser les outils choisis par les TI, il est possible d'obtenir un code A2F via le script Python (version 3) suivant:

#!/usr/bin/env python3

""" 
Générer un code pour le 2FA UdeM
Ce code a été testé avec python v3
	python3 ./gettingOTP.py --help

La première fois que vous roulerez ce code il vous demandera d'entrer le clé OTP
Pour plus d'information voir
https://dms.umontreal.ca/wiki/index.php?title=Authentification_%C3%A0_deux_facteurs_(A2F)

Le code sera sauvgardé dans votre home .saved_otp

Vous avez besoin des librairies pyotp et cryptography
	pip3 install --user pyotp cryptography


@Author: Equipe DMS
@Date: Dec 7, 2021
@version: 0.2

"""

import pyotp

import datetime,time
import argparse, os, sys, base64
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes
from getpass import getpass
from cryptography.fernet import Fernet

_file=os.path.expanduser('~/.saved_totp')

def range_limit_loop(arg):
	try:
		_value=int(arg)
	except ValueError:
		raise argparse.ArgumentTypeError("Valeur doit être un nombre entier")
	if _value < 2 or _value > 30:
		raise argparse.ArgumentTypeError("Valeur doit être entre 2 et 30")
	return _value

parser = argparse.ArgumentParser()
parser.add_argument('-e', '--encrypt', action="store_true")
parser.add_argument('-l', '--loop', default=-1, help="Valeur entre 2 et 30 secondes", type=range_limit_loop )
parser.add_argument('-o', '--only_code', action="store_true", help="Affiche seulement le code" )

args = parser.parse_args()

if args.encrypt:	
	_pass=getpass()
	salt=b'\xa1\xb3\xd9l\xa4\xa0\xa7\x0c\xf5\xf4\x84)3P\x98\xf5'
	kdf = PBKDF2HMAC(
		algorithm=hashes.SHA256(),
		length=32,
		salt=salt,
		iterations=390000,
	)
	key = base64.urlsafe_b64encode(kdf.derive( str.encode(_pass) ))

	fernet = Fernet(key)
	
if not os.path.isfile(_file):
	_key=input('Entrez la clé TOTP =>')
	_key=str.encode(_key)
	if args.encrypt:  
		_key=fernet.encrypt(_key)
	f=open(_file,'wb')
	f.write( _key )
	os.chmod('~/.saved_totp', 0o400 )

f=open(_file,'rb')
_key= f.read()

if args.encrypt:  
	_key=fernet.decrypt(_key)
else:
	_key=_key.decode("utf-8")

totp = pyotp.TOTP(_key)

while True:
	_time_remaining = totp.interval - datetime.datetime.now().timestamp() % totp.interval

	# S'il reste moins de 2 secondes, lire le prochain code
	if _time_remaining<2:
		_code=totp.at(datetime.datetime.now().timestamp()+2)
		_time_remaining=30
	else:
		_code=totp.now()

	if args.only_code:
		print(_code, end="")
		break;
	else:
		print("Clé OTP courante: %s Temps restant %d " % (_code, _time_remaining), end='\r')
		if args.loop<1:
			print("\n");
			break;
		else:
			time.sleep(args.loop)

Copiez le code dans un fichier nommé loopOTP.py et rendez-le exécutable (varie selon votre plateforme). Ensuite utilisez-le comme ceci:

./loopOTP.py -e -l 5

Lors de la première exécution il vous demandera un mot de passe qui servira à encrypter clé TOTP (vous pouvez enlever l'option -e si vous ne désirez pas avoir cette fonction). Ensuite il vous demandera votre clé TOTP (que vous pouvez obtenir sur le site web des TI, voir l'image ci-dessous pour un résumé). Une fois configuré il affichera votre code OTP à chaque 5 secondes. Vous n'avez qu'à relancer la commande plus tard pour avoir votre code, il vous demandera alors seulement votre mot de passe puis affichera votre code TOTP à chaque 5 secondes.

Vous pouvez aussi l'éxécuter avec l'option -o au lieu de -l 5, ceci affichera le code seulement une fois au lieu de le faire en loop.

Pour obtenir votre clé TOTP: A2f.gif


La dernière modification de cette page a été faite le 20 novembre 2023 à 12:44.