Dev random/fr

From Lazarus wiki
Jump to navigationJump to search

Deutsch (de) English (en) français (fr)

Sommaire

/dev/random et /dev/urandom sont deux périphériques basés Unix et *nix qui traitent de la mémoire, du disque, des that process memory, disc, des vidages réseau (network dumps) depuis le noyau ( Ainsi que du matériel de cryptographie, s'il est présent et activé) pour produire des nombres (pseudo) aléatoires.

La différence entre /dev/random et /dev/urandom est de savoir si le périphérique est "bloquant" or "non bloquant" :

  • quand /dev/random donne des données aléatoires, il attendra d'avoir quelque chose de suffisamment aléatoire à nous donner avant de retourner la donnée.
  • /dev/urandom ne s'arrête pas quand il est à court de données aléatoire, et retournera des données un peu moins aléatoires. Ainsi, nous n'aurons pas besoin d'attendre de l'activité mais le caractère aléatoire est réduit.

L'usage de /dev/random ou /dev/urandom nous permet d'utiliser une graine "aléatoire" (randseed) pour réaliser des tâches aléatoires avec la fonction random.

Exemples

En vue de faire travailler Free Pascal avec /dev/random et /dev/random, nous pouvons écrire le code suivant :

procedure RandomSeed;
var
  f : file of integer;
  i : integer;

begin
  i        := 0;
  filemode := 0;
  AssignFile(f, '/dev/urandom'); 
  reset (f,1);
  read (f,i);
  CloseFile (f);
  RandSeed := i;
end;

Explication

Comme presque n'importe quoi d'autre dans les SE *nix, tout est fichier ! Donc, nous accédons à urandom comme à un fichier et nous lisons un seul entier à la fois.

Ainsi, nous plaçons la donnée que nous obtenue comme graine aléatoire (la graine que la fonction random utilise). Et c'est tout, nous avons un semoir aléatoire pour une utilisation "aléatoire".

Voir aussi