web-dev-qa-db-fra.com

Comment fonctionne le pool d'entropie du noyau?

J'utilise /dev/urandom pour générer des données aléatoires pour mes programmes. J'ai appris ça /dev/random peut être vide car, contrairement à /dev/urandom, il n'utilise pas SHA lorsqu'il n'y a pas assez d'octets générés. /dev/random utilise "le pool d'entropie du noya". Apparemment, il repose sur les synchronisations du clavier, les mouvements de la souris et les synchronisations IDE.

Mais comment ça marche vraiment?
Et ne serait-il pas possible de "nourrir" le pool d'entropie rendant la sortie/dev/random prévisible?

32
Antoninarto

Ce que vous dites est parfait, oui théoriquement, il est possible d'alimenter l'entropie en /dev/random, mais vous auriez besoin de contrôler beaucoup de sources de "bruit" du noyau pour qu'il soit significatif. Vous pouvez regarder la source pour random.c , pour voir où /dev/random capte le bruit. Fondamentalement, si vous contrôlez un nombre important de sources de bruit, vous pouvez deviner ce que les autres contribuent au pool d'entropie.

Puisque /dev/urandom est un chaîne de hachage issu de /dev/random, alors vous pourriez réellement prédire les prochains nombres, si vous connaissiez la graine. Si vous avez suffisamment de contrôle sur le pool d'entropie, alors à partir de la sortie de /dev/urandom vous pourriez peut-être deviner cette graine, ce qui vous permettrait de prédire tous les prochains nombres de /dev/urandom, mais seulement si vous gardez /dev/random épuisé, sinon /dev/urandom sera réamorcé.

Cela étant dit, je n'ai vu personne le faire, pas même dans un environnement contrôlé. Bien sûr, ce n'est pas une garantie, mais je ne m'inquiète pas.

Je préfère donc utiliser /dev/urandom et garantit que mon programme ne se bloque pas en attendant l'entropie, au lieu d'utiliser /dev/random et en demandant à l'utilisateur de faire des choses idiotes, comme déplacer la souris ou frapper le clavier.

Je pense que vous devriez lire Sur l'entropie et le hasard de LWN, j'espère que cela calmera vos inquiétudes :-).

Si vous êtes toujours inquiet, procurez-vous un HRNG .

Edit Voici une petite note sur l'entropie:

Je pense que le concept d'entropie est généralement difficile à saisir. Il y a un article avec plus d'informations sur Wikipedia . Mais fondamentalement, dans ce cas, vous pouvez lire l'entropie comme aléatoire.

Donc, comment je le vois, c'est que vous avez un gros sac de boules colorées, plus l'entropie est élevée dans ce sac, plus il est difficile de prédire la prochaine couleur tirée du sac.

Dans ce contexte, votre pool d'entropie n'est qu'un tas d'octets aléatoires, dont l'un ne peut pas être dérivé du précédent ou de l'un des autres. Ce qui signifie que vous avez une entropie élevée.

24
jbr

J'apprécie la profondeur de la réponse de jbr.

Ajout d'une mise à jour pratique pour quiconque regarde actuellement une commande ipsec pki ou quelque chose de similaire sur un pool d'entropie vide:

Je viens d'installer rng-tools dans une autre fenêtre et ma commande pki est terminée.

apt-get install rng-tools
3
jorfus

Je suis en train de lire un article à factorable et j'ai pris note de la section où il est dit:

"Pour les développeurs de bibliothèques: la configuration par défaut est la plus sécurisée. OpenSSL et Dropbear utilisent par défaut /dev/urandom au lieu de /dev/random et Dropbear utilisent par défaut une technique d'aléatoire de signature DSA moins sécurisée même si une technique plus sécurisée est disponible en option. "

Les auteurs abordent le compromis d'une application suspendue en attendant l'entropie pour construire /dev/random pour une meilleure sécurité par rapport à un résultat rapide, mais moins sécurisé, de /dev/urandom.

1
Mike