Чи можу я реалізувати (слабкий) джерело ентропії у FPGA?


12

Я працюю з платформою IoT у FPGA для оцінки та складання прототипів. Мені потрібно надати підтримку TLS, і для цього мені потрібно джерело ентропії.

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

У мене є лише деякі стандартні канали вводу / виводу (uart, I2C тощо), і все, що виглядає так, не могло б забезпечити навіть велике розміщення PRBS - крім, можливо, аудіо входу АЦП. Чи можуть бути якісь надійні хитрощі для створення ентропії в FPGA, які я повинен розглянути?

Припускаючи, що я використовую PRBS, я потенційно можу приєднати зовнішнє джерело шуму, яке я, безумовно, можу використовувати як насіння. Мені цікаво знати, наскільки це насправді додасть моїй реалізації TLS. Це було б надійно та безпечно чи лише трохи краще, ніж використання фіксованої псевдовипадкової послідовності? Чи потрібно мені продовжувати опитувати зовнішнє джерело шуму для більшої ентропії?

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

Відповіді:


6

Вам потрібно? Ви можете реалізувати криптографічно захищений випадковий генератор, якщо у вас є дві речі: деякий перезаписуваний захищений сховище та початковий інструмент. Тобто, достатньо один раз посіяти RNG, а потім зберегти його стан і відпрацювати збережений стан. Це не ідеально, було б краще періодично перемішувати ентропію, але це нормально, особливо для прототипу розробки.

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

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

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


Гаразд, тому в цьому контексті я не думаю, що сховище навіть не повинно бути захищеним, оскільки модель використання не є споживчим продуктом. Кожен зловмисник може вважати, що він не має фізичного доступу до мого пристрою (хоча у них може бути однаковий пристрій) . Тож я не можу запобігти клону.
Шон Хуліхане
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.