सिक्योर हैश एल्गोरिथम (SHA) का आविष्कार राष्ट्रीय सुरक्षा एजेंसी (NSA) द्वारा किया गया था और 1993 में राष्ट्रीय मानक और प्रौद्योगिकी संस्थान (NIST) के माध्यम से यू.एस. संघीय सूचना प्रसंस्करण मानक (FIPS PUB 180) के रूप में प्रकाशित किया गया था।
SHA MD4 एल्गोरिथम के समान बिल्डिंग ब्लॉक्स पर निर्भर करता है और साझा करता है। एसएचए के डिजाइन ने एक नई प्रक्रिया की शुरुआत की जो 16-शब्द संदेश ब्लॉक इनपुट को अन्य चीजों के बीच 80-शब्द ब्लॉक में संपीड़न फ़ंक्शन में विकसित करती है।
SHA की प्रोसेसिंग इस प्रकार काम करती है -
चरण 1 - पैडिंग बिट्स जोड़ें - मूल संदेश गद्देदार है और इसकी अवधि 448 मोडुलो 512 के अनुरूप है। पैडिंग लगातार डाली जाती है, हालांकि संदेश में पहले से ही वांछित लंबाई है। पैडिंग में एक एकल 1 और उसके बाद 0 बिट्स की आवश्यक संख्या शामिल होती है।
चरण 2 − लंबाई जोड़ें - एक 64-बिट ब्लॉक को अहस्ताक्षरित 64-बिट पूर्णांक (सबसे आवश्यक बाइट पहले) के रूप में माना जाता है, और मूल संदेश की लंबाई को परिभाषित करता है (चरण 1 में पैडिंग से पहले), संदेश में जोड़ा जाता है। पूरे संदेश की लंबाई 512 का गुणज है।
चरण 3 −बफ़र इनिशियलाइज़ करें - बफर में ए, बी, सी, डी, और ई द्वारा इंगित 32 बिट्स के पांच (5) रजिस्टर शामिल हैं। इस 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
रजिस्टर ए, बी, सी और डी वास्तव में एमडी 5 एल्गोरिथम में उपयोग किए गए चार रजिस्टरों के समान हैं। लेकिन SHA-1 में, ये मान बड़े-एंडियन प्रारूप में सहेजे जाते हैं, जो परिभाषित करते हैं कि शब्द का सबसे आवश्यक बाइट निम्न-पता बाइट स्थिति में स्थित है। इसलिए आरंभीकरण मान (हेक्साडेसिमल नोटेशन में) निम्नानुसार होता है -
शब्द 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
चरण 4 − संदेश को 512-बिट ब्लॉक में संसाधित करें - कंप्रेशन फंक्शन को 20 अनुक्रमिक चरणों में विभाजित किया जाता है, जिसमें प्रोसेसिंग के चार राउंड शामिल होते हैं, जहां प्रत्येक राउंड 20 चरणों से बना होता है।
चार राउंड संरचनात्मक रूप से एक दूसरे के समान होते हैं, केवल इस अंतर के साथ कि प्रत्येक राउंड को एक अलग बूलियन फ़ंक्शन की आवश्यकता होती है, जिसे वह f1, f2, f3, f4 के रूप में परिभाषित कर सकता है और चार एकाधिक योगात्मक स्थिरांक Kt (0 ≤t 79) में से एक के रूप में परिभाषित कर सकता है। विचाराधीन चरण पर आधारित है।
चरण 5 - आउटपुट - अंतिम 512-बिट संदेश ब्लॉक t को संसाधित करने के बाद (यह मानते हुए कि संदेश को t 512-बिट ब्लॉक में विभाजित किया गया है), और यह 160-बिट संदेश डाइजेस्ट प्राप्त कर सकता है।