.\" -*- coding: UTF-8 -*-
'\" t
.\" Copyright (C) 2008, George Spelvin <linux@horizon.com>,
.\" and Copyright (C) 2008, Matt Mackall <mpm@selenic.com>
.\" and Copyright (C) 2016, Laurent Georget <laurent.georget@supelec.fr>
.\" and Copyright (C) 2016, Nikos Mavrogiannopoulos <nmav@redhat.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" The following web page is quite informative:
.\" http://www.2uo.de/myths-about-urandom/
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH random 7 "2 maja 2024 r." "Linux man\-pages 6.8" 
.SH NAZWA
random \- przegląd interfejsów do pozyskiwania losowości
.SH OPIS
Generator liczb losowych jądra generuje ziarno dla kryptograficznie
bezpiecznego generatora liczb pseudolosowych (ang. cryptographically secure
pseudorandom number generator \[em] CSPRNG), w oparciu o entropię zebraną ze
sterowników urządzeń i innych źródeł szumu środowiskowego. Jest on
zaprojektowany nie pod kątem szybkości, lecz bezpieczeństwa.
.P
Dostęp do wyjścia z CSPRNG jądra dają następujące interfejsy:
.IP \[bu] 3
Urządzenia \fI/dev/urandom\fP i \fI/dev/random\fP, opisane w podręczniku
\fBrandom\fP(4). Urządzenia te istniały od wczesnego Linuksa i są dostępne
również na wielu innych systemach.
.IP \[bu]
.\"
Typowo linuksowe wywołanie systemowe \fBgetrandom\fP(2), dostępne od Linuksa
3.17. To wywołanie systemowe zapewnia dostęp do tego samego źródła co
\fI/dev/urandom\fP (dalej: \[Bq]źródło \fIurandom\fP\[rq]) albo do tego samego
źródła co \fI/dev/random\fP (dalej: \[Bq]źródło \fIrandom\fP\[rq]). Domyślnym
źródłem jest źródło \fIurandom\fP; źródło \fIrandom\fP jest wybierane podając do
wywołania systemowego znacznik \fBGRND_RANDOM\fP (funkcja \fBgetentropy\fP(3)
zapewnia nieco bardziej przenośny interfejs zbudowany na \fBgetrandom\fP(2)).
.SS "Inicjowanie puli entropii"
Jądro zbiera bity entropii ze środowiska. Gdy zbierze odpowiednią ilość
losowych bitów, pula entropii jest uważana za zainicjowaną.
.SS "Wybór źródła losowości"
O ile nie generuje się długoterminowych kluczy (a zwykle nawet wówczas),
prawdopodobnie nie ma potrzeby odczytywania z urządzenia \fI/dev/random\fP, ani
korzystania z \fBgetrandom\fP(2) ze znacznikiem \fBGRND_RANDOM\fP. W zamian
powinno się odczytywać z urządzenia \fI/dev/urandom\fP lub korzystać z
\fBgetrandom\fP(2) bez znacznika \fBGRND_RANDOM\fP. Algorytmy kryptograficzne
używane jako źródło \fIurandom\fP są dość konserwatywne, dlatego powinny być
wystarczające do wszystkich zastosowań.
.P
.\"
Wadą \fBGRND_RANDOM\fP i odczytywania z \fI/dev/random\fP jest fakt, że operacja
ta może blokować na nieokreślony czas. Co więcej, radzenie sobie z częściowo
zaspokojonymi żądaniami, co może zdarzyć się przy korzystaniu z
\fBGRND_RANDOM\fP lub odczytywaniu z \fI/dev/random\fP, zwiększa złożoność kodu.
.SS "Monte Carlo i inne zastosowania próbkowania probabilistycznego"
.\"
Korzystanie z tych interfejsów w celu dostarczania dużej ilości danych
symulacjom Monte Carlo i innym programom/algorytmom wykonującym próbkowanie
probabilistyczne będzie wolne. Ponadto jest niezasadne, ponieważ takie
aplikacje nie wymagają liczb losowych kryptograficznie bezpiecznych. Zamiast
tego, należy korzystać z opisanych w niniejszym podręczniku interfejsów do
pozyskania niewielkiej ilości danych jako ziarna do generatora liczb
pseudolosowych, znajdującego się w przestrzeni użytkownika, używanego przez
aplikacje tego typu.
.SS "Porównanie pomiędzy getrandom, /dev/urandom i /dev/random"
Poniższa tabela podsumowuje zachowanie różnych interfejsów, jakie mogą być
stosowane do pozyskania losowości. \fBGRND_NONBLOCK\fP jest znacznikiem
kontrolującym blokujące zachowanie \fBgetrandom\fP(2). Ostatnia kolumna dotyczy
przypadku, jaki może mieć miejsce we wczesnej fazie rozruchu, gdy pula
entropii nie została jeszcze zainicjowana.
.ad l
.TS
allbox;
lbw13 lbw12 lbw14 lbw18
l l l l.
Interfejs	Pula	T{
Zachowanie
\%blokowania
T}	T{
Zachowanie, gdy pula nie jest jeszcze gotowa
T}
T{
\fI/dev/random\fP
T}	T{
Pula blokująca
T}	T{
Gdy zbyt mało entropii, blokuje do momentu wystąpienia wystarczającej entropii
T}	T{
Blokuje, do momentu zebrania wystarczającej entropii
T}
T{
\fI/dev/urandom\fP
T}	T{
Wyjście CSPRNG
T}	T{
Nigdy nie blokuje
T}	T{
Zwraca wyjście z niezainicjowanej CSPRNG (być może ze zbyt niską entropią, nieodpowiednią dla kryptografii)
T}
T{
\fBgetrandom\fP()
T}	T{
Jak
\fI/dev/urandom\fP
T}	T{
Nie blokuje po uzyskaniu gotowości puli
T}	T{
Blokuje, do momentu uzyskania gotowości puli
T}
T{
\fBgetrandom\fP()
\fBGRND_RANDOM\fP
T}	T{
Jak
\fI/dev/random\fP
T}	T{
Gdy zbyt mało entropii, blokuje do momentu wystąpienia wystarczającej entropii
T}	T{
Blokuje, do momentu uzyskania gotowości puli
T}
T{
\fBgetrandom\fP()
\fBGRND_NONBLOCK\fP
T}	T{
Jak
\fI/dev/urandom\fP
T}	T{
Nie blokuje po uzyskaniu gotowości puli
T}	T{
\fBEAGAIN\fP
T}
T{
\fBgetrandom\fP()
\fBGRND_RANDOM\fP
+
\fBGRND_NONBLOCK\fP
T}	T{
Jak
\fI/dev/random\fP
T}	T{
\fBEAGAIN\fP
gdy zbyt mało entropii
T}	T{
\fBEAGAIN\fP
T}
.TE
.ad
.\"
.SS "Generowanie kluczy kryptograficznych"
Ilość ziarna, potrzebnego do wygenerowania klucza kryptograficznego równa
się efektywnemu rozmiarowi klucza. Przykładowo, 3072\-bitowy klucz prywatny
RSA lub Diffiego\-Hellmana ma efektywny rozmiar 128 bitów (wymaga około
2\[ha]128 operacji do złamania), zatem generator klucza potrzebuje jedynie
128 bitów (16 bajtów) ziarna z \fI/dev/random\fP.
.P
.\"
Choć pewien margines bezpieczeństwa ponad to minimum jest rozsądny, jako
zabezpieczenie wobec ułomności w algorytmie CSPRNG, żadna z dostępnych
aktualnie funkcji pierwotnych nie może obiecać więcej niż 256 bitów
bezpieczeństwa, zatem jeśli program odczytuje więcej niż 256 bitów (32
bajty) z puli losowości jądra na wywołanie albo na rozsądny interwał
ponownego generowania ziarna (nie mniejszy niż minutę), należy to uznać za
oznakę \fIbraku\fP umiejętnej implementacji kryptograficznej.
.SH "ZOBACZ TAKŻE"
\fBgetrandom\fP(2), \fBgetauxval\fP(3), \fBgetentropy\fP(3), \fBrandom\fP(4),
\fBurandom\fP(4), \fBsignal\fP(7)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
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 .
