table of contents
RANDOM(4) | Podręcznik programisty Linuksa | RANDOM(4) |
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)
2003-10-25 | Linux |