Sources d'entropie pour Linux


9

Disons que je veux un gigaoctet ou plus de données aléatoires de / dev / random, adaptées à un tampon à usage unique (donc / dev / urandom est sorti.) Comment puis-je amorcer mon / dev / random avec suffisamment d'entropie pour ce faire? Je recherche des commandes et des programmes spécifiques pour cela. Je ne veux rien acheter. J'utilise Arch Linux, si cela fait une différence.


Un tel programme ne transformerait-il pas / dev / random en quelque chose ayant le même problème que / dev / urandom que vous ne voulez pas utiliser? Ou faites-vous référence à quelque chose qui obtient une entropie supplémentaire sur un appareil ou sur le réseau?
Anthon

@Anthon Je parle de programmes spécifiques pour extraire le hasard d'une source d'entropie, tels que le bruit de grenaille, le bruit thermique, certains appareils, etc ... Le programme ne ferait pas le hasard lui-même.
PyRulez

... par exemple, une commande ou un programme qui dit Here — type something:, puis mesure les deltas de temps entre les frappes avec une précision supérieure à ce qu'un humain peut contrôler?
G-Man dit `` Réintègre Monica '' le


1
Il mentionne un bloc unique comme l'une des deux exceptions à l'affirmation que _'... presque tous les algorithmes cryptographiques ... "seulement" offrent une sécurité de calcul ". À moins que vous ne puissiez citer quelque chose que j'ai manqué où il est dit que les tampons à usage unique ne peuvent pas utiliser urandom?
Inutile

Réponses:


4

Les deux programmes qui peuvent augmenter le pool d'entropie sans nécessiter de matériel supplémentaire sont rng-toolset haveged. rng-toolsutilise les RNG disponibles dans les processeurs et chipsets havegedmodernes , utilise l'aléatoire du processeur moderne (comportement du cache, etc.). Les deux sont disponibles dans Arch, et le wiki Arch a une page intéressante pour en discuter. Je n'ai pas essayé de les utiliser pour générer un gigaoctet de données, mais cela devrait être possible dans un laps de temps raisonnable.

Vous excluez explicitement l'achat de quoi que ce soit, mais juste pour être complet, il y a un article intéressant dans LWN à propos de l' entropie avec NeuG , qui comprend des discussions havegedet diverses autres approches. Vous pouvez acheter une carte STM8S capable d'exécuter NeuG pour moins de 10 $, ou une FST-01 pour 35 $.


4

Malheureusement / dev / random n'est pas non plus adapté à une utilisation dans un bloc à usage unique, du moins pas le type de bloc à usage unique (avec des garanties de sécurité prouvées) que la plupart des gens imaginent lorsqu'ils pensent ou mettent en œuvre des blocs à usage unique. La plupart des informations ci-dessous sont résumées dans l'article (très long) sur http://www.2uo.de/myths-about-urandom/

Le problème est que / dev / random n'est pas vraiment aléatoire; il utilise un CSPRNG pour générer sa sortie. En fait, / dev / random utilise exactement le même CSPRNG que / dev / urandom. La seule différence est que / dev / random bloque si son estimation interne d'entropie est insuffisante.

Le mot «estimation» dans la phrase précédente est essentiel. La plupart des gens pensent que cette estimation est toujours exacte et parfaite, mais en réalité elle n'est pas du tout exacte. À l'instant où l'estimation est fausse, vous perdez toutes les garanties de sécurité prouvables du pavé unique, et il ne vous reste plus que la sécurité informatique - pas mieux que si vous aviez utilisé / dev / urandom!

Obtenir l'estimation de l'entropie juste un peu mal ne rend pas votre tampon ponctuel juste un peu incertain. La garantie de sécurité prouvable d'un tampon unique est tout ou rien.

La prémisse de cette question est que les problèmes avec / dev / random peuvent être "corrigés" en ajoutant plus d'entropie. Malheureusement, cette prémisse est fausse. Une source d'entropie malveillante est bien pire qu'une absence d'entropie, car les sources d'entropie ont souvent accès aux données internes et peuvent exporter ces données secrètement à l'aide de la sortie RNG - voir http://blog.cr.yp.to/20140205-entropy .html pour une discussion complète (trop longue pour résumer ici). En particulier, une source matérielle d'entropie (comme recommandé par plusieurs autres réponses) est un très mauvais choix du point de vue de la sécurité, car ce matériel est en position privilégiée pour faire des choses malveillantes et il est essentiellement inauditable.


Je n'ai pas dit que je le réparais avec plus d'entropie, j'avais juste besoin de plus pour une clé plus grosse. C'est un bon point cependant sur le fait qu'il soit défectueux. Pouvez-vous recommander des alternatives?
PyRulez

1
Ceci est une bonne réponse, sauf pour le dernier bit sur les sources matérielles. Les sources matérielles d'entropie sont le seul moyen fiable et vérifiable d'obtenir l'entropie. Vous (ou quelqu'un en qui vous avez confiance) devez auditer la source - cela nécessite d'avoir des informations de conception et de vérifier que le processus de fabrication respecte les informations de conception. Vous pouvez même combiner des sources d'entropie de sorte que si au moins l'une d'entre elles est correcte, le résultat est correct (NB vous devez les combiner correctement pour cela).
Gilles 'SO- arrête d'être méchant'

Gilles, lisez le deuxième lien que j'ai posté. Il est complètement faux de prétendre que si au moins une source d'entropie est correcte, le résultat est correct. Le but de ce lien est de réfuter cette fausse affirmation!
djao

De plus, il ne suffit pas d'auditer la source et le processus de fabrication. Vous devez auditer votre appareil individuel pour vous assurer que votre appareil a été fabriqué conformément au processus de fabrication. C'est une tâche beaucoup plus difficile que la tâche analogue dans un logiciel, qui consiste simplement à vérifier une somme de contrôle.
djao

En ce qui concerne les alternatives: il n'y a pas d'autre moyen magique d'extraire 1 Go de données aléatoires d'un PC. Vous auriez besoin d'un périphérique matériel pour cela (mais faites attention à ce que j'ai dit à propos du matériel difficile à auditer). Si vous vouliez utiliser / dev / random, alors / dev / urandom est tout aussi bon; ce n'est pas pire que / dev / random pour toutes les applications cryptographiques.
djao

3

Il semble qu'un composant matériel soit la meilleure idée. Il existe des circuits intégrés de générateur HW, mais vous devez leur faire confiance à mesure qu'ils arrivent.

Deux solutions probablement bonnes consistent à inciter les composants à créer du bruit; deux solutions majeures semblent être le biais de température et le bruit d'avanche créé avec une diode (voir http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.html )

Comme les composants comme le gyroscope et l'accéléromètre sont devenus plus sensibles, les faire fonctionner à la sensibilité la plus élevée et utiliser leur valeur LSB peuvent également être une bonne solution, mais AFAIK personne ne l'a audité.

C'est drôle car il y a beaucoup de papier sur NE PAS faire de RNG, mais pas une implémentation matérielle ouverte et vérifiée


2

Vous pouvez utiliser pycsprng.py . Cryptographiquement sécurisé? Je ne suis pas sûr, mais j'aimerais un examen par les pairs.

python pycsprng.py | pv | dd of=data.file bs=1024 count=1000

Le canal vers pvest facultatif et vous aidera simplement à savoir combien de données ont été transférées.

Vous pouvez constater que des blocs plus grands (bs) augmentent les performances. Vous devrez ajuster le nombre pour ne pas générer un fichier trop volumineux si vous augmentez la taille du bloc.


3
Cela utilise juste /dev/urandom...
Stephen Kitt

1
pycsprng.pyest littéralement un script 10 SLOC qui obtient un caractère aléatoire os.urandom. Les documents indiquent que "les données renvoyées devraient être suffisamment imprévisibles pour les applications cryptographiques [...] Sur un système de type UNIX, cela demandera /dev/urandom" . En fait, c'est (c'est une source obsolète) et Security.SE dit que c'est correct pour la crypto .
gronostaj

Pas une fois la crypto pad!
PyRulez

0

Ce que vous obtenez d'un canal de microphone analogique lorsque vous ne branchez pas de microphone est généralement simplement statique. Canalisez cela via bzip2, par exemple, pour le blanchiment, mélangez-le avec une autre source d'aléatoire (urandom ou autre prise microphone), peut-être canalisez le résultat via openssl pour faire bonne mesure et ce que vous obtenez devrait être assez aléatoire.

Il serait cependant difficile de prouver des propriétés de sécurité dures et rapides sur le caractère aléatoire du résultat.


0

Si vous utilisez le noyau Linux 2.6.9 ou plus récent sur un processeur amd64 / x86_64, un environnement virtuel ou physique, vous pouvez essayer ncomputers.org/pandom un véritable générateur de nombres aléatoires, qui offre une entropie de 8 Ko / s de 64 ubits / 64 bits via/dev/random

exemple de sortie


Liens rompus, impossible de trouver une sauvegarde.
slm

0

Pour générer 100 Mo de données aléatoires générées par le matériel, vous pouvez:

  • Enregistrez 20 minutes d'audio (mono 96 kHz 16 bits) avec le microphone intégré de votre ordinateur (disponible sur un ordinateur portable). Vous obtiendrez un fichier WAV de ~ 220 Mo.

  • Jetez les bits non utiles et mélangez les bits de données binaires (de nombreuses façons de le faire) avec quelques calculs

  • Exportez les bits mélangés en tant que fichier binaire de ~ 100 Mo

Voici un article à ce sujet: Une tentative de générer une véritable entropie et des données aléatoires avec l'audio (et le microphone intégré de votre ordinateur) .

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.