SHA-256 एक स्पष्ट रूप से निर्धारित प्रक्रिया है, जो डेटा की छाप निकालती है। इसे hash कहते हैं। एक ही इनपुट से हमेशा एक ही, 256 बिट लंबा परिणाम मिलता है: 32 बाइट, जिन्हें आम तौर पर 64 हेक्साडेसिमल चिह्नों में लिखा जाता है। Bitcoin इसका उपयोग डेटा को जोड़ने और जाँचने के साथ-साथ माइनिंग में भी करता है। लेकिन यह छाप मूल सामग्री की एन्क्रिप्ट की हुई कॉपी नहीं है।
मान लीजिए कोई आपको एक फ़ाइल और उसका hash भेजता है। आप खुद गणना करके जाँच सकते हैं कि डाउनलोड किए गए डेटा उस छाप से मेल खाते हैं या नहीं। इनपुट में छोटा-सा बदलाव भी बहुत अधिक संभावना से पूरे परिणाम को बदल देता है। लेकिन छाप अकेले यह नहीं बताती कि फ़ाइल किसने बनाई या वह सुरक्षित है या नहीं। यदि हमलावर फ़ाइल और उसका hash दोनों बदल दे, तो दोनों मेल खाएँगे। इसलिए तुलना के लिए मिली संदर्भ वैल्यू का स्रोत भरोसेमंद होना भी ज़रूरी है। [1] [5]
बिना उद्धरण चिह्न और बिना नई पंक्ति के तीन ASCII बाइट abc का परिणाम ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad है। यह बेतरतीब बनाया गया नंबर नहीं है: हर सही इम्प्लीमेंटेशन उन्हीं बाइट से यही परिणाम निकालेगा। स्पेस या नई पंक्ति जोड़ने पर इनपुट बदल जाता है। तब अलग hash मिलना एल्गोरिथम की खराबी नहीं है। पाठ की एन्कोडिंग भी मायने रखती है। [3]
एन्क्रिप्शन का उद्देश्य कुंजी की मदद से संदेश वापस पाना है। SHA-256 में न ऐसी कुंजी होती है, न उलटी प्रक्रिया। फिर भी संभावित इनपुट आज़माए जा सकते हैं: जिसे शक हो कि आपने चार अंकों के PIN का hash बनाया है, वह सभी 10,000 संयोजन जाँचकर परिणाम मिला सकता है। लंबा hash आसानी से अनुमान लगाए जा सकने वाले गुप्त डेटा में एंट्रॉपी (यानी इनपुट का अनुमान लगाना कितना कठिन है) नहीं जोड़ देता। सुरक्षा इस बात पर भी निर्भर है कि हमलावर को वास्तव में कितने विकल्प जाँचने पड़ेंगे। [5] [7]
ब्लॉक पहचानकर्ता, txid (लेनदेन के पहचानकर्ता) और Merkle Tree (आपस में जुड़े hash की वृक्ष जैसी संरचना) में hash के जोड़े जोड़ने के लिए SHA256(SHA256(data)) का उपयोग होता है। दूसरी बार गणना में पहले परिणाम की 32 मूल बाइट जाती हैं, उसका 64 चिह्नों वाला पाठ नहीं। आउटपुट अब भी 256 बिट होता है। यहाँ दो बार हैशिंग करना प्रोटोकॉल का नियम है, यह सबूत नहीं कि एक बार किया गया SHA-256 टूट चुका है। Bitcoin दूसरी संरचनाएँ भी इस्तेमाल करता है: उदाहरण के लिए Taproot अलग-अलग उद्देश्यों की हैशिंग को अलग रखने के लिए इनपुट में पहले से तय टैग जोड़ता है। [2] [4] [6]
माइनर प्रस्तावित ब्लॉक हेडर के अनुमत हिस्सों को बार-बार बदलता है और उसका दोहरा SHA-256 निकालता है। वह ऐसा परिणाम खोजता है जो संख्या के रूप में तय target (संख्यात्मक सीमा) से बड़ा न हो। वह न किसी संदेश को डिक्रिप्ट कर रहा है, न किसी की निजी कुंजी खोज रहा है। उपयुक्त हेडर खोजने में कई प्रयास लगते हैं, लेकिन उसकी जाँच जल्दी हो जाती है। हेडर पिछले ब्लॉक का भी संदर्भ देता है, इसलिए पुराने ब्लॉक में बदलाव आगे की कड़ियों को बिगाड़ देता है। Full Node (Bitcoin के नियमों को खुद जाँचने वाला नोड) लेनदेन और बाकी नियम भी जाँचता है: केवल शर्त पूरी करने वाला hash किसी अवैध ब्लॉक को वैध नहीं बना देता। [4]
संभव संदेशों की संख्या 256 बिट वाली छापों से अधिक है, इसलिए कुछ अलग इनपुट का hash एक जैसा होना ही है। इसे collision कहते हैं। असली सवाल है कि क्या हम उसे जानबूझकर खोज सकते हैं। आदर्श 256 बिट hash में सामान्य तरीके से कोई भी collision खोजने में लगभग 2^128 प्रयास लगते हैं; पहले से तय छाप के लिए इनपुट खोजने में लगभग 2^256। ये अलग समस्याएँ हैं। collision मिलने भर से Bitcoin की निजी कुंजी उजागर नहीं होती। ये संख्याएँ पूरे वॉलेट या प्रोटोकॉल की सुरक्षा की गारंटी भी नहीं हैं। [5]
SHA-256 एक घटक है, हर सुरक्षा समस्या का पूरा समाधान नहीं। इसे जानबूझकर तेज़ बनाया गया है, इसलिए मनुष्य के चुने हुए पासवर्ड रखने के लिए इसे अकेले इस्तेमाल करना उचित नहीं: हमलावर भी अपने अनुमान तेज़ी से जाँच सकता है। इसके लिए खास पासवर्ड-आधारित व्युत्पत्ति प्रक्रियाएँ होती हैं, जैसे गणना की लागत तय करने वाली विधियाँ। इसी तरह अपना नुस्खा “किसी चीज़ का hash बनाकर सुरक्षित कुंजी पा लूँ” न शुरुआती यादृच्छिकता की कमी ठीक करता है, न इनपुट के उजागर होने को। सामान्यतः उपयोगकर्ता को SHA-256 हाथ से निकालने की ज़रूरत नहीं; उसे समझना चाहिए कि जाँची गई छाप क्या साबित करती है और क्या नहीं। [8] [7]
SHA-256, SHA-2 परिवार का हिस्सा है और NIST FIPS 180-4 उसकी प्रक्रिया बताता है। गणना से पहले यह इनपुट को उसकी लंबाई की जानकारी सहित पूरा करता है, फिर 512 बिट के हिस्सों में संसाधित करता है; हर हिस्से पर 64 दौर चलते हैं। ये अंदरूनी ब्लॉक 64 बाइट के होते हैं और Bitcoin ब्लॉक नहीं हैं। Bitcoin ब्लॉक हेडर 80 बाइट का होता है; पूरे ब्लॉक में लेनदेन भी होते हैं। नाम में 256 परिणाम की छाप की लंबाई बताता है, ब्लॉक या निजी कुंजी का आकार नहीं। [1] [4]
पूरी तस्वीर के लिए इस प्रविष्टि के साथ यह भी पढ़ें Hash, Proof of Work, Block Header, बिटकॉइन पता, Merkle Tree, Bitcoin. इस प्रविष्टि का उल्लेख यहाँ भी है Hash, ASIC Miner, Hashrate, Nonce.