Интерфейсы для вывода энтропии

Интерфейсы для вывода энтропии

Для получения случайных чисел внутри ядра экспортируется один интерфейс.

void get_random_bytes(void *buf, int nbytes);

Эта функция сохраняет nbytes случайных байтов в буфере памяти, на который указывает параметр buf. Функция возвращает данные, даже если оценка энтропии равна нулю. Для ядра это не так критично, как для пользовательских криптографических программ. Случайные данные мало используются в ядре, в основном они нужны сетевой подсистеме для генерации стартового номера последовательности сегментов при соединении по протоколу TCP.

Код ядра может выполнить следующий код для получения случайных данных размером в одно машинное слово.

unsigned long rand;

get_random_bytes(&rand, sizeof(rand));

Для программ, которые выполняются в пространстве пользователя, предоставляется два символьных устройства: /dev/random и /dev/urandom. Первое устройство, /dev/random, используется, когда необходимы гарантированно случайные данные для криптографических приложений с высоким уровнем безопасности. Это устройство выдает только то количество битов данных, которое соответствует оценке энтропии в ядре. Когда оценка энтропии становится равной нулю, операция чтения устройства /dev/random блокируется и не возвращает данные, пока значение энтропии не станет существенно положительным. Устройство /dev/urandom не имеет последней возможности, а в остальном работает аналогично. Оба устройства возвращают данные из одного и того же пула.

Чтение из обоих файлов выполняется очень просто. Ниже показана функция пользовательской программы, которая служит для считывания одного машинного слова случайных данных.

unsigned long get_random(void) {

 unsigned long seed = 0;

 int fd;

 fd = open("/dev/urandom", O_RDONLY);

 if (fd == -1) {

  perror("open");

  return 0;

 }

 if (read(fd, &seed, sizeof(seed)) < 0) {

  perror("read");

  seed = 0;

 }

 if (close(fd))

  perror("close");

 return seed;

}

Можно также считать $bytes байтов в файл $file, используя программу dd.

dd if=/dev/urandom of=$file count=1 bs=$bytes

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

4.3. Интерфейсы

Из книги Самоучитель UML автора Леоненков Александр

4.3. Интерфейсы Интерфейс (interface) служит для спецификации параметров модели, которые видимы извне без указания их внутренней структуры. В языке UML интерфейс является классификатором и характеризует только ограниченную часть поведения моделируемой сущности. Применительно


5.3. Интерфейсы .

Из книги C++ автора Хилл Мюррей

5.3. Интерфейсы . Интерфейсы являются элементами диаграммы вариантов использования и были рассмотрены в главе 4. Однако при построении диаграммы классов отдельные интерфейсы могут уточняться и в этом случае для их изображения используется специальный графический символ


10.2. Интерфейсы

Из книги Сущность технологии СОМ. Библиотека программиста автора Бокс Дональд

10.2. Интерфейсы Следующим элементом диаграммы компонентов являются интерфейсы. Последние уже неоднократно рассматривались ранее, поэтому здесь будут отмечены те их, особенности, которые характерны для представления на диаграммах компонентов. Напомним, что в общем


5.3 Интерфейсы и Реализации

Из книги Как функции, не являющиеся методами, улучшают инкапсуляцию автора Мейерс Скотт

5.3 Интерфейсы и Реализации Что представляет собой хороший класс? Нечто, имеющее нбольшое и хорошо определенное множество действий. Нечто, что можно рассматривать как «черный ящик», которым манипулируют только посредством этого множества действий. Нечто, чье фатическое


7.3 Альтернативные Интерфейсы

Из книги Человеческий фактор в программировании автора Константин Ларри Л

7.3 Альтернативные Интерфейсы После того, как описаны средства языка, которые относяся к производным классам, обсуждение снова может вернуться к стоящим задачам. В классах, которые описываются в этом раздле, основополагающая идея состоит в том, что они однажды нписаны, а


7.3.6 Ограниченные Интерфейсы

Из книги 500 лучших программ для Windows автора Уваров Сергей Сергеевич

7.3.6 Ограниченные Интерфейсы Класс slist – довольно общего характера. Иногда подобная общность не требуется или даже нежелательна. Ограниченные вды списков, такие как стеки и очереди, даже более обычны, чем сам обобщенный список. Такие структуры данных можно задать, не


Интерфейсы и IDL

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Интерфейсы и IDL Определения методов в IDL являются просто аннотированными аналогами С-функций. Определения интерфейсов в IDL требуют расширения по сравнению с С, так как С не имеет встроенной поддержки этого понятия. Определение интерфейса в IDL начинается с ключевого слова


Интерфейсы и упаковка

Из книги Новый ум короля [О компьютерах, мышлении и законах физики] автора Пенроуз Роджер

Интерфейсы и упаковка Herb Sutterr объяснил, что "интерфейс" класса (подразумевая, функциональные возможности, обеспечиваемые классом) включает также внешние функции, связанные с классом. Им также показано, что правила области видимости имен в C++ поддерживают эти изменения


50 Интерфейсы разнообразные

Из книги Как тестируют в Google автора Уиттакер Джеймс

50 Интерфейсы разнообразные Разнообразие не только политически корректно. Оно полезно. Оно полезно в командах, способствуя творческому сотрудничеству, а также на рынке, где слово «разнообразие» стало еще одним заклинанием в лексиконе рекламных агентов и представителей.


Альтернативные интерфейсы

Из книги Разработка ядра Linux автора Лав Роберт

Альтернативные интерфейсы Стандартный интерфейс операционной системы Windows всегда был для сторонних программистов примером неудачного оформления. Невзрачная цветовая гамма и отсутствие каких-либо визуальных эффектов привели к появлению на рынке программного


6.2. Интерфейсы POSIX

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

6.2. Интерфейсы POSIX 6.2.1. Обязательные типы POSIX POSIX описывает некоторые определения типов в заголовочном файле <sys/types.h>, которые используются для многих аргументов и возвращаемых значений. Эти определения типов важны, потому что стандартные типы языка С могут быть разными


Интерфейсы и протоколы

Из книги автора

Интерфейсы и протоколы С описанием интерфейсов и протоколов разработчики Google справляются легко, ведь для этого нужно писать их любимый код. В Google разработали специальный расширяемый язык Protocol Buffer[19] для сериализации структурированных данных. Protobuf — это механизм


Интерфейсы для ввода энтропии

Из книги автора

Интерфейсы для ввода энтропии Ядро экспортирует следующее семейство интерфейсов, которые могут использоваться драйверами и системами для ввода данных в пул энтропии.void add_interrupt_randomness(int irq);void add_keyboard_randomness(unsigned char scancode);void add_mouse_randomness(__u32 mouse_data);Функция add_interrupt_randomness()