LLVM에 상수 시간 지원이 도입되어: 컴파일러 수준에... 노트

LLVM에 상수 시간 지원이 도입되어: 컴파일러 수준에서 암호화 코드를 보호합니다

Trail of Bits는 LLVM 21에 대한 상시 코딩 지원을 개발하여, 분기 관련 타이밍 공격으로부터 암호학적 코드를 보호하는 컴파일러 수준의 보증을 제공하고, 최적화 과정에서 공격적인 현대 컴파일러가 의도치 않게 데이터 의존 분기를 도입하는 치명적 취약점을 해결했습니다. 핵심 솔루션은 __builtin_ct_select 내재 구조로, 이는 특수 LLVM 중간 표현(llvm.ct.select.*)으로 변환되어 보안 장벽 역할을 하여 컴파일러 전체에 걸쳐 연산의 상수 속성을 유지하도록 지시합니다. 이 본질적인 코드가 없으면, 룩업 테이블에서 사용되는 것과 같은 정교하게 설계된 상수 시간 코드는 표준 컴파일러 최적화로 깨질 수 있으며, 이 최적화는 추측적 분기를 도입하여 최소한의 사이클 변동으로도 탐지 가능한 타이밍 사이드 채널을 활용할 수 있습니다. 이 연구는 컴파일러가 유발하는 수많은 생산 암호 라이브러리에서 체계적인 상시 보장 실패를 문서화한 "브레이킹 배드"와 같은 연구의 결과를 직접적으로 다룹니다. __builtin_ct_select 내재 기능은 x86-64에서 cmov, AArch64에서 CSEL, 상수 명령어가 없는 플랫폼에서 마스크 연산을 사용하는 등 다양한 아키텍처에서 상시 실행을 보장합니다. 개발자들은 이식 가능하고 안전한 코드를 작성할 수 있습니다. 이러한 변화를 반영하기 위해 광범위한 커뮤니티 참여가 필요했으며, Rust Crypto와 PuTTY 같은 프로젝트들이 복잡한 인라인 어셈블리 우회 방식을 새로운 원시 요소로 대체할 계획이라는 강한 관심을 끌었습니다. 초기 벤치마킹은 성능 오버헤드를 최소화하면서 모든 테스트된 최적화 수준에서 상수 속성을 100% 보존하고 주요 암호 라이브러리와 성공적으로 통합함을 확인했습니다. 향후 계획으로는 분기 없이 전체 표현식을 평가하도록 강제하는 __builtin_ct_expr 같은 추가 내재 지원 확장과 LLVM을 대상으로 하는 Rust, Swift, WebAssembly 같은 언어에서의 채택 지원이 포함됩니다.