2011-08-17 9 views
6

मैं के रूप में डिफ़ॉल्ट PKCS # 7 SignedData ऐसे SHA256 के रूप में मजबूत डाइजेस्ट करने के लिए एल्गोरिथ्म को पचाने SHA1 से एक आवेदन उन्नयन की जांच कर रहा हूँ, मायनों में कि पीछे की ओर हस्ताक्षर प्रमाणक जो समर्थन करते हैं हजम नहीं के लिए संगतता बनाए रखने के पचाने एसएचए 1 के अलावा एल्गोरिदम। मैं पीकेसीएस # 7 प्रारूप और उपलब्ध विकल्पों की मेरी समझ जांचना चाहता हूं।PKCS # 7 SignedData और कई एल्गोरिदम

मुझे लगता है कि मैं क्या करना चाहता हूं वह SHA1 और SHA256 (या अधिक आम तौर पर, डाइजेस्ट एल्गोरिदम का एक सेट) के साथ संदेश सामग्री को पचाना है, जैसे पुराने अनुप्रयोग SHA1 के माध्यम से सत्यापित करना जारी रख सकते हैं, और उन्नत अनुप्रयोगों के माध्यम से सत्यापन शुरू हो सकता है कमजोर एल्गोरिदम (ओं) को अनदेखा करते हुए SHA256 (अधिक आम तौर पर, सबसे मजबूत पाचन प्रदान किया जाता है)। [यदि कोई बेहतर दृष्टिकोण है, तो कृपया मुझे बताएं।]

ऐसा लगता है कि पीकेसीएस # 7 मानक के भीतर, एकाधिक खुदाई प्रदान करने का एकमात्र तरीका एकाधिक डायजेस्ट एल्गोरिदम के लिए एकाधिक साइनरइन्फोस प्रदान करना है। दुर्भाग्यवश, यह सुरक्षा में को कम करने के लिए प्रतीत होता है, क्योंकि एक हमलावर कमजोर डाइजेस्ट एल्गोरिदम के साथ सिग्नलइन्फो को छोड़ने में सक्षम होता है, जो अकेले ही एक वैध हस्ताक्षर बनाएगा। क्या यह समझ सही है?

यदि ऐसा है, तो मेरा विचार अतिरिक्त डाइजेस्ट एल्गोरिदम के लिए अतिरिक्त संदेश-digests प्रदान करने के लिए साइनरइन्फो के प्रमाणीकृत एट्रिब्यूट फ़ील्ड के भीतर कस्टम विशेषताओं का उपयोग करना था (SHA1 को पीछे की संगतता के लिए "डिफ़ॉल्ट" एल्गोरिदम के रूप में छोड़ना)। चूंकि इस क्षेत्र को एक ब्लॉक के रूप में प्रमाणित किया गया है, यह उपर्युक्त हमले को रोक देगा। क्या यह व्यवहार्य दृष्टिकोण की तरह लगता है? क्या पीकेसीएस मानक के बाहर जाने के बिना इसे पूरा करने या ऐसा कुछ करने का कोई तरीका है?

+1

वास्तव में प्रमाणीकृत विशेषताओं में से प्रत्येक हस्ताक्षरकर्ता हस्ताक्षर हस्ताक्षर एल्गोरिदम का उपयोग करके प्रमाणीकृत नहीं हैं? यदि ऐसा है तो मुझे लगता है कि आप अभी भी उसी नाव में हैं जो आपने शुरू किया था। –

+0

अच्छा बिंदु। मुझे लगता है कि प्रमाणीकृत विशेषता में SHA256 का उपयोग करके साइनएडाडेटा तत्व हो सकता है क्योंकि संदेश पचाने वाले एल्गोरिदम के रूप में सामग्री सामग्री में मूल सामग्री का SHA256 पाचन होता है। लेकिन आप अभी भी पूरे बंडल की रक्षा करने वाले कमजोर हैश एल्गोरिदम के साथ समाप्त हो जाते हैं। – John

+0

मैं टाइमस्टैंप प्राप्त करने में सक्षम हूं लेकिन मुझे यकीन नहीं है कि इसे मौजूदा हस्ताक्षर में कैसे एम्बेड किया जाए। वर्तमान में मैं यह कर रहा हूं: http://stackoverflow.com/questions/38618108/s-mime-timestamp-support/38631998#38631998 – Michael

उत्तर

8

हाँ, आप वर्तमान CMS आरएफसी यह संदेश डाइजेस्ट विशेषता के बारे में कहते हैं में ठीक कह रहे हैं, कि

एक signerInfo में SignedAttributes चाहिए संदेश-पचाने विशेषता उसमें केवल एक ही शामिल हैं। इसी प्रकार, किसी प्रमाणीकृत डेटा में AuthAttributes में संदेश-पाचन विशेषता का केवल एक उदाहरण शामिल होना चाहिए।

तो यह सच है कि मानक हस्ताक्षरित विशेषताओं का उपयोग करके एकाधिक संदेश पाचन मूल्य प्रदान करने का एकमात्र तरीका कई हस्ताक्षरित इन्फोस प्रदान करना है।

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

कस्टम विशेषताओं वाले आपकी योजना तोड़ने के लिए थोड़ा कठिन है - लेकिन अभी भी एक SHA-1 हैश फ़्लोटिंग है जिस पर हमला किया जा सकता है। यह अब विशेषता को अलग करने के जितना आसान नहीं है - क्योंकि यह हस्ताक्षर से ढका हुआ है। लेकिन:

पाचन एल्गोरिदम भी है जो हस्ताक्षर किए गए गुणों को पचाने के लिए उपयोग किया जाता है जो अंतिम हस्ताक्षर मूल्य के आधार पर कार्य करता है। आप वहां क्या उपयोग करना चाहते हैं? एसएचए -256 या एसएचए -1? यदि यह SHA-1 है, तो आप पहले की स्थिति में होंगे:

यदि मैं SHA-1 के लिए टकराव का उत्पादन कर सकता हूं, तो मैं आपकी कस्टम SHA-256 विशेषता को बंद कर दूंगा और SHA-1 विशेषता को फोर्ज कर दूंगा इस तरह से हस्ताक्षर के लिए अंतिम SHA-1 पचाने फिर से जोड़ता है। इससे पता चलता है कि अगर हस्ताक्षर डाइजेस्ट एल्गोरिदम एसएचए -256 भी होगा, तो सुरक्षा में केवल लाभ होगा, लेकिन मुझे लगता है कि यह कोई विकल्प नहीं है क्योंकि आप पीछे-पीछे रहना चाहते हैं।

आपकी स्थिति में मैं क्या सुझाव दूंगा, वह पूरे SHA-1 का उपयोग करना जारी रखे लेकिन RFC 3161 - एक हस्ताक्षरित विशेषता के रूप में आपके हस्ताक्षर के लिए लागू टाइमस्टैंप लागू करें। वे टाइमस्टैम्प वास्तव में अपने स्वयं के हस्ताक्षर हैं। अच्छी बात यह है कि आप संदेश छाप के लिए SHA-256 का उपयोग कर सकते हैं और अक्सर टाइमस्टैम्प सर्वर आपके द्वारा प्रदत्त उसी डाइजेस्ट एल्गोरिदम का उपयोग करके अपने हस्ताक्षर को लागू करता है। फिर किसी भी हस्ताक्षर को अस्वीकार करें जिसमें या तो इस तरह का टाइमस्टैम्प नहीं है या इसमें एसएचए -256 की तुलना में कमजोर संदेश हस्ताक्षर/हस्ताक्षर डाइजेस्ट एल्गोरिदम के साथ केवल टाइमस्टैम्प शामिल हैं।

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

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

टाइमस्टैम्प का अंतिम लाभ यह है कि यदि आप कुछ एल्गोरिदम कमजोर हो जाते हैं तो आप उन्हें समय के साथ नवीनीकृत कर सकते हैं। उदाहरण के लिए आप अप-टू-डेट एल्गोरिदम का उपयोग करके हर 5-10 वर्षों में एक नया टाइमस्टैम्प लागू कर सकते हैं और नए टाइमस्टैम्प में पुराने हस्ताक्षर (पुराने टाइमस्टैम्प समेत) शामिल हैं। इस तरह कमजोर एल्गोरिदम को नए, मजबूत टाइमस्टैम्प हस्ताक्षर द्वारा कवर किया जाता है। CAdES पर एक नज़र डालें (वहां RFC भी मौजूद है, लेकिन यह अब तक पुराना है), जो सीएमएस पर आधारित है और इन रणनीतियों को लागू करने का प्रयास करता है ताकि सीएमएस हस्ताक्षरों का दीर्घकालिक संग्रह प्रदान किया जा सके।

+0

बहुत बढ़िया उत्तर, धन्यवाद। मैं निश्चित रूप से टाइमस्टैम्पिंग में देख लूंगा। आपके द्वारा उल्लिखित अतिरिक्त लाभ आकर्षक हैं। – John

+0

हां, लेकिन वे एक नकारात्मक पक्ष के साथ आते हैं - यदि आप "वास्तविक" टाइमस्टैम्प चाहते हैं तो आपको शायद सेवा के लिए सीए का भुगतान करना होगा। लेकिन अगर आपको "वास्तविक" प्रमाणपत्र की आवश्यकता नहीं है तो आप अपने स्थानीय टाइमस्टैम्प सर्वर का उपयोग कर सकते हैं। – emboss

संबंधित मुद्दे