Provided by: manpages-pl_0.7-1_all 
      
    
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 wyłącznie 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. Jeśli open(2) jest
       wywołane do /dev/random z flagą O_NONBLOCK, kolejne read(2) nie będzie  blokowane,  jeśli  żądana  liczba
       bajtów  nie  jest  dostępna. W zamian zwracane są dostępne bajty. Jeśli nie ma dostępnych bajtów, read(2)
       zwróci -1, a errno ustawi się na EAGAIN.
       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, do utworzenia żądanych bajtów jest używany generator pseudolosowy.
       Zwracane  wartości  są  wówczas  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. O_NONBLOCK nie ma wpływu przy korzystaniu z /dev/urandom.
       Przy wywoływaniu read(2) dla urządzenia /dev/urandom  sygnały  nie  będą  obsługiwane  aż  do  utworzenia
       żądanych losowych bajtów.
       Od  Linuksa  3.16,  a  read(2)  z /dev/urandom zwróci co najwyżej 32 MB. read(2) z /dev/random zwróci nie
       więcej niż 512 bajtów (przed jądrami Linux w wersji 2.6.12 - 340 bajtów).
       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 666 /dev/random c 1 8
           mknod -m 666 /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ć 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 ] && bits=$(cat $poolfile) || bits=4096
           bytes=$(expr $bits / 8)
           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 ] && bits=$(cat $poolfile) || bits=4096
           bytes=$(expr $bits / 8)
           dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
       W   powyższych   przykładach   zakładamy,   że   Linux   jest   w   wersji   2.6.0   lub  nowszej,  gdzie
       /proc/sys/kernel/random/poolsize zwraca rozmiar puli entropii w bitach (zob. niżej).
   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
       getrandom(2), mknod(1)
       RFC 1750, "Randomness Recommendations for Security"
O STRONIE
       Angielska  wersja  tej strony pochodzi z wydania 4.05 projektu Linux man-pages. Opis projektu, informacje
       dotyczące  zgłaszania   błędów,   oraz   najnowszą   wersję   oryginału   można   znaleźć   pod   adresem
       https://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ą  4.05 oryginału.
Linux                                              2015-12-28                                          RANDOM(4)