Компютрите генерират произволен брой за всичко - от криптография до видео игри и хазарт. Има две категории случайни номера - "истински" произволни числа и псевдоандромни номера - и разликата е важна за сигурността на криптиращите системи.
Компютрите могат да генерират истински произволни числа, като наблюдават някои външни данни, като движения на мишката или шум от вентилатори, което не е предвидимо и създава данни от него. Това е известно като ентропия. Други пъти генерират числа "псевдо", използвайки алгоритъм, така че резултатите да изглеждат случайни, въпреки че не са.
Тази тема стана по-спорна напоследък, като много хора поставят под въпрос дали вграденият в Intel чип за генериране на произволни числа за хардуер на Intel е надежден. За да разберете защо е възможно да не бъдете достоверни, ще трябва да разберете как произволно се генерират произволни номера и за какво се използват.
Случайни номера са били използвани от много хиляди години. Независимо дали става дума за преобръщане на монета или за зареждане на зарове, целта е да оставите крайния резултат до случаен шанс. Генераторите на произволни числа в компютъра са подобни - те са опит за постигане на непредсказуем, произволен резултат.
Генераторите на случаен номер са полезни за много различни цели. Освен очевидни приложения като генериране на случайни числа за целите на хазарта или създаване на непредсказуеми резултати в компютърна игра, случайността е важна за криптографията.
Криптографията изисква числа, които атакуващите не могат да отгатнат. Не можем просто да използваме едни и същи числа отново и отново. Искаме да генерираме тези числа по много непредсказуем начин, така че нападателите не могат да ги познаят. Тези произволни номера са от съществено значение за сигурното криптиране, независимо дали шифровате собствени файлове или просто използвате HTTPS уебсайт в Интернет.
Може да се чудите как компютърът може да генерира произволен номер. Откъде идва тази "случайност". Ако това е само част от компютърен код, не е ли възможно числата, генерирани от компютъра, да са предсказуеми?
Обикновено групираме произволните числа, които компютрите генерират в два типа, в зависимост от това как се генерират: "Истинските" произволни числа и псевдо-случайни номера.
За да генерира "истински" произволен номер, компютърът измерва някакъв вид физически феномен, който се извършва извън компютъра. Например, компютърът може да измерва радиоактивното разпадане на атома. Според квантовата теория, няма начин да се знае със сигурност кога ще настъпи радиоактивно разпадане, така че това е по същество "чиста случайност" от Вселената. Атакуващият не би могъл да предвиди кога ще настъпи радиоактивно разпадане, така че те няма да знаят случайната стойност.
За по-ежедневен пример компютърът може да разчита на шума от атмосферата или просто да използва точното време, когато натискате клавишите на клавиатурата си като източник на непредсказуеми данни или ентропия. Например вашият компютър може да забележите, че сте натиснали клавиш точно на 0.23423523 секунди след 14:00 ... Хвани достатъчно от конкретните времена, свързани с тези натискания на клавиши и ще имате източник на ентропия, който можете да използвате, за да генерирате "истински" случайни номер. Не сте предвидима машина, така че нападателят не може да отгатне точния момент, когато натиснете тези клавиши. / Dev / случайното устройство на Linux, което генерира случайни номера, "блокира" и не връща резултат, докато не събере достатъчно ентропия, за да върне истински произволен номер.
Псевдоандърмен номерата са алтернатива на "истинските" произволни номера. Един компютър може да използва стойност на семена и алгоритъм за генериране на числа, които изглеждат случайни, но всъщност са предсказуеми. Компютърът не събира произволни данни от околната среда.
Това не е непременно лошо нещо във всяка ситуация. Ако например играете видеоигра, няма значение дали събитията, които се случват в тази игра, са запълнени от "истински" случайни числа или псевдо-номера. От друга страна, ако използвате криптиране, не искате да използвате псевдо-номера, които хакерът може да познае.
Например, да кажем, че атакуващият знае алгоритъма и стойността на семена, използван от генератора на псевдоспектър. Да предположим, че алгоритъмът на криптиране получава псевдоандърмен номер от този алгоритъм и го използва, за да генерира ключ за шифроване, без да добавя допълнителна случайност. Ако атакуващият знае достатъчно, те биха могли да работят назад и да определят псевдоандромното число, което алгоритъмът на криптиране трябва да е избрал в този случай, нарушавайки кодирането.
За да улеснят разработчиците и да помогнат за генерирането на сигурни произволни числа, Intel чиповете включват хардуерно базиран генератор на произволни числа, известен като RdRand. Този чип използва източник на ентропия на процесора и предоставя произволни номера на софтуера, когато софтуерът ги поиска.
Проблемът тук е, че генераторът на произволни числа е по същество черна кутия и ние не знаем какво се случва вътре в нея. Ако RdRand съдържаше задната вратичка на NSA, правителството би могло да прекъсне криптиращите ключове, генерирани само с данни, доставени от генератора на произволни числа.
Това е сериозна загриженост. През декември 2013 г. разработчиците на FreeBSD премахнаха подкрепата за използването на RdRand директно като източник на случайност, като заявиха, че не могат да се доверят. [Източник] Изходът на устройството RdRand ще бъде захранен в друг алгоритъм, който добавя допълнителна ентропия, като гарантира, че всички задници в генератора на произволни числа няма да имат значение.Linux вече е работил по този начин, по-нататъшно рандомизиране на произволните данни, идващи от RdRand, така че да не е предвидимо дори и да има задната вратичка. [Източник] В неотдавнашен AMA ("Ask Me Anything") на Reddit, главният изпълнителен директор на Intel Брайън Крзанич не отговори на въпроси, свързани с тези опасения. [Източник]
Разбира се, това вероятно не е просто проблем с чиповете на Intel. Разработчиците на FreeBSD нарекоха чиповете на Via по име. Този спор показва, че генерирането на произволни числа, които са наистина случайни и не са предвидими, е толкова важно.
За да се генерират "истински" произволни числа, генераторите на произволни числа събират "ентропия" или привидно случайни данни от физическия свят около тях. За случайни числа, които не го правят наистина ли трябва да бъдат случайни, те просто могат да използват алгоритъм и стойност на семената.
Снимка кредит: rekre89 на Flickr, Лиза Брустър на Flickr, Райън Сома на Flickr, huangjiahui на Flickr