Il y a un grain de vérité là-dedans, en fait plus de vérité que de mythe, mais néanmoins la déclaration reflète une incompréhension fondamentale de ce qui se passe. Oui, déplacer la souris tout en générant une clé avec GPG peut être une bonne idée. Oui, déplacer la souris contribue à une certaine entropie qui rend les nombres aléatoires aléatoires. Non, déplacer la souris ne rend pas la clé plus sûre.
Tous les bons générateurs aléatoires adaptés à la cryptographie, et celui de Linux est dans cette catégorie, ont deux composants :
- Une source d'entropie, qui est non déterministe. Le but de l'entropie est d'amorcer le générateur de nombres aléatoires avec des données imprévisibles. La source d'entropie doit être non déterministe :sinon, un adversaire pourrait reproduire le même calcul.
- Un générateur de nombres pseudo-aléatoires, qui produit des nombres aléatoires imprévisibles de manière déterministe à partir d'un état interne changeant.
L'entropie doit provenir d'une source externe à l'ordinateur. L'utilisateur est une source d'entropie. Ce que l'utilisateur fait n'est généralement pas aléatoire, mais le minutage précis des frappes et des mouvements de la souris est si imprévisible qu'il est légèrement aléatoire - pas très aléatoire, mais petit à petit, il s'accumule. D'autres sources potentielles d'entropie incluent la synchronisation des paquets réseau et le bruit blanc de la caméra ou du microphone. Différentes versions et configurations du noyau peuvent utiliser un ensemble différent de sources. Certains ordinateurs ont des circuits RNG matériels dédiés basés sur la désintégration radioactive ou, de manière moins impressionnante, des circuits électroniques instables. Ces sources dédiées sont particulièrement utiles dans les appareils et serveurs intégrés qui peuvent avoir un comportement assez prévisible lors de leur premier démarrage, sans qu'un utilisateur ne fasse des choses bizarres.
Linux fournit des nombres aléatoires aux programmes via deux périphériques :/dev/random
et /dev/urandom
. La lecture à partir de l'un ou l'autre des appareils renvoie une qualité cryptographique. Les deux appareils utilisent le même état RNG interne et le même algorithme pour transformer l'état et produire des octets aléatoires. Ils ont des limites particulières qui font qu'aucun d'eux n'est la bonne chose :
/dev/urandom
peut renvoyer des données prévisibles si le système n'a pas encore accumulé suffisamment d'entropie./dev/random
calcule la quantité d'entropie disponible et bloque s'il n'y en a pas assez. Cela sonne bien, sauf que le calcul est basé sur des considérations théoriques qui font que la quantité d'entropie disponible diminue linéairement avec chaque bit de sortie. Ainsi/dev/random
a tendance à se bloquer très rapidement.
Les systèmes Linux enregistrent l'état RNG interne sur le disque et le restaurent au démarrage. Par conséquent, l'entropie se transmet d'un démarrage à l'autre. Le seul moment où un système Linux peut manquer d'entropie, c'est lorsqu'il vient d'être installé. Une fois qu'il y a suffisamment d'entropie dans le système, l'entropie ne diminue pas; seul le calcul défectueux de Linux diminue. Pour plus d'explications sur cette considération, lisez /dev/urandom
est adapté pour générer une clé cryptographique, par un cryptographe professionnel. Voir aussi Pouvez-vous expliquer l'estimation d'entropie utilisée dans random.c.
Déplacer la souris ajoute plus d'entropie au système. Mais gpg ne peut lire que depuis /dev/random
, pas /dev/urandom
(un moyen de résoudre ce problème est de faire /dev/random
le même appareil 1:9 que /dev/urandom
), il ne risque donc jamais de recevoir des nombres aléatoires pas assez aléatoires. Si vous ne déplacez pas la souris, la touche est aussi aléatoire que possible ; mais ce qui peut arriver, c'est que gpg peut être bloqué dans une lecture de /dev/random
, attendant que le compteur d'entropie du noyau augmente.
GPG utilise le générateur de nombres aléatoires Linux (noyau). Le générateur de noyau obtient l'entropie (le caractère aléatoire) de toutes sortes d'endroits, parmi lesquels la synchronisation des interruptions, pour certaines interruptions. Le déplacement de la souris (et la saisie, l'activité du disque, etc.) généreront tous des interruptions.
Ainsi, le déplacement de la souris alimente en effet potentiellement le générateur de nombres aléatoires. Mais cela dépend de la version exacte du noyau utilisée; les versions plus récentes n'utilisent pas (du moins dans mes tests) les interruptions du clavier ou de la souris pour l'entropie. L'activité du disque, cependant, le fait (par exemple, en exécutant sync
ajoutera une quantité potentiellement importante d'entropie, en fonction de la quantité vidangée).
En bref :ce n'est pas vrai sur les versions Linux actuelles. C'était sur les plus vieux.
Cependant, si le générateur manque d'entropie, il est censé s'arrêter, de sorte que votre génération de clé se bloquera jusqu'à ce qu'une certaine entropie soit générée. Il s'agirait donc d'un problème éternel, pas d'un problème de sécurité.
Vous pouvez voir combien d'entropie est disponible par cat /proc/sys/kernel/random/entropy_avail
.