Clang vs. Clang: Clang को नाराज़ मत कीजिए
- यह Clang पर किए गए एक प्रयोग पर आधारित ब्लॉग पोस्ट है
- compiler optimization से जुड़े हालिया LLVM और GCC बदलावों को देखते हुए इसमें optimization, optimization tests, test fixes और bug fixes शामिल हैं
- compiler लेखक अपने द्वारा लाए गए bugs की ज़िम्मेदारी लेने से बचना चाहते हैं
- compiler optimization वास्तविक performance सुधार में बड़ा योगदान नहीं देता
compiler optimization की समस्याएँ
- optimized compiler से performance बेहतर होने के मामले कम ही होते हैं
- उदाहरण के लिए, kyber768 का avx2 implementation optimized compiler से compile किए गए code की तुलना में 4 गुना तेज़ है
- Todd A. Proebsting के नियम के अनुसार, compiler optimization computing performance में लगभग कोई योगदान नहीं देता
- Arseny Kapoulkine के benchmark नतीजे भी इसी तरह का निष्कर्ष देते हैं
सुरक्षा समस्याएँ
- optimized compiler पारंपरिक bugs के अलावा timing leak जैसी security समस्याएँ भी पैदा कर सकता है
- 2018 के EuroS&P paper के अनुसार, compiler upgrade timing channel खोल सकता है और secure code को vulnerable बना सकता है
- Kyber reference code में Clang 15 या उससे ऊपर के optimization options के साथ compile किए गए code पर सफल timing attack की रिपोर्ट की गई है
TIMECOP टूल
- TIMECOP 2, SUPERCOP cryptography test framework में built-in है और secret से निकली conditional branches को अपने-आप scan करता है
- TIMECOP 1 और TIMECOP 2 का अंतर: TIMECOP 2 अपने-आप RNG output को secret के रूप में mark करता है और multi-core पर चलता है
constant-time code लिखना
- constant-time code लिखने के तरीके पर जुलाई 2024 में एक lecture दिया गया
- libmceliece और SUPERCOP में दिए गए constant-time functions की व्याख्या की गई
- उदाहरण के लिए,
crypto_uint32_bitmod_mask(x,j) function compiler को 1-bit result पहचानने से रोकता है
compiler optimization समस्याओं की रोकथाम
- compiler द्वारा timing leak न डाली जाए, इसका एक तरीका library को assembly language में distribute करना है
- लेकिन assembly language software की correctness का audit करना कठिन बना सकती है
- C, C++ आदि code में timing leak रोकने वाला code तेज़ी से शामिल करने के तरीकों पर काम चल रहा है
clang-vs-clang patch
- LLVM optimization tools के लिए एक patch लिखा गया है जो
&1 और >>31 को scan करके warning message दिखाता है
- उदाहरण के लिए,
x >>= 31 code पर warning message दिखाई देती है
निष्कर्ष
- compiler optimization performance सुधार में बड़ा योगदान नहीं देता और security समस्याएँ पैदा कर सकता है
- TIMECOP जैसे tools का उपयोग करके constant-time code लिखना चाहिए और compiler optimization से जुड़ी समस्याओं को रोकना चाहिए
GN⁺ का सारांश
- यह लेख compiler optimization की समस्याओं और security risks पर चर्चा करता है
- यह ज़ोर देता है कि compiler optimization वास्तविक performance सुधार में बड़ा योगदान नहीं देता और security समस्याएँ पैदा कर सकता है
- TIMECOP tool और constant-time code लिखने के तरीकों का परिचय देकर security समस्याओं की रोकथाम के उपाय बताए गए हैं
- compiler optimization समस्याओं को रोकने के लिए library को assembly language में distribute करने का तरीका भी सुझाया गया है
- इस क्षेत्र की अन्य परियोजनाओं में FaCT और Jasmin जैसे security-focused compilers शामिल हैं
1 टिप्पणियां
Hacker News राय
compiler लिखने वाले optimization की वजह से होने वाले bugs की जिम्मेदारी नहीं लेते
Bernstein की राय से सहमति है, लेकिन कभी-कभी बात गलत दिशा में चली जाती है
C और C++ constant-time guarantee की जरूरत वाले algorithms लिखने के लिए उपयुक्त नहीं हैं
Intel CPU पर clang या कोई और भी user mode में सही code generate नहीं कर सकता
इस दावे से सहमति नहीं है कि compiler लिखने वाले bugs की जिम्मेदारी नहीं लेते
clang में
clang::optnoneattribute है, जिससे function-स्तर पर optimization बंद किया जा सकता हैgnu::optimizeattribute है, जिससे optimization level सेट किया जा सकता हैclang::no_builtinsmemcpy और memset optimization को बंद करता हैC में undefined behavior बहुत अधिक है, इसलिए किसी दूसरी language पर जाने की संभावना है
cryptography experts के लक्ष्य से सहमति है, लेकिन general-purpose compilers इसे ध्यान में नहीं रखते
यह सच है कि कुछ languages और compilers constant-time cryptographic routines लिखने के लिए उपयुक्त नहीं हैं
एक खास function उदाहरण में SIZE_T_MAX input देने पर undefined behavior होता है