Оскільки збирання сміття не є детермінованим, чому його не використовують для безпечного генерування випадкових чисел?


13

Я розумію, що / dev / random є хорошим джерелом ентропії, і це те, що зазвичай використовується-- Це так само, як я читаю на GC, принаймні на Java, здається прийнятим, що демон демону сміття виконує недетерміновано . Якщо це правда, чому б ми не використали терміни збору сміття як джерело ентропії замість змінної / dev / random?


7
подивіться на деякі документи для функцій rand () у стандартній C-бібліотеці. Вони спеціально закликають, що, хоча вони дають вам те, що видається випадковими числами, їх не можна використовувати для безпеки. Ваш типовий сміттєзбірник, ймовірно, потрапляв би до тієї ж категорії. Якщо ви збираєтесь використовувати його для захисту, вам потрібно переконатися, що ви використовуєте криптографічно захищений сміттєзбірник.
DXM

15
щось недетерміноване все ще може бути дуже передбачуваним
храповик виродка

7
У цьому випадку "недетермінований" - це поганий опис. Збір сміття - це повністю детермінована система, і якщо ви маєте повне знання про його стан та стан програми, яка його використовує, ви можете детерміновано передбачити результати.
Gort the Robot

4
@DXM Ви знаєте про хорошу реалізацію криптографічно захищеного сміттєзбірника? ;)
AJMansfield

7
"Кожен, хто розглядає арифметичні методи отримання випадкових цифр, перебуває, звичайно, у стані гріха". - Джон фон Нойман
Марк Адлер

Відповіді:


58

"Невизначений" і "випадковий" - це два абсолютно різних поняття.

Точна робота сміттєзбірника не вказується і залежить від сміттєзбірника (як правило, реалізується ВМ сортуванням, але не обов'язково).

Тому у вас немає визначеного (тобто детермінованого) часу, в який буде збиратися сміття.

Однак будь-яка реалізована реалізація буде дотримуватися деяких правил, і є велика ймовірність, що два наступні запуски цієї ж програми матимуть дуже схожі схеми збору сміття.

Тому фактична ентропія, яку надає сміттєзбірник, буде дуже низькою (і дізнатися, які деталі ви насправді можете використовувати як ентропію, буде складним).

Для порівняння: A HashMapв Java не гарантує жодного порядку пошуку для своїх членів (в основному тому, що гарантування того, що це додасть накладні витрати, які не варто платити, більшість часу). Однак для даної реалізації та заданого набору вставок / видалень ви точно можете розрахувати отриманий порядок. Тільки тому, що немає жодної гарантії на якесь замовлення, не означає, що замовлення є випадковим.


20
Я думаю, було б справедливим твердженням сказати, що якщо комп'ютер коли-небудь робить щось, що насправді є недетермінованим, цей комп'ютер зламається.
Schilcote

Недетермінований також може означати, що він покладається на деякий стан, що знаходиться поза цією програмою, яка сама може бути детермінованою, але буде абсолютно не пов'язана з самою програмою, і тому може бути різною щоразу, коли програма запускається.
asmeurer

@asmeurer Я не думаю, що я чув ці терміни в жодному такому контексті. Насправді я навіть не впевнений, що ви маєте на увазі: Кожна програма, яка приймає зовнішній внесок (тобто найбільш корисні програми), "покладається на деякий зовнішній стан", але це не робить його недетермінованим.
us2012

2
@Schilcote: Деякі сучасні процесори мають апаратно недетерміновані (правдиві) RNG. Це справді недетерміновані фізики квантового рівня.
MSalters

2
@Schilcote Навіть без спеціалізованих інструкцій RNG (RDRAND та RDSEED від Intel) комп'ютер не є повністю детермінованим. Деякі терміни не визначені повністю і можуть залежати від зовнішніх факторів, таких як температура.
CodesInChaos

8

По-перше, ми повинні бути обережними, щоб не потрапити в пастку міркувань шляхом маніпулювання простими словами. Наприклад, ми можемо запитати, оскільки NFA - це "недетермінований кінцевий автомат", чому б ми не використали його для отримання випадкових чисел? У цьому випадку це було б тому, що це не те, що означає "недетермінований" в NFA; насправді, коли ми моделюємо NFA, на заданому вході поведінка моделювання є цілком детермінованою.

"Детермінований" - це завантажена фраза. Для комп'ютерного програміста чи вченого-комп’ютера недетермінована поведінка просто означає "визначення точної поведінки складно думати" і залежить від занадто багатьох факторів, включаючи вхід програми.

Однак це не означає, що це не є детермінованим для того, хто мотивований атакувати криптосистему. Іноді фактори навколишнього середовища та ресурси можуть бути виправлені, а повторювані зразки виникають із "недетермінованої" поведінки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.