différences entre random et urandom

j'essaie de trouver les différences entre /dev/random et /dev/urandom fichiers

  1. quelles sont les différences entre /dev/random et /dev/urandom ?
  2. Quand dois-je les utiliser?
  3. quand ne devrais-je pas les utiliser?
31
demandé sur fernandohur 2014-05-17 18:41:36

4 réponses

L'utilisation de /dev/random peut exiger d'attendre le résultat car il utilise le Entropy pool , où les données aléatoires peuvent ne pas être disponibles pour le moment.

/dev/urandom retourne autant d'octets que l'utilisateur l'a demandé et il est donc moins aléatoire que /dev/random .

comme on peut le lire sur la page de manuel:

aléatoire

quand lire, le périphérique /dev/random ne retournera que des octets aléatoires le nombre estimé de bits de bruit dans le bassin d'entropie. /dev/random doit être adapté pour des utilisations nécessitant de très haute qualité aléatoire comme un bloc unique ou une génération de clés. Lorsque le bassin d'entropie est Vide, Lit de /dev/random va bloquer jusqu'à ce que supplémentaire le bruit environnemental est recueilli.

urandom

une lecture de l'appareil /dev/urandom ne bloque pas en attente de plus entropie. Par conséquent, si il n'y a pas suffisamment d'entropie dans le les valeurs retournées sont théoriquement vulnérables à un attaque cryptographique des algorithmes utilisés par le conducteur. Connaissance de la façon de faire ceci n'est pas disponible dans l'actuel Non classifié la littérature, mais il est théoriquement possible qu'une telle attaque peut exister. Si cela pose un problème dans votre demande, utilisez /dev/random plutôt.

pour des raisons cryptographiques, vous devez vraiment utiliser /dev/random en raison de la nature des données qu'il renvoie. Une attente éventuelle devrait être considérée comme un compromis acceptable pour des raisons de sécurité, OMI.

quand vous avez besoin de données aléatoires fast , vous devez utiliser /dev/urandom bien sûr.

Source: Wikipedia page, man page

27
répondu Alexey Malev 2014-06-05 13:09:21

toujours utiliser / dev / urandom.

/ dev /urandom et/dev / random utilisent le même générateur de nombres aléatoires. Ils sont tous les deux ensemencés par le même bassin d'entropie. Tous deux donneront un nombre tout aussi aléatoire d'une taille arbitraire. Ils peuvent tous les deux donner une quantité infinie de nombres aléatoires avec seulement une graine de 256 bits. Tant que la graine initiale a 256 bits d'entropie, vous pouvez avoir un approvisionnement infini de nombres aléatoires arbitrairement longs. Vous ne gagnez rien en utilisant /dev/random. Le le fait qu'il y ait deux périphériques est un défaut dans L'API Linux.

si vous êtes préoccupé par l'entropie, utiliser /dev/random ne va pas corriger cela. Mais il ralentira votre application tout en ne générant pas de nombres plus aléatoires que /dev/urandom. Et si vous n'êtes pas concerné par entropy, pourquoi utilisez-vous /dev/random du tout?

Voici une bien meilleure/explication approfondie sur pourquoi vous devriez toujours utiliser / dev / urandom: http://www.2uo.de/myths-about-urandom /

17
répondu Ironlenny 2016-11-30 01:00:51

Quelles sont les différences entre /dev/random et /dev/urandom ?

/dev/random et /dev/urandom sont des interfaces avec le générateur de nombres aléatoires du noyau:

  • Lecture renvoie un flux d'octets aléatoires assez solide pour une utilisation en cryptographie
  • leur écrire fournira les données du noyau pour mettre à jour le pool entropy

quand il vient aux différences, il dépend du système d'exploitation:

  • sur Linux, lecture de /dev/random peut bloquer, ce qui limite considérablement son utilisation dans la pratique
  • sous FreeBSD, il n'y en a pas. /dev/urandom n'est qu'un lien symbolique vers /dev/random .

Quand dois-je les utiliser? Quand ne devrais-je pas les utiliser?

Il est très difficile de trouver un cas d'utilisation où vous devez utiliser /dev/random plus /dev/urandom .

Danger de blocage:

  • il s'agit d'un véritable problème auquel vous devrez faire face lorsque vous décidez d'utiliser /dev/random . Pour les utilisations simples comme ssh-keygen il devrait être correct d'attendre quelques secondes, mais pour la plupart des autres situations, il ne sera pas une option.
  • Si vous utilisez /dev/random , vous devez l'ouvrir en non bloquant mode et de fournir une sorte de notification de l'utilisateur si l'entropie n'est pas immédiatement disponible.

la Sécurité:

l'interface /dev/random est considérée comme une interface legacy, et /dev/urandom est préféré et suffisant tous les cas d'utilisation, à l'exception des applications qui nécessitent un caractère aléatoire au début du démarrage; pour ces applications, getrandom (2) doivent être utilisées au lieu de cela, parce qu'il bloquera jusqu'à ce que le pool d'entropie soit initialisé.

si un fichier seed est sauvegardé à travers les redémarres comme recommandé ci-dessous (toutes les distributions Linux majeures ont fait ceci depuis 2000 au moins), la sortie est cryptographiquement sécurisé contre les attaquants sans accès local root comme dès qu'il est rechargé dans la séquence d'amorçage, et parfaitement adapté pour les clés de session de cryptage réseau. Depuis lit de /dev/random peut bloquer, les utilisateurs seront généralement voulez l'ouvrir en mode non bloquant (ou effectuer une lecture avec temporisation), et de fournir une sorte de notification de l'utilisateur si l'entropie n'est pas immédiatement disponible.

recommandation

en règle générale, /dev/urandom doit être utilisé pour tout sauf les clés GPG/SSL/SSH de longue durée.

5
répondu Philipp Claßen 2017-07-29 17:34:18

réponse Courte

Utiliser /dev/urandom

Longue Réponse

ils sont tous les deux alimentés par le même générateur de nombres pseudorandom cryptographiquement sécurisé (CSPRNG). Le fait que /dev/random attend l'entropie (ou plus précisément, attend l'estimation de l'entropie par le système pour atteindre un niveau approprié) ne fait une différence que lorsque vous utilisez un algorithme théoriquement sûr de l'information, par opposition à un calcul sécurisé algorithme. Le premier englobe des algorithmes que vous n'utilisez probablement pas, comme le partage Secret de Shamir et le bloc-notes unique. Ce dernier contient des algorithmes que vous utilisez et dont vous vous souciez réellement, tels que AES, RSA, Diffie-Hellman, OpenSSL, GnuTLS, etc.

donc il n'a pas d'importance si vous utilisez des nombres de /dev/random puisqu'ils sont pompés hors D'un CSPRNG de toute façon, et il est "théoriquement possible" de briser les algorithmes que vous êtes probablement en les utilisant avec de toute façon.

enfin, ce bit" théoriquement possible " signifie exactement cela. Dans ce cas, cela signifie utiliser toute la puissance de calcul dans le monde, pour la quantité de temps que l'univers a existé pour fissurer l'application.

par conséquent, il est pratiquement inutile d'utiliser /dev/random

Donc de l'utiliser /dev/urandom

Sources

1 2 3

2
répondu Mitchell Tracy 2017-05-22 21:55:17