उन विकल्पों में से कोई भी विशेष रूप से दूसरों की तुलना में बेहतर या बदतर नहीं है, क्योंकि वे सभी बहुत असुरक्षित हैं। मैं विकल्प 4 के साथ जा रहा हूं।
SRAM कुंजियों को संग्रहीत करने के लिए सबसे सुरक्षित स्थान है, लेकिन आपको उन्हें बाहरी दुनिया से कभी भी इंजेक्ट नहीं करना चाहिए। उन्हें हमेशा बूट के दौरान, प्रोसेसर के भीतर उत्पन्न होना चाहिए। बाकी कुछ भी करना तुरंत बाकी को अमान्य कर देता है - यह स्वचालित रूप से असुरक्षित है।
नॉनवेज मेमोरी में कीज़ को स्टोर न करें, आप इस पर सही हैं। इससे कोई फर्क नहीं पड़ता कि आप EEPROM या फ्लैश मेमोरी को पढ़ने से बचाते हैं। वह कोड रीड प्रोटेक्शन फ्यूज आसानी से उलट जाता है। एक हमलावर को केवल डिकैप (हटाने या रासायनिक रूप से ब्लैक एपॉक्सी पैकेजिंग को हटाने के लिए सिलिकॉन डाई के अंदर बाहर निकालने की आवश्यकता होती है)। इस बिंदु पर, वे मरने के उस हिस्से को कवर कर सकते हैं जो गैर-वाष्पशील मेमोरी सेल है (ये सेक्शन बहुत नियमित हैं और जबकि व्यक्तिगत मेमोरी सेल देखने के लिए बहुत छोटी हैं, बड़ी संरचना हो सकती है) और किसी चीज़ का छोटा टुकड़ा यूवी से अपारदर्शी उस खंड पर नकाबपोश है। फिर हमलावर 5-10 मिनट के लिए चिप पर एक यूवी प्रकाश चमक सकता है, और सीआरपी फ्यूज सहित सभी फ़्यूज़ को रीसेट कर सकता है। OTP मेमोरी को अब किसी भी मानक प्रोग्रामर द्वारा पढ़ा जा सकता है।
या, यदि वे अच्छी तरह से वित्त पोषित हैं (कहते हैं, उन कुंजियों का मूल्य किसी के लिए $ 1000 से अधिक है), तो वे कई प्रकार के इलेक्ट्रॉन माइक्रोस्कोपों के साथ सीधे मेमोरी कोशिकाओं को पढ़ सकते हैं।
सुरक्षित होने के लिए, चाबियाँ मिटनी चाहिए, छिपी नहीं।
- नहीं, उपरोक्त कारणों से।
अब, विकल्प 4 पर:
- बस एन्क्रिप्शन का उपयोग करें। कुंजी वितरण एक हल की गई समस्या है। तो उस आसानी से उपलब्ध समाधान का उपयोग करें। चिप को अपने आरएनजी का उपयोग करना चाहिए और यह सुनिश्चित करने के लिए कि उसे एन्ट्रापी की पर्याप्त आपूर्ति उपलब्ध है, और बूट लोडर को सीधे उस प्रोग्राम में बूट करना चाहिए जो आवश्यक गुप्त कुंजी (ओं) को उत्पन्न करता है, जो सामान्य प्रयोजन में होना चाहिए रजिस्टर और SRAM में सीधे चले गए, जहां वे मिटाए जाने तक रहेंगे।
हालाँकि एक समस्या है, जो यह है कि सीपीयू के अलावा कुछ भी पता नहीं है कि गुप्त कुंजी क्या है। कोई समस्या नहीं: सार्वजनिक कुंजी क्रिप्टोग्राफी का उपयोग करें। आपने ओटीपी मेमोरी में जो भी स्टोर किया है वह आपकी सार्वजनिक कुंजी है। इस कुंजी को किसी के द्वारा पढ़ा जा सकता है, आप इसे स्टैक एक्सचेंज पर पोस्ट कर सकते हैं, आप इसे 5 फुट ऊंचे अक्षरों में एक तेल टैंकर की तरफ से पेंट कर सकते हैं, इससे कोई फर्क नहीं पड़ता। सार्वजनिक कुंजी क्रिप्टोग्राफी के बारे में आश्चर्यजनक बात यह है कि यह असममित है। कुछ को एन्क्रिप्ट करने की कुंजी इसे डिक्रिप्ट नहीं कर सकती है, जिसके लिए निजी कुंजी की आवश्यकता होती है। और इसके विपरीत, सार्वजनिक कुंजी द्वारा एन्क्रिप्ट किए गए कुछ को डिक्रिप्ट करने की कुंजी का उपयोग कुछ एन्क्रिप्ट करने के लिए नहीं किया जा सकता है। इसलिए, CPU गुप्त कुंजी उत्पन्न करता है, गुप्त कुंजी की जांच के लिए अपनी संग्रहीत सार्वजनिक कुंजी का उपयोग करता है, और बस इसे USB या RS232 या जो भी आप चाहते हैं, उस पर भेजता है। गुप्त कुंजी को पढ़ने के लिए आपकी निजी कुंजी की आवश्यकता होती है, जिसे चिप के साथ संग्रहीत, भेजा या कभी भी शामिल नहीं किया जाना चाहिए। एक बार जब आपके पास अपनी निजी कुंजी (चिप के बाहर कहीं और) के साथ गुप्त कुंजी डिक्रिप्ट हो जाती है, तो आप सेट हो जाते हैं। आपके पास एक सुरक्षित रूप से प्रसारित गुप्त कुंजी है जो पूरी तरह से चिप के भीतर उत्पन्न हुई थी, बिना किसी सार्वजनिक कुंजी को छोड़कर कुछ भी संग्रहीत करने के लिए - जो पहले कहा गया था, को पढ़ने से बिल्कुल भी संरक्षित नहीं होना चाहिए।
इस प्रक्रिया को औपचारिक रूप से महत्वपूर्ण बातचीत कहा जाता है, और हर चीज इसका उपयोग करती है। आपने आज कई बार इसका उपयोग किया है। इसे संभालने के लिए कई संसाधन और पुस्तकालय उपलब्ध हैं। कृपया, कभी भी किसी भी चीज़ में 'इंजेक्ट' कीज़ न करें।
एक अंतिम बात का उल्लेख करें: यह सब लूट है क्योंकि एईएस कुंजी को साइड चैनल हमलों का उपयोग करके आसानी से पुनर्प्राप्त किया जा सकता है, जो बिजली की आपूर्ति पर बैठते हैं और वर्तमान ड्रा में मिनट परिवर्तन और सीपीयू में फ़्लिपिंग बिट्स के कारण उन परिवर्तनों के बीच के समय को मापते हैं। रजिस्टर के रूप में। यह, एईएस (या जो संभव एन्क्रिप्शन एल्गोरिदम के बहुत छोटे सेट में से एक का उपयोग किया जा सकता है) के ज्ञान के साथ संयुक्त काम करता है, यह कुंजी को पुनर्प्राप्त करने के लिए अपेक्षाकृत आसान और सस्ता बनाता है। यह कुंजी को पढ़ने की अनुमति नहीं देगा, लेकिन यह महत्वपूर्ण स्थान को हास्यास्पद रूप से छोटा कर सकता है, जैसे 255 संभव कुंजियाँ। चिप भी इसका पता नहीं लगा सकती, क्योंकि यह ऊपर की तरफ है।
इससे AES-256 एन्क्रिप्टेड बूट लोडर को 'सुरक्षित' क्रिप्टो प्रोसेसर पर हराया गया है और यह इतना कठिन भी नहीं है। जहां तक मुझे पता है, इस हमले के लिए कोई सच्चे हार्डवेयर काउंटर उपाय नहीं हैं। हालांकि, यह स्वयं एन्क्रिप्शन एल्गोरिदम है, और कैसे उन्हें बिट्स को फ्लिप करने के लिए सीपीयू की आवश्यकता होती है, जो इस भेद्यता का कारण बन रहा है। मुझे संदेह है कि साइड-चैनल प्रतिरोधी या साइड-चैनल प्रूफ एल्गोरिदम को विकसित किया जाना चाहिए (और उम्मीद है)।
तो जैसा कि यह अभी खड़ा है, एक एम्बेडेड डिवाइस पर कुंजी (या यहां तक कि सिर्फ एक अस्थायी कुंजी का उपयोग करने के लिए) का असली जवाब सुरक्षित रूप से है: आप नहीं कर सकते।
लेकिन कम से कम यदि आप विकल्प 4 में महत्वपूर्ण बातचीत का उपयोग करके हर बार एक नई कुंजी उत्पन्न करते हैं, तो एक साइड चैनल हमला केवल एक इन-उपयोग चैनल की कुंजी से समझौता कर सकता है, और केवल तभी जब उनके पास डेटा की निगरानी करने के लिए थोड़ी देर हो। । यदि आप आंतरिक रूप से उत्पन्न नई चाबियों पर अक्सर बातचीत करते हैं, तो यह सुरक्षा की उपयोगी मात्रा को वहन कर सकता है।
कुंजियाँ बनाएँ, और उन्हें यथासंभव कम समय के लिए संग्रहीत करें।