2011-08-14 13 views
11

डेटा के SHA-1 हैश बनाने के लिए कितनी देर तक और कितनी प्रोसेसिंग पावर की आवश्यकता है? क्या यह मूल डेटा आकार के आधार पर बहुत अलग है? एक मानक HTML फ़ाइल के हैश उत्पन्न करने से स्ट्रिंग "blah" से काफी अधिक समय लगेगा? सी ++, जावा, और PHP कैसे गति से तुलना करेंगे?SHA-1 कितने समय तक हैश बनाने के लिए लेता है?

+1

"कितना लंबा" पूरी तरह से * उस मंच पर निर्भर है जिस पर आप इसे चला रहे हैं। –

+10

कृपया पढ़ें http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work – Joe

+0

आप हैश का उपयोग किसके लिए कर रहे हैं? –

उत्तर

10

आपने बहुत सारे प्रश्न पूछे हैं, इसलिए उम्मीद है कि मैं बदले में प्रत्येक को जवाब देने का प्रयास कर सकता हूं।

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

गति के मामले में C++ की तुलना, जावा, और PHP का सवाल है, यह खतरनाक क्षेत्र है और मेरा उत्तर विस्फोट होने की संभावना है, लेकिन सामान्य रूप से कहें सी ++ थोड़ा तेजी से जावा, जो थोड़ा तेज पीएचपी से है की तुलना में है। उन भाषाओं में से एक में लिखा गया एक अच्छा हैश कार्यान्वयन दूसरों को नाटकीय रूप से बेहतर प्रदर्शन कर सकता है अगर वे अच्छी तरह से लिखे गए नहीं हैं। हालांकि, आपको इसके बारे में चिंता करने की आवश्यकता नहीं है। इसे आम तौर पर अपने स्वयं के हैश फ़ंक्शंस, एन्क्रिप्शन रूटीन या डिक्रिप्शन रूटीन को लागू करने का एक बुरा विचार माना जाता है क्योंकि वे अक्सर side-channel attacks के लिए कमजोर होते हैं जिसमें एक हमलावर कार्यान्वयन में बग का उपयोग करके आपकी सुरक्षा को तोड़ सकता है जो प्रायः अनुमानित होना मुश्किल होता है। यदि आप एक अच्छा हैश फ़ंक्शन का उपयोग करना चाहते हैं, तो प्री-लिखित संस्करण का उपयोग करें। यह आपके द्वारा किए गए किसी भी चीज़ की तुलना में तेज़, सुरक्षित और कम त्रुटि-प्रवण होने की संभावना है।

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

आशा है कि इससे मदद मिलती है!

+0

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

+2

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

+0

यह उन पंक्तियों के साथ है। मैं फ़ाइल हैप्लिकेट से बचने के लिए एक हैश का उपयोग करना चाहता हूं या यह देखने के लिए कि कोई फ़ाइल संशोधित की गई है या नहीं। मैं देखूंगा कि बाद में पासवर्ड के बारे में क्या किया जा सकता है। –

5

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

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

सभी आधुनिक हैश एल्गोरिदम डेटा के निश्चित आकार के ब्लॉक पर काम कर रहे हैं। वे एक ब्लॉक पर निश्चित संख्यात्मक निर्धारिती संचालन करते हैं, और अंततः परिणाम प्राप्त करने तक प्रत्येक ब्लॉक के लिए ऐसा करते हैं। इसका मतलब यह भी है कि आपका इनपुट जितना लंबा होगा, उतना ही लंबा ऑपरेशन होगा। विशेषताओं से समझाया गया है कि हम यह समझ सकते हैं कि ऑपरेशन की लंबाई किसी संदेश के इनपुट आकार के लिए सीधे आनुपातिक है। गणितीय रूप से कंप्यूटर-वैज्ञानिक रूप से हम इसे ओ (एन) ऑपरेशन के रूप में सिक्का करते हैं, जहां एन संदेश का इनपुट आकार है, क्योंकि templatetypedef पहले से ही इंगित करता है।

आपको प्रोग्रामिंग भाषा की अपनी पसंद को प्रभावित करने की गति को गति नहीं देना चाहिए, भाषा के बावजूद सभी आधुनिक हैश एल्गोरिदम वास्तव में वास्तव में तेज़ हैं। हालांकि सी-आधारित कार्यान्वयन जावा से थोड़ा बेहतर होगा, जो शायद PHP की तुलना में थोड़ा तेज होगा, मैं अभ्यास में शर्त लगाता हूं कि आप अंतर नहीं जान पाएंगे।

+1

@ जेम्स पोल्सन: यदि आप सिर्फ फिंगरप्रिंट करना चाहते हैं फ़ाइल और इसे सुरक्षित होने की आवश्यकता नहीं है, फिर एक [सीआरसी] (http://en.wikipedia.org/wiki/CRC-32) चेकसम एसएचए -1 या किसी अन्य क्रिप्टोग्राफिक हैश फ़ंक्शन का उपयोग करने से भी तेज है। – emboss

+0

हां! आप ग्रह पर सबसे बड़े तकनीकी मूर्खों के रूप में खुद को बाहर जाने से पहले सोचेंगे कि एफबीआई ने कुछ प्रश्न पूछे हैं आरई समस्या का आकार और स्वचालित दृष्टिकोण निष्पादित करने का समय! मैं सी बनाम जावा स्केल को लगभग 3 एक्स पर रखूंगा। नंगे धातु के करीब जितना अधिक आप पी-कोड आपको दर्द देते हैं। – RocketRoy

3

SHA-1 64 बाइट्स के हिस्सों से डेटा को संसाधित करता है। CPU समय की लंबाई n बाइट्स की फ़ाइल की आवश्यकता है, इस प्रकार लगभग n/64 बार एक बार संकीर्ण करने के लिए आवश्यक CPU समय के बराबर है। एक छोटी स्ट्रिंग के लिए, आपको पहले स्ट्रिंग को बाइट्स के अनुक्रम में परिवर्तित करना होगा (बाइट्स पर SHA-1 कार्य, वर्णों पर नहीं); स्ट्रिंग "blah" 4 या 8 बाइट बन जाएगा (यदि आप क्रमशः यूटीएफ -8 या यूटीएफ -16 का उपयोग करते हैं) तो इसे एक सिंगल खंड के रूप में धोया जाएगा। ध्यान दें कि वर्णों से बाइट्स में रूपांतरण को हैशिंग से अधिक समय लग सकता है।

का उपयोग करते हुए शुद्ध जावा SHA-1 sphlib से कार्यान्वयन, मेरे पीसी (x86 Core2, 2.4 GHz, 64-बिट मोड) पर, मैं लंबे समय से संदेशों के 132 MB/s एक बैंडविड्थ पर (हैश कर सकते हैं कि एक CPU उपयोग कर रहा है कोर)। ध्यान दें कि यह एक सामान्य हार्ड डिस्क की गति से अधिक है, इसलिए जब बड़ी फाइल है तो संभावना है कि डिस्क बाधा होगी, सीपीयू नहीं: फाइल को हैश के लिए आवश्यक समय पढ़ने के लिए आवश्यक समय होगा डिस्क से फ़ाइल।

(इसके अलावा, मूल कोड सी में लिखे का उपयोग कर, SHA-1 गति के लिए 330 MB/s ऊपर जाता है।)

SHA-256 का एक शुद्ध जावा कार्यान्वयन SHA-1 की तुलना में व्यापक रूप से अधिक सुरक्षित माना जाता है, और एसएचए -256 मेरे पीसी पर 85 एमबी/एस पर है, जो अभी भी काफी तेज है। 2011 तक, एसएचए -1 की सिफारिश नहीं की जाती है।

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