.\" -*- coding: UTF-8 -*-
.\" Copyright (c) 1997 John S. Kallal (kallal@voicenet.com)
.\"
.\" SPDX-License-Identifier: GPL-2.0-or-later
.\"
.\" 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 "4 grudnia 2022 r." "Linux man\-pages 6.03" 
.SH NAZWA
random, urandom \- urządzenia źródłowe liczb losowych jądra
.SH SKŁADNIA
.nf
#include <linux/random.h>
.PP
\fBint ioctl(\fP\fIfd\fP\fB, RND\fP\fIżądanie\fP\fB, \fP\fIparametr\fP\fB);\fP
.fi
.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
When the entropy pool is empty, reads from \fI/dev/random\fP will block until
additional environmental noise is gathered.  Since Linux 5.6, the
\fBO_NONBLOCK\fP flag is ignored as \fI/dev/random\fP will no longer block except
during early boot process.  In earlier versions, if \fBopen\fP(2)  is called
for \fI/dev/random\fP with the \fBO_NONBLOCK\fP flag, a subsequent \fBread\fP(2)
will not block if the requested number of bytes is not available.  Instead,
the available bytes are returned.  If no byte is available, \fBread\fP(2)  will
return \-1 and \fIerrno\fP will be set to \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
Since Linux 3.16, a \fBread\fP(2)  from \fI/dev/urandom\fP will return at most 32\ MB.  A \fBread\fP(2)  from \fI/dev/random\fP will return at most 512 bytes (340
bytes before Linux 2.6.12).
.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"
The files in the directory \fI/proc/sys/kernel/random\fP (present since Linux
2.3.16) provide additional information about the \fI/dev/random\fP device:
.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"
.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 .
