Linux manual

random, urandom


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 automaty-
cznie, należy dodać następujące wiersze do stosownych skryptów star-
towych 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 algo-
rytm. 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/ran-
dom. 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)



Czy wiesz że? Jednym z najpopularniejszych programów do bezpośredniej wymiany plików jest winamp. Program dedykowany jest na platformę Windows.