Это зависит от:
- Какую степень уникальности вы хотите?
- Есть ли энергонезависимая память?
- Как скоро вам нужен ответ?
Если у вас есть флэш / NVRAM / диск, прочитайте случайное начальное число, увеличьте его и запишите обратно.Начальное число может быть простым счетчиком, если вам не требуется уникальность между устройствами / перепрошивкой / разрядкой батареи NVRAM.Если вы хотите уникальности, то, собрав «достаточную» энтропию, перепишите начальное число.
(Очевидно, вы можете захотеть сделать что-то еще, если используете вспышку, а ваш контроллер вспышки не изнашиваетсяВыровняйте или примените собственное выравнивание износа.)
Если вы этого не сделаете, то соберите энтропию из всех возможных источников, и генерируйте UUID только после того, как у вас будет достаточно энтропии , Zvi Gutterman (2006) отмечает, что единственным источником энтропии OpenWRT является доступ к сети, который легко наблюдать.
Использование вывода АЦП представляется разумным, с некоторыми простыми рекомендациями:
- Используйте все биты (или, по крайней мере, больше битов, чем ваша оценка энтропии), но увеличивайте свою оценку энтропии консервативно.
- Выход АЦП имеет нулевую энтропию при обрезании (и, возможно, низкую энтопию, когда почти обрезается).
Измерьте количество шума на входе.Я подозреваю, что вы получите по крайней мере один бит за образец.Затем хэшируйте свои биты и генерируйте UUID версии 4.