सिक्योर हैश एल्गोरिदम (SHA) को नेशनल सिक्योरिटी एजेंसी (NSA) द्वारा आविष्कृत किया गया था और 1993 में नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड एंड टेक्नोलॉजी (NIST) के माध्यम से यूएस फेडरल इंफॉर्मेशन प्रोसेसिंग स्टैंडर्ड (FIPS PUB 180) के रूप में प्रकाशित किया गया था।
- SHA, MD4 एल्गोरिदम पर निर्भर करता है और समान बिल्डिंग ब्लॉक्स साझा करता है।
- SHA के डिजाइन ने एक नई प्रक्रिया पेश की जो कम्प्रेशन फंक्शन के लिए 16-वर्ड मैसेज ब्लॉक इनपुट को अन्य चीजों के बीच 80-वर्ड ब्लॉक तक विकसित करती है।
SHA प्रोसेसिंग चरण
चरण 1: पैडिंग बिट्स जोड़ें (Append Padding Bits)
- मूल संदेश को पैड किया जाता है और इसकी लंबाई 448 मॉड्यूलो 512 के अनुरूप होती है।
- पैडिंग हमेशा डाली जाती है भले ही संदेश में पहले से ही वांछित लंबाई हो।
- पैडिंग में एक सिंगल 1 होता है जिसके बाद आवश्यक संख्या में 0 बिट्स होते हैं।
चरण 2: लंबाई जोड़ें (Append Length)
- एक 64-बिट ब्लॉक जिसे अनसाइन्ड 64-बिट इंटीजर (सबसे महत्वपूर्ण बाइट पहले) के रूप में माना जाता है, और मूल संदेश की लंबाई को परिभाषित करता है (चरण 1 में पैडिंग से पहले), संदेश में जोड़ा जाता है।
- संदेश की कुल लंबाई 512 का गुणक होती है।
चरण 3: बफर आरंभ करें (Initialize the Buffer)
- बफर में 32 बिट्स के पांच (5) रजिस्टर होते हैं जिन्हें A, B, C, D, और E द्वारा दर्शाया जाता है।
- यह 160-बिट बफर कम्प्रेशन फंक्शन के अस्थायी और अंतिम परिणामों को प्रभावित करने के लिए उपयोग किया जाता है।
- ये पांच रजिस्टर निम्न 32-बिट इंटीजर (हेक्साडेसिमल नोटेशन में) के लिए आरंभ किए जाते हैं:
A = 67 45 23 01
B = ef cd ab 89
C = 98 ba dc fe
D = 10 32 54 76
E = c3 d2 e1 f0
- रजिस्टर A, B, C, और D वास्तव में MD5 एल्गोरिदम में उपयोग किए गए चार रजिस्टर के समान हैं।
- लेकिन SHA-1 में, ये मान बिग-एंडियन फॉर्मेट में सहेजे जाते हैं, जिसका अर्थ है कि शब्द का सबसे महत्वपूर्ण बाइट लो-एड्रेस बाइट स्थिति में स्थित है।
चरण 4: 512-बिट ब्लॉकों में संदेश प्रोसेस करें (Process Message in 512-bit Blocks)
- कम्प्रेशन फंक्शन को 20 अनुक्रमिक चरणों में विभाजित किया जाता है जिसमें प्रोसेसिंग के चार राउंड शामिल होते हैं जहां प्रत्येक राउंड 20 चरणों से बना होता है।
- चार राउंड संरचनात्मक रूप से एक दूसरे के समान होते हैं, केवल अंतर यह है कि प्रत्येक राउंड को एक अलग बूलियन फंक्शन की आवश्यकता होती है, जिसे f1, f2, f3, f4 के रूप में परिभाषित किया जा सकता है और चार अलग-अलग एडिटिव कॉन्स्टेंट Kt (0 ≤ t ≤ 79) में से एक जो विचाराधीन चरण पर आधारित होता है।
चरण 5: आउटपुट (Output)
- अंतिम 512-बिट संदेश ब्लॉक t को प्रोसेस करने के बाद (यह मानते हुए कि संदेश को t 512-बिट ब्लॉकों में विभाजित किया गया है), 160-बिट संदेश डाइजेस्ट प्राप्त होता है।