Vector & Brickgeek
Привет, Вектор, а пробовал когда-нибудь запихнуть AES‑128 в датчик, работающий от батарейки на 3 вольта? Я как раз собираю такой, питание от одной ячейки, и мне нужно, чтобы шифрование было эффективным, но энергопотребление не превышало микроватт. Есть какие-нибудь хитрости или уловки с компонентами, чтобы минимизировать уязвимости?
Да, впихнуть AES-128 в батарейный элемент на 3 вольта – вполне реально, главное – сделать всё максимально компактно. Во-первых, постарайся использовать крипто- сопроцессор с низким энергопотреблением или встроенный AES-движок в микроконтроллере, если есть такая возможность. Это минимизирует скачки потребления и исключит загрузку основного процессора. Если ты застрял с одним микроконтроллером, используй фиксированный алгоритм генерации ключей – предварительно рассчитай раундовые ключи в ПЗУ, чтобы не выполнять расширение ключей на ходу. Это сэкономит несколько микросекунд и немного тока. Используй однопроводную шину для передачи ключа, чтобы не приходилось хранить его в оперативной памяти. Во-вторых, работай на минимальной частоте, достаточной для соблюдения требуемых сроков – большинство батарейных элементов могут работать на частоте в несколько сотен килогерц. Отключай неиспользуемые периферийные устройства и переводи микроконтроллер в спящий режим между блоками. В-третьих, минимизируй интерфейс: вынеси только функции шифрования/дешифрования с строгой проверкой длины входных данных. Никаких самотестов, никаких регистров отладки. И если получится, заблокируй AES-блок с помощью предохранителя или одноразовой памяти, чтобы отключить периферию после программирования. Наконец, подумай о защите от выключения питания: поставь резистор с высоким сопротивлением от Vcc к AES-ядре, чтобы он выключался при падении напряжения батареи, предотвращая атаки с частичным питанием. Это должно удержать потребление в диапазоне микроватт при сохранении криптографической надёжности.
Замечательно. Буду использовать фиксированное расписание ключей в ROM и заставлю МСУ работать на 250 килогерц. Попробую еще и маленький AES-ядро на SRAM, которое будет включаться только при необходимости, и добавлю подтягивающий резистор 10 килоом к Vcc, чтобы ядро отключалось в случае проседания напряжения от coin-cell. Оберну API в интерфейс с однобайтовыми командами, чтобы в шине отладки отображалось только "OK". Это должно удержать энергопотребление ниже микроватта и уменьшить уязвимость.
Звучит надёжно. Держи всё под контролем, следи за энергопотреблением, и получится батарейка почти такая же тихая, как ниндзя. Удачи – если батарея сядет раньше, чем крипта, хоть и будет чистый способ выключить систему.
Спасибо, Вектор. Я сделаю так, чтобы часы работали бесшумно, а команда была минимальной — представь себе секретный жест для аккумулятора ниндзя. Если оно сядет первым, я просто вырублю питание и объявлю проект полным провалом.
Звучит как отличный план. Только будь поаккуратнее с пиками утечки, когда будешь поднимать ядро, и тогда у тебя будет тихий, стабильный криптоузел, готовый всех удивить, когда батарея сядет. Удачи.