web-dev-qa-db-fra.com

Comment l’entropie est-elle collectée pour / dev / random dans Precise

Avec une installation standard d’Ubuntu 12.04, comment l’entropie pour /dev/random est-elle collectée?.

L'installation est-elle assez intelligente pour configurer une génération de matériel disponible, utilisera-t-il des sources basées sur l'utilisateur telles que les interruptions de clavier par défaut?

Edit: Juste pour être clair, je cherche la configuration spécifique fournie avec l’installation (ou comment la trouver), je ne cherche pas comment cela pourrait être fait en théorie.

7
Lucas

Le véritable caractère aléatoire provient du monde physique et non de générateurs de nombres pseudo-aléatoires déterministes. Le noyau Linux collecte des timings aléatoires et ajoute des informations à son pool d'entropie. Je recommanderais d'aller dans les sources du noyau

L'entropie d'entrée fait référence à l'appel de la fonction: les gestionnaires add_interrupt_randomness (irq) enregistrés SA_SAMPLE_RANDOM, le temps entre les interruptions est la source du bruit, add_keyboard_randomness (scancode) et add_mouse_randomness (mouse_data) ===> toutes ces fonctions appellent add_timer_randomness ()

Entropie en sortie: Espace noyau: [get_random_bytes (buf, nombre)] (Voir LXR => linux/drivers/char/random.c ) Espace utilisateur:/dev/random/dev/urandom

Reportez-vous à LXR => linux/drivers/char/random.c

2
askb

C'est une question compliquée. Je vais répondre en citant quelques sources.

De page de manuel Linux

Les fichiers spéciaux de caractères/dev/random et/dev/urandom (présents depuis Linux 1.3.30) fournissent une interface au générateur de nombres aléatoires du noyau. Le fichier/dev/random a le numéro de périphérique majeur 1 et le numéro de périphérique mineur 8. Le fichier/dev/urandom a le numéro de périphérique majeur 1 et le numéro de périphérique mineur 9.

Le générateur de nombre aléatoire rassemble le bruit environnemental généré par les pilotes de périphérique et d'autres sources dans un pool d'entropie. Le générateur conserve également une estimation du nombre de bits de bruit dans le pool d'entropie. À partir de ce pool d'entropie, des nombres aléatoires sont créés.

Dans Ubuntu 12.04, le noyau par défaut est 3.11 .

De wiki

Le noyau Linux génère une entropie à partir des timings du clavier, des mouvements de la souris et du IDE. Il rend les données de caractères aléatoires disponibles pour les autres processus du système d'exploitation via les fichiers spéciaux/dev/random et/dev/urandom. Cette fonctionnalité a été introduite dans la version 1.3.30 de Linux.

De Linux page de manuel

Une fois lu, le périphérique/dev/random renverra uniquement des octets aléatoires dans les limites du nombre de bits de bruit estimé dans le pool d'entropie./dev/random devrait convenir aux utilisations nécessitant un caractère aléatoire de très haute qualité, telles que la génération de pads unique ou de clés. Lorsque le pool d'entropie est vide, les lectures de/dev/random seront bloquées jusqu'à ce que du bruit environnemental supplémentaire soit collecté.

Citation de random sources, du noyau 3.11.10.10

 * Theory of operation
 * ===================
 *
 * Computers are very predictable devices.  Hence it is extremely hard
 * to produce truly random numbers on a computer --- as opposed to
 * pseudo-random numbers, which can easily generated by using a
 * algorithm.  Unfortunately, it is very easy for attackers to guess
 * the sequence of pseudo-random number generators, and for some
 * applications this is not acceptable.  So instead, we must try to
 * gather "environmental noise" from the computer's environment, which
 * must be hard for outside attackers to observe, and use that to
 * generate random numbers.  In a Unix environment, this is best done
 * from inside the kernel.
 *
 * Sources of randomness from the environment include inter-keyboard
 * timings, inter-interrupt timings from some interrupts, and other
 * events which are both (a) non-deterministic and (b) hard for an
 * outside observer to measure.  Randomness from these sources are
 * added to an "entropy pool", which is mixed using a CRC-like function.
 * This is not cryptographically strong, but it is adequate assuming
 * the randomness is not chosen maliciously, and it is fast enough that
 * the overhead of doing it on every interrupt is very reasonable.
 * As random bytes are mixed into the entropy pool, the routines keep
 * an *estimate* of how many bits of randomness have been stored into
 * the random number generator's internal state.

Oui, il est suffisamment intelligent pour utiliser des sources basées sur l'utilisateur , mais vous pouvez en configurer davantage si vous le souhaitez.

Il y a des noyaux avec des générateurs aléatoires qui ont plus de sources d'entropie telles que le bruit sur les entrées audio et d'autres comme la vidéo, les censeurs de refroidisseurs, etc. Regardez ici si intéressant dans l'entropie audio. J'espère que vous trouverez d'autres noyaux par vous-même.

Mais /dev/random devrait être suffisant pour la plupart des tâches par défaut.

Lisez aussi cette question sur stackoverflow

2
c0rp