.\" -*- coding: UTF-8 -*-
.\" Copyright (c) 1997 John S. Kallal (kallal@voicenet.com)
.\"
.\" %%%LICENSE_START(GPLv2+_DOC_ONEPARA)
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\" %%%LICENSE_END
.\"
.\" Some changes by tytso and aeb.
.\"
.\" 2004-12-16, John V. Belmonte/mtk, Updated init and quit scripts
.\" 2004-04-08, AEB, Improved description of read from /dev/urandom
.\" 2008-06-20, George Spelvin <linux@horizon.com>,
.\"             Matt Mackall <mpm@selenic.com>
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH RANDOM 4 "15 września 2017 r." Linux "Podręcznik programisty Linuksa"
.SH NAZWA
random, urandom \- urządzenia źródłowe liczb losowych jądra
.SH SKŁADNIA
#include <linux/random.h>
.PP
\fBint ioctl(\fP\fIfd\fP\fB, RND\fP\fIżądanie\fP\fB, \fP\fIparametr\fP\fB);\fP
.SH OPIS
Specjalne urządzenia znakowe \fI/dev/random\fP i \fI/dev/urandom\fP (obecne w
Linuksie od wersji 1.3.30) stanowią interfejs do wbudowanego w jądro
generatora liczb losowych. Plik \fI/dev/random\fP ma numer główny urządzenia 1
i numer poboczny 8. Plik \fI/dev/urandom\fP ma numer główny urządzenia 1 i
numer poboczny 9.
.PP
Generator liczb losowych zbiera szum środowiskowy ze sterowników urządzeń i
innych źródeł do puli losowej (puli entropii). Generator przechowuje również
szacunkową liczbę bitów szumu w puli losowej. Z puli tej tworzone są liczby
losowe.
.PP
Linux 3.17 i późniejsze zapewnia prostszy i bezpieczniejszy interfejs
\fBgetrandom\fP(2), który nie wymaga plików specjalnych; więcej informacji w
podręczniku \fBgetrandom\fP(2).
.PP
Przy odczycie, urzadzenie \fI/dev/urandom\fP zwraca losowe bajty, wygenerowane
za pomocą pseudolosowego generatora liczb, który pozyskuje ziarno z puli
entropii. Odczyt z tego urządzenia nie blokuje się (nie dochodzi do zjawiska
CPU yield), ale przy pozyskiwaniu znaczących ilości danych może wystąpić
znaczące opóźnienie.
.PP
.\" This is a real problem; see
.\" commit 9b4d008787f864f17d008c9c15bbe8a0f7e2fc24
Podczas odczytu we wczesnej fazie rozruchu, \fI/dev/urandom\fP może zwrócić
dane jeszcze przed zainicjowaniem puli losowej. Zastosowanie \fBgetrandom\fP(2)
lub \fI/dev/random\fP nie będzie podatne na to niekorzystne zjawisko.
.PP
Urządzenie \fI/dev/random\fP jest przestarzałym interfejsem, pochodzącym
jeszcze z czasów, gdy implementacja kryptograficznych funkcji pierwotnych
(ang. cryptographic primitives) użyta w implementacji \fI/dev/urandom\fP nie
była uważana za zaufaną. Zwraca losowe bajty w miarę napływu świeżego szumu
do puli losowej i blokuje się, gdy jest to konieczne. Urządzenie
\fI/dev/random\fP jest odpowiednie do aplikacji wymagających losowości wysokiej
jakości, które mogą sobie pozwolić na opóźnienia o nieznanej długości.
.PP
Jeśli pula losowa jest pusta, odczyt z \fI/dev/random\fP będzie wstrzymany do
czasu zebrania dodatkowego szumu środowiskowego. Jeśli \fBopen\fP(2) jest
wywołane do \fI/dev/random\fP z flagą \fBO_NONBLOCK\fP, kolejne \fBread\fP(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, \fBread\fP(2)
zwróci \-1, a \fIerrno\fP ustawi się na \fBEAGAIN\fP.
.PP
Flaga \fBO_NONBLOCK\fP nie ma znaczenia przy otwieraniu \fI/dev/urandom\fP.
Podczas wywołania \fBread\fP(2) do urządzenia \fI/dev/urandom\fP, odczyt do 256
bajtów zwróci żądaną wielkość bajtów; nie można ich przerwać
sygnałem. Odczyt przy użyciu bufora ponad ten limit może zwrócić mniejszą
liczbę bajtów niż żądana lub nie powieść się z błędem \fBEINTR\fP, jeśli
nastąpi przerwanie sygnałem.
.PP
.\" commit 79a8468747c5f95ed3d5ce8376a3e82e0c5857fc
.\" SEC_XFER_SIZE in drivers/char/random.c
Od Linuksa 3.16, \fBread\fP(2) z \fI/dev/urandom\fP zwróci co najwyżej 32\ MB. \fBread\fP(2) z \fI/dev/random\fP zwróci nie więcej niż 512 bajtów (przed
jądrami Linux w wersji 2.6.12 \- 340 bajtów).
.PP
Pisanie do \fI/dev/random\fP lub \fI/dev/urandom\fP 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
\fI/dev/random\fP szybszym.
.SS Użycie
Urządzenie \fI/dev/random\fP jest uważane za przestarzały interfejs, a
\fI/dev/urandom\fP jest preferowany i wystarczający we wszystkich przypadkach,
z wyjątkiem aplikacji wymagających losowości we wczesnej fazie rozruchu,
które muszą korzystać z \fBgetrandom\fP(2), blokującego się do czasu
zainicjowania puli losowej.
.PP
.\"
Jeśli plik puli losowej jest przechowywany pomiędzy ponownymi
uruchomieniami, zgodnie z poniższymi zaleceniami, 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 (wszystkie główne
dystrybucje Linuksa zachowują plik puli losowej pomiędzy rozruchami od co
najmniej 2000 roku). Ponieważ odczyt z \fI/dev/random\fP 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.
.SS Konfiguracja
Jeśli w systemie nie ma plików \fI/dev/random\fP i \fI/dev/urandom\fP, można je
utworzyć przy użyciu następujących poleceń:
.PP
.in +4n
.EX
mknod \-m 666 /dev/random c 1 8
mknod \-m 666 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom
.EE
.in
.PP
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:
.PP
.in +4n
.EX
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
.EE
.in
.PP
Trzeba również dodać następujące wiersze do stosownego skryptu uruchamianego
podczas zamykania systemu Linuksa:
.PP
.in +4n
.EX
# 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
.EE
.in
.PP
.\"
W powyższych przykładach zakładamy, że Linux jest w wersji 2.6.0 lub
nowszej, gdzie \fI/proc/sys/kernel/random/poolsize\fP zwraca rozmiar puli
entropii w bitach (zob. niżej).
.SS "Interfejsy /proc"
Pliki w katalogu \fI/proc/sys/kernel/random\fP (obecnym od wersji 2.3.16)
udostępniają dodatkowe informacje o urządzeniu \fI/dev/random\fP:
.TP 
\fIentropy_avail\fP
Plik z prawami tylko do odczytu, dostarcza dostępną entropię, w
bitach. Będzie to wielkość w zakresie od 0 do 4096.
.TP 
\fIpoolsize\fP
Plik zawiera rozmiar puli losowej. Format tego pliku zależy od wersji jądra:
.RS
.TP 
Linux 2.4:
Plik podaje rozmiar puli losowej w \fIbajtach\fP. 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.
.TP 
Linux 2.6 i późniejsze:
Plik jest dostępny tylko do odczytu i podaje rozmiar puli losowej w
\fIbitach\fP. Zawiera wartość 4096.
.RE
.TP 
\fIread_wakeup_threshold\fP
Plik zawiera liczbę bitów entropii wymaganej do obudzenia procesu, który
zasnął w oczekiwaniu na entropię z urządzenia \fI/dev/random\fP. Domyślna
wartość do 64.
.TP 
\fIwrite_wakeup_threshold\fP
Plik zawiera liczbę bitów entropii poniżej której zostanie uśpiony proces,
który wykona \fBselect\fP(2) lub \fBpoll\fP(2), aby otworzyć do zapisu urządzenie
\fI/dev/random\fP.  Wartości te mogą być zmienione przez zapis do tych plików.
.TP 
\fIuuid\fP i \fIboot_id\fP
.\"
Pliki te 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.
.SS "Interfejs ioctl(2)"
Następujące żądania \fBioctl\fP(2) są zdefiniowane na deskryptorach plików
połączonych z \fI/dev/random\fP lub \fI/dev/urandom\fP. Wszystkie przeprowadzone
żądania wpływają na wejściową pulę entropii zarówno \fI/dev/random\fP jak i
\fI/dev/urandom\fP. Możliwość \fBCAP_SYS_ADMIN\fP jest wymagana przez wszystkie
żądania za wyjątkiem \fBRNDGETENTCNT\fP.
.TP 
\fBRNDGETENTCNT\fP
Zbiera wartość entropii z puli wejściowej, zawartość będzie taka sama jak
pliku \fIentropy_avail\fP w katalogu proc. Wyniki zostaną przechowane w liczbie
całkowitej wskazanej przez argument.
.TP 
\fBRNDADDTOENTCNT\fP
Zwiększa lub zmniejsza wartość entropii z puli wejściowej o wartość wskazaną
przez argument.
.TP 
\fBRNDGETPOOL\fP
Usunięte w Linuksie 2.6.9
.TP 
\fBRNDADDENTROPY\fP
Dodaje dodatkową entropię do puli wejściowej, zwiększając wartość
entropii. Różni się to od zapisu do \fI/dev/random\fP lub \fI/dev/urandom\fP,
które dodaje pewne dane, lecz nie zwiększa wartości entropii. Używana jest
poniższa struktura:
.IP
.in +4n
.EX
struct rand_pool_info {
    int    wartość_entropii;
    int    wiel_buf;
    __u32  buf[0];
};
.EE
.in
.IP
\fIWartość_entropii\fP to wartość dodawana (lub odejmowana) od wartości
losowej, \fIbuf\fP to bufor o wielkości \fIwiel_buf\fP dodawany do puli losowej.
.TP 
\fBRNDZAPENTCNT\fP, \fBRNDCLEARPOOL\fP
Zeruje wielkość entropii we wszystkich pulach i dodaje do nich pewne dane
systemowe (np. rzeczywisty czas trwania \- tzw. wall clock).
.SH PLIKI
\fI/dev/random\fP
.br
\fI/dev/urandom\fP
.SH UWAGI
Przegląd i porównanie różnych interfejsów do pozyskiwania losowości znajduje
się w podręczniku \fBrandom\fP(7).
.SH BŁĘDY
.\" .SH AUTHOR
.\" The kernel's random number generator was written by
.\" Theodore Ts'o (tytso@athena.mit.edu).
Podczas wczesnej fazy rozruchu, \fI/dev/urandom\fP może zwrócić dane jeszcze
przed zainicjowaniem puli losowej.
.SH "ZOBACZ TAKŻE"
\fBmknod\fP(1), \fBgetrandom\fP(2), \fBrandom\fP(7)
.PP
RFC\ 1750, "Randomness Recommendations for Security"
.SH "O STRONIE"
Angielska wersja tej strony pochodzi z wydania 5.10 projektu Linux
\fIman\-pages\fP. 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/.
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Paweł Olszewski <alder@amg.net.pl>,
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
