My Personal Wiki

La théorie, c'est quand on sait tout et que rien ne fonctionne.... La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

Outils pour utilisateurs

Outils du site


securite:materiel:yubikey:index

Les Clés Sécurité Multi-Protocoles


Linux

Installation

Ubuntu

sudo add-apt-repository ppa:yubico/stable && sudo apt-get update

A Installer

Programme Commande d'installation
YubiKey Manager (CLI) sudo apt install yubikey-manager
YubiKey Personalization Tool sudo apt install yubikey-personalization-gui
libpam-yubico sudo apt install libpam-yubico
libpam-u2f sudo apt install libpam-u2f

Debian

Il ne sera pas nécessaire d'ajouter le Repo !

apt-get install pamu2fcfg libpam-u2f libpam-yubico

Paramétrer

Clé Initial

NE PAS ÊTRE SUDO POUR PARAMÉTRER VOTRE CLÉ

Voici les commande à éxecuter pour associer une Clé a un compte utilisateur:
Dans un terminal, être positionné dans votre profil utilisateur.

  1. mkdir -p ~/.config/Yubico
  2. pamu2fcfg > ~/.config/Yubico/u2f_keys
  3. Saisir votre code PIN de clé
  4. Ensuite quand la clé Clignote, toucher la pour faire l'association.

Clé de Secour

Toujours avec un terminal se repositionner dans votre profil (ou l'endroit ou est le fichier de configuration).

  1. Brancher votre Clé
  2. pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
  3. Saisir votre code PIN de clé
  4. Quand la clé Clignote, toucher la pour faire l'association.

Avec SUDO

En lieux et place de la saisie du password pour sudo, il faudra seulement valider avec la Clé

Sudo & Session Clé Only

Si vous souhaitez juste le valider avec votre clé votre ouverture de session.
Modifier alors ce fichier:

sudo nano /etc/pam.d/common-auth


En tout début de fichier insérer:

auth       sufficient   pam_u2f.so


Dès que vous appellerez la commande “SUDO” dans un terminal, il vous suffira seulement d'appuyer sur votre clé pour valider celle-ci.


Session Key + Passwd

Il vous faudra saisir votre password et avoir votre Clé pour vous authentifier!!
Pour le systèmes après Ubuntu 17.10:

sudo nano /etc/pam.d/gdm-password

Pour les systèmes avant Ubuntu 17.10:

sudo nano /etc/pam.d/lightdm

Après @include common-auth ajouter :

auth       required   pam_u2f.so

Session Clé Only

sudo nano /etc/pam.d/login

Après @include common-auth ajouter :

auth       required   pam_u2f.so

Verrouiller Session

Pour vous permettre de verrouiller votre session dès lors que la clé est retirée.

sudo nano /usr/local/bin/lockscreen.sh

Vous pouvez décider d'un endroit différent si vous le souhaiter.

Script:

#!/bin/sh
 
# Ce script, quand il est appelé, verrouille le session si la yubikey est absente.
 
sleep 2
 
if ! ykman info >> /dev/null 2>&1
then
loginctl lock-sessions
fi

Rendre le script exécutable:

sudo chmod +x /usr/local/bin/lockscreen.sh

Ajouter Entrée UDEV

sudo nano /etc/udev/rules.d/20-yubikey.rules

Ajouter:

ACTION=="remove", ENV{SUBSYSTEM}=="usb", ENV{PRODUCT}=="1050/407/526", RUN+="/usr/local/bin/lockscreen.sh"

Monitorer UDEV

# Brancher la Yubikey
# monitor les actions systèmes
udevadm monitor --environment --udev
 
# Débrancher la yubikey, puis CTRL + C pour stopper le monitoring

Retour:

ID_VENDOR=Yubico
ID_VENDOR_ID=1050
ID_MODEL_ID=0407
ID_REVISION=0526
Code

Il ne vous restera plus qu'a modifier la variable ENV{PRODUCT}==“xxxx/xxx/xxx” en conséquence.
ENV{PRODUCT}==“xxxx/xxx/xxx” ID_VENDOR_ID, ID_MODEL_ID et ID_REVISION vous obtiendrez 1050/407/526
Recharger la configuration UDEV:

sudo udevadm control --reload-rules

GPG & Yubikey

Structure d’une clé PGP

Une clé PGP n’est pas simplement une bi-clé publique/privée comme le sont les clés SSH, elles contiennent également des métadonnées et éventuellement d’autres clés. De manière générale, une clé PGP est constituée de quatre éléments :

  • Une clé primaire (ou clé maître) : il s’agit d’une bi-clé utilisée pour signer les informations contenues dans la clé PGP. L’ID de cette clé primaire (une empreinte de 20 octets, soit 40 caractères, défini dans la RFC 4880-12.2) est utilisée pour référencer la clé PGP.
  • Une identité primaire : c’est elle qui définit le nom et l’adresse email du détenteur de la clé PGP.
  • Une ou plusieurs identités secondaires optionnelles : Si généralement le nom est le même pour toutes les identités (je ne vous prive pas de vous inventer des surnoms), il est commun d’associer plusieurs adresses email à la clé PGP.
  • Éventuellement des sous-clés : il s’agit là aussi de bi-clé utilisées pour signer, chiffrer ou s’authentifier. Ces clés sont certifiées par la clé primaire.

On peut se rendre compte qu’une clé PGP est en réalité une véritable structure pouvant contenir une ou plusieurs bi-clés ainsi que des métadonnées concernant le propriétaire de la clé. Initialement, lorsque Zimmermann décrit PGP dans la RCF 1991, une clé PGP ne comporte qu’une seule bi-clé. Lorsque la notion de sous-clés a été ajouté, le terme de “clé PGP” au singulier est resté.
Les sous-clés

On distingue quatre actions pour les clés PGP : la certification, la signature, le chiffrement et l’authentification. Seule la clé primaire possède le pouvoir de certification. Les sous-clés sont des bi-clés signée par la clé primaire. La clé publique permet de vérifier une signature et chiffrer un document, tandis que la clé privée permet de signer ou déchiffrer un document, mais aussi à s’authentifier.

  • La sous-clé de chiffrement : Elle est automatiquement créée par défaut et signée par la clé primaire. Elle permet de chiffrer les documents, les mails, etc.
  • La sous-clé de signature : Elle permet de signer les documents, les mails, etc. Par défaut, cette fonction est remplie par la clé primaire.
  • La sous-clé d’authentification : Elle est utilisée pour s’authentifier auprès de services externes tels que SSH. Par défaut, cette fonction est remplie par la clé primaire.

Chaque sous-clé a sa propre date d’expiration (optionnelle) et peut être révoquées indépendamment des autres. Il peut être alors judicieux de n’attribuer qu’un seul rôle à chaque clé, une clé primaire utilisée pour signer les sous-clés et les identités, et trois sous-clés utilisées respectivement pour signer, chiffrer et s’authentifier.
Les cartes à puces

Pour terminer cette (longue) introduction, parlons rapidement des cartes à puces (ou smart-card), telle que la Yubikey. Ce sont simplement des supports physiques pour stocker des clés privées et réalisée des opérations cryptographiques directement sur la carte.

Les cartes à puce sont conçues de telle sorte qu’une fois les clés privées ont été importées sur le périphérique, elles ne peuvent plus être extraites. Ainsi, même en cas de compromission de la machine, un attaquant ne pourra pas obtenir les clés privées.
Configurer la Yubikey

Maintenant que les bases sont posées, il est temps de générer une clé PGP et de configurer notre Yubikey pour pouvoir signer et chiffrer des documents, mais aussi utiliser SSH avec une sous-clé stockée sur la Yubikey.


Créer une paire de Clé

le paramètre expert permetd'avoir toutes les options.

gpg --expert --full-generate-key

Choisir l’option (8) RSA (set your own capabilities), désactiver tous les rôles sauf Certify option S puis Q et générer une clé de 4096 bits.

Ensuite vérifier que la clé a bien été créée :

gpg --list-keys
pub   rsa4096 2022-04-18 [C] [expire : 2027-04-17]
      B327DD2BF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid          [  ultime ] Sylvain Key (Ma clé pour certifier) <mon-mail@me.com>
gpg --list-secret-keys
sec#  rsa4096 2022-04-18 [C] [expire : 2027-04-17]
      B327DD2BF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid          [  ultime ] Sylvain Key (Ma clé pour certifier) <mon-mail@me.com>

On a donc une clé publique et une clé secrète (privée) dont le rôle est de certifier [C] les autres informations de la clé PGP. On a également une identité uid.

L’étape suivante est de générer nos trois sous-clés :

gpg --expert --edit-key B327DD2BF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
gpg> addkey

GnuPG dispose d’une interface de commande pour l’édition des clés. Pour ajouter une clé, saisir addkey, puis choisir l’option (8) RSA (set your own capabilities), désactiver tous les rôles sauf Sign Oprion S puis Q et générer une clé de 4096 bits.

Libre à vous de générer des clés ECC en sélectionnant l’option (11) ECC (set your own capabilities).

Répéter l’opération pour générer les deux autres clés avec les rôles Encrypt et Authenticate, puis enregistrer les modifications :

gpg> quit
Save changes? (y/N) y

Créer un certificat de révocation

Pourquoi ?

Qu’est ce qu’un certificat de révocation ?

Si vous oubliez votre mot de passe, ou si votre clé privée est compromise ou perdue, ce certificat de révocation peut être publié pour notifier aux autres que votre clé publique ne doit plus être utilisée. On peut toujours se servir d’une clé publique révoquée pour vérifier des signatures que vous avez faites par le passé, mais on ne peut s’en servir pour chiffrer de nouveaux messages à votre attention. Cela n’affecte pas non plus votre capacité à déchiffrer les messages qui vous ont été adressés précédemment, si vous avez toujours accès à votre clé privée.
Source

Avoir une clef GPG, c’est bien. Avoir créer le certificat de révocation associé à cette clef, c’est mieux.
Cela se fait de façon simple, en ligne de commande. On tape la commande :

gpg --output revoke.asc --gen-revoke mykey

mykey = id de clé ou mail utilisé pour identifié la clé.
Suivez les instructions.

Comment l'utiliser

Dès lors où la clef est compromise (vol du PC ou autre) et même si l’on a une copie de la clef privée sur une autre machine, dès lors qu’il y a une copie de la clef privée qui se ballade dans la nature, il faut révoquer sa clef (et en créer une autre par la suite). Pour celà, on utilise à nouveau gpg en ligne de commande et lui donnant comme fichier le fameux certificat de révocation.

gpg --import revoke.asc

Et ensuite :
export vers le serveur de clef avec la commande suivante :

gpg --keyserver subkeys.pgp.net --send KEYNAME

Et lors de la prochaine synchronisation avec les serveurs de clefs, les personnes qui utilisaient la clef publique seront informées qu’elle n’est plus à utiliser. 

Il faut donc penser à régulièrement mettre à jour ses clefs locales par synchronisation avec les serveurs.


Contrôlé les Clé

gpg --list-key
/home/sylvain/.gnupg/pubring.kbx
--------------------------------
pub   rsa4096 2022-04-18 [C] [expire : 2027-04-17]
      B327DD2BF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid          [  ultime ] Sylvain Key (Ma clé pour certifier) <mon-mail@me.com>
sub   rsa4096 2022-04-18 [S] [expire : 2027-04-17]
sub   rsa4096 2022-04-18 [A] [expire : 2027-04-17]
sub   rsa4096 2022-04-18 [E] [expire : 2027-04-17]
 
gpg --list-secret-key
/home/sylvain/.gnupg/pubring.kbx
--------------------------------
sec   rsa4096 2022-04-18 [C] [expire : 2027-04-17]
      B327DD2BF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid          [  ultime ] Sylvain Key (Ma clé pour certifier) <mon-mail@me.com>
ssb  rsa4096 2022-04-18 [S] [expire : 2027-04-17]
ssb  rsa4096 2022-04-18 [A] [expire : 2027-04-17]
ssb  rsa4096 2022-04-18 [E] [expire : 2027-04-17]

On retrouve donc nos sous-clés privées (ssb) et publiques (sub) pour signer [S], chiffrer [E] et s’authentifier [A].


Exporter les Clés

Nous n’avons plus besoin à présent de la clé privée primaire qui a été utilisée pour signer l’identité et les sous-clés. Mais on va tout de même éviter de la supprimer : on ne sait jamais, elle pourrait nous servir … On va donc exporter toutes nos clés sur une clé USB vierge dédiée au stockage de notre clé PGP.

gpg --armor --output /mnt/usb/secret-keys.txt --export-secret-key B327DD2BF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Vous pouvez choisir une autre destination pour pour l'export de vos clés

Après l’importation, nous aurons récupéré les sous-clés mais pas la clé primaire.

gpg --armor --output ./secret-subkeys.txt --export-secret-subkeys B327DD2BF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
gpg --delete-secret-key B327DD2BF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
gpg --import ./secret-subkeys.txt
rm ./secret-subkeys.txt
gpg --list-secret-keys
/home/sylvain/.gnupg/pubring.kbx
--------------------------------
sec#  rsa4096 2022-04-18 [C] [expire : 2027-04-17]
      B327DD2BF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid          [  ultime ] Sylvain Key (Ma clé pour certifier) <mon-mail@me.com>
ssb>  rsa4096 2022-04-18 [S] [expire : 2027-04-17]
ssb>  rsa4096 2022-04-18 [A] [expire : 2027-04-17]
ssb>  rsa4096 2022-04-18 [E] [expire : 2027-04-17]

On observe que la clé secrète est à présent suivie d’un #. Cela indique que la clé privée n’est pas stockée sur le poste. Nous sommes prêts pour importer les sous-clés sur la Yubikey.


Configurer la Yubikey

Assurez vous d'avoir les packages pcscd et scdaemon d'installé.

Après avoir branché la Yubikey, vérifions que la communication se fait !

 gpg-connect-agent --hex "scd apdu 00 f1 00 00" /bye
D[0000]  04 03 04 90 00                                     .....
OK

Personnaliser

gpg --card-edit

Le plus important ici est de modifier les codes PIN par défaut. Et oui, ça ne sert pas à grand-chose de protéger ses clés privées sur une Yubikey si tout le monde peut les utiliser (à condition de détenir physiquement votre Yubikey).

Dans l’interface d’édition de la Yubikey, tapez admin afin d’activer les commandes d’administration. Ensuite, tapez passwd pour changer le code PIN et le code PIN admin. Par défaut, le PIN est 123456 et le PIN admin est 12345678
Sauvegardez vos modifications et quitter l’interface d’édition de la Yubikey.


Importer nos clés sur la Yubikey

importer les trois sous-clés sur la Yubikey. Pour cela, il nous faut la console d’édition de notre clé PGP.

gpg --edit-key B327DD2BF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
gpg (GnuPG) 2.2.20; Copyright (C) 2020 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
Secret subkeys are available.
 
pub  rsa4096/03C8XXXXXXXXXXXX
     créé : 2022-04-18  expire : 2027-04-17  utilisation : C   
     confiance : ultime        validité : ultime
ssb  rsa4096/F96CXXXXXXXXXXXX
     créé : 2022-04-18  expire : 2027-04-17  utilisation : S   
ssb  rsa4096/57C19AC550FE79E2
     créé : 2022-04-18  expire : 2027-04-17  utilisation : A   
ssb  rsa4096/9F51XXXXXXXXXXXX
     créé : 2022-04-18  expire : 2027-04-17  utilisation : E   
[  ultime ] (1). Sylvain Key (Ma clé pour certifier) <mon-mail@me.com>
 
gpg>

Ensuite, nous sélectionnons les clés une à une pour les importer sur la Yubikey.

gpg> key 1      # Sélection de la première sous-clé à transférer
gpg> keytocard  # Déplacement de la clé sur la carte à puce
Please select where to store the key: 1 (Signing)
 
gpg> key 1      # Désélection de la première sous-clé
gpg> key 2      # Sélection de la seconde sous-clé à transférer
gpg> keytocard  # Déplacement de la clé sur la carte à puce
Please select where to store the key: 2 (Encryption)
 
gpg> key 2      # Désélection de la seconde sous-clé
gpg> key 3      # Sélection de la troisième sous-clé à transférer
gpg> keytocard  # Déplacement de la clé sur la carte à puce
Please select where to store the key: 3 (Authentication)
 
gpg> quit
Save changes? (y/N) y

Maintenant que les sous-clés ont été déplacées sur la Yubikey, si nous listons les clés, nous verrons qu’elles ne sont plus stockées localement mais pointent vers la carte à puce (Le suffixe > signifie “pointeur vers une clé”) :

gpg --list-secret-keys 
/home/sylvain/.gnupg/pubring.kbx
--------------------------------
sec#  rsa4096 2022-04-18 [C] [expire : 2027-04-17]
      B327DD2BF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid          [  ultime ] Sylvain Key (Ma clé pour certifier) <mon-mail@me.com>
ssb>  rsa4096 2022-04-18 [S] [expire : 2027-04-17]
ssb>  rsa4096 2022-04-18 [A] [expire : 2027-04-17]
ssb>  rsa4096 2022-04-18 [E] [expire : 2027-04-17]

Contrôle

gpg --card-status

Vous devriez voir votre clé primaire et vos sous clès, avec leur dates d'expirations et slots peuplés.


Exporter sa Clé Pub

gpg --export --armor mon@email.com > ma_cle_publique_gpg.asc

PKCS & Yubikey

Utiliser la Yubikey avec SSH:
Charger le module PAM pour l'utilsation de sa clé RSA avec l'agent SSH:

ssh-add -s /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so

Décharger le module de l'agent:

ssh-add -e /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so

Visauliser sa Clé ssh-rsa:

ssh-add -L

Ligne de Commande

Avec GPG

gpg --edit-card

Permet d'éditer la clé.

gpg/carte> help
quit           quitter ce menu
admin          afficher les commandes d'administration
help           afficher cette aide
list           afficher toutes les données disponibles
fetch          récupérer la clef indiquée dans l'URL de la carte
passwd         menu pour modifier ou déverrouiller le code personnel
verify         vérifier le code personnel et afficher toutes les données
unblock        débloquer le code personnel en utilisant un code de réinitialisation
gpg/carte> admin
Les commandes d'administration sont permises

Permet d'afficher toutes les commandes disponible du mode admin.

gpg/carte> help
quit           quitter ce menu
admin          afficher les commandes d'administration
help           afficher cette aide
list           afficher toutes les données disponibles
name           modifier le nom du détenteur de la carte
url            modifier l'URL pour récupérer la clef
fetch          récupérer la clef indiquée dans l'URL de la carte
login          modifier l'identifiant de connexion
lang           modifier les préférences de langue
salutation     change card holder's salutation
cafpr          modifier une empreinte d'autorité de certification
forcesig       inverser le paramètre obligeant à entrer le code personnel pour les
signatures
generate       générer de nouvelles clefs
passwd         menu pour modifier ou déverrouiller le code personnel
verify         vérifier le code personnel et afficher toutes les données
unblock        débloquer le code personnel en utilisant un code de réinitialisation
factory-reset  destroy all keys and data
kdf-setup      setup KDF for PIN authentication
key-attr       change the key attribute

Pour sortir proprement:

quit

Avec Ykman

ykman --help
Usage: ykman [OPTIONS] COMMAND [ARGS]...
 
  Configure your YubiKey via the command line.
 
  Examples:
 
    List connected YubiKeys, only output serial number:
    $ ykman list --serials
 
    Show information about YubiKey with serial number 0123456:
    $ ykman --device 0123456 info
 
Options:
  -d, --device SERIAL             Specify which YubiKey to interact with by serial number.
  -r, --reader NAME               Use an external smart card reader. Conflicts with --device and
                                  list.
  -l, --log-level [DEBUG|INFO|WARNING|ERROR|CRITICAL]
                                  Enable logging at given verbosity level.
  --log-file FILE                 Write logs to the given FILE instead of standard error; ignored
                                  unless --log-level is also set.
  --diagnose                      Show diagnostics information useful for troubleshooting.
  -v, --version                   Show version information about the app
  --full-help                     Show --help, including hidden commands, and exit.
  -h, --help                      Show this message and exit.
 
Commands:
  info     Show general information.
  list     List connected YubiKeys.
  config   Enable or disable applications.
  fido     Manage the FIDO applications.
  oath     Manage the OATH application.
  openpgp  Manage the OpenPGP application.
  otp      Manage the YubiOTP application.
  piv      Manage the PIV application.
 

RSA vs ECC

Quelles sont les différences entre RSA et ECC ?

Le facteur de différenciation clé entre l’ECC et RSA est la taille de la clé comparé à la force de chiffrement. Comme le montre le graphique ci-dessus, l’ECC peut fournir la même force de chiffrement qu’un système basé sur l’algorithme RSA, mais avec des clés beaucoup plus courtes. Par exemple, une clé ECC de 256 bits équivaut à des clés RSA de 3072 bits, qui sont alors 50% plus longues que les clés de 2048 bits couramment utilisées à l’heure actuelle.

Les derniers algorithmes symétriques en date plus sécurisés qui sont utilisés pour TLS (par ex. AES) font usage des clés de 128 bits. Il est donc tout à fait logique que les clés asymétriques fournissent au moins ce niveau de sécurité.

Les clés plus courtes font de l’ECC une option très attrayante pour les périphériques dont la capacité de stockage ou la puissance de traitement est limitée, ce qui devient de plus en plus courant à l’ère de l’Internet des Objets.

En ce qui concerne les cas d’utilisation de serveur Web plus classiques, les clés plus courtes peuvent se transcrire en de plus rapides négociations SSL (pouvant ainsi mener à une accélération de la vitesse de chargement des pages web) et une sécurité renforcée.

ECC (en anglais Elliptic curve cryptography) ou la cryptographie sur les courbes elliptiques. 


Doc technique Yubikey / Yubico Guide Système ykman CLI Command


securite/materiel/yubikey/index.txt · Dernière modification : de sylvain

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki