.\" -*- 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 , .\" Matt Mackall .\" .\"******************************************************************* .\" .\" 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 .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 , Robert Luberda i Michał Kułach . .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 .