컴파일러가 상수 시간 코드를 망가뜨린다, cryptoint로 막아라

The cryptoint library (2025) [pdf]

gcc와 clang의 '최적화'가 상수 시간 C/C++ 코드에 분기를 삽입해 타이밍 취약점을 만든다. Daniel J. Bernstein이 공개한 cryptoint 라이브러리는 crypto_int64_max 같은 함수로 컴파일러가 내부적으로 bool 조건을 도입하지 못하게 막는다. 전역 volatile 0 변수와 플랫폼별 어셈블리를 활용하며, SUPERCOP의 7026줄이 이미 이 함수를 호출한다. 각 함수는 기호 실행과 SMT 솔버로 동등성 검증까지 거친다.

컴파일러가 시간이 지나면서 더 빠른 코드를 생산하도록 진화한다는 생각을 뒷받침하는 것처럼 보이는 데이터 포인트가 있다. 2022년 Kapoulkine은 다양한 벤치마크를 실행한 결론으로 'LLVM 11은 최적화된 코드를 컴파일하는 데 2배 더 오래 걸리는 경향이 있고, 그 결과 10년 이상 된 LLVM 2.7에 비해 10~20% 더 빠르게 실행되는 코드를 생산한다'고 보고했다.

이 날의 다른 글

2026-10-17