Принцип роботи та реалізація

Компютери-це передбачувані пристрою Дійсно, важко знайти випадкове поводження в системі, поведінка якої можна практично повністю програмувати Однак навколишнє середовище, де знаходиться машина, сповнена різних шумів, які недетермінірованного і які можна виміряти Джерела таких шумів включають моменти часу, в які виникають події, повязані з апаратними пристроями, а також події, повязані із взаємодією користувачів і компютера Наприклад, інтервали часу між натисканнями клавіш, переміщення миші, інтервали часу між деякими типами переривань і час виконання запиту блочного введення-виведення є недетермінованими, і, крім того, їх не може виміряти зовнішній зловмисник Випадкова інформація, яка виходить з цих подій, записується в пул ентропії Пул зростає і заповнюється випадковими і непередбачуваними шумовими даними У міру додавання даних в пул обчислюється оцінка ентропії, і підсумкове значення запамятовується Це дозволяє завжди мати інформацію про значення ентропії в пулі На рис Б1 показана діаграма проходження потоку ентропії в пул і з пулу

2 Джо н фо н нейм н (28 грудня 1903-8 люті я 1957) працював в Інституті спеціальних досліджень в Прінстон е (Institute for Advanced Study Princeton) Він вніс великий внесок у математичні, економічні та компютерні е науки Серед найбільш значних його розробок теори я ігор, фон-неймановскую алгебри і фон-неймановская проблема вузьких місць

Для доступу до пулу ентропії, як з простору ядра, так і з простору користувача, ядро ​​надає набір інтерфейсів Коли виконується звернення до цих інтерфейсів, ядро спочатку обчислює хеш-значенняSHA даних з пулу Алгоритм SHA (Secure Hash Algorithm, алгоритм обчислення безпечного хешзначенія) – це алгоритм обчислення дайджесту повідомлення (профілю повідомлення, message digest), який був розроблений Агентством національної безпеки (National Security Agency, NSA) і затверджений як федерального стандарту США Національним інститутом стандартів і технологій (NIST) (федеральний стандарт з обробки інформації, FIPS 186) Обчислення дайджесту повідомлення виконується за допомогою спеціального алгоритму, який приймає повідомлення змінного розміру (велике або маленьке) і видає на виході хеш-значення фіксованого розміру (зазвичай розміром 128 або 160 байт) Це фіксоване значення і являє собою дайджест Вхідна повідомлення не може бути реконструйовано за його хеш-значенням Більш того, проста зміна вхідного повідомлення (наприклад, зміна одного символу) призведе до радикальної зміни хеш-значення Алгоритми обчислення дайджестів повідомлень можуть використовуватися по-різному, включаючи перевірку достовірності даних і дактилоскопію Інші алгоритми обчислення дайджестів – це MD4 і MD5 Користувачеві повертається хеш-значення SHA пулу, до вмісту пулу ентропії безпосередньо звертатися не можна Вважається, що за хеш-значенням неможливо отримати ніяку інформацію про стан пулу Тому якщо відомо кілька значень з пулу, то це не дає ніякої інформації про минулих і майбутніх значних Ядро може використовувати оцінку ентропії і відмовитися виконати запит на зчитування даних з пулу, якщо значення ентропії дорівнює нулю У міру того як з пулу зчитуються дані, оцінка ентропії зменшується Це реакція на те, що про пул стає відомо більше інформації

<Простір ядра

Простір користувача ->

При натисканні клавіш

генеруються переривання

        10110001-

Ядро використовує значення інтервалів часу між успішними перериваннями

для заповнення пулу ентропії за допомогою функції add_keyboard_randomness ()

11100101100000110101

01111010101110100010

00100010110101011000

Пул ентропії

1111010000-&gt

Додатки зчитують інформацію з пулу через спеціальні файли

/ Dev / random та / dev / urandom

Рис Б1Проходження ентропії через пул ентропії ядра

Коли значення оцінки ентропії досягає нуля, то ядро ​​все одно може повертати випадкові числа Однак у цьому випадку теоретично зявляється можливість того, що зловмисник зможе передбачити результат виводу Для цього потрібні всі результати виведення з пулу ентропії, а також щоб зловмисник зміг

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

Чому це реалізовано в ядрі

Критерієм того, що будь-яку можливість необхідно реалізувати в ядрі, є складність реалізації цієї можливості в просторі користувача Неприпустимо вводити що-небудь в ядро ​​тільки тому, що ми це можемо зробити Може здатися, що генератору випадкових чисел і пулу ентропії не місце в ядрі Однак існує, принаймні, три причини, за якими вони повинні бути в ядрі По перше, генератору необхідний доступ до системних подіям, таким як переривання і введення даних користувачами Для забезпечення доступу до інформації про ці події з простору користувача необхідно експортувати спеціальні інтерфейси, щоб інформувати простір користувача про те, що ці події відбулися Навіть якщо ці дані будуть експортуватися, то доступ до них буде не простим і не швидким По-друге, генератор випадкових чисел повинен бути безпечним Хоча така система і може виконуватися з правами користувача root, проте ядро ​​є значно безпечнішим місцем для пулу ентропії І нарешті, самому ядру також необхідні випадкові числа Отримувати інформацію про випадкових числах, яка необхідна ядру, з простору користувача – це не практично У звязку з цим генератор випадкових чисел працює в ядрі

Проблема із завантаженням системи

Коли ядро ​​завантажується, воно виконує послідовність дій, які гарантовано можна передбачити Отже, зловмисник може передбачити стан пулу ентропії на етапі завантаження Ще гірше те, що кожна завантаження дуже схожа на всі інші і пул инициализируется при кожному завантаженні в дуже близькі значення Це зменшує точність оцінки ентропії, тому що немає ніякого способу забезпечити, щоб ентропія, яка додається на етапі завантаження, була менш передбачувана, ніж ентропія, яка додається при такій же завантаженні в інший час

Для вирішення проблеми більшість Linux-систем зберігає на диску вміст частини пулу ентропії між перевантаженнями системи При старті системи збережені дані зчитуються і записуються в пул ентропії Завантаження попереднього вмісту пулу в поточний пул дозволяє обійтися без збільшення оцінки ентропії

Таким чином, зловмисник не може передбачити стан пулу ентропії, не знаючи одночасно попереднього та поточного станів системи

Джерело: Лав, Роберт Розробка ядра 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>

*

*