Quelle façon d'alimenter en plus le pool d'entropie / dev / random
suggéreriez-vous pour produire des mots de passe aléatoires? Ou, y a-t-il peut-être un meilleur moyen de créer localement des mots de passe entièrement aléatoires?
Quelle façon d'alimenter en plus le pool d'entropie / dev / random
suggéreriez-vous pour produire des mots de passe aléatoires? Ou, y a-t-il peut-être un meilleur moyen de créer localement des mots de passe entièrement aléatoires?
Vous devez utiliser / dev / urandom
, pas / dev / random
. Les deux différences entre / dev / random
et / dev / urandom
sont (je parle de Linux ici):
/ dev / random
pourrait être théoriquement meilleur dans le contexte d'un algorithme sécurisé en théorie de l'information . C'est le genre d'algorithme qui est sécurisé contre la technologie d'aujourd'hui, ainsi que la technologie de demain, et la technologie utilisée par les extraterrestres, ainsi que le propre iPad de Dieu. Les algorithmes sécurisés en théorie de l'information sont protégés contre une puissance de calcul infinie. Inutile de dire que de tels algorithmes sont assez rares et si vous en utilisiez un, vous le sauriez. Aussi, c'est un " pourrait ": en interne, / dev / random
utilise des fonctions de hachage conventionnelles, il y a donc de fortes chances qu'il ait de toute façon des faiblesses s'il est attaqué avec une puissance infinie (rien à craindre pour les attaquants basés sur Terre, cependant).
/ dev / urandom
ne bloquera pas, tandis que / dev / random
peut le faire. / dev / random
maintient un compteur de "combien d'entropie il a encore" sous l'hypothèse que tous les bits qu'il a produits sont un bit d'entropie perdu. Le blocage induit des problèmes très réels, par ex. un serveur qui ne démarre pas après une installation automatisée car il bloque sur la création de sa clé de serveur SSH (oui, j'ai vu cela). / dev / urandom
utilise un générateur de nombres pseudo-aléatoires cryptographiquement puissant pour qu'il ne se bloque jamais.
Donc, vous voulez utiliser / dev / urandom
et arrêtez de vous soucier de cette activité d'entropie.
Maintenant, vous voudrez peut-être vous soucier de l'entropie si vous écrivez le programme d'installation Linux. L'astuce est que / dev / urandom
ne bloque jamais, jamais, même quand il devrait: / dev / urandom
est sécurisé tant qu'il a reçu suffisamment d'octets d'entropie initiale "depuis le dernier démarrage (32 octets aléatoires suffisent). Une installation Linux normale créera une graine aléatoire (à partir de / dev / random
) lors de l'installation, et l'enregistrera sur le disque. À chaque redémarrage, la graine sera lue, introduite dans / dev / urandom
, et une nouvelle graine sera immédiatement générée (à partir de / dev / urandom
) pour la remplacer. Ainsi, cela garantit que / dev / urandom
aura toujours suffisamment d'entropie initiale pour produire une alea cryptographiquement forte, parfaitement suffisante pour tout travail cryptographique banal, y compris la génération de mot de passe. Le seul point critique est lors de l'installation: l'installateur doit obtenir une certaine entropie de / dev / random
, ce qui peut bloquer. Ce problème se produit également avec Live CD et d'autres variantes sans zone de stockage permanent en lecture-écriture. Dans ces situations, vous voudrez peut-être trouver une source d'entropie pour vous assurer que / dev / random
sera bien alimenté et ne bloquera pas.
Le système d'exploitation lui-même, et plus précisément le noyau, est au bon endroit pour collecter l'entropie de l'événement matériel, car il gère le matériel. Il y a donc relativement peu de choses que vous pouvez utiliser pour l'entropie que le noyau n'utilise pas déjà. Une de ces sources restantes est les données de la webcam: une webcam, même face à un mur vide, produira des données avec un bruit thermique, et comme elle produit beaucoup de données, c'est un bon collecteur d'entropie. Il suffit donc de récupérer quelques images de la webcam, de les hacher avec une fonction de hachage sécurisée (SHA-256) et d'écrire cela dans / dev / urandom
. C'est encore trop exagéré.
Vous pouvez l'alimenter avec le bruit blanc de votre puce audio, le cas échéant. Consultez cet article: http://www.linuxfromscratch.org/hints/downloads/files/entropy.txt
Je connais le démon d'entropie audio et le hadge qui sont utilisés par démon haveged, essayez-les.
La meilleure valeur que j'ai vue dans un dispositif d'aléa HW est la clé d'entropie simtec.
Possède un certain nombre de protections intégrées pour se protéger contre les pannes et les attaques. Par exemple, il exécute les tests aléatoires FIPS 140-2 sur chaque lot de 20 Ko, se fermant si un nombre statistiquement significatif de tests échouent, j'en ai obtenu un alors que je faisais beaucoup de génération de clés pour la recherche DNSSEC, et cela a considérablement accéléré mon travail. Il passe tous les tests les plus difficiles. (note, testez toujours vos flux aléatoires périodiquement, peu importe ce que le fournisseur vous dit ;-)
1) Vous n'avez plus besoin d'ajouter d'entropie à / dev / random
, pour l'utiliser pour les mots de passe. Le système le fait déjà pour vous.
2) Pour générer un mot de passe aléatoire, il est préférable d'utiliser / dev / urandom
, pas / dev / random
. ( / dev / random
a quelques problèmes: il bloque, il épuise le pool d'entropie d'une manière qui peut provoquer le blocage d'autres utilisateurs de / dev / random
. / dev / urandom
est la meilleure interface à usage général.)
3) Voici un script simple que j'utilise pour générer un mot de passe aléatoire. Vous pouvez l'utiliser.
#! / Bin / sh # Créer un mot de passe de 48 bits (8 caractères, 6 bits par caractère) dd if = / dev / urandom count = 1 2> / dev / null | base64 | tête -1 | couper -c4-11
J'utilise une combinaison de sources de données et un bon algorithme de hachage pour générer des données aléatoires.
Sur un serveur Web, vous pouvez combiner les données du serveur (matériel, logiciel, performances), les données client (utilisateur- agent, request-time, cookie, variables d'URL, tout ce que vous pouvez collecter), certaines données externes (comme random.org), mélangez tout avec disons sha1 (mixed_data + time + some_secret_key) et vous obtenez des bits assez imprévisibles de données aléatoires.
Vous pouvez également envisager d'utiliser P2PEG pour collecter facilement l'entropie des clients et du serveur.
Les mots de passe, s'ils sont courts, sont toujours craquables par force brute si la vitesse ou le nombre d'essais n'est pas limité. Si, d'un autre côté, les essais sont limités (par exemple, connexion interactive), même une petite quantité d'entropie fondamentalement incassable - le nombre d'essais requis devient très vite prohibitif.
Donc, il ne devrait y avoir aucun cas où obtenir une très bonne entropie pour les mots de passe importerait.
Alors utilisez simplement / dev / urandom, c'est plus que suffisant.
Les autres réponses données ici sont de bons commentaires sur la façon de conserver votre / dev / random est fourni avec suffisamment d'entropie, si vous en avez besoin.
GUChaos.c récupère les nombres aléatoires de random.org, et les change à la volée grâce à un chiffrement de substitution avant d'alimenter / dev / random
.
Il est étrange de voir un tas de recommandations d'utiliser / dev / urandom au lieu d'utiliser / dev / random cause quand / dev / random s'épuise alors / dev / urandom utilise la dernière entropie à plusieurs reprises, ce qui est fortement non sécurisé à long terme critique paramètres.