Комп’ютери генерують випадкові числа для всього - від криптографії до відеоігор та азартних ігор. Існує дві категорії випадкових чисел - „справжні” випадкові числа та псевдовипадкові числа - і різниця важлива для безпеки систем шифрування.
Комп’ютери можуть генерувати справді випадкові числа, спостерігаючи деякі зовнішні дані, такі як рухи миші або шум вентилятора, що не можна передбачити, та створюючи дані з них. Це відоме як ентропія. В інших випадках вони генерують “псевдовипадкові” числа за допомогою алгоритму, тому результати виглядають випадковими, навіть якщо вони не є такими.
Ця тема останнім часом стала більш суперечливою, і багато людей сумніваються, чи є надійний вбудований чіп генератора випадкових чисел Intel. Щоб зрозуміти, чому це може не викликати довіри, вам доведеться зрозуміти, як генеруються випадкові числа, і для чого вони використовуються.
Для чого використовуються випадкові числа
Випадкові числа використовувались протягом багатьох тисяч років. Незалежно від того, кидаєте ви монету чи кидаєте кубики, мета - залишити кінцевий результат на випадкові випадки. Генератори випадкових чисел у комп’ютері схожі - вони намагаються досягти непередбачуваного, випадкового результату.
ПОВ'ЯЗАНІ: Що таке шифрування та як воно працює?
Генератори випадкових чисел корисні для багатьох різних цілей. Окрім очевидних додатків, таких як генерація випадкових чисел для азартних ігор або створення непередбачуваних результатів у комп'ютерній грі, випадковість є важливою для криптографії.
Криптографія потрібні цифри, які зловмисники не можуть здогадатися. Ми не можемо просто повторно використовувати однакові числа. Ми хочемо генерувати ці цифри вкрай непередбачувано, щоб зловмисники не могли їх вгадати. Ці випадкові числа необхідні для безпечного шифрування, незалежно від того, чи шифруєте ви власні файли, чи просто використовуєте файл HTTPS веб-сайт в Інтернеті.
Справжні випадкові числа
Можливо, вам цікаво, як комп’ютер насправді може генерувати випадкове число. Звідки ця "випадковість". Якщо це лише шматок комп’ютерного коду, чи не можливо цифри, які генерує комп’ютер, можуть бути передбачуваними?
Зазвичай ми групуємо випадкові числа, які комп’ютери генерують, у два типи, залежно від того, як вони генеруються: „Істинні” випадкові числа та псевдовипадкові числа.
Щоб сформувати „справжнє” випадкове число, комп’ютер вимірює певний тип фізичного явища, яке відбувається поза комп’ютером. Наприклад, комп’ютер міг виміряти радіоактивний розпад атома. Згідно з квантовою теорією, неможливо точно знати, коли відбудеться радіоактивний розпад, тому це, по суті, "чиста випадковість" із Всесвіту. Зловмисник не зможе передбачити, коли відбудеться радіоактивний розпад, тому вони не знатимуть випадкового значення.
Для більш повсякденного прикладу комп'ютер може покладатися на атмосферний шум або просто використовувати точний час натискання клавіш на клавіатурі як джерело непередбачуваних даних або ентропії. Наприклад, ваш комп’ютер може помітити, що ви натиснули клавішу рівно 0,23423523 секунди після 14:00. Візьміть достатньо певного часу, пов’язаного з цими натисканнями клавіш, і у вас буде джерело ентропії, яке можна використовувати для створення „справжнього” випадкового номер. Ви не передбачувана машина, тому зловмисник не може вгадати точний момент, коли ви натискаєте ці клавіші. / dev / випадковий пристрій на Linux , який генерує випадкові числа, "блокує" і не повертає результат, поки не набере достатньо ентропії, щоб повернути справді випадкове число.
Псевдовипадкові числа
Псевдовипадкові числа є альтернативою “справжнім” випадковим числам. Комп’ютер міг би використовувати початкове значення та алгоритм для генерації чисел, які видаються випадковими, але насправді передбачуваними. Комп’ютер не збирає випадкових даних із навколишнього середовища.
Це не обов’язково погано у кожній ситуації. Наприклад, якщо ви граєте у відеоігру, насправді не має значення, чи події, що відбуваються в цій грі, спричинені "справжніми" випадковими числами чи псевдовипадковими числами. З іншого боку, якщо ви використовуєте шифрування, ви не хочете використовувати псевдовипадкові числа, про які зловмисник міг би здогадатися.
Наприклад, скажімо, зловмисник знає алгоритм і початкове значення, яке використовує генератор псевдовипадкових чисел. Припустимо, алгоритм шифрування отримує з цього алгоритму псевдовипадкове число і використовує його для генерації ключа шифрування без додавання додаткової випадковості. Якщо зловмисник знає достатньо, він може працювати назад і визначити псевдовипадкове число, яке в такому випадку повинен був вибрати алгоритм шифрування, порушуючи шифрування.
Апаратний генератор випадкових чисел АНБ та Intel
Щоб полегшити роботу розробникам та допомогти генерувати безпечні випадкові числа, мікросхеми Intel включають апаратний генератор випадкових чисел, відомий як RdRand. Цей чіп використовує ентропійне джерело на процесорі та надає випадкові числа програмному забезпеченню, коли програмне забезпечення запитує їх.
Проблема тут полягає в тому, що генератор випадкових чисел по суті є чорним ящиком, і ми не знаємо, що відбувається всередині нього. Якби RdRand містив задні двері NSA, уряд міг би зламати ключі шифрування, які були сформовані лише з даними, поданими цим генератором випадкових чисел.
Це викликає серйозне занепокоєння. У грудні 2013 року розробники FreeBSD скасували підтримку використання RdRand безпосередньо як джерело випадковості, заявивши, що не можуть йому довіряти. [ Джерело ] Вихід пристрою RdRand буде подано в інший алгоритм, який додає додаткову ентропію, гарантуючи, що будь-які бекдори в генераторі випадкових чисел не матимуть значення. Linux вже працював таким чином, продовжуючи рандомізувати випадкові дані, що надходять від RdRand, так що це не було б передбачуваним, навіть якщо існував бэкдор. [ Джерело ] В нещодавньому AMA (“Запитайте мене про що завгодно”) на Reddit, генеральний директор Intel Брайан Крзаніч не відповів на запитання щодо цих проблем. [ Джерело ]
Звичайно, це, мабуть, проблема не лише в чіпах Intel. Розробники FreeBSD також називали чіпи Via по імені. Ця суперечка показує, чому генерування випадкових чисел, які є справді випадковими і не передбачуваними, є настільки важливим.
Для генерування «справжніх» випадкових чисел генератори випадкових чисел збирають «ентропію» або, здавалося б, випадкові дані з фізичного світу навколо них. Для випадкових чисел, які цього не роблять справді вони повинні бути випадковими, вони можуть просто використовувати алгоритм та значення насіння.
Кредит зображення: rekre89 на Flickr , Ліза Брюстер на Flickr , Райан Сомма на Flickr , Huangjiahuion Flickr