Constant-time support coming to LLVM: Protecting cryptographic code
Trail of Bits внедрила в LLVM 21 поддержку constant-time кодирования с intrinsics __builtin_ct_select(condition, value_if_true, value_if_false), обеспечивая компиляторные гарантии для криптографического кода против timing-атак от ветвлений. Это барьер для оптимизатора Clang и других LLVM-компиляторов: операция компилируется в машинный код с постоянным временем, независимо от уровня оптимизации.
Компиляторы ломают constant-time функции, добавляя условные переходы — например, в constant_time_lookup по секретному индексу из таблицы из 16 элементов. Исследование Čapkun et al. выявило уязвимости в 19 библиотеках на 5 компиляторах. С intrinsics код безопасен: result |= __builtin_ct_select(cond, table[i], 0u);. Работает на разных архитектурах, RFC августа 2025 поддержан Rust Crypto, BearSSL, PuTTY; бенчмарки показывают минимальный оверхед. Далее: constant-time операции и языки вроде Rust.