GPG n'a pas assez d'entropie


86

J'ai une tonne de processus en arrière-plan pour essayer d'obtenir assez d'entropie, mais j'échoue toujours.

**We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 210 more bytes)**

J'ai besoin d'une méthode pour générer la clé qui fonctionne, car ce que j'essaie de faire échoue apparemment.

Réponses:


112

Avez-vous examiné RNG?

Types Fedora / Rh / Centos: sudo yum install rng-tools

Sur les types deb: sudo apt-get install rng-toolspour le configurer.

Puis lancez-vous sudo rngd -r /dev/urandomavant de générer les clés.

Référence: http://it.toolbox.com/blogs/lim/how-to-generate-enough-entropy-for-gpg-key-generation-process-on-fedora-linux-38022


4
Aussi, sur une note plus sérieuse, vous pouvez utiliser sudo apt-get install rng-toolssi vous êtes sur Ubuntu au lieu de ce sudo yum install rng-utilsqu’ils ont pour Fedora, puisqu’aucun rng-utilspaquet n’existe pour Ubuntu.
Jason Swett

4
Le paquet est nommé rng-toolsà la fois sur Fedora et EL6, donc je soupçonne une faute de frappe dans l'article lié. BTW, c’est une bonne idée de fournir ici les éléments essentiels de la réponse, ainsi que le lien de référence, au cas où le lien disparaîtrait à l’avenir.
Michael Hampton

11
Il n'y a pas d '"entropie de basse qualité" ou de "fausse entropie" dans urandom. urandom appelle le même code que / dev / random. Il n’est pas nécessaire d’alimenter le CSPRNG de façon aléatoire supplémentaire (sauf à l’heure de démarrage, votre distribution devrait en prendre soin). Ceci est un mythe et ne devrait pas être propagé. Voir par exemple sockpuppet.org/blog/2014/02/25/safely- generate-random-numbers ou cette vidéo: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger


2
Le commentaire le plus voté est un non-sens; malheureusement, je le vois souvent sur SO. Les avertissements (même lorsqu'ils sont complètement faux) obtiendront beaucoup de votes et aucun moyen de les corriger (option d'absence de commentaire) signifie que nous ne pouvons pas nous débarrasser des mythes.
Stijn de Witt

28

J'ai pu générer la clé en

apt-get install rng-tools

Dans une autre fenêtre SSH ouverte

 gpg --gen-key

Retournez à votre première session SSH et lancez

sudo rngd -r /dev/urandom

Laissez cette course jusqu'à ce que gpg génère vos clés!


9
Je recommande vivement de ne jamais utiliser /dev/urandompour générer des clés d'importance quelconque.
Andrew Barber

12
@ AndrewBarber Nonsense. C'est la méthode recommandée.
David Schwartz

3
@ AndrewBarber Il est explicitement conçu à cet effet. Fondamentalement, /dev/randomc'est une erreur de conception. Il ne devrait bloquer que lors de la première (jamais) invocation (au premier démarrage) quand aucune entropie n'a encore été collectée. Comme sur les autres OS. Au lieu de cela, nous avons deux piscines maintenant. Juste ne jamais l'utiliser /dev/randomn'a aucun avantage.
Stijn de Witt

@ AndrewBarber Que recommanderiez-vous à la place?
Qodeninja

13

Pour vérifier la quantité d'octets d'entropie actuellement disponible, utilisez

cat /proc/sys/kernel/random/entropy_avail

Le compartiment d'entropie a une taille de 4096 octets, ce qui peut très rapidement être épuisé.

En utilisant ce petit outil 'readspeed' ( http://1wt.eu/tools/readspeed/ ), vous pouvez mesurer la rapidité avec laquelle le compartiment d' entropie est rempli avec différentes méthodes.

Par exemple, lancez:

$ ./readspeed < /dev/random

et déplacez votre souris. Vous verrez que 'readspeed' vide le compartiment d'entropie dès qu'il est rempli et lorsque vous déplacez la souris, il se remplit un peu.

En essayant différentes méthodes, il semble que la saisie au clavier et les mouvements de la souris sont les plus efficaces pour reconstituer ce seau. Les transferts réseau et les copies de disque dur n'ont pas beaucoup d'influence.

Enfin, il existe des dispositifs de génération d'entropie disponibles, tels que celui-ci: http://www.entropykey.co.uk/ .


4
Il n'y a pas d '"entropie de basse qualité" en urandome. urandom appelle le même code que / dev / random. Ceci est un mythe et ne devrait pas être propagé. Voir par exemple sockpuppet.org/blog/2014/02/25/safely- generate - random - numbers ou cette vidéo: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger

Cette réponse a 5 ans. Nous pensions alors que l'urandom n'était pas aussi sûr qu'aléatoire, mais les choses ont changé depuis et l'urandom est considéré comme sûr.
Julien Vehent

1
Le fait est que c'était en sécurité depuis le début. Les avertissements étaient faux il y a 7 ans également.
Stijn de Witt

8

+1 pour les outils de production

Au cas où vous seriez bloqué dans la même situation que moi, je ne disposerais pas des autorisations nécessaires pour installer un nouveau logiciel (rng-tools) sur un serveur sans interface utilisateur avec virtuellement aucun matériel d’entrée (carte son, clavier, souris). Vous pouvez exécuter ce code simple depuis un autre terminal, connectez-vous au même serveur, pour ajouter de l'entropie. Peu importe que vous commenciez à exécuter ceci avant ou après le démarragegpg --gen-key

$ nice -n 19 bash
$ until [ $COUNT -lt 1 ]; do
  let COUNT=`cat /proc/sys/kernel/random/entropy_avail`
  echo "`date` COUNTER $COUNT"
done

La première ligne consiste à démarrer un nouveau shell bash, avec une priorité plus basse (je devais être gentil sur un serveur partagé par de nombreux utilisateurs). La boucle Until est infinie, pensez donc à la casser une fois la clé générée. Tout ce que cela fait, c'est que le trafic réseau augmente l'entropie. Il surveille également le compteur entropy_avail pour montrer comment il est rempli et vidé de l’autre côté par gpg. Dans mon cas, le compteur s'est rempli rapidement à 64 et a été vidé à 0 (devinez que gpg reprend par bloc de 64). J'attendais plus de 3 heures de génération de clé 4096 bits sur le serveur. Après avoir commencé à exécuter ce script, il a été terminé en moins de 5 min.


Moi aussi, je n'avais pas d'accès root sur le serveur distant, ce qui a permis de créer une entropie. Je pense que la condition devrait être changée en [ $COUNT -lt 0 ]. Parce que pour un système avec vraiment moins d'entropie, il atteint parfois 0 et s'arrête. GPG a vraiment soif d'entropie.
Ajay Brahmakshatriya

Merci, cela devrait être suffisant pour moi de faire de la génération d'entrophie sur une boîte ventilée. Sauf que je n'utiliserai pas la date puisque c'est prévisible
grepsedawk

7

J'étais lié et déterminé à générer une entropie sur mon serveur sans tête Ubuntu 14.04 afin de générer une clé 4096 avec gpg --gen-key

Il existe un paquet pour générer une entropie appelé hasged. Exemple d'installation:

sudo apt-get install haveged

Je devais sudo apt-get install rng-toolspuisque c'est une dépendance dans le test suivant.

Exemple de test pour voir si l'entropie est générée par haveged:

cat /dev/random | rngtest -c 1000

Un très petit nombre d'échecs est acceptable dans n'importe quel générateur de nombres aléatoires, mais vous pouvez vous attendre à voir des succès de 998-1000 très souvent lorsque vous utilisez le survol.

Je l'ai découvert dans un tutoriel ici:

https://www.digitalocean.com/community/tutorials/how-to-setup-addopy-entropy-for-cloud-servers-using-haveged

J'ai maintenant les clés après avoir couru gpg --gen-key


0

J'ai rencontré ce problème lorsque je courais dans pacman-key --initarch. Les autres solutions présentées ici ne fonctionnaient pas bien pour moi, mais j’ai constaté que le simple fait d’inonder mon routeur fonctionnait parfaitement:ping -f ip.of.my.router



0

havegedest la meilleure solution, mais si vous ne pouvez rien installer, vous pouvez générer manuellement une entropie. Cette méthode permettait gpg --gen-kende compléter en 1-2 minutes sur ma machine (comparé à 10 secondes avec haveged). Donc, il est environ 10 fois plus lent.

Exécutez ceci dans un autre terminal en gpg --gen-keycours d'exécution:

while true; do
    # print entropy available
    cat /proc/sys/kernel/random/entropy_avail
    # write a 1 MB stream of zeros to /tmp/foo
    # "conv=fdatasync" flushes the disk cache
    dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync
done

Bon mot:

while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.