GNU/Linux >> Znalost Linux >  >> Linux

Kdy použít /dev/random vs /dev/urandom?

Mám použít /dev/random nebo /dev/urandom ?

V jakých situacích bych preferoval jedno před druhým?

Přijatá odpověď:

TL;DR

Použijte /dev/urandom pro většinu praktických účelů.

Delší odpověď závisí na variantě Unixu, který používáte.

Linux

Historicky /dev/random a /dev/urandom byly představeny ve stejnou dobu.

Jak v komentáři zdůraznil @DavidSchwartz pomocí /dev/urandom je preferován v naprosté většině případů. On a další také poskytli odkaz na vynikající mýty o /dev/urandom článek, který doporučuji k dalšímu přečtení.

Shrnuto:

  • Manuálová stránka je zavádějící.
  • Oba jsou napájeny stejným CSPRNG ke generování náhodnosti (diagramy 2 a 3)
  • /dev/random blokuje, když mu dojde entropie,
    takže čtení z /dev/random může zastavit provádění procesu.
  • Množství entropie se konzervativně odhaduje, ale nepočítá
  • /dev/urandom nikdy nezablokuje.
  • Ve vzácných případech velmi krátce po spuštění nemusí mít CSPRNG dostatek entropie, aby mohl být správně nasazen a /dev/urandom nemusí vytvářet vysoce kvalitní náhodnost.
  • Docházející entropie není problém, pokud byl CSPRNG původně správně nasazen.
  • CSPRNG se neustále znovu nasazuje.
  • V systému Linux 4.8 a novějším /dev/urandom nevyčerpává zásobu entropie (používá se /dev/random ), ale používá výstup CSPRNG z upstreamu.
  • Použijte /dev/urandom .

Výjimky z pravidla

V Cryptography Stack Exchange's Kdy použít /dev/random přes /dev/urandom v Linuxu poskytuje @otus dva případy použití:

  1. Krátce po spuštění na zařízení s nízkou entropií, pokud ještě nebylo vygenerováno dostatečné množství entropie pro správné nasazení /dev/urandom .

  2. Generování jednorázového bloku s teoretickou informační bezpečnost

Pokud se obáváte (1), můžete zkontrolovat dostupnou entropii v /dev/random .

Pokud děláte (2), už to víte 🙂

Poznámka:Můžete zkontrolovat, zda se čtení z /dev/random zablokuje, ale dejte si pozor na možné závody.

Alternativa:nepoužívejte ani jedno!

@otus také poukázal na to, že getrandom() systém bude číst z /dev/urandom a blokovat pouze v případě, že počáteční entropie semene není k dispozici.

Při změně /dev/urandom dochází k problémům použít getrandom() , ale je možné, že nový /dev/xrandom zařízení je vytvořeno na základě getrandom() .

macOS

Na tom nezáleží, jak říká Wikipedie:

macOS používá 160bitový Yarrow založený na SHA1. Mezi /dev/random a /dev/urandom není žádný rozdíl; oba se chovají identicky. Apple iOS také používá Yarrow.

FreeBSD

Na tom nezáleží, jak říká Wikipedie:

/dev/urandom je pouze odkaz na /dev/random a blokuje pouze do správného nasazení.

To znamená, že po nabootování je FreeBSD dost chytré na to, aby počkalo, až se shromáždí dostatek entropie semene, a teprve potom začne dodávat nekonečný proud náhodných dobrot.

Související:Linux – Jak přimět Oracle java 7, aby fungoval s setcap cap_net_bind_service+ep?

NetBSD

Použijte /dev/urandom , za předpokladu, že váš systém četl alespoň jednou z /dev/random k zajištění správného počátečního výsevu.

Manuová stránka rnd(4) říká:

/dev/urandom nikdy neblokuje.

/dev/random někdy blokuje. Zablokuje se brzy při spouštění, pokud je
stav systému znám jako předvídatelný.

Aplikace by měly číst z /dev/urandom když potřebují náhodně
generovaná data, např. kryptografické klíče nebo semena pro simulace.

Systémy by měly být navrženy tak, aby uvážlivě četly alespoň jednou z /dev/random při startu před spuštěním jakýchkoli služeb, které komunikují s
internetem nebo jinak vyžadují kryptografii, aby se předešlo
předvídatelnému generování klíčů.


Linux
  1. Jak vygenerovat náhodné heslo v linuxu pomocí /dev/random

  2. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  3. Linux – Co znamená písmeno „u“ v /dev/urandom?

  1. Jak namapovat zařízení /dev/sdX a /dev/mapper/mpathY ze zařízení /dev/dm-Z

  2. Co jsou soubory /dev/zero a /dev/null v Linuxu

  3. Jak zaměníte /dev/sda s /dev/sdb?

  1. Linux:Rozdíl mezi /dev/console , /dev/tty a /dev/tty0

  2. jádro:deaktivace /dev/kmem a /dev/mem

  3. Je špatné propojit /dev/random s /dev/urandom v Linuxu?