GNU/Linux >> Tutoriels Linux >  >> Linux

Un rand de /dev/urandom est-il sécurisé pour une clé de connexion ?

La reponse courte est oui. La réponse longue est également oui. /dev/urandom donne des données qui ne peuvent pas être distinguées du vrai hasard, compte tenu de la technologie existante. Obtenir un "meilleur" caractère aléatoire que ce que /dev/urandom fournit n'a aucun sens, sauf si vous utilisez l'un des rares algorithmes cryptographiques "théoriques de l'information", ce qui n'est pas votre cas (vous le sauriez).

La page de manuel pour urandom est quelque peu trompeur, voire carrément faux, lorsqu'il suggère que /dev/urandom peut "manquer d'entropie" et /dev/random devrait être préféré; le seul instant où /dev/urandom pourrait impliquent qu'un problème de sécurité dû à une faible entropie survient au cours des premiers instants d'une nouvelle installation automatisée du système d'exploitation ; si la machine a démarré à un point où elle a commencé à avoir une activité réseau, elle a rassemblé suffisamment d'aléatoire physique pour fournir un aléatoire d'assez haute qualité pour toutes les utilisations pratiques (je parle ici de Linux ; sur FreeBSD, cet instant momentané de légère la faiblesse ne se produit pas du tout). Par contre, /dev/random a tendance à se bloquer à des moments inopportuns, ce qui entraîne des problèmes d'utilisation très réels et fastidieux. Ou, pour le dire en moins de mots :utilisez /dev/urandom et soyez heureux; utilisez /dev/random et sois désolé.

(Modifier : cette page Web explique les différences entre /dev/random et /dev/urandom très clairement.)

Dans le but de produire un "cookie":un tel cookie doit être tel que deux utilisateurs ne partagent pas le même cookie, et qu'il soit informatiquement impossible pour quiconque de "deviner" la valeur d'un cookie existant. Une séquence d'octets aléatoires le fait bien, à condition qu'elle utilise un caractère aléatoire de qualité adéquate (/dev/urandom est bien) et qu'il est suffisamment long . En règle générale, si vous avez moins de 2 utilisateurs (n =33 si toute la population de la Terre pouvait utiliser votre système), alors une séquence de n+128 les bits sont assez larges ; vous n'avez même pas besoin de vérifier une collision avec des valeurs existantes :vous ne la verrez pas de votre vivant. 161 bits tiennent dans 21 octets.

Il y a quelques astuces réalisables si vous souhaitez des cookies plus courts tout en évitant de rechercher des collisions dans votre base de données. Mais cela ne devrait guère être nécessaire pour un cookie (je suppose un contexte basé sur le Web). N'oubliez pas non plus de garder vos cookies confidentiels (c'est-à-dire d'utiliser HTTPS et de définir les indicateurs de cookie "sécurisé" et "HttpOnly").


Oui, c'est un excellent moyen.

L'explication de @Thomas le cloue. Et il a tout à fait raison de critiquer le /dev/urandom page de manuel. Parfait.

Mais sautez "vérifier s'il existe déjà". Ce chèque ne sert à rien. Ça n'arrivera pas. (Les chances que cela se produise sont inférieures à la probabilité d'être frappé par la foudre -- plusieurs fois -- dans la même journée.)


Linux
  1. Linux :Différence entre /dev/console , /dev/tty et /dev/tty0 ?

  2. Quelle est la portabilité de /dev/stdin, /dev/stdout et /dev/stderr ?

  3. Comment encoder en base64 /dev/random ou /dev/urandom ?

  4. RdRand de /dev/aléatoire

  5. Linux :Différence entre /dev/console , /dev/tty et /dev/tty0

DD de /dev/zero à /dev/null...ce qui se passe réellement

Comment Linux utilise /dev/tty et /dev/tty0

Est-ce une erreur de lier /dev/random à /dev/urandom sous Linux ?

echo ou print /dev/stdin /dev/stdout /dev/stderr

Pourquoi < ou > sont-ils nécessaires pour utiliser /dev/tcp

Différences entre /dev/sda et /dev/sda1