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?
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.
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
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
etDropbear
utilisent par défaut/dev/urandom
au lieu de/dev/random
etDropbear
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
.