गैर-क्रिप्टोग्राफिक हैश फ़ंक्शन और उन पर DoS हमला करते हैं

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

गैर-क्रिप्टोग्राफिक हैश फ़ंक्शन


यदि सभी ने क्रिप्टोग्राफ़िक हैश फ़ंक्शन को सुना है, तो गैर-क्रिप्टोग्राफ़िक (सामान्य उद्देश्य हैश फ़ंक्शन) के बारे में बहुत कम जाना जाता है। गैर-क्रिप्टोग्राफ़िक फ़ंक्शंस का उपयोग किया जाता है जहां तीसरे पक्ष डेटा (हमलावर) को प्रभावित नहीं करते हैं। उदाहरण के लिए, ऐसे कार्यों का उपयोग हैश टेबल बनाने के लिए किया जा सकता है।

मानदंड जो क्रिप्टोग्राफिक हैश कार्यों के लिए महत्वपूर्ण हैं:


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

FNV-1a

2003 वर्ष। गति: प्रति बाइट 4.5 चक्र।
एक बहुत ही सरल कार्य [1] (RFC [5])।
1. एक समान वितरण: 14 बिट तक, हैश टेबल के लिए (2 14 हैश टेबल स्लॉट तक) का उपयोग किया जा सकता है। एफएनवी -1 ए की भिन्नता में थोड़ा बेहतर है, जो डिफ़ॉल्ट रूप से अनुशंसित है।
2. हिमस्खलन मानदंड: बुरा। FNV-1a में भी खराब है।
संशोधित FNV-1a [2] में दोनों मानदंडों में काफी सुधार किया गया है, जहां अंत में मिश्रण को FNV-1a में जोड़ा गया है।

बॉब जेनकिंस हैश (लुकअप 3)

2006, 32 और 64 बिट लंबाई, 32-बिट निर्देश, गति: प्रति बाइट 2.62 चक्र (संदेशों के लिए 16 बाइट्स लंबे)।
1. वर्दी वितरण: सभी बिट्स के लिए उत्कृष्ट।
2. हिमस्खलन मानदंड: अच्छा। ऊपरी बिट्स के साथ थोड़ी समस्या है।
फ़ंक्शन के पहले संस्करण को वन-ए-ए-टाइम कहा जाता था।

CRC32

1975, लंबाई: 32, 64 और 128 बिट्स, गति: 1.2-2.13 चक्र प्रति बाइट (सीपीयू के आधार पर 64 बिट्स से कम संदेशों के लिए)।
1. समान वितरण: निचले बिट्स का खराब वितरण। हैश टेबल के लिए उच्च बिट्स का उपयोग करें, फिर आप सभी परीक्षण किए गए बिट्स का उपयोग कर सकते हैं - 16 उच्च बिट्स (2 16 तक हैश टेबल स्लॉट्स)।
2. हिमस्खलन मानदंड: बहुत बुरा। कोई हिमस्खलन प्रभाव नहीं है। हैश का उद्देश्य प्रभावित होता है: इसके आउटपुट बिट्स को डेटा चैनल में त्रुटियों का पता लगाने के लिए डिज़ाइन किया गया है। सीआरसी में एक महत्वपूर्ण संपत्ति भी है: आप एक संदेश को भागों में विभाजित कर सकते हैं, प्रत्येक भाग के लिए हैश की गणना कर सकते हैं, फिर संदेश को जोड़ सकते हैं, और पूरे संदेश के हैश की गणना उसके भागों की हैश से कर सकते हैं।

मुरमुरैश २

2008, 32 और 64 बिट लंबाई, 32 और 64 बिट निर्देश।
कुछ कुंजी [3] के समान वितरण के साथ एक समस्या है।

मुरमुरैश ३

2011, 32 और 128 बिट लंबाई, 32 और 64 बिट निर्देश, गति: 1.87 चक्र प्रति बाइट (संदेशों के लिए 16 बाइट्स लंबे)।
1. समान वितरण: अच्छा (एक मामले में तीन "लगभग संदिग्ध")।
2. हिमस्खलन मानदंड: उत्कृष्ट।



CityHash

2011, 32, 64, 128 और 256 बिट लंबाई, 64-बिट निर्देश। बल्कि जटिल कार्य।
सबसे तेज़ विकल्प के लिए, आपको CRC32 प्रोसेसर निर्देश (SSE 4.2 - Intel Nehalem) की आवश्यकता है।
1. समान वितरण: अच्छा (एक मामले में तीन "लगभग संदिग्ध")।
2. हिमस्खलन मानदंड: अच्छा। निचले बिट्स के साथ थोड़ी समस्या है।

SpookyHash

2011, 32, 64 और 128 बिट लंबाई, गति: 0.33 चक्र प्रति बाइट। बॉब जेनकींस द्वारा पोस्ट किया गया।
1. समान वितरण: औसत (तीन "संदिग्ध" के एक मामले में)।
2. हिमस्खलन मानदंड: उत्कृष्ट।

हैश फ़ंक्शंस का सांख्यिकीय विश्लेषण उपकरण [17] का उपयोग करके किया जा सकता है; विश्लेषण परिणाम [2], [4], [18] का उपयोग किया गया था।

सिटीहैश अधिक जटिल है और इसमें मुरमुरैश की तुलना में अधिक बैंडविड्थ (लंबे संदेशों पर गति) है। मुरमुरैश सरल है, छोटे संदेशों के लिए कम विलंबता है (<20 बाइट्स)।

सिटीहैश नए प्रोसेसर के लिए सीआरसी निर्देशों का उपयोग करता है, प्रति बाइट 0.17 तक प्रदान करता है, जो अन्य सभी हैश से तेज है; तुलना के लिए, SHA-1 - 4.6 चक्र प्रति बाइट (आइवी ब्रिज)। इन निर्देशों के समर्थन के बिना, CityHash SpookyHash (बाद के लेखक के अनुसार) के रूप में दोगुना है।

32-बिट प्लेटफॉर्म के लिए, मुरमुरैश 3 स्पूकीहैश और सिटीहैश से तेज हो सकता है।

परफेक्ट हैश फंक्शन

यदि संदेश सरणी पहले से ज्ञात है, तो आप सही हैश फ़ंक्शन का उपयोग कर सकते हैं: टक्कर के बिना और एक तुलना ऑपरेशन में खोज के साथ। उदाहरण: gperf।

यदि हैश फ़ंक्शन का सामान्य वितरण होता है, तो टक्कर की संभावना निम्नानुसार होगी:




टकराव कितने वास्तविक हैं? 32-बिट हैश के लिए, वे नियमित रूप से होते हैं। उदाहरण के लिए, CRC32 "कोडिंग" और "ग्नू", "प्रदर्शक" और "विद्वान", "कर्ल" और "प्राकृतिक", आदि से मेल खाता है। यह हैश फ़ंक्शन की सांख्यिकीय विशेषताओं का दोष नहीं है, लेकिन हैश के सीमित आकार का परिणाम - केवल 4 बाइट्स।

CRC32 और FNV-1 को छोड़कर सभी सूचीबद्ध कार्य, अच्छे आँकड़े हैं। 32-बिट सिस्टम के लिए, मुरमुरैश शायद सबसे तेज़ होगा। यदि सिस्टम बिना पढ़े हुए मेमोरी नहीं कर सकता है, जैसे ARM या SPARC, तो मुरमुरैश भी सबसे तेज़ काम कर सकता है। सिटीहैश की गति कंपाइलर पर अत्यधिक निर्भर है, क्योंकि बहुत सारे जटिल कोड का उपयोग किया जाता है, यह बाकी की तुलना में अधिक या कम हो सकता है।

सिफारिशें

एक सामान्य-उद्देश्य हैश फ़ंक्शन के रूप में, आप मुरमुरैश 3, सिटीहैश, स्पूकीहाश वी 2, गैपरफ का उपयोग कर सकते हैं।

DoS एक हैश टेबल पर हमला


आप एक DoS हमले की कल्पना कर सकते हैं जब कोई हमलावर हैश तालिका में डेटा फीड करता है ताकि वे सभी एक स्लॉट में आ जाएं, और यह पता चला कि एक तत्व की खोज के लिए सबसे खराब गति O (n) है, प्रत्येक नए टकराव का सम्मिलन O (n²) है, मेमोरी का आकार बढ़ता है ( हैश बाढ़)। किसी हमले को अंजाम देने के लिए, आपको एक हैश तालिका में मनमाना डेटा डालने में सक्षम होना चाहिए, और हैश फ़ंक्शन के टकरावों का पता लगाना होगा।
हमले को हैश DoS या, अधिक सामान्यतः, एल्गोरिथम जटिलता पर हमला कहा जाता है।

टकराव कई तरीकों से बनाए जा सकते हैं:


हम क्रिप्टोग्राफ़िक हैश फ़ंक्शंस के गुणों को सूचीबद्ध करते हैं (सामान्य उद्देश्य हैश फ़ंक्शंस पर लागू नहीं):


कभी-कभी अंतिम दो मानदंडों को क्रमशः पहले और दूसरे प्रकार के टकराव के प्रतिरोध कहा जाता है। हम केवल उस स्थिति को टकराव कहेंगे जब कोई संदेश या कोई हैश शुरू में सेट नहीं किया गया हो।

आमतौर पर "सबसे हल्का" हमला टकरावों की खोज है। "जन्मदिन" के विरोधाभास के कारण, इस हमले की जटिलता हैश की लंबाई से कम से कम दो गुना कम है। यह वह हमला है जो SHA-1 के लिए मौजूद है: टक्कर O (2 80 ) की सैद्धांतिक जटिलता के साथ, हमला O (2 61 ) की जटिलता को कम करता है। SHA-1 के लिए पहले या दूसरे प्रोटोटाइप को पुनर्स्थापित करने के लिए कोई हमले नहीं हैं।

टकराव के प्रतिरोध को बढ़ाने के लिए, आप कर सकते हैं:


एक क्रिप्टोग्राफ़िक फ़ंक्शन के आधार पर मैक में निम्नलिखित गुण होते हैं:


यदि हम एक क्रिप्टोग्राफ़िक हैश फ़ंक्शन (उदाहरण के लिए, SHA-3) या इसके आधार पर मैक का उपयोग करने का निर्णय लेते हैं, तो हम निम्नलिखित नुकसान का सामना करेंगे:


संदेश के अतिरिक्त, सार्वभौमिक हैश फ़ंक्शन को एक कुंजी भी मिलती है, जिसके उपयोग से यह फ़ंक्शन के परिमित परिवार से एक हैश फ़ंक्शन का चयन करता है। हमलावर को ज्ञात कुंजी के साथ, फ़ंक्शन को दूसरे प्रोटोटाइप को पुनर्स्थापित करने के लिए प्रतिरोधी होना चाहिए, लेकिन टकराव के प्रतिरोध की कोई आवश्यकता नहीं है। यदि हमलावर के लिए कुंजी अज्ञात है, तो फ़ंक्शन टकराव के लिए प्रतिरोधी होगा। हमारी गति आवश्यकताओं को देखते हुए, क्रिप्टोग्राफ़िक कार्यों के बिना करना उचित है।

टकरावों की खोज को जटिल करने के लिए, कभी-कभी वे सामान्य-प्रयोजन वाले हैश फ़ंक्शन के आधार पर बीज के रूप में कुंजी का उपयोग करके मैक बनाने की कोशिश करते हैं। लेकिन परिणामस्वरूप "मैक" में आवश्यक गुण नहीं होंगे, क्योंकि यह क्रिप्टोग्राफिक फ़ंक्शन के आधार पर नहीं बनाया गया है। निम्नलिखित हमले संभव हैं:


इसलिए, हालांकि यह दृष्टिकोण एक यादृच्छिक हमलावर के जीवन को जटिल बना सकता है, अक्सर यह सबसे सरल क्रिप्टानालिसिस (oCERT [8]) का सामना नहीं करता है। यह दिखाया गया है कि अधिकांश सामान्य-उद्देश्य वाले हैश फ़ंक्शन क्रिप्टोग्राफ़िक हमलों के लिए प्रतिरोधी नहीं हैं:


2008-2010 तक, अधिकांश भाषाओं और चौखटों में काफी सरल हैश फ़ंक्शन का उपयोग किया गया था:


अपवाद: पर्ल 4, ने 2003 के बाद से यादृच्छिक बीज के साथ वन-ए-ए-टाइम का उपयोग किया (इस साल सम्मेलन में इस हमले पर चर्चा की गई थी), बाद में (5.17.6) ने मुरमुरैश 3 का उपयोग किया।

टकरावों की संख्या को कम करने और DoS हमले को जटिल बनाने के लिए, पिछले एक साल में कई भाषाओं ने यादृच्छिक बीजों के साथ आधुनिक हैश फ़ंक्शन पर स्विच किया है। और जब यह पता चला कि इससे हमले की समस्या हल नहीं हुई है, तो कई ने हैश को दूसरी बार बदल दिया।

टकराव प्रतिरोधी मैक उदाहरण:


SipHash

2012, लंबाई 64 बिट्स, कुंजी 128 बिट्स।
गति: एक संदेश के 8 बाइट्स के लिए प्रति बाइट 15.50 चक्र, एक संदेश के 64 बाइट्स के लिए प्रति बाइट 3.66 चक्र, लंबे संदेशों के लिए प्रति बाइट 1.96 चक्र तक। तुलना के लिए, सबसे तेज़ अंतिम SHA-3 BLAKE-512: 8 बाइट्स के लिए प्रति बाइट 134 साइकल, 64 बाइट्स के लिए 20 बाइट प्रति बाइट।
आप कंप्रेशन और फाइनल के किसी भी राउंड का उपयोग कर सकते हैं। उदाहरण के लिए, SipHash-2-4 - 2 और 4 राउंड क्रमशः।

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



वर्तमान में भाषा की स्थिति इस प्रकार दिखती है:


कार्य खोलें:


अन्य सुरक्षा विधियां

यह माना जाता है कि इस हमले के खिलाफ लड़ाई वह कार्य नहीं है जिसे हैश फ़ंक्शन करना चाहिए। आप इसके बजाय कर सकते हैं:


सिफारिशें

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

सूत्रों का कहना है
[१] www.isthe.com/chongo/tech/comp/fnv/index.html
[२] प्लूटो स्कारब - हैश फंक्शंस
[३] code.google.com/p/smhasher/wiki/MurmurHash2Flaw
[४] "एक अच्छा हैश फंक्शन चुनना, भाग ३ - एके टेक ब्लॉग" - blog.aggregateknowledge.com/2012/02/02/choosing-a-good-hash-function-part-3
[५] tools.ietf.org/html/draft-eastlake-fnv-05
[६] www.ocert.org/advisories/ocert-2011-003.html
[[] Www.nruns.com/_downloads/advisory28122011.pdf
[[] Www.ocert.org/advisories/ocert-2012-001.html
[९] github.com/floodyberry/Marvin32/blob/master/Marvin32.c
[१०] "स्ट्रॉन्गली यूनिवर्सल स्ट्रांग हैशिंग तेज है" - arxiv.org/abs/1202.4961
[११] "अंक १३3०३: हैश टक्कर सुरक्षा मुद्दा" - Bugs.python.org/issue13703
[१२] crypto.stackexchange.com/questions/6408/from-hash-to-cryptographic-hash
[१३] १३१००२.net/siphash/#at
[१४] "अंक १४६२१: हैश फ़ंक्शन ठीक से यादृच्छिक नहीं है" - Bugs.python.org/issue14621
[१५] "अंक ४६०४ - गो - रनटाइम: एक तेज़, टक्कर-प्रतिरोधी हैश फ़ंक्शन पर जाएँ" - code.google.com/p/go/issues/detail?id=4604
[१६] "बग 880705 - CVE-2012-5373 जावा: मुरम हैश फंक्शन टक्कर (oCERT-2012-001)" - Bugzilla.redhat.com/show_bug.cgi?id=880705
[१ [] कोड. google.com/p/smhasher/wiki/SMHasher
[ १berry ] फ्लोडबरी.com / noncryptohashzoo

Source: https://habr.com/ru/post/In178955/


All Articles