Найти источник энтропии во встроенной системе? - PullRequest
0 голосов
/ 25 июня 2018

Для небольшого встроенного устройства (TI MSP430F2274) я пытаюсь создать генератор псевдослучайных чисел (PRNG), но мне трудно определить потенциальный источник энтропии для использования в качестве начального числа.К сожалению, устройству не хватает доступной памяти, чтобы включить time.h и включить функцию srand(time(0)).Кто-нибудь имел опыт работы с этим семейством устройств или встроил PRNG во встроенное устройство, которое ограничено объемом памяти?Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

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

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

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

В противном случае, как упоминал Клиффорд, вы можете получить энтропию из своего окружения, что, безусловно, лучше, если у вас есть такое окружение.Единственная хорошая вещь в этом (дрейф между источниками тактовых импульсов) состоит в том, что это очень вероятно, доступно для любой установки.

Кстати, вы не можете сделать srand(time(0)), просто откуда вы ожидаете time() чтобы узнать количество секунд с начала эпохи на микроконтроллере?:)

0 голосов
/ 25 июня 2018

Ваша часть (MSP430F2274) не предлагает какого-либо общего решения или поддержки, но ваше приложение может сделать это.Любое непредсказуемое и асинхронное внешнее событие или значение, которое гарантированно произойдет или будет доступно до или в точности, когда вам нужно, может быть использовано.

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

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

Даже без специального сигнала у другого неиспользуемого входного канала АЦП, вероятно, будет достаточно шума, чтобы сделать его младший значащий бит непредсказуемым - вы можете объединить младший бит из ряда независимых выборок для генерации начального числа или требуемой длины.

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

...