.\" -*- 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 "2 maja 2024 r." "Linux man\-pages 6.9.1" .SH NAZWA random, urandom \- urządzenia źródłowe liczb losowych jądra .SH SKŁADNIA .nf #include .P \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. .P 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. .P 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). .P Przy odczycie, urządzenie \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. .P .\" 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. .P 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. .P Jeśli pula losowa jest pusta, odczyt z \fI/dev/random\fP będzie wstrzymany do czasu zebrania dodatkowego szumu środowiskowego. Od Linuksa 5.6, flaga \fBO_NONBLOCK\fP jest ignorowana, jako że \fI/dev/random\fP nie jest już blokowane, z wyjątkiem wczesnej fazy rozruchu. We wcześniejszych wersjach, 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. .P 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. .P .\" 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 (340 bajtów przed Linuksem 2.6.12). .P 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. .P .\" 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ń: .P .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 .P 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: .P .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 .P Trzeba również dodać następujące wiersze do stosownego skryptu uruchamianego podczas zamykania systemu Linuksa: .P .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 .P .\" 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 Linuksa 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 .TQ \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 USTERKI .\" .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) .P RFC\ 1750, \[Bq]Randomness Recommendations for Security\[rq] .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 .