
Les mots de passe simples ne protègent pas et les mots de passe complexes ne peuvent pas être mémorisés. Par conséquent, ils se trouvent si souvent sur un autocollant sous le clavier ou sur le moniteur. Pour que les mots de passe restent dans l'esprit des utilisateurs «oublieux» et que la fiabilité de la protection ne soit pas perdue, il existe une authentification à deux facteurs (2FA).
En raison de la combinaison de facteurs de propriété de l'appareil et de la connaissance de son code PIN, le code PIN lui-même peut être plus simple et plus facile à mémoriser. Les lacunes dans la longueur ou le caractère aléatoire du NIP sont compensées par l'exigence de propriété physique et les restrictions sur la recherche du NIP.
De plus, dans les institutions publiques, il arrive qu'ils souhaitent que tout fonctionne selon GOST. A propos de cette option 2FA pour entrer dans Linux et sera discutée. Je pars de loin.
Modules PAM
Les modules d'authentification enfichables (PAM) sont des modules avec une API standard et des implémentations de divers mécanismes d'authentification dans les applications.
Tous les utilitaires et applications qui peuvent fonctionner avec PAM les récupèrent et peuvent les utiliser pour authentifier l'utilisateur.
En pratique, cela fonctionne comme ceci: la commande de connexion se transforme en PAM, qui effectue toutes les vérifications nécessaires en utilisant les modules spécifiés dans le fichier de configuration et renvoie le résultat à la commande de connexion.
librtpam
Le module développé par la société Active ajoute une authentification à deux facteurs des utilisateurs à l'aide de cartes à puce ou de jetons USB à l'aide de clés asymétriques selon les dernières normes de la cryptographie domestique.
Considérez le principe de son travail:
- le jeton stocke le certificat de l'utilisateur et sa clé privée;
- Le certificat est enregistré dans le répertoire personnel de l'utilisateur comme approuvé.
Le processus d'authentification est le suivant:
- Rutoken recherche le certificat personnel de l'utilisateur.
- Un code PIN symbolique est demandé.
- Les données aléatoires sont signées sur une clé privée directement dans la puce Rutoken.
- La signature reçue est vérifiée à l'aide de la clé publique du certificat utilisateur.
- Le module renvoie le résultat de la vérification de signature à l'application appelante.
Vous pouvez vous authentifier à l'aide des clés GOST R 34.10-2012 (longueur 256 ou 512 bits) ou GOST R 34.10-2001 obsolète.
Il n'est pas nécessaire de se soucier de la sécurité des clés - elles sont générées directement dans Rutoken et ne quittent jamais sa mémoire pendant les opérations cryptographiques.

Rutoken EDS 2.0 est certifié par le FSB et le FSTEC pour NDV 4, il peut donc être utilisé dans les systèmes d'information qui traitent des informations confidentielles.
Utilisation pratique
Presque n'importe quel Linux moderne convient, par exemple, nous utiliserons xUbuntu 18.10.
1) Installez les packages nécessaires
sudo apt-get install libccid pcscd opensc
Si vous souhaitez ajouter un verrou de bureau avec un économiseur d'écran, installez également le
libpam-pkcs11
.
2) Ajouter un module PAM avec prise en charge de GOST
Téléchargez la bibliothèque depuis
https://download.rutoken.ru/Rutoken/PAM/Copiez le contenu du dossier PAM librtpam.so.1.0.0 dans le dossier système
/usr/lib/
ou
/usr/lib/x86_64-linux-gnu/
ou
/usr/lib64
3) Installez le package avec librtpkcs11ecp.so
Téléchargez et installez le package DEB ou RPM à partir du lien:
https://www.rutoken.ru/support/download/pkcs/4) Nous vérifions que Rutoken EDS 2.0 fonctionne dans le système
Dans le terminal, exécutez
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Si vous voyez la ligne
Rutoken ECP <no label>
- alors tout va bien.
5) Lisez le certificat
Vérifiez que l'appareil dispose d'un certificat
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Si après la ligne:
Using slot 0 with a present token (0x0)
- Si des informations sur les clés et les certificats s'affichent , vous devez lire le certificat et l'enregistrer sur le disque. Pour ce faire, exécutez la commande suivante, où au lieu de {id} vous devez remplacer le certificat ID que vous avez vu dans la sortie de la commande précédente:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
Si le fichier cert.crt est créé, passez à l'étape 6). - il n'y a rien , alors l'appareil est vide. Contactez votre administrateur ou créez vous-même les clés et le certificat en suivant l'étape suivante.
5.1) Créer un certificat de test
Attention! Les méthodes décrites pour créer des clés et des certificats conviennent aux tests et ne sont pas destinées à être utilisées en mode combat. Pour ce faire, vous devez utiliser des clés et des certificats émis par une autorité de certification de confiance de votre organisation ou une autorité de certification accréditée.
Le module PAM est conçu pour protéger les ordinateurs locaux et implique de travailler dans de petites organisations. Puisqu'il y a peu d'utilisateurs, l'administrateur peut lui-même surveiller la révocation des certificats et bloquer manuellement les comptes, ainsi que la période de validité des certificats. Le module PAM n'est pas encore en mesure de vérifier les certificats par CRL et de créer des chaînes de confiance.
Moyen simple (via navigateur)
Pour obtenir un certificat de test, utilisez le
service Web Rootoken Registration Center . Le processus ne prendra pas plus de 5 minutes.
Chemin geek (via console et éventuellement compilateur)
Vérifier la version d'OpenSC$ opensc-tool --version
Si la version est inférieure à 0,20,
mettez Ă niveau ou collectez
la branche pkcs11-tool avec le support GOST-2012 depuis notre GitHub (au moment de cet article, la version 0.20 n'a pas encore été publiée) ou depuis la branche principale du projet OpenSC principal au plus tard
commit 8cf1e6fNous générons une paire de clés avec des paramètres:
--key-type: GOSTR3410-2012-512: (-2012 512 c ), GOSTR3410-2012-256:A (-2012 256 A)
--id:
identifiant d'objet (CKA_ID) sous forme de nombres à deux chiffres en hexadécimal de la table ASCII. Utilisez uniquement des codes ASCII pour les caractères imprimés, comme id devra passer OpenSSL sous forme de chaîne. Par exemple, les codes ASCII "3132" correspondent à la chaîne "12".
Pour plus de commodité, vous pouvez utiliser le service en ligne pour convertir des chaînes en codes ASCII .
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Ensuite, nous allons crĂ©er un certificat. Deux manières seront dĂ©crites ci-dessous: la première via l'AC (nous utiliserons les AC de test), la seconde - auto-signĂ©e. Pour ce faire, vous devez d'abord installer et configurer OpenSSL version 1.1 ou ultĂ©rieure pour travailler avec Rutoken via un module rtengine spĂ©cial Ă
l' aide
du manuel d'
installation et de configuration d'OpenSSL .
Par exemple: pour '-
-id 3132
' dans OpenSSL, vous devez spécifier "
pkcs11:id=12
".
Vous pouvez utiliser les services d'une CA de test, dont il existe de nombreux, par exemple
ici ,
ici et
ici , pour cela nous allons créer une demande de certificat
Une autre option est de succomber à la paresse et de créer un auto-signé
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
Téléchargez le certificat sur l'appareil
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer
6) Enregistrez le certificat dans le système
Assurez-vous que votre certificat ressemble Ă un fichier base64:

Si votre certificat ressemble Ă ceci:

alors vous devez convertir le certificat du format DER au format PEM (base64)
$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Encore une fois, nous vérifions que tout est en ordre.
Ajouter un certificat à la liste des certificats approuvés
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates
La dernière ligne protège la liste des certificats approuvés contre les modifications accidentelles ou intentionnelles par d'autres utilisateurs. Cela élimine la situation lorsque quelqu'un ajoute son certificat ici et peut se connecter en votre nom.
7) Configurer l'authentification
La configuration de notre module PAM est complètement standard et se fait comme les paramètres des autres modules. Nous créons dans le fichier
/usr/share/pam-configs/rutoken-gost-pam
contenant le nom complet du module, qu'il soit activé par défaut, la priorité du module et les paramètres d'authentification.
Dans les paramètres d'authentification, il y a des exigences pour le succès de l'opération:
- requis: ces modules doivent renvoyer une réponse positive. Si le résultat de l'appel du module contient une réponse négative, cela entraînera une erreur d'authentification. La demande sera réinitialisée, mais les autres modules seront appelés.
- requis (requis): similaire à requis, mais conduit immédiatement à un échec d'authentification et ignore le reste des modules.
- suffisant: si devant un tel module aucun des modules requis ou suffisants n'a retourné un résultat négatif, le module retournera une réponse positive. Les modules restants seront ignorés.
- facultatif (facultatif): s'il n'y a pas de modules requis dans la pile et qu'aucun des modules suffisants n'a renvoyé un résultat positif, alors au moins un des modules facultatifs doit retourner une réponse positive.
Le contenu complet du fichier
/usr/share/pam-configs/rutoken-gost-pam
:
Name: Rutoken PAM GOST
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

enregistrez le fichier, puis exécutez
$ sudo pam-auth-update
dans la fenêtre qui apparaît, mettez un astérisque près de
Rutoken PAM GOST et cliquez sur
OK
8) Vérifiez le réglage
Pour comprendre que tout est configuré, mais pour ne pas perdre la possibilité de se connecter, entrez la commande
$ sudo login
Saisissez votre nom d'utilisateur. Tout est correctement configuré si le système nécessite un code PIN d'appareil.

9) Configurer le verrouillage de l'ordinateur lors de l'extraction du jeton
Le
libpam-pkcs11
comprend l'utilitaire
pkcs11_eventmgr,
qui vous permet d'effectuer diverses actions lorsque des événements PKCS # 11 se produisent.
Pour configurer
pkcs11_eventmgr
utilisez le fichier de configuration:
/etc/pam_pkcs11/pkcs11_eventmgr.conf
Pour diverses distributions Linux, la commande qui provoque le verrouillage du compte lors de la suppression des cartes à puce ou des jetons sera différente. Voir l' event card_remove
.Un exemple de fichier de configuration est présenté ci-dessous:
pkcs11_eventmgr { # daemon = true; # debug = false; # polling_time = 1; # - # - 0 expire_time = 0; # pkcs11 pkcs11_module = usr/lib/librtpkcs11ecp.so; # # : event card_insert { # ( ) on_error = ignore ; action = "/bin/false"; } # event card_remove { on_error = ignore; # # GNOME action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock"; # XFCE # action = "xflock4"; # Astra Linux (FLY) # action = "fly-wmfunc FLYWM_LOCK"; } # event expire_time { # ( ) on_error = ignore; action = "/bin/false"; } }
Après cela, ajoutez l'application
pkcs11_eventmgr
au chargement automatique. Pour ce faire, modifiez le fichier .bash_profile:
$ nano /home/<_>/.bash_profile
Ajoutez la ligne pkcs11_eventmgr à la fin du fichier et redémarrez.
Les étapes décrites pour configurer le système d'exploitation peuvent être utilisées comme instructions dans n'importe quelle distribution Linux moderne, y compris domestique.
Conclusion
Les PC Linux deviennent de plus en plus populaires dans les agences gouvernementales russes, et la configuration d'une authentification fiable à deux facteurs dans ce système d'exploitation n'est pas toujours facile. Nous serons heureux de ce guide pour vous aider à résoudre le "problème de mot de passe" et protéger de manière fiable l'accès à votre PC sans y consacrer beaucoup de temps.