2010-05-13 15 views
8

मैं SHA-1 के बजाय SHA-2 एन्क्रिप्शन को लागू करने का प्रयास कर रहा हूं।SSL एन्क्रिप्शन, SHA-1 और SHA-2

इसके लिए, मुझे पता है कि इन दो हैश एल्गोरिदम के बीच बिट्स की संख्या अलग है, और यह मुझे भ्रमित करती है।

यह कैसे प्राप्त किया जा सकता है और मुझे किन हिस्सों में आवश्यक परिवर्तन करने की आवश्यकता है?

मैं जावा, पायथन और किसी अन्य प्रमुख प्रोग्रामिंग भाषा से किसी भी ओपन सोर्स लाइब्रेरी का उपयोग कर सकता हूं।

+0

कौन सा SHA-2 एल्गोरिथ्म आप में रुचि रखते हैं के लिए काम करता है? –

+0

यह वास्तव में तब तक कोई फर्क नहीं पड़ता जब तक यह एक SHA-2 एल्गोरिदम है :) सम्मान – Hellnar

+0

एसएसएल के साथ इसका क्या संबंध है? –

उत्तर

30

सबसे पहले, न तो SHA-1 और SHA-2 से संबंधित कुछ भी एक "एन्क्रिप्शन" एल्गोरिदम है। वे हैश फ़ंक्शन हैं। एसएसएल में, हैश फ़ंक्शन अधिकतर अखंडता के लिए उपयोग किए जाते हैं, गोपनीयता नहीं, HMAC निर्माण के माध्यम से। एक हैश फ़ंक्शन मनमानी लंबाई का इनपुट लेता है, और एक निश्चित लंबाई के साथ आउटपुट उत्पन्न करता है, जो इनपुट डेटा का "पाचन" होता है; ऑपरेशन का मतलब उलटा नहीं है।

एक हैश फ़ंक्शन "सार्वजनिक" है: कोई गोपनीय डेटा नहीं है, कोई कुंजी नहीं है; सभी किसी दिए गए इनपुट पर हैश फ़ंक्शन आउटपुट की गणना कर सकते हैं। एक "संदेश प्रमाणीकरण कोड" (मैक) एक प्रकार का "कीड हैश" है: प्रक्रिया में एक गुप्त कुंजी (यानी बिट्स का मनमाने ढंग से गुच्छा) भी इनपुट है, ताकि कुंजी का ज्ञान आवश्यक हो (पुन:) गणना मैक आउटपुट। इसका उपयोग अखंडता जांच के लिए किया जाता है (प्रेषक मैक की गणना करने के लिए कुंजी का उपयोग करता है, रिसीवर मैक को पुन: सम्मिलित करने के लिए कुंजी का उपयोग करता है; यदि मैक मैचों से मेल खाता है, तो डेटा सही है, क्योंकि एक हमलावर, कुंजी को नहीं जानता, हो सकता है डेटा बदल दिया और परिवर्तित डेटा पर एक मान्य मैक गणना की)।

एचएमएसी एक ऐसा निर्माण है जो एक हैश फ़ंक्शन (जैसे SHA-1) को मैक में बदल देता है। टीएलएस (यह एसएसएल का वर्तमान, मानक नाम है) एचएमएसी का उपयोग करता है। एचएमएसी का उत्पादन, जब किसी दिए गए हैश फ़ंक्शन एच के साथ उपयोग किया जाता है, तो एच के आउटपुट की तुलना में समान आकार होता है। उस आउटपुट को पारंपरिक रूप से छोटा कर दिया जा सकता है: एचएमएसी/एसएचए -1 नाममात्र रूप से 160-बिट आउटपुट का उत्पादन करता है, लेकिन कुछ प्रोटोकॉल में, यह केवल 96 बिट्स रखने के लिए प्रथागत है। एसएसएल में इस तरह की छंटनी नहीं होती है।

FIPS 180-3 मानक क्रमश: 160, 224, 256, 384 और 512 बिट्स की आउटपुट लंबाई के साथ SHA-1, SHA-224, SHA-256, SHA-384 और SHA-512 नामक पांच हैश फ़ंक्शंस को परिभाषित करता है। SHA-224, SHA-256, SHA-384 और SHA-512 फ़ंक्शंस को "SHA-2" के रूप में जाना जाता है, इसलिए "SHA-2" एक कार्य नहीं है, लेकिन चार हैश फ़ंक्शन का एक परिवार है।

TLS विनिर्देश सिफर सूट परिभाषित करता है। एक सिफर सूट क्रिप्टोग्राफिक एल्गोरिदम का एक सेट है जो क्लाइंट और सर्वर कनेक्शन के प्रारंभिक चरण ("हैंडशेक") के दौरान सहमत होता है। एल्गोरिदम के बीच डेटा अखंडता सुनिश्चित करने के लिए उपयोग करने के लिए मैक है। कुछ मानक सिफर सुइट्स निर्दिष्ट करते हैं कि मैक "एसएचए -256 के साथ एचएमएसी" होगा, यानी कुछ ऐसा जो SHA-2 कार्यों में से एक का उपयोग करता है।

तो आपके प्रश्न का उत्तर यह है: "केवल ग्राहक और सर्वर को एचएमएसी/एसएचए -256 के साथ सिफर स्वीट्स में से एक का उपयोग करने के लिए कॉन्फ़िगर करें"। यदि आपका एसएसएल कार्यान्वयन ऐसे सिफर सुइट्स का समर्थन नहीं करता है, तो आपको इसे संशोधित करना होगा, जो एसएसएल काम करता है, इस बारे में पूरी तरह से समझ में आता है; पूर्ण आरएफसी 5246 को पढ़ना और समझना आवश्यक होगा।

+3

मुझे आरएफसी 5246 के बारे में थोड़ी सी बीमार सोच मिली। मुझे नहीं लगता कि यह पढ़ने की एक आसान और मनोरंजक रात है? –

1

जहां तक ​​मैं देख सकता हूं, एसएसएल में SHA256 को लागू करने के लिए आपको जो कुछ जानने की आवश्यकता है उसे RFC 5246 में शामिल किया गया है।

लेकिन मुझे संदेह है कि आप ऐसा करने के लिए पर्याप्त क्रिप्टोग्राफी को समझने के करीब कहीं नहीं हैं ... SHA 2 मौजूद नहीं है, आप SHA256, SHA384 या SHA512 की तलाश में हैं, और यह एक एन्क्रिप्शन एल्गोरिदम नहीं है, बल्कि इसके बजाय क्रिप्टोग्राफिक हैश फ़ंक्शन।

तो, आप वास्तव में क्या करने की कोशिश कर रहे हैं?

1

मुझे यकीन है कि आप इस प्रश्न के अधिक से अधिक देखेंगे। गोडाडी के पास अब एक प्रमाणपत्र हस्ताक्षर अनुरोध सबमिट करते समय एक विकल्प है, यह निर्दिष्ट करने के लिए कि क्या आप SHA1 या SHA2 का उपयोग करने जा रहे हैं।

हालांकि यह एक दिलचस्प पढ़ा गया था। मैं मूल रूप से जानता था कि यह क्या पूछ रहा था और मेरे सर्वर को एक या दूसरे का उपयोग करने वाले साइफर का उपयोग करने के लिए कैसे मजबूर करना है। यकीन नहीं है कि मुझे पता था कि अंतर क्या था या फिर एक या दूसरे का उपयोग करना बेहतर क्यों होगा।

0

इस कोशिश, यह weblogic एसक्यूएल प्रमाणक

public static void main(String args[]) throws NoSuchAlgorithmException { 
String password="abcdef"; 
System.out.println("{SHA-1}" + new sun.misc.BASE64Encoder().encode(java.security.MessageDigest.getInstance("SHA1").digest(password.getBytes()))); 
}