2 पॉइंट द्वारा GN⁺ 2024-08-05 | 1 टिप्पणियां | WhatsApp पर शेयर करें

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 टिप्पणियां

 
GN⁺ 2024-08-05
Hacker News राय
  • compiler लिखने वाले optimization की वजह से होने वाले bugs की जिम्मेदारी नहीं लेते

    • language standard के अनुसार ऐसे bugs को programmer की गलती माना जाता है
    • यह इस बात का प्रमाण है कि इसे bug नहीं माना जाता
  • Bernstein की राय से सहमति है, लेकिन कभी-कभी बात गलत दिशा में चली जाती है

    • optimization के फायदे use case के अनुसार अलग होते हैं
    • यह शिकायत है कि C compiler उन semantics पर विचार नहीं करते जिन्हें language में व्यक्त नहीं किया जा सकता
    • इसे इस निष्कर्ष में समेटा जा सकता है: "ऐसी language का उपयोग करो जो जरूरी semantics व्यक्त कर सके"
  • C और C++ constant-time guarantee की जरूरत वाले algorithms लिखने के लिए उपयुक्त नहीं हैं

    • standard में real-time की अवधारणा लगभग नहीं है
    • compiler developers को दोष देना गलत दिशा है
  • Intel CPU पर clang या कोई और भी user mode में सही code generate नहीं कर सकता

    • DOITM को set करना संभव नहीं है
  • इस दावे से सहमति नहीं है कि compiler लिखने वाले bugs की जिम्मेदारी नहीं लेते

    • यह C के बुनियादी "undefined behavior" के बारे में गलतफहमी है
  • clang में clang::optnone attribute है, जिससे function-स्तर पर optimization बंद किया जा सकता है

    • GCC में gnu::optimize attribute है, जिससे optimization level सेट किया जा सकता है
    • clang::no_builtins memcpy और memset optimization को बंद करता है
  • C में undefined behavior बहुत अधिक है, इसलिए किसी दूसरी language पर जाने की संभावना है

    • Python में set object का क्रम महत्वपूर्ण नहीं होता
    • C compiler code patterns का विश्लेषण करके optimization करने की कोशिश करते हैं
    • इससे Hubble telescope की समस्या-सुलझाने जैसी शैली में बेहतर performance मिल सकती है
  • cryptography experts के लक्ष्य से सहमति है, लेकिन general-purpose compilers इसे ध्यान में नहीं रखते

    • specialized compiler की जरूरत पड़ सकती है
  • यह सच है कि कुछ languages और compilers constant-time cryptographic routines लिखने के लिए उपयुक्त नहीं हैं

    • लेकिन यह निष्कर्ष गलत है कि सभी compilers और assembly languages खराब हैं
    • सरल domain-specific compiler और language लिखनी चाहिए
  • एक खास function उदाहरण में SIZE_T_MAX input देने पर undefined behavior होता है

    • ऐसे bugs बहुत हैं, लेकिन व्यवहार में वे महत्वपूर्ण नहीं होते