2010-04-26 7 views
25

पर उपयोग करने वाली बड़ी फ़ाइलों के हैंशिंग को अनुकूलित करना मुझे कुछ बड़ी फ़ाइलों (दीवार घड़ी के समय को अनुकूलित करने) के हैशिंग को अनुकूलित करने में रूचि है। आई/ओ को पहले से ही काफी अनुकूलित किया गया है और आई/ओ डिवाइस (स्थानीय एसएसडी) केवल 25% क्षमता पर टैप किया गया है, जबकि सीपीयू कोर में से एक पूरी तरह से अधिकतम है।क्या हैश एल्गोरिदम समानांतर हैं? बहु-कोर CPUs

मेरे पास अधिक कोर उपलब्ध हैं, और भविष्य में शायद अधिक कोर होंगे। यदि तक मुझे एक ही फाइल के एकाधिक हैंश की आवश्यकता होती है, तो अब तक मैं केवल अधिक कोर में टैप करने में सक्षम हूं, एक ही समय में एक MD5 और SHA256 कहें। मैं दो या अधिक हैश एल्गोरिदम को खिलाने के लिए एक ही I/O स्ट्रीम का उपयोग कर सकता हूं, और मुझे तेज़ एल्गोरिदम मुफ्त में (जैसे दीवार घड़ी का समय) मिलता है। जैसा कि मैं अधिकांश हैश एल्गोरिदम को समझता हूं, प्रत्येक नया बिट पूरे परिणाम को बदलता है, और यह समानांतर में करने के लिए स्वाभाविक रूप से चुनौतीपूर्ण/असंभव है।

क्या मुख्यधारा हैश एल्गोरिदम समानांतर है?
क्या कोई गैर-मुख्यधारा हैश जो समांतर हैं (और कम से कम नमूना कार्यान्वयन उपलब्ध है)?

भविष्य के सीपीयू अधिक कोर की ओर बढ़ेंगे और घड़ी की गति में एक स्तर बंद हो जाएगा, क्या फ़ाइल हैशिंग के प्रदर्शन में सुधार करने का कोई तरीका है? (तरल नाइट्रोजन ठंडा overclocking के अलावा?) या यह मूल रूप से गैर समांतर है?

+0

इसके अलावा, मैंने सुना है कि अधिकांश मौजूदा हैश एल्गोरिदम _can_ समानांतर हो, लेकिन मुझे यकीन नहीं है कि यह क्या होता है। जाहिर है, ऐसा करने का एक तरीका यह है कि प्रत्येक के पास हैश को फ़ाइल के 4k हिस्से का कहना है, और उसके बाद हैश को किसी भी तरह गठबंधन करना है। एक्सओआर, शायद? अपने स्वयं के एल्गोरिदम का आविष्कार करने के लिए हमेशा क्रांतिकारी रूप से खतरनाक रूप से खतरनाक रूप से, इसलिए यदि आप दुर्भावनापूर्ण डेटा भ्रष्टाचार के बजाय दुर्भावनापूर्ण डेटा छेड़छाड़ के खिलाफ बचाव कर रहे हैं तो मुझे इस पर भरोसा नहीं होगा। – sblom

+0

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

+0

http://tools.ietf.org/html/rfc1321 ऐसा लगता है कि एमडी 5 आसानी से समांतर नहीं है, प्रत्येक ब्लॉक के लिए गणना सभी पुराने ब्लॉक के साथ गणना की गई राज्य पर निर्भर करती है। यदि यह संपत्ति नहीं रखती है, तो एमडी 5 सुरक्षित नहीं होगा (ब्लॉक की स्थिति का आदान-प्रदान हैश को प्रभावित नहीं करेगा - यह अच्छा नहीं है)। वैसे भी मैं नहीं कहता कि एमडी 5 का समांतरता संभव नहीं है, बस पहली नजर में _impossible। – kgadek

उत्तर

12

वास्तव में इस क्षेत्र में बहुत सारे शोध चल रहे हैं। यूएस नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड एंड टेक्नोलॉजी वर्तमान में अगली पीढ़ी के सरकारी ग्रेड हैश समारोह को डिजाइन करने के लिए एक प्रतियोगिता आयोजित कर रही है। इसके लिए अधिकांश प्रस्ताव समानांतर हैं।

एक उदाहरण: http://www.schneier.com/skein1.2.pdf

प्रतियोगिता की वर्तमान स्थिति के विकिपीडिया के विवरण: http://en.wikipedia.org/wiki/SHA-3

+0

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

7

एसएसडी किस तरह का है? एमडी 5 का मेरा सी कार्यान्वयन एक ही इंटेल कोर 2 कोर (2.4 गीगाहर्ट्ज, नवीनतम इंटेल नहीं) पर 400 एमबी/एस पर चलता है। क्या आपके पास वास्तव में एसएसडी है जो 1.6 जीबी/एस की बैंडविड्थ का समर्थन करता है? मुझे भी वही चाहिए !

किसी भी हैश फ़ंक्शन पर पेड़ हैशिंग लागू की जा सकती है। कुछ subtleties हैं और स्कीन विनिर्देश उनके साथ सौदा करने की कोशिश करता है, समारोह में कुछ मेटाडेटा को एकीकृत करता है (यह प्रदर्शन के लिए ज्यादा चीजें नहीं बदलता है), लेकिन स्केन का "पेड़ मोड" स्कीन नहीं है जैसा कि सबमिट किया गया है SHA-3। यहां तक ​​कि यदि स्केन को SHA-3 के रूप में चुना जाता है, तो पेड़-मोड हैश का आउटपुट "सादे स्केन" के आउटपुट के समान नहीं होगा।

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

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

SHA-256 और SHA-512 बहुत तेज़ नहीं हैं। एसएचए -3 उम्मीदवारों में से, 64-बिट मोड में एक x86 प्रोसेसर मानते हुए, उनमें से कुछ उच्च गति प्राप्त करते हैं (मेरे 2.4 गीगाहर्ट्ज इंटेल कोर 2 क्यू 6600 पर 300 एमबी/एस से अधिक एकल कोर के साथ - यही वह है जो मैं बाहर निकाल सकता हूं एसएचए -1 का भी), उदाहरण के लिए बीएमडब्ल्यू, शैबल या स्केन।क्रिप्टोग्राफिक रूप से बोलते हुए, ये डिज़ाइन थोड़ा बहुत नए हैं, लेकिन एमडी 5 और एसएचए -1 पहले से ही क्रिप्टोग्राफिक रूप से "टूटा हुआ" (एमडी 5 के मामले में काफी प्रभावी रूप से एसएचए -1 के लिए सैद्धांतिक रूप से) हैं, इसलिए राउंड -2 एसएए -3 उम्मीदवारों में से कोई भी ठीक होना चाहिए।

जब मैं अपनी "सीयर" टोपी डालता हूं, तो मुझे लगता है कि प्रोसेसर रैम की तुलना में तेज़ी से बढ़ते रहेंगे, इस बिंदु पर कि मेमोरी बैंडविड्थ द्वारा हैशिंग लागत को हटा दिया जाएगा: सीपीयू के पास इंतजार होने पर घड़ी चक्रों को छोड़ दिया जाएगा मुख्य रैम से डेटा के लिए। कुछ बिंदु पर, पूरे थ्रेडिंग मॉडल (कई कोरों के लिए एक बड़ी रैम) में संशोधन किया जाना चाहिए।

+4

यह आंशिक रूप से ऑफ-विषय है; असल में, जब मैं ओपी ऑप्टिमाइज़ेशन सुझावों के लिए अनुरोध करता हूं और * हमेशा * कोई ऐसा व्यक्ति होता है जो 1) परेशान न करने का सुझाव देता है, लेकिन बेहतर हार्डवेयर 2 खरीदने के लिए) यह साबित करने का प्रयास करें कि उस मामले में ऑप्टिमाइज़ेशन बेकार है ओपी साबित/साबित करने का प्रयास कि उसे इसकी ज़रूरत है, इसलिए मैं आपकी राय को अनुपयोगी मानता हूं ["क्या आपके पास वास्तव में एसएसडी है जो 1.6 जीबी/एस की बैंडविड्थ का समर्थन करता है? मैं वही चाहता हूं!"]। तो +1 नहीं दे सकता है। – kgadek

4

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

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

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

बेहतर समाधान इस बात पर निर्भर करता है कि आपकी बाधाएं क्या हैं और आप अंतरिक्ष, समय या सीपीयू शक्ति कहां निवेश कर सकते हैं।

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