Які відмінності між rand () функцією та RNG (генератором випадкових чисел) периферійними?


9

Мені цікаво для периферійних пристроїв RNG (генератора випадкових чисел) в MCU модулів STM32F4XXXX. дивіться цей посібник (стор. 748). З іншого боку, у бібліотеці stdlib у нас є функція rand (), яка виконує те саме завдання. Зараз у мене є два питання:

  1. Які відмінності (перевага та недолік) між функцією rand () та периферійною мережею RNG (генератор випадкових чисел)?
  2. Подивіться на цю частину:

особливості

Поясніть, будь ласка, про ці обидва варіанти (особливо другий варіант).

Відповіді:


12

Відповідь Дейва досить приємно відновити, але щоб уточнити трохи більше щодо другого варіанту:

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

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

У багатьох процесорних / мікроконтролерах із вбудованими RNG використовуються тактові переміщення від 2 до 4 годин, які навмисно неправильно синхронізовані. Потім вони використовують як аналогові, так і цифрові фільтри, щоб ще більше рандомізувати шаблони та зміни результату в регістрі. Для здійснення такої фільтрації потрібно кілька циклів, що пояснює мінімальну кількість циклів, необхідних для заданого годинника, перш ніж з'явиться нове значення.

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

У додатках, де апаратні RNG не мають достатньої потужності (наприклад, у надзвичайно вимогливих криптографічних додатках), досить часто застосовується апаратний RNG як насіння для генератора псевдовипадкових чисел, такого як функція rand () у sdtlib. Однак такі програми зазвичай забезпечують кращу реалізацію rand (), яка спеціально розроблена для запуску із насіння, яке може дуже часто відкидатися з справжніми випадковими значеннями. У новіших процесорах Intel з інтегрованими апаратними RNG частина псевдовипадкових алгоритмів безпосередньо інтегрована в кремній, тому його виконують апаратно, даючи дуже високу випадкову віддачу.

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

Операції, що беруть участь у випадковому числі, досить схожі на операції, що беруть участь у обчисленні хеша MD5 файлу: вони намагаються використовувати своєрідний ефект лавинної лавини, щоб одна зміна бітів у значенні насіння змінила всю форму генерування. Як бічну зауваження, я НЕ рекомендую використовувати MD5 як генератор псевдовипадкових чисел; це був лише приклад. Це було б і неефективно, і не настільки випадково, але справа в тому: якщо ви подаєте один і той же файл в алгоритм хеджування MD5, ви завжди отримаєте той самий детермінований вихід, майже такий самий спосіб, як ви завжди отримували б один і той же результат від функція rand (), якщо ви вводите одне насіння, якщо ваша реалізація не залежить від деяких довільних елементів, таких як поточний час.


7

Ключова відмінність полягає в тому, що rand()функція бібліотеки є генератором псевдовипадкових чисел - враховуючи будь-яке конкретне початкове (початкове) значення, воно завжди створюватиме однакову послідовність чисел.

З іншого боку, периферія RNG - це справжній генератор випадкових чисел, і він буде створювати неповторювані послідовності чисел.


Дякую. і ті обидва варіанти ..?
Рох

2
Що означає "і ті обидва варіанти ..?" означає? Це питання?
Джон U

2

Дві теми, які ви окреслили, можна описати відносно легко:

  • 1: Ви не можете генерувати випадкові числа швидше, ніж один раз кожні 40 тактових циклів, тому це призводить до 48 МГц / 40 = ~ 1 М проба / с
  • 2: Обладнання містить монітор, який перевірятиме кожне створене число на предмет дивної поведінки. Наприклад, якщо ви використовували температуру як джерело і мали високо стабільне температурне середовище, може статися, що RNG знову генерує однакові послідовності чисел (як це зробить генератор псевдовипадкових чисел, якщо ви почнете з тим же значенням насіння) . Компонент буде контролювати це і подавати сигнал, якщо RNG працює так, як очікується. У випадку, якщо вам потрібні ваші номери "справді" випадковими, ви, можливо, захочете відстежити цей прапор, щоб побачити, чи є вони насправді. Наскільки точно це робиться і як реально працює RNG, ймовірно, зазначено в тексті, що залишився.

1

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

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

Якщо після посадки на 4 та 23 наступний оберт - це 4, це не обов'язково вказує на проблему. А 4 повинен з’являтися приблизно в 1/38 часу в цій ситуації. Крім того, отримання випадкових даних повинно просто зафіксувати номер кишені, оскільки нічого корисного не відомо про те, як часто м'яч повинен відпочивати в різних частинах кишені. Тим не менш, для запису чисел може бути корисно також "спостерігати", де в кишені куля зупиняється і спостерігати за будь-якими незвичайними візерунками. Розподіл місць може бути перекошений вперед або назад, не вказуючи на проблему, але якщо в розповсюдженні є вузький сплеск, який може викликати занепокоєння.

Якщо послідовне зчитування від випадкового генератора є статистично незалежним , компенсувати зміщення не складно (хоча необхідний час недетермінований). Якщо, однак, генератор потрапляє в стан, коли показання не є незалежними (наприклад, циклічний стан колеса вгорі), компенсація стає в основному неможливою - таким чином, необхідність у апаратному РНГ включати схеми для виявлення такої поведінки.

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