Защо /dev/random не работи?
/dev/random е файл на знаково устройство за генериране на случайни числа (символи). Получават се чрез т.нар. шум в обкръжението. Това означава, че в компютъра трябва да настъпват случайни събития. Това звучи доста елементарно на човек без достатъчно ИТ знания, но реално е сложно за една компютърна система. Такави случайни събития могат да бъдат трафик на мрежовата карта и работата с клавиатурата и мишката. Макар и да могат да се предвидят или манипулират до някаква степен честота на натискане на клавишите или на трафика се смятат за такива.
Най-често причината за да “не работи” /dev/random е липсата на случайни събития в система. Проверка може да се осъществи с проверка на entropy pool:
$ cat /proc/sys/kernel/random/entropy_avail
При липса решение може да бъде използването на /dev/urandom. Трябва да се отбележи, че тук се генерират псевдослучайни числа и на теория са възможни криптографски атаки. За сметка на това липсва блокирането при random. От тук идва и името на файла u(nlocked)random.
Скоростта на двата метода може да сравним нагледно по следният начин:
$ hexdump /dev/random,
след което изпълняваме:
$ hexdump /dev/urandom.
Доста добре се вижда как в първият случай случайните числа се генерат сравнително бавно, в замисимост от шума. Споменах вече как може да се генерира такъв. Във втория получаваме незабавно голям брой случайни числа.
Linux е първата операционна система, в която е имплементиран такъв генератор на случайни числа. Във всички останали (*Unix, *BSD, MAC OS, Solaris) към този момент при наличие на /dev/random работи както /dev/urandom в Linux. В почти всички за реализацията се използва Yarrow алгоритъм.
Публикувано на | April 18, 2010 | Към момента няма коментари по публикацията