Provided by: manpages-pl_0.5-1_all bug

NAZWA

       random, urandom - urządzenia źródłowe liczb losowych jądra

SKŁADNIA

       #include <linux/random.h>

       int ioctl(fd, RNDżądanie, parametr);

OPIS

       Specjalne  urządzenia  znakowe  /dev/random  i /dev/urandom (obecne w Linuksie od wersji 1.3.30) stanowią
       interfejs do wbudowanego w jądro generatora liczb losowych. Plik /dev/random ma numer główny urządzenia 1
       i numer poboczny 8. Plik /dev/urandom ma numer główny urządzenia 1 i numer poboczny 9.

       Generator liczb losowych zbiera szum środowiskowy  ze  sterowników  urządzeń  i  innych  źródeł  do  puli
       losowej.  Generator przechowuje również szacunkową liczbę bitów szumu w puli losowej. Z puli tej tworzone
       są liczby losowe.

       W trakcie odczytu, urządzenie /dev/random zwraca losowe bajty, spośród oszacowanej liczby bitów  szumu  w
       puli.  /dev/random  nadaje się najlepiej do zastosowań, w których potrzebna jest losowość bardzo wysokiej
       jakości, jak np. jednorazowa maska lub generowanie  kluczy.  Jeśli  pula  losowa  jest  pusta,  odczyt  z
       /dev/random będzie wstrzymany do czasu zebrania dodatkowego szumu środowiskowego.

       Odczyt   z   urządzenia  /dev/urandom  zwróci  tyle  bajtów,  ile  zażądano.  W  efekcie,  jeśli  nie  ma
       wystarczającego chaosu w puli losowej, zwracane wartości są teoretycznie narażone na atak kryptograficzny
       w stosunku do algorytmów wykorzystywanych przez sterownik. Wiedza  na  ten  temat  nie  jest  dostępna  w
       obecnych niezastrzeżonych publikacjach, ale istnieje teoretyczna możliwość przeprowadzenia takiego ataku.
       Jeśli jest to problemem w przypadku Twojego programu, użyj /dev/random.

       Pisanie  do  /dev/random  lub /dev/urandom zaktualizuje pulę entropii za pomocą pisanych danych, lecz nie
       zwiększy poziomu entropii. Oznacza to, że będzie to miało wpływ na odczyt z obu plików, lecz  nie  uczyni
       odczytu z /dev/random szybszym.

   Użycie
       Jeśli  nie  jest  pewne,  czy należy użyć /dev/random, czy dev/urandom, to najprawdopodobniej powinno się
       użyć tego ostatniego. Generalna zasada jest taka, że /dev/urandom powinno być używane do  wszystkiego,  z
       wyjątkiem długoterminowych kluczy GPG/SSL/SSH.

       Jeśli  plik  puli  losowej  jest  przechowywany  pomiędzy  ponownymi uruchomieniami, zgodnie z poniższymi
       zaleceniami (czynią to wszystkie główne dystrybucje Linuksa od  co  najmniej  2000  roku),  wyjście  jest
       kryptograficznie  bezpieczne  w  stosunku  do  atakujących  bez  dostępu  do  lokalnego  roota,  zaraz po
       przeładowaniu go w sekwencji rozruchowej i odnosi się w całości do sieciowych kluczy szyfrujących  sesji.
       Ponieważ odczyt z /dev/random może nie być płynny, użytkownicy będą go z reguły chcieli otworzyć w trybie
       nieblokującym  (lub  przeprowadzać odczyt z czasem oczekiwania) i udostępniać jakiś typ powiadomienia dla
       użytkownika, jeśli oczekiwana losowość nie jest od razu dostępna.

       Generator liczb losowych jądra jest zaprojektowany do tworzenia niewielkiej ilości ziarna (ang.  seed)  o
       wysokiej  jakości,  do  użycia  z  kryptograficznym  generatorem liczb pseudolosowych (ang. cryptographic
       pseudo-random number generator - CPRNG). Głównym celem było  bezpieczeństwo,  nie  szybkość,  i  jest  on
       kiepsko  przystosowany  do  tworzenia  dużej  ilości  danych  losowych.  Użytkownicy  powinni  odczytywać
       niewielkie ilości ziarna z /dev/urandom (i /dev/random) - niepotrzebne odczytywanie dużych ilości  danych
       z tych urządzeń będzie miało negatywny wpływ na innych użytkowników urządzeń.

       Ilość  ziarna  potrzebna do wygenerowania klucza kryptograficznego zależy od efektywnego rozmiaru klucza.
       Na przykład, 3072-bitowy klucz prywatny RSA lub Diffiego-Hellmana ma efektywny rozmiar  klucza  128-bitów
       (wymaga około 2^128 operacji do złamania), więc generator klucza potrzebuje jedynie 128 bitów (16 bajtów)
       ziarna z /dev/random.

       O  ile  niewielki  margines  bezpieczeństwa  powyżej  tego  minimum  jest  zrozumiały, jako ochrona przed
       słabościami algorytmu CPRNG, nie istnieje aktualnie algorytm kryptograficzny zdolny zapewnić  więcej  niż
       256  bitów bezpieczeństwa, więc jeśli jakiś program odczytuje więcej niż 256 bitów (32 bajtów) z losowego
       ziarna jądra na pojedyncze wywołanie lub na rozsądny interwał ponownego  tworzenia  ziarna  (co  najmniej
       minuta), to jest to oznaka, że jego kryptografia nie jest umiejętnie zaimplementowana.

   Konfiguracja
       Jeśli  w  systemie  nie ma plików /dev/random i /dev/urandom, można je utworzyć przy użyciu następujących
       poleceń:

           mknod -m 644 /dev/random c 1 8
           mknod -m 644 /dev/urandom c 1 9
           chown root:root /dev/random /dev/urandom

       Gdy Linux uruchamiany jest przy niewielkim udziale operatora, pula losowa może być w dość  przewidywalnym
       stanie.  Faktyczna  ilość szumu w puli losowej jest wówczas poniżej ilości szacowanej. Aby przeciwdziałać
       temu efektowi, pomocne jest zapamiętywanie informacji o puli losowej  pomiędzy  kolejnymi  uruchomieniami
       systemu.  Aby  działo  się  to  automatycznie,  należy  dodać  następujące wiersze do stosownych skryptów
       startowych Linuksa:

           echo "Inicjowanie generatora liczb losowych..."
           random_seed=/var/run/random-seed
           # Przechowanie wartości losowej od jednego startu systemu
           # do kolejnego startu. Ładowanie oraz późniejsze zachowywanie
           # całej puli losowej.    if [ -f $random_seed ]; then
               cat $random_seed >/dev/urandom
           else
               touch $random_seed
           fi
           chmod 600 $random_seed
           poolfile=/proc/sys/kernel/random/poolsize
           [ -r $poolfile ] && bytes=`cat $poolfile` || bytes=512
           dd if=/dev/urandom of=$random_seed count=1 bs=$bytes

       Trzeba również dodać następujące wiersze do stosownego skryptu uruchamianego  podczas  zamykania  systemu
       Linuksa:

           # Przechowanie losowych danych pomiędzy wyłączeniem a włączeniem
           # komputera. Zachowywanie puli losowej generatora.
           echo "Zachowywanie puli losowej..."
           random_seed=/var/run/random-seed
           touch $random_seed
           chmod 600 $random_seed
           poolfile=/proc/sys/kernel/random/poolsize
           [ -r $poolfile ] && bytes=`cat $poolfile` || bytes=512
           dd if=/dev/urandom of=$random_seed count=1 bs=$bytes

   Interfejs /proc
       Pliki  w  katalogu  /proc/sys/kernel/random  (obecnym  od  wersji  2.3.16)  są  dodatkowym interfejsem do
       urządzenia /dev/random.

       Plik z prawami tylko do odczytu entropy_avail dostarcza dostępną pulę losową. Zazwyczaj  będzie  to  4096
       (bitów), całość dostępnej puli.

       Plik poolsize zawiera rozmiar puli losowej. Format tego pliku zależy od wersji jądra.

              Linux 2.4:  Plik  podaje  rozmiar  puli  losowej  w  bajtach.  Zazwyczaj - 512 (bajtów). Plik jest
                          zapisywalny i może  być  zmieniony  na  dowolną  wartość,  dla  której  dostępny  jest
                          algorytm. Obecnie możliwe wartości to: 32, 64, 128, 256, 512, 1024 lub 2048.

              Linux 2.6:  Plik  jest  dostępny  tylko do odczytu i podaje rozmiar puli losowej w bitach. Zawiera
                          wartość 4096.

       Plik read_wakeup_threshold zawiera liczbę bitów entropii potrzebnej do obudzenia procesu,  który  zasnął,
       czekając  na  entropię  z pliku /dev/random.  Domyślnie - 64.  Plik write_wakeup_threshold zawiera liczbę
       bitów entropii poniżej której zostanie uśpiony proces, który wykona select(2) lub poll(2),  aby  otworzyć
       do zapisu urządzenie /dev/random.  Wartości te mogą być zmienione przez zapis do tych plików.

       Pliki   tylko   do   odczytu   uuid   i   boot_id   zawierają   losowe   łańcuchy   znaków,   takie   jak
       6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9.  Pierwszy z  tych  plików  jest  generowany  na  nowo  przy  każdym
       odczycie, a drugi jest generowany tylko raz.

   Interfejs ioctl(2)
       Następujące  żądania  ioctl(2)  są  zdefiniowane  na  deskryptorach  plików połączonych z /dev/random lub
       /dev/urandom. Wszystkie przeprowadzone żądania wpływają na wejściową pulę  entropii  zarówno  /dev/random
       jak  i  /dev/urandom.  Możliwość  CAP_SYS_ADMIN  jest  wymagana  przez  wszystkie  żądania  za  wyjątkiem
       RNDGETENTCNT.

       RNDGETENTCNT
              Zbiera wartość entropii z puli wejściowej, zawartość będzie taka sama jak  pliku  entropy_avail  w
              katalogu proc. Wyniki zostaną przechowane w liczbie całkowitej wskazanej przez argument.

       RNDADDTOENTCNT
              Zwiększa lub zmniejsza wartość entropii z puli wejściowej o wartość wskazaną przez argument.

       RNDGETPOOL
              Usunięte w Linuksie 2.6.9

       RNDADDENTROPY
              Dodaje dodatkową entropię do puli wejściowej, zwiększając wartość entropii. Różni się to od zapisu
              do  /dev/random  lub  /dev/urandom,  które dodaje pewne dane, lecz nie zwiększa wartości entropii.
              Używana jest poniższa struktura:

                  struct rand_pool_info {
                      int    wartość_entropii;
                      int    wiel_buf;
                      __u32  buf[0];
                  };

              Wartość_entropii to wartość dodawana (lub  odejmowana)  od  wartości  entropii,  buf  to  bufor  o
              wielkości wiel_buf dodawany do puli entropii.

       RNDZAPENTCNT, RNDCLEARPOOL
              Zeruje  wielkość  entropii  we  wszystkich  pulach  i  dodaje  do  nich  pewne dane systemowe (np.
              rzeczywisty czas trwania - tzw. wall clock).

PLIKI

       /dev/random
       /dev/urandom

ZOBACZ TAKŻE

       mknod(1)
       RFC 1750, "Randomness Recommendations for Security"

O STRONIE

       Angielska wersja tej strony pochodzi  z  wydania  3.52  projektu  Linux  man-pages.  Opis  projektu  oraz
       informacje dotyczące zgłaszania błędów można znaleźć pod adresem http://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami   polskiego   tłumaczenia   niniejszej   strony   podręcznika  man  są:  Paweł  Olszewski  (PTM)
       <alder@civic.amg.net.pl>,    Robert    Luberda    (PTM)    <robert@debian.org>    i     Michał     Kułach
       <michal.kulach@gmail.com>.

       Polskie  tłumaczenie  jest  częścią  projektu  manpages-pl;  uwagi,  pomoc,  zgłaszanie błędów na stronie
       http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją  3.52 oryginału.

Linux                                              2013-03-15                                          RANDOM(4)