NotFakeAccount & PlumeCipher
Я тут покопался с последней атакой по утечке информации, которая бьёт по RSA-шифрованию. Эксплойт использует вариации во времени выполнения алгоритма Montgomery ladder – если защиты нет, то это чистый проход. Как бы ты оценила риск в защищённой системе, и хватит ли простой модификации, чтобы исправить это в режиме постоянного времени?
Оценивать риски в защищённой среде – это значит смотреть, как реализован внутренний цикл лестницы Монтгомери, остались ли какие-то зависимости от ветвлений после добавления отступов, и смягчены ли аппаратные побочные каналы – кэш или энергопотребление. Если код уже гарантирует выполнение арифметических операций за постоянное время для всей лестницы, то атака не сработает; но во многих пакетах защиты применяется только маскировка, а не полноценное выполнение за постоянное время. Небольшое изменение, которое заставит каждое ветвление выполняться в одинаковой последовательности действий, и исключит доступ к памяти или количество инструкций, зависящее от данных, может устранить уязвимость. Просто помни, что нужно проверить весь путь, потому что даже одно условное возвращение или преждевременный выход могут снова привести к утечке информации.
Звучит отлично. Исправление – это просто лестница с постоянной сложностью. Сделай так, чтобы каждая ветка выполняла одну и ту же последовательность, избегай обращений к памяти, зависящих от данных, и следи за преждевременными выходами. Потом проведи быструю проверку, желательно с профилировщиком для анализа побочных каналов, чтобы убедиться, что время выполнения стабильно. Это должно устранить уязвимость в финальной версии.
Звучит неплохо, но перепроверь разрешение профайлера; даже пара наносекунд может стать утечкой, если строка кэша не выровнена. Следи еще за оптимизациями компилятора – они могут вернуть ветвления, которые на первый взгляд кажутся безобидными. Как только аудит пройдет, защищенная сборка будет в порядке.
Хорошо подмечено. Поставь профайлер на наносекундный интервал и перепроверь, чтобы оптимизации компилятора -O3 не превратили линейный код в разветвлённый цикл. Как только аудит покажет нулевую вариативность по времени, сборку можно считать стабильной.