PROJET AUTOBLOG


Shaarli - Les discussions de Shaarli

Archivé

Site original : Shaarli - Les discussions de Shaarli du 23/07/2013

⇐ retour index

SSH with PIV and PKCS11

samedi 28 novembre 2015 à 17:29
GuiGui's Show - Liens
FIPS 201 ou plus simplement PIV (Personal Identity Verification) est un standard US pour l'identification et l'authentification des fédéraux et des sous-traitants basées sur une carte à puce (smartcard) et la crypto asymétrique habituelle. Voir https://en.wikipedia.org/wiki/FIPS_201

Les Yubikeys (Neo, Neo-n, 4, 4-nano) supportent ce standard \o/ ... avec des clés RSA limitées à 2048 bits (mais c'est volontaire, cf http://dx.doi.org/10.6028/NIST.SP.800-78-4 et http://csrc.nist.gov/groups/SNS/piv/news.html - « The final release of FIPS 186-3 Digital Signature Standard, published in June 2009, does not list RSA 4096 as an approved digital signature algorithm and key size for use in the federal government. To comply with FIPS 186-3, SP 800-78-2 accordingly removes RSA 4096 as an algorithm and key size for generating signatures for PIV data objects. »).

Et si on utilisait cette fonctionnalité des Yubikeys pour s'authentifier via SSH ? :)


Sur une Yubikey Neo/Neo-n, la première étape sera d'activer l'interface smartcard de la Yubikey. On a déjà vu ça dans un autre shaarli : http://shaarli.guiguishow.info/?VMg7XA (étapes 1 à 4). Cette étape est inutile sur une Yubikey 4 puisque l'interface smartcard/CCID est déjà activée par défaut.

Pour communiquer avec la Yubikey sous Debian GNU/Linux Jessie, il faut installer le package pcscd.

Si vous avez une Yubikey 4, il y a une étape supplémentaire : pour détecter les lecteurs de cartes à puce, pcscd se base sur une liste d'ID de fabricants et d'ID de produits. Forcément, la liste packagée dans Debian stable est outdated et votre clé ne sera pas reconnue.

Il faut modifier le fichier /etc/libccid_Info.plist afin d'y ajouter un item à la fin de la liste des « ifdVendorID » « <string>0x1050</string> » ainsi qu'un item à la fin de la liste des « ifdProductID » « <string>0x0407</string> » ainsi qu'une description sympa à la fin de « ifdFriendlyName » comme « <string>Yubico Yubikey 4</string> ». Il faut ensuite redémarrer pcscd : sudo systemctl restart pcscd.service. Merci à http://forum.yubico.com/viewtopic.php?f=26&t=982&sid=eea0681e9d17e4cdf4ccdb9bc95a56b2&start=10


Selon la configuration de votre Yubikey 4 (les fonctionnalités que vous avez activées genre OTP, CCID, U2F,...), le ifdProductID change. Pour le retrouver, il faut lancer pcscd en debug : sudo systemctl stop pcscd.service puis sudo pcscd -f -d . Branchez votre Yubikey 4 eeeeeet, parmi la myriade de lignes qui s'affichent : « 00000118 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x1050, PID: 0x0407, path: /dev/bus/usb/001/019 ». 0x0407 est le ifdProductID recherché \o/

Si vous regardez la sortie debug de pcscd, ne vous préoccupez pas du message :
« 00000015 ifdhandler.c:130:CreateChannelByNameOrChannel() failed
00000010 readerfactory.c:1043:RFInitializeReader() Open Port 0x200002 Failed (usb:1050/0407:libudev:1:/dev/bus/usb/001/019)
00000010 readerfactory.c:335:RFAddReader() Yubico Yubikey 4 init failed. »
C'est simplement que pcscd seul ne sait pas parler la langue de la Yubikey mais il a bien établi la communication et c'est tout ce qu'on lui demande.


Maintenant, il faut installer l'outil de manipulation de l'interface PIV fournit par Yubico. Il n'est pas packagé dans Debian Jessie. Dooooooonc :
   * git clone git://github.com/Yubico/yubico-piv-tool

   * cd yubico-piv-tool

   * sudo apt-get install libpcsclite-dev libtool-bin
     Le premier package évite l'erreur « configure: error: cannot find PCSC library ».
     Le deuxième évite l'erreur : « config.status: error: cannot find input file: 'lib/Makefile.in' » qui provient d'erreurs précédentes « AC_LIBTOOL_WIN32_DLL: command not found AC_PROG_LIBTOOL: command not found »

   * sudo make install

   * sudo ldconfig -v afin de vider le cache et de prendre en compte la nouvelle lib qui a été ajoutée dans /usr/local/lib (/usr/local/lib est déjà dans le LDPATH, voir /etc/ld.conf.d/libc.conf). Sans ça, au lancement de yubico-piv-tool, vous aurez l'erreur : « yubico-pivtool: error while loading shared libraries: libykpriv.so.1: cannot open shared object file: No such file or directory »

   * yubico-piv-tool -a version devrait vous retourner la version de l'applet PIV de votre Yubikey.


On peut désormais suivre le tuto pointé par ce shaarli. Notes :
   * On a le choix de l'algorithme, on n'est pas contraint à 9a (qui veut dire RSA 1024) : « 9A, 9C, 9D, 9E: RSA 1024, RSA 2048, or ECC secp256r1 keys (algorithms 6, 7, 11 respectively). ». Voir : https://developers.yubico.com/yubico-piv-tool/YubiKey_PIV_introduction.html

   * On doit changer la clé de management, le code PIN et le code PUK par des éléments persos. Voir : https://developers.yubico.com/yubico-piv-tool/YubiKey_PIV_introduction.html. Pour utiliser la nouvelle clé de management, il faudra la passer en argument de toutes vos futurs commandes yubico-piv-tool avec « -k »

   * Sur la machine à partir de laquelle vous voulez vous authentifier avec votre Yubikey, il faudra installer les packages pscsd comme vu plus haut ainsi que opensc-pkcs11. C'est tout !

   * L'équivalent de -I /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so à mettre dans ssh_config pour se simplifier la vie, c'est « PKCS11Provider=/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so »


Comme on peut le voir, ça peut être plus pratique que d'utiliser l'applet OpenPGP des Yubikeys + virer le fake agent gnupg de MATE + configurer gnugp-agent comme on le faisait ici : http://shaarli.guiguishow.info/?VMg7XA
(Permalink)