Installé avec le paquet bind9utils
Afficher la version de la commande dnssec-keygen
apt-cache policy bind9utils
Générer une clef TSIG
# dnssec-keygen -a key-algorithm -b keysize -n keytype keyname
Générer une clef TSIG avec l’algorithme de hachage MD5 (cas pratique)
# dnssec-keygen -a HMAC-MD5 -b 512 -n HOST tsig-key
Ktsig-key.+157+14670
- Algorithme de hachage : HMAC-MD5
- Longueur de la clef : 512 bits (le maximum en MD5; valeur comprise entre 1 et 512 bits)
- Type de clef : HOST
- Nom de la clef : tsig-key (peu importe le nom choisi)
Cette dernière commande génère deux fichiers :
-rw------- root bind Ktsig-key.+157+14670.private -rw------- root bind Ktsig-key.+157+14670.key
Les deux fichiers générés sont du type :
Kname+algorithm+footprint.[private|key]
Ils contiennent respectivement la clef privée et la clef publique. Toutefois avec la fonction de hachage MD5 utilisée, ces deux clefs sont strictement identiques.
# cat Ktsig-key.+157+14670.private
Private-key-format: v1.3 Algorithm: 157 (HMAC_MD5) Key: pzDEGpd36rKTJJChe/z9K/BFwZ3SQqPjtbD4mIAhRoIY5uYl9KXiV4wyllv85MbXAWsW6Qkjavld070MPdNq3A== Bits: AAA= Created: 20160605004310 Publish: 20160605004310 Activate: 20160605004310
# cat Ktsig-key.+157+14670.key
tsig-key. IN KEY 512 3 157 pzDEGpd36rKTJJChe/z9K/BFwZ3SQqPjtbD4mIAhRoIY5uYl9KXiV4wyllv85MbXAWsW6Qkjavld070MPdNq3A==
La génération de clés, de manière générale, peut être très longue car elle se base sur le fichier spécial de génération de nombres aléatoires /dev/random. Le caractère aléatoire de la clé générée est fonction de ce fichier.
Or, ce dernier fichier, est directement dépendant du nombres de bits stockés dans le réservoir d’entropie. Ces bits d’entropie s’accumulent par le bruit lié à l’environnement par le biais des pilotes des périphériques et d’autres sources. En d’autres termes, les octets aléatoires sont générés par l’activité d’entrée/sortie (I/O) : taper au clavier, déplacer la souris, utiliser les disques, etc. Lorsque la jauge d’entropie est atteinte, la clef est alors générée.
Le niveau, à un instant t, d’entropie est visualisable en affichant la valeur stockée dans le fichier suivant :
cat /proc/sys/kernel/random/entropy_avail

On voit clairement, sur l’animation ci-dessus, que le réservoir d’entropie chute, car remis à 0, au moment où la clé est générée du fait que cette dernière puise sur tout le stock d’entropie disponible.
Plus le niveau d’entropie sera élevé, plus le fichier /dev/random bénéficiera de bits d’entropie, et plus la clef générée sera aléatoire et donc moins prévisible.
Si la génération de la clef est trop longue, il y a trois possibilités :
- Générer de l’entropie naturellement : taper au clavier, bouger la souris, ouvrir/fermer des fichiers, etc.
- Générer de l’entropie via un programme tiers comme haveged ou rng-tools
- Utiliser le fichier /dev/urandom à la place de /dev/random
Le problème avec le fichier /dev/urandom c’est que les valeurs renvoyées pourraient être théoriquement vulnérables à une cryptanalyse basée sur l’algorithme employé par le pilote. En d’autres termes, la clé générée est moins aléatoire et donc plus vulnérable, en théorie.
# dnssec-keygen -a HMAC-MD5 -b 512 -r /dev/urandom -n HOST tsig-key
Ktsig-key.+157+52223