Інтерфейси для виведення ентропії

Для отримання випадкових чисел всередині ядра експортується один інтерфейс

void get_random_bytes(void *buf, int nbytes)

Ця функція зберігає nbyte s випадкових байтів в буфері памяті, на який вказує параметр buf Функція повертає дані, навіть якщо оцінка ентропії дорівнює нулю Для ядра це не так критично, як для користувацьких криптографічних програм Випадкові дані мало використовуються в ядрі, в основному вони потрібні мережевий підсистемі для генерації стартового номера послідовності сегментів при зєднанні по протоколу TCP

Код ядра може виконати наступний код для отримання випадкових даних розміром в одне машинне слово

unsigned long rand

get_random_bytes(&amprand, sizeof(rand))

Для програм, які виконуються в просторі користувача, надається два символьних пристрої: / dev / random та / dev / urandom Перший пристрій,

/ Dev / random, використовується, коли необхідні гарантовано випадкові дані для криптографічних додатків з високим рівнем безпеки Це пристрій видає тільки ту кількість бітів даних, яке відповідає оцінці ентропії в ядрі Коли оцінка ентропії стає рівною нулю, операція читання пристрої / dev / random блокується і не повертає дані, поки значення ентропії не стане істотно позитивним Пристрій / dev / urandom не має останньої можливості, а в іншому працює аналогічно Обидва пристрої повертають дані з одного і того ж пулу

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

,   i                                                                                                                                                                                                                                                                                                                                                

unsigned long get_random(void) (

unsigned long seed = 0

int fd

fd = open(&quot/dev/urandom&quot, O_RDONLY)

if (fd == -1) {

perror(&quotopen&quot)

return 0

}

if (read (fd, &ampseed, sizeof(seed)) &lt 0) {

perror(&quotread&quot)

seed = 0

}

if (close(fd))

perror(&quotclose&quot)

return seed

}

Можна також вважати $ byte s байтів в файл $ file, використовуючи програму del dd if = / dev / urandom of = $ file count = l bs = $ bytes

в

Джерело: Лав, Роберт Розробка ядра Linux, 2-е видання : Пер з англ – М: ТОВ «ІД Вільямс »2006 – 448 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*