डेवलपर टूल · SHA हैश कैलकुलेटर
प्रमाणपत्र और SSH फ़िंगरप्रिंट: SHA-256 सार्वजनिक कुंजी की पहचान कैसे करता है
· पेजभूमि
शा-256 क्रिप्टोग्राफी सुरक्षा
फ़िंगरप्रिंट किसी प्रमाणपत्र या कुंजी का हैश होता है, जो ज़ोर से पढ़ने के लिए पर्याप्त छोटा होता है। यह पोस्ट बताती है कि TLS और SSH फ़िंगरप्रिंट की गणना कैसे की जाती है, SHA-1 फ़िंगरप्रिंट को क्यों बदला जा रहा है, और मिलान क्या साबित करता है।
होस्ट कुंजी संकेत जिसे आप हमेशा स्वीकार करते हैं - SHA256: लाइन आपसे तुलना करने के लिए क्या कह रही है
जब आप पहली बार SSH के माध्यम से किसी सर्वर से कनेक्ट होते हैं, तो आपको एक संकेत दिखाई देता है जिसमें पूछा जाता है कि होस्ट कुंजी स्वीकार करनी है या नहीं। प्रॉम्प्ट एक फ़िंगरप्रिंट प्रदर्शित करता है: `SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8` या समान। यह फिंगरप्रिंट सर्वर की सार्वजनिक कुंजी का हैश है। आपसे आउट-ऑफ़-बैंड (SSH प्रोटोकॉल के बाहर) सत्यापित करने के लिए कहा जा रहा है कि आप इस कुंजी को पहचानते हैं। प्रॉम्प्ट आमतौर पर कुंजी प्रकार (RSA, ED25519, ECDSA) और फ़िंगरप्रिंट प्रारूप भी दिखाता है। यदि आपने पहले किसी विश्वसनीय चैनल के माध्यम से इस कुंजी का फ़िंगरप्रिंट देखा है, तो आप आत्मविश्वास से "हाँ" टाइप कर सकते हैं। यदि नहीं, तो स्वीकार करने का अर्थ है सही कुंजी देने के लिए नेटवर्क पर भरोसा करना।
फ़िंगरप्रिंट केवल एन्कोडेड कुंजी पर लागू क्रिप्टोग्राफ़िक हैश फ़ंक्शन का आउटपुट है। SSH के लिए, कुंजी को बाइनरी ब्लॉब (ओपनएसएसएच वायर प्रारूप) के रूप में एन्कोड किया गया है, और हैश की गणना उस ब्लॉब पर की जाती है। फ़िंगरप्रिंट पूर्ण कुंजी से छोटा है, जो इसे पढ़ने योग्य और टाइप करने योग्य बनाता है। एक ही फिंगरप्रिंट हमेशा एक ही कुंजी से निकलेगा, इसलिए आप कई स्थानों या चैनलों में प्रकाशित फिंगरप्रिंट की तुलना कर सकते हैं।
फ़िंगरप्रिंट एन्कोडिंग के हैश के बराबर है - DER प्रमाणपत्र या इनपुट के रूप में सार्वजनिक कुंजी ब्लॉब
SSH होस्ट कुंजियाँ और TLS प्रमाणपत्र अलग-अलग तरीके से एन्कोड किए गए हैं, लेकिन फ़िंगरप्रिंटिंग सिद्धांत समान है। SSH के लिए, फ़िंगरप्रिंट की गणना सार्वजनिक कुंजी सामग्री से की जाती है। TLS प्रमाणपत्रों के लिए, फ़िंगरप्रिंट की गणना संपूर्ण प्रमाणपत्र (जारीकर्ता, वैधता दिनांक और अन्य फ़ील्ड सहित) से की जाती है। जब आप किसी वेब सर्वर से कनेक्ट होते हैं, तो ब्राउज़र आपको प्रमाणपत्र फ़िंगरप्रिंट प्रदर्शित नहीं करता है, क्योंकि TLS एक अलग ट्रस्ट मॉडल का उपयोग करता है: ब्राउज़र प्रमाणपत्र प्राधिकारियों (CA) के एक सेट पर भरोसा करता है जो पहले से स्थापित हैं, और वे CA प्रमाणपत्र की गारंटी देते हैं। SSH किसी पूर्व-स्थापित CA का उपयोग नहीं करता; इसके बजाय, आप विशिष्ट कुंजियों पर भरोसा करते हैं और उन्हें स्थानीय रूप से `~/.ssh/known_hosts` में संग्रहीत करते हैं।
क्योंकि फ़िंगरप्रिंट में TLS के लिए संपूर्ण प्रमाणपत्र बाइट्स शामिल हैं, पुन: हस्ताक्षर किए बिना वैधता तिथियों को बदलने से एक अलग फ़िंगरप्रिंट उत्पन्न होता है। SSH के लिए, फ़िंगरप्रिंट केवल सार्वजनिक कुंजी का है, इसलिए जब तक कुंजी नहीं बदली जाती तब तक फ़िंगरप्रिंट स्थिर रहता है।
यह कैलकुलेटर SHA-1 और SHA-256 लंबाई प्रदर्शित करता है; फ़िंगरप्रिंट-नीति अनुशंसाओं के लिए प्रोटोकॉल स्रोतों की आवश्यकता होती है
ऐतिहासिक रूप से, SSH फ़िंगरप्रिंट MD5 हेक्साडेसिमल में प्रदर्शित किए गए थे। MD5 क्रिप्टोग्राफ़िक रूप से टूटा हुआ है और टकराव व्यावहारिक हैं। सुरक्षा समुदाय डिफ़ॉल्ट के रूप में SHA-256 फ़िंगरप्रिंट पर चला गया। आप अभी भी अपने SSH क्लाइंट द्वारा प्रदर्शित दोनों प्रारूप देख सकते हैं: `SHA256: base64` और `MD5: hex`। पहचान सत्यापन के लिए SHA-256 फ़िंगरप्रिंट पर भरोसा किया जा सकता है। यदि आप दोनों देखते हैं, तो SHA-256 संस्करण की तुलना किसी विश्वसनीय स्रोत (सर्वर की वेबसाइट, व्यवस्थापक से हस्ताक्षरित ईमेल, आंतरिक विकी) से प्राप्त फिंगरप्रिंट से करें। MD5 फ़िंगरप्रिंट कम विश्वसनीय है क्योंकि MD5 टकराव मौजूद हैं।
फ़िंगरप्रिंट प्रारूप में परिवर्तन क्रिप्टोग्राफ़िक संक्रमण का एक दृश्य संकेत है। पुराने OpenSSH संस्करण केवल MD5 दिखाते थे। आधुनिक संस्करण डिफ़ॉल्ट रूप से SHA-256 दिखाते हैं। कमांड `ssh-keygen -l -f /path/to/key` ssh-keygen के आपके संस्करण के लिए कुंजी के फ़िंगरप्रिंट को डिफ़ॉल्ट प्रारूप में प्रदर्शित करता है; आप `-E` ध्वज के साथ एक विशिष्ट प्रारूप को बाध्य कर सकते हैं (उदाहरण के लिए, `-E sha256` या `-E md5`)।
SSH का आधार64 SHA256: प्रारूप - एन्कोडिंग परिवर्तन जिसने उंगलियों के निशान को हेक्स से छोटा बना दिया
SSH Base64 फ़िंगरप्रिंट एक भिन्न प्रारूप का उपयोग करते हैं: वे एल्गोरिथम नाम और एक कोलन के साथ उपसर्गित होते हैं, उदाहरण के लिए, `SHA256:base64string`। यह उपसंसाधन अखंडता (SRI) प्रारूप से भिन्न है, जो एक हाइफ़न का उपयोग करता है और केवल मानक Base64 शामिल करता है। SSH प्रारूप में एक लेबल शामिल है जो यह स्पष्ट करता है कि किस एल्गोरिदम ने डाइजेस्ट तैयार किया है। जब आप SSH आउटपुट में फ़िंगरप्रिंट देखते हैं, तो एल्गोरिदम हमेशा दिखाया जाता है। जब आप SRI अखंडता विशेषता देखते हैं, तो एल्गोरिदम को एक हाइफ़न के साथ उपसर्ग के रूप में एन्कोड किया जाता है।
ToolAcre SHA हैश कैलकुलेटर से Base64 आउटपुट मानक रूप है; SSH फ़िंगरप्रिंट से मिलान करने के लिए, `SHA256: ` (एल्गोरिदम नाम, कोलन और स्पेस) पहले जोड़ें। कैलकुलेटर से हेक्स फॉर्म SSH डिस्प्ले वाला फॉर्म नहीं है, हालांकि यह उसी डाइजेस्ट का प्रतिनिधित्व करता है और सत्यापन उद्देश्यों के लिए समान रूप से मान्य है।
एक मिलान क्या साबित करता है - कि आपके पास वही कुंजी बाइट्स हैं जो दूसरी तरफ प्रकाशित हैं, और आउट-ऑफ-बैंड जांच के बिना कुंजी के मालिक के बारे में कुछ भी नहीं पता है
फ़िंगरप्रिंट मिलान दो बातें साबित करता है: पहला, कि आपके पास वही कुंजी बाइट्स हैं जो दूसरी ओर प्रकाशित हुई हैं, और दूसरा, कि डाइजेस्ट की गणना के बाद से न तो कुंजी और न ही फ़िंगरप्रिंट में कोई बदलाव किया गया है। यह कुंजी के मालिक की पहचान साबित नहीं करता है या किसी विशिष्ट कार्रवाई को अधिकृत नहीं करता है। किसी कुंजी पर भरोसा करने के लिए फ़िंगरप्रिंट आउट-ऑफ़-बैंड सत्यापित करना एक आवश्यक लेकिन पर्याप्त शर्त नहीं है। आपको यह भी सत्यापित करना होगा कि फिंगरप्रिंट प्रकाशित करने वाला व्यक्ति वही है जिसके होने का वे दावा करते हैं।
व्यवहार में, यदि कोई व्यवस्थापक कंपनी के इंट्रानेट पर या हस्ताक्षरित ईमेल में सर्वर का SSH फिंगरप्रिंट प्रकाशित करता है, तो आप सत्यापित कर सकते हैं कि यह कनेक्ट होने पर आपको प्राप्त संकेत से मेल खाता है। यदि फ़िंगरप्रिंट मेल नहीं खाता है, तो आप विश्वासपूर्वक कनेक्शन को अस्वीकार कर सकते हैं क्योंकि कोई आपके ट्रैफ़िक को रोक रहा है या सर्वर कुंजी बदल गई है। यदि फ़िंगरप्रिंट मेल खाता है, तो आप जानते हैं कि आपके पास सही कुंजी है। क्या वह कुंजी सही सर्वर से संबंधित है, यह एक अलग प्रश्न है - जिसका उत्तर आप प्रकाशन चैनल को सत्यापित करके दे सकते हैं (क्या इंट्रानेट पेज वैध दिखता है? क्या ईमेल वास्तव में उस व्यवस्थापक के खाते से है?)।
कारगर उदाहरण - किसी विश्वसनीय चैनल के माध्यम से प्रकाशित किसी फिंगरप्रिंट के विरुद्ध चरण दर चरण सत्यापन करना
प्रमाणपत्र फ़िंगरप्रिंट एक ही उद्देश्य को पूरा करता है: यह विशिष्ट प्रमाणपत्र को विशिष्ट रूप से पहचानता है। यदि TLS सर्वर अपना प्रमाणपत्र बदलता है (उदाहरण के लिए, नवीनीकरण के दौरान), तो नए प्रमाणपत्र में एक अलग फिंगरप्रिंट होता है। सर्टिफिकेट पिनिंग - किCAप्लिकेशन में फिंगरप्रिंट या स्वीकार्य फिंगरप्रिंट के एक छोटे सेट को हार्डकोड करना - प्रमाणपत्र परिवर्तनों का पता लगाने के लिए एक सुरक्षा तकनीक है। यदि सर्वर भिन्न फ़िंगरप्रिंट के साथ प्रमाणपत्र प्रस्तुत करता है, तो एप्लिकेशन उसे अस्वीकार कर देता है। यह एक समझौता किए गए CA द्वारा धोखाधड़ी प्रमाणपत्र जारी करने से बचाता है जिस पर ब्राउज़र अन्यथा भरोसा करेगा।
प्रमाणपत्र पिनिंग के लिए सावधानीपूर्वक प्रबंधन की आवश्यकता होती है: यदि सर्वर अपने प्रमाणपत्र को अद्यतन करता है और आपने इसकी आशा नहीं की है, तो आपका आवेदन वैध नए प्रमाणपत्र को अस्वीकार कर देगा। कई एप्लिकेशन इसके बजाय सार्वजनिक-कुंजी पिनिंग का उपयोग करते हैं, जो संपूर्ण प्रमाणपत्र के बजाय सार्वजनिक कुंजी को पिन करता है। यह बिना अस्वीकृति के प्रमाणपत्र नवीनीकरण की अनुमति देता है जब तक कि एक ही कुंजी का उपयोग किया जाता है।
कारगर उदाहरण: प्रोटोकॉल-जागरूक टूल से सत्यापित करें क्योंकि ToolAcre हैश ने UTF-8 टेक्स्ट चिपकाया है, DER या SSH वायर बाइट्स नहीं
सत्यापन के लिए मैन्युअल रूप से फ़िंगरप्रिंट की गणना करना सीधा है। प्रमाणपत्र या कुंजी को किसी फ़ाइल में सहेजें, फ़िंगरप्रिंट प्रदर्शित करने के लिए `openssl dgst -sha256 filename` या `ssh-keygen -l -f filename -E sha256` का उपयोग करें, और सर्वर द्वारा आपको दिखाए गए से तुलना करें। यदि आप कुंजी बाइट्स पेस्ट करते हैं तो ToolAcre SHA हैश कैलकुलेटर भी डाइजेस्ट की गणना कर सकता है, लेकिन याद रखें कि कैलकुलेटर आपके द्वारा पेस्ट किए गए UTF-8 टेक्स्ट को हैश करता है, बाइनरी फ़ाइलों को नहीं। यदि कुंजी PEM प्रारूप में है (`-----BEGIN CERTIFICATE-----` हेडर और Base64-एन्कोडेड बाइट्स वाला टेक्स्ट), तो आप इसे कैलकुलेटर में पेस्ट कर सकते हैं। यदि यह DER प्रारूप (बाइनरी) में है, तो आपको पहले कमांड-लाइन टूल का उपयोग करना होगा या PEM में कन्वर्ट करना होगा।
सीमा महत्वपूर्ण है: ToolAcre हैश UTF-8 टेक्स्ट जिसे आप कैलकुलेटर इंटरफ़ेस में पेस्ट करते हैं। यह आपके डिवाइस से फ़ाइलें नहीं पढ़ता है (सारी गणना ब्राउज़र में, आपके टैब में, बिना किसी नेटवर्क के होती है)। यदि आपके पास डिस्क पर एक कुंजी फ़ाइल है, तो आप इसे टेक्स्ट एडिटर में खोल सकते हैं, टेक्स्ट की प्रतिलिपि बना सकते हैं और कैलकुलेटर में पेस्ट कर सकते हैं यदि यह PEM प्रारूप में है। या आप स्थानीय रूप से हैश की गणना करने के लिए `openssl`, `ssh-keygen` या `sha256sum` जैसे कमांड-लाइन टूल का उपयोग कर सकते हैं।
टेकअवे: बैंड से बाहर उंगलियों के निशान की तुलना करें - ToolAcre SHA हैश कैलकुलेटर दिखाता है कि SHA-1 और SHA-256 डाइजेस्ट उंगलियों के निशान की लंबाई पर कैसे दिखते हैं
ToolAcre SHA हैश कैलकुलेटर किसी भी टेक्स्ट इनपुट के लिए SHA-1 और SHA-256 डाइजेस्ट प्रदर्शित करता है। यदि आप किसी प्रमाणपत्र को PEM प्रारूप या SSH सार्वजनिक कुंजी में चिपकाते हैं, तो कैलकुलेटर दोनों डाइजेस्ट की गणना करता है। SSH कुंजियों के लिए, कैलकुलेटर आपके द्वारा चिपकाए गए टेक्स्ट को हैश कर देगा; यदि आप मानक Base64-एनकोडेड SSH सार्वजनिक कुंजी प्रारूप पेस्ट करते हैं, तो डाइजेस्ट SSH फिंगरप्रिंट से मेल नहीं खाएगा क्योंकि SSH हैशिंग से पहले अपना स्वयं का स्वरूपण (वायर प्रारूप) लागू करता है। सीधे मिलान के लिए, आपको आंतरिक रूप से उपयोग किए जाने वाले सटीक प्रारूप SSH में कुंजी की आवश्यकता है, जो सार्वजनिक प्रदर्शन प्रारूप नहीं है।
प्रमाणपत्र फ़िंगरप्रिंट के लिए, व्यवहार समान है: यदि आप PEM-एन्कोडेड प्रमाणपत्र टेक्स्ट पेस्ट करते हैं, तो कैलकुलेटर उस टेक्स्ट को हैश कर देता है। किसी प्रमाणपत्र के फ़िंगरप्रिंट की गणना एन्कोडेड प्रमाणपत्र बाइट्स (DER प्रारूप) पर की जाती है, न कि PEM टेक्स्ट रैपर पर। बाइट्स समान हैं, लेकिन टेक्स्ट एन्कोडिंग भिन्न है। ओपनएसएसएल या ब्राउज़र के प्रमाणपत्र व्यूअर से प्रमाणपत्र फिंगरप्रिंट से मिलान करने के लिए, आपको DER बाइट्स प्रदान करने की आवश्यकता होगी, जो मानव-पठनीय नहीं हैं। कैलकुलेटर का उद्देश्य UTF-8 टेक्स्ट को हैश करना है जिसे आप पेस्ट कर सकते हैं और पढ़ सकते हैं, जिससे सीमा स्पष्ट हो जाती है: यह टेक्स्ट इनपुट को हैश करता है, न कि क्रिप्टोग्राफ़िक कुंजी फ़ाइलों को उनके मानक बाइनरी या वायर-प्रोटोकॉल रूपों में।