Urandom
| Fiche express | |
|---|---|
| Domaine | Génération d'aléa / sécurité système |
| Commande | /dev/urandom
|
| Contexte | Périphérique spécial fournissant des octets pseudo-aléatoires issus du noyau Linux |
| Voir aussi | Fold (idiome de génération de mot de passe) |
/dev/urandom est un périphérique caractère spécial fourni par le noyau Linux qui délivre un flux continu d'octets pseudo-aléatoires, générés à partir du pool d'entropie interne du noyau (bruit matériel, timings d'interruptions, événements périphériques...) puis étendus par un générateur pseudo-aléatoire cryptographique (CSPRNG).
/dev/random vs /dev/urandom
Le noyau expose deux périphériques liés à la même réserve d'entropie interne, avec un comportement historiquement différent :
/dev/random— historiquement bloquant : si le noyau jugeait son pool d'entropie insuffisant, les lectures étaient mises en attente jusqu'à ce qu'il se réapprovisionne./dev/urandom— jamais bloquant : une fois le CSPRNG initialisé, il continue à produire des octets indéfiniment, même si l'estimation d'entropie du noyau est basse.
Depuis le noyau Linux 5.6, ce comportement a été largement harmonisé : /dev/random ne bloque quasiment plus après la phase d'initialisation du système (le seul moment où l'un ou l'autre peut réellement attendre est le tout début du boot, avant que le CSPRNG soit correctement initialisé). En usage courant sur un système démarré depuis un moment, les deux périphériques sont considérés comme cryptographiquement sûrs et produisent une sortie de qualité équivalente.
Usages typiques
/dev/urandom sert de source d'aléa pour tout ce qui a besoin de données imprévisibles côté système : génération de clés SSH/TLS, de tokens de session, de sels de hachage, d'UUID, ou plus simplement de mots de passe temporaires.
Lecture directe d'un nombre d'octets donné :
head -c 32 /dev/urandom | xxd # 32 octets aléatoires, affichés en hexadécimal
head -c 32 /dev/urandom | base64 # 32 octets aléatoires, encodés en base64
L'idiome combinant /dev/urandom, tr et fold pour produire des chaînes alphanumériques de longueur fixe (mots de passe, jetons de test) est détaillé dans Fold — voir cette page pour l'exemple complet.
Pour un usage cryptographique exigeant (génération de clés, secrets applicatifs), des outils dédiés sont souvent préférés à la lecture brute de /dev/urandom ou à l'idiome tr/fold, car ils gèrent mieux l'encodage et évitent le filtrage potentiellement biaisé de tr :
openssl rand -hex 16 # 16 octets aléatoires en hexadécimal
openssl rand -base64 16 # 16 octets aléatoires en base64
Voir aussi
- Fold — idiome complet
/dev/urandom+tr+foldpour générer un mot de passe