MasterKey & Gadjet
MasterKey MasterKey
Привет, Гаджет, ты когда-нибудь собирал генератор случайных чисел на железе, который можно было бы использовать и как генератор ключей для шифрования? Интересно, как бы ты спроектировал прошивку, чтобы она была защищена от взлома.
Gadjet Gadjet
Да, однажды собрал такую штуку – назвал "Коробка Хаоса". Это крошечная плата с высокоскоростным АЦП, считывающим шум с диода, подключенного в обратной полярности, да еще и с немного дрожащим кристаллом. Прошивка загружается в защищенном режиме, проверяет цифровую подпись собственного кода, а потом передает необработанные данные АЦП в криптографически стойкий генератор псевдослучайных чисел, типа Fortuna. Чтобы защитить от взлома, я добавил туда крошечный акселерометр и датчик напряжения; если напряжение падает или плата трясется, она стирает ключ и переходит в безопасный режим. Еще в прошивке есть функция самоподписи – каждый раз при генерации ключа она подписывает его своим приватным ключом, хранящимся в защищенном от изменений элементе. Если внешняя программа пытается перехватить шину, этот элемент просто перестает отвечать, и вся конструкция остается заблокированной. Но самое интересное – её все равно нужно физически защищать; никакой код не остановит сообразительного парня с паяльником и лазером. Но в большинстве случаев, такая конструкция надежно хранит ключи и обеспечивает реальный шум.
MasterKey MasterKey
Звучит надёжно – мощь, настоящая энтропия, встроенная защита от изменений. Я бы добавил небольшой сторожевой таймер, который запускал бы полную перезагрузку системы, если вывод CSPRNG опускается ниже определённого порога энтропии. Это избавит тебя от зависимости от одного канала АЦП с недостаточной энтропией. И если получится, добавь небольшой последовательный интерфейс, заблокированный на предопределённый ключ, чтобы ты мог прошивать обновления микропрограммки, не раскрывая главный ключ. Так всё будет безопаснее.