Могу ли я реализовать (слабый) источник энтропии в ПЛИС?

12

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

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

У меня есть только несколько стандартных каналов ввода / вывода (uart, I2C и т. Д.), И ничто из того, на что это похоже, не может дать даже много для создания PRBS - кроме, может быть, аудио входа АЦП. Есть ли какие-нибудь надежные приемы для создания энтропии в FPGA, которые я должен рассмотреть?

Предполагая, что я использую PRBS, я могу потенциально подключить внешний источник шума, который я, безусловно, мог бы использовать в качестве начального числа. Мне интересно знать, сколько это на самом деле добавит к моей реализации TLS. Будет ли это надежно и безопасно, или только немного лучше, чем использование фиксированной псевдослучайной последовательности? Нужно ли продолжать опрос внешнего источника шума для большей энтропии?

Это нормально, если источник энтропии, с которым я в итоге работаю, не является должным образом криптобезопасным (так как это только для прототипирования), но я хотел бы понять соотношение цены и качества.

Шон Хулихейн
источник

Ответы:

6

Тебе нужно? Вы можете реализовать криптографически безопасный генератор случайных чисел, если у вас есть две вещи: некоторое перезаписываемое безопасное хранилище и начальное начальное число. То есть достаточно один раз заполнить ГСЧ, а затем сохранить его состояние и отработать сохраненное состояние. Это не идеально, лучше периодически смешивать энтропию, но это нормально, особенно для прототипа разработки.

Вам нужно иметь перезаписываемое безопасное хранилище. Если устройство имеет только ПЗУ и незащищенное хранилище, такой подход невозможен. Должно быть место, где вы можете хранить состояние ГСЧ таким образом, чтобы ваши противники не могли ни прочитать, ни изменить его.

Это работает, когда устройство загружается, оно загружает текущее состояние RNG и использует его для генерации нескольких случайных байтов, в два раза превышающих размер состояния RNG. Запишите первую половину как новое сохраненное состояние ГСЧ и используйте вторую половину в качестве исходного состояния ГСЧ для текущего сеанса. Для любого криптографически безопасного PRNG это дает криптографически безопасный PRNG. Обратите внимание, что крайне важно, чтобы вы не использовали повторно сохраненное состояние RNG, поэтому вы должны написать новое независимое состояние RNG, прежде чем начать использовать RNG.

Начальное введение энтропии может произойти во время производства или при настройке устройства. Обычно это происходит при подключении к ПК, который может генерировать энтропию от имени устройства.

Жиль "ТАК - прекрати быть злым"
источник
Хорошо, поэтому в этом контексте я не думаю, что хранилище даже должно быть безопасным, учитывая, что модель использования не является потребительским продуктом. Можно предположить, что любой злоумышленник не имеет физического доступа к моему устройству (хотя у него может быть идентичное устройство) , Так что я не могу предотвратить клон.
Шон