random

Autres langues

Langue: pl

Autres versions - même langue

Version: 2003-10-25 (fedora - 25/11/07)

Section: 4 (Pilotes et protocoles réseau)

NAZWA

random, urandom - urządzenia źródłowe liczb losowych jądra

OPIS

Specjalne urządzenia znakowe /dev/random i /dev/urandom (obecne w Linuksie od wersji 1.3.30) stanowią interfejs do wbudowanego w jądro generatora liczb losowych. Plik /dev/random ma główny numer urządzenia 1 i poboczny numer 8. Plik /dev/urandom ma główny numer urządzenia 1 i poboczny numer 9.

Generator liczb losowych zbiera szum środowiskowy ze sterowników urządzeń i innych źródeł do puli losowej. Generator przechowuje również szacunkową liczbę bitów szumu w puli losowej. Z owej puli tworzone są liczby losowe.

W trakcie odczytu, urządzenie /dev/random będzie zwracać losowe bajty, spośród oszacowanej liczby bitów szumu w puli. /dev/random nadaje się najlepiej do zastosowań, w których potrzebna jest losowość bardzo wysokiej jakości, jak np. jednorazowa maska lub generowanie kluczy. Jeśli pula losowa jest pusta, odczyt z /dev/random będzie wstrzymany do czasu zebrania dodatkowego szumu środowiskowego.

Odczyt z urządzenia /dev/urandom zwróci tyle bajtów, ile zażądano. W efekcie, jeśli nie ma wystarczającego chaosu w puli losowej, zwracane wartości są teoretycznie narażone na atak kryptograficzny w stosunku do algorytmów wykorzystywanych przez sterownik. Wiedza na ten temat nie jest dostępna w obecnych nie zastrzeżonych publikacjach, ale istnieje teoretyczna możliwość przeprowadzenia takiego ataku. Jeśli jest to problemem w przypadku twojego programu, użyj /dev/random.

KONFIGURACJA

Jeśli w systemie nie ma plików /dev/random i /dev/urandom, można je utworzyć przy użyciu następujących poleceń:
         mknod -m 644 /dev/random c 1 8
         mknod -m 644 /dev/urandom c 1 9
         chown root:root /dev/random /dev/urandom
 

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ć następujące wiersze do stosownych skryptów startowych Linuksa:

         echo "Inicjowanie generatora liczb losowych w jądrze..."
         random_seed=/var/run/random-seed
         # Przechowanie wartości losowej od jednego startu systemu
         # do kolejnego startu. Ładujemy, a potem zachowujemy całą
         # pulę losową.
         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 ] && bytes=`cat $poolfile` || bytes=512
         dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
 

Trzeba również dodać następujące wiersze do stosownego skryptu uruchamianego podczas zamykania systemu Linuksa:

         # Przechowanie losowych danych pomiędzy wyłączeniem a wyłą-
         # czeniem komputera. Zachowywanie puli losowej generatora.
         echo "Zachowywanie danych losowych..."
         random_seed=/var/run/random-seed
         touch $random_seed
         chmod 600 $random_seed
         poolfile=/proc/sys/kernel/random/poolsize
         [ -r $poolfile ] && bytes=`cat $poolfile` || bytes=512
         dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
 

INTERFEJS PROC

Pliki w katalogu /proc/sys/kernel/random (obecnym od wersji 2.3.16) są dodatkowym intefejsem do urządzenia /dev/random.

Plik z prawami tylko do odczytu entropy_avail dostarcza dostępną pulę losową. Zazwyczaj będzie to 4096 (bitów), całość dostępnej puli.

Plik poolsize podaje rozmiar puli losowej. Zazwyczaj - 512 (bajtów). Może być zmienione na dowolną wartość, dla której dostępny jest algorytm. Obecnie możliwe wartości to: 32, 64, 128, 256, 512, 1024, 2048.

Plik read_wakeup_threshold zawiera liczbę bitów entropii potrzebnej do obudzenia procesu, który zasnął, czekając na entropię z pliku /dev/random. Domyślnie - 64. Plik write_wakeup_threshold zawiera liczbę bitów entropii poniżej której zostanie uśpiony proces, który wykona select() lub poll(), aby otworzyć do zapisu urządzenie /dev/random. Wartości te mogą być zmienione przez zapis do tych plików.

Pliki tylko do odczytu uuid i boot_id 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.

PLIKI

/dev/random
/dev/urandom

AUTOR

Generator liczb losowych w jądrze został napisany przez Theodore'a Ts'o (tytso@athena.mit.edu).

ZOBACZ TAKŻE

mknod (1)
RFC 1750, "Randomness Recommendations for Security" (Zalecenia dotyczące bezpieczeństwa losowości)