Поддержка постоянного времени ... Заметка
RSS Блог "След бит"

Поддержка постоянного времени в LLVM: защита криптографического кода на уровне компилятора

Trail of Bits разработала поддержку кодирования с постоянным временем для LLVM 21, защищая криптографические реализации от атак по времени, предотвращая внесение компиляторами ветвлений. Эта система вводит семейство интринсиков __builtin_ct_select, гарантируя, что операции с постоянным временем остаются безопасными на протяжении всего процесса компиляции. Оптимизация современных компиляторов может непреднамеренно вводить каналы утечки информации по времени, делая криптографический код уязвимым. Интринсик __builtin_ct_select гарантирует, что операция выбора компилируется в машинный код с постоянным временем, действуя как барьер против нежелательных оптимизаций. Это устраняет уязвимости, обнаруженные в рабочих криптографических библиотеках, где компиляторы нарушают гарантии постоянного времени. Участие сообщества, включая отзывы разработчиков Rust Crypto и LLVM, имело решающее значение для разработки этого проекта. Реализация гарантирует, что __builtin_ct_select компилируется в код с постоянным временем на различных архитектурах, включая x86-64, i386, ARM и AArch64. Бенчмаркинг показывает минимальные накладные расходы на производительность и 100% сохранение свойств постоянного времени, с успешной интеграцией в основные криптографические библиотеки. Планы на будущее включают расширение реализации для арифметических операций, операций со строками и выражений, с потенциальным внедрением в Rust, Swift и WebAssembly. Эта работа была выполнена в сотрудничестве с ETH Zürich и при поддержке DARPA.