En général, la lecture de /dev/random
produit de 100 à 500 octets et blocs, en attendant qu'une entropie soit collectée.
Pourquoi l'écriture d'informations /dev/random
par d'autres processus n'accélère-t-elle pas la lecture? Ne devrait-il pas fournir l'entropie requise?
Il peut être utile pour débloquer gpg
un logiciel similaire sans le redémarrer et tout ressaisir, pour générer des clés non super-top secrètes, etc.
/dev/urandom
place./dev/urandom
est aussi sécurisé que/dev/random
pour une utilisation cryptographique , le comportement de/dev/random
est une mauvaise conception.gpg --gen-key
de/dev/random
à/dev/urandom
sans redémarrer?gpg
a/dev/random
codé en dur. Vous pouvez changer votre configuration udev pour faire/dev/random
le même appareil que/dev/urandom
, entre autres possibilités.gpg --gen-key
, donc ressaisir les données qu'il demande de manière interactive (ou en utilisant des méthodes plus intelligentes comme spécifier plus de paramètres de ligne de commande). Aussi le temps CPU générant le premier devrait être perdu (le gpg peut fonctionner une minute, imprimer quelques+
es et demander des données aléatoires supplémentaires). Et ça donne le sentiment "revenons en arrière et allons sur une autre route" au lieu de "prenons un marteau et forçons-le vers l'avant" ...Réponses:
Vous pouvez écrire dans,
/dev/random
car cela fait partie de la manière de fournir des octets aléatoires supplémentaires à/dev/random
, mais ce n'est pas suffisant, vous devez également informer le système qu'il existe une entropie supplémentaire via unioctl()
appel.J'avais besoin des mêmes fonctionnalités pour tester mon programme de configuration de carte à puce , car je ne voulais pas attendre que ma souris / clavier génère suffisamment pour les plusieurs appels
gpg
qui ont été effectués pour chaque test. Ce que j'ai fait, c'est d'exécuter le programme Python, qui suit, en parallèle de mes tests. Bien sûr, il ne doit pas être utilisé du tout pour lagpg
génération de clés réelles , car la chaîne aléatoire n'est pas du tout aléatoire (les informations aléatoires générées par le système seront toujours entrelacées). Si vous avez une source externe pour laquelle définir la chaînerandom
, vous devriez pouvoir avoir une entropie élevée. Vous pouvez vérifier l'entropie avec:Le programme:
(N'oubliez pas de tuer le programme une fois que vous avez terminé.)
la source
rngd
. Il est disponible sous forme de package dans la plupart (toutes?) Des distributions.random = "3420348024823049823-984230942049832423l4j2l42j"
voir xkcd.com/221En règle générale, il est conçu par les développeurs du noyau et documenté dans
man 4 random
:la source
Anthony a déjà expliqué que l'écriture sur
/dev/random
n'augmente pas le nombre d'entropie et a montré comment l'ioctl RNDADDENTROPY (voir random (4) ) peut être utilisé pour créditer l'entropie. Ce n'est évidemment pas vraiment sécurisé, alors voici une alternative quand un générateur matériel de nombres aléatoires est disponible.Les implémentations suivantes prennent 512 octets (4096 bits) de caractère aléatoire
/dev/hwrng
et le transmettent au pool d'entropie (créditant 4 bits d'entropie par octet, c'est un choix arbitraire de ma part). Après cela, il invoquera l' appel système select (2) pour bloquer lorsque le pool d'entropie est plein (documenté dans la page de manuel random (4) ).Une version Python:
Étant donné que l'ISO Arch Linux n'avait pas Python installé, voici également une version Perl:
C'est probablement ce que fait le programme rngd (qui fait partie de rng-tools ) (non vérifié), sauf qu'il utilise des outils (Python ou Perl) qui sont déjà couramment disponibles.
la source
/dev/urandom
au lieu de/dev/hwrng
si vous ne vous souciez absolument pas des valeurs aléatoires non sécurisées .getrandom()
syscall est utilisé avec hwrng sur les noyaux antérieurs à 4.8-rc1 qui entraîne un comportement de blocage. Une solution de contournement est àread()
deux fois/dev/random
, voir github.com/Lekensteyn/archdir/commit/…