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

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

चूंकि आमतौर पर इनपुट मानों का स्थान आउटपुट मानों के स्थान से बड़ा होता है, इसलिए टकराव अपरिहार्य होते हैं। एक आदर्श फ़ंक्शन के लिए, आउटपुट मानों का एक समान वितरण होता है, इसलिए टकराव की संभावना न्यूनतम होती है। इसे ची-स्क्वायर टेस्ट (।) से जांचा जा सकता है।
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 बिट्स के लिए: 10 000 में 1 की संभावना के साथ 927 हैश के बीच टक्कर होगी, 100 में 1 की संभावना के साथ 9 292 हैश के बीच टक्कर होगी,
- 64 बिट्स के लिए: 10 000 में 1 की संभावना के साथ 60.7 मिलियन हैश के बीच टक्कर होगी, 100 में 1 की संभावना के साथ 609 मिलियन हैश के बीच टक्कर होगी।

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

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

हमले को हैश DoS या, अधिक सामान्यतः, एल्गोरिथम जटिलता पर हमला कहा जाता है।
टकराव कई तरीकों से बनाए जा सकते हैं:
- अगर हैश फंक्शन पहले से जाना जाता है और हैश की लंबाई छोटी है, तो ब्रूट फोर्स मेथड का उपयोग करें: मीट-इन-द-मिडिल मेमोरी की गणना करें और खोजें।
- यदि हैश फ़ंक्शन टकरावों के लिए प्रतिरोधी नहीं है, तो टकरावों की गणना गणितीय रूप से की जा सकती है। गैर-क्रिप्टोग्राफ़िक फ़ंक्शन काफी सरल हैं, और टकरावों की खोज करने के लिए यह अक्सर रिवर्स ऑर्डर में एल्गोरिथ्म को निष्पादित करने के लिए पर्याप्त है ([6], oCERT [7])।
हम
क्रिप्टोग्राफ़िक हैश फ़ंक्शंस के
गुणों को सूचीबद्ध करते
हैं (सामान्य उद्देश्य हैश फ़ंक्शंस पर लागू नहीं):
- पूर्व-छवि की बहाली के लिए प्रतिरोध ( मी दिया गया, एक्स को खोजना असंभव है ताकि एच ( एक्स ) = एम ),
- दूसरे प्रोटोटाइप की बहाली के लिए प्रतिरोध ( एम 1 दिया गया, एम 2 को खोजना असंभव है ताकि एच ( एम 1 ) = एच ( एम 2 )),
- टकराव खोज का प्रतिरोध ( एम 1 और एम 2 को खोजना असंभव है ताकि एच ( एम 1 ) = एच ( एम 2 ))।
कभी-कभी अंतिम दो मानदंडों को क्रमशः पहले और दूसरे प्रकार के टकराव के प्रतिरोध कहा जाता है। हम केवल उस स्थिति को टकराव कहेंगे जब कोई संदेश या कोई हैश शुरू में सेट नहीं किया गया हो।
आमतौर पर "सबसे हल्का" हमला टकरावों की खोज है। "जन्मदिन" के विरोधाभास के कारण, इस हमले की जटिलता हैश की लंबाई से कम से कम दो गुना कम है। यह वह हमला है जो SHA-1 के लिए मौजूद है: टक्कर O (2
80 ) की सैद्धांतिक जटिलता के साथ, हमला O (2
61 ) की जटिलता को कम करता है। SHA-1 के लिए पहले या दूसरे प्रोटोटाइप को पुनर्स्थापित करने के लिए कोई हमले नहीं हैं।
टकराव के प्रतिरोध को बढ़ाने के लिए, आप कर सकते हैं:
- पर्याप्त लंबाई के हैश की गणना के लिए एक क्रिप्टोग्राफ़िक हैश फ़ंक्शन का उपयोग करें। यह टक्करों के लिए प्रतिरोधी होगा, लेकिन अगर टक्करों की गणना एक बार की जाती है, तो उनका उपयोग किसी भी सिस्टम पर हमला करने के लिए किया जा सकता है।
- HMAC (MAC एक क्रिप्टोग्राफिक हैश फ़ंक्शन के आधार पर) का उपयोग करें।
- PRF या एक यूनिवर्सल वन-वे हैश फ़ंक्शन के आधार पर मैक का उपयोग करें।
एक क्रिप्टोग्राफ़िक फ़ंक्शन के आधार पर
मैक में निम्नलिखित गुण होते हैं:
- आप किसी भी संदेश के लिए हैश पाने की क्षमता रखने वाले कुंजी को नहीं पा सकते हैं,
- आपको कुंजी को जाने बिना किसी संदेश के लिए सही हैश नहीं मिल सकता है।
- टक्करों का अधिक प्रतिरोध, क्योंकि हैश फ़ंक्शन का परिवार हमलावर को पहले से नहीं जानता है।
यदि हम एक क्रिप्टोग्राफ़िक हैश फ़ंक्शन (उदाहरण के लिए, SHA-3) या इसके आधार पर मैक का उपयोग करने का निर्णय लेते हैं, तो हम निम्नलिखित नुकसान का सामना करेंगे:
- हैश टेबल के लिए बहुत धीमी गति से: एल्गोरिथ्म लंबे संदेशों के लिए डिज़ाइन किया गया है, और छोटे संदेशों के लिए धीरे काम करता है,
- यद्यपि हैश की पूरी लंबाई टक्करों के लिए प्रतिरोधी है, लेकिन अगर हम केवल पहले n बिट्स लेते हैं, तो यह टक्करों के लिए खोज को सरल करेगा,
- HMAC के मामले में, क्रिप्टोग्राफ़िक हैश फ़ंक्शन का उपयोग किया जाता है जो टकराव प्रतिरोध को सुनिश्चित करने के लिए अनावश्यक कार्य करते हैं, हालांकि यह आवश्यक नहीं है क्योंकि गुप्त कुंजी का उपयोग किया जाता है।
संदेश के अतिरिक्त,
सार्वभौमिक हैश फ़ंक्शन को एक कुंजी भी मिलती है, जिसके उपयोग से यह फ़ंक्शन के परिमित परिवार से एक हैश फ़ंक्शन का चयन करता है। हमलावर को ज्ञात कुंजी के साथ, फ़ंक्शन को दूसरे प्रोटोटाइप को पुनर्स्थापित करने के लिए प्रतिरोधी होना चाहिए, लेकिन टकराव के प्रतिरोध की कोई आवश्यकता नहीं है। यदि हमलावर के लिए कुंजी अज्ञात है, तो फ़ंक्शन टकराव के लिए प्रतिरोधी होगा। हमारी गति आवश्यकताओं को देखते हुए, क्रिप्टोग्राफ़िक कार्यों के बिना करना उचित है।
टकरावों की खोज को जटिल करने के लिए, कभी-कभी वे सामान्य-प्रयोजन वाले हैश फ़ंक्शन के आधार पर बीज के रूप में कुंजी का उपयोग करके मैक बनाने की कोशिश करते हैं। लेकिन परिणामस्वरूप "मैक" में आवश्यक गुण नहीं होंगे, क्योंकि यह क्रिप्टोग्राफिक फ़ंक्शन के आधार पर नहीं बनाया गया है। निम्नलिखित हमले संभव हैं:
- बीज के ज्ञान के बिना टकराव पैदा करना, हैश फ़ंक्शन के गणितीय विश्लेषण का उपयोग करना,
- बीज का पता लगाएं, हैश फ़ंक्शन के परिणाम तक पहुंच (उदाहरण के लिए, प्रोग्राम डिफ़ॉल्ट हैश द्वारा सॉर्ट किए गए डेटा लौटाता है, यह हैश मान के बारे में डेटा लीक प्रदान करता है),
- समय पर हमले के माध्यम से डेटा प्राप्त करें।
इसलिए, हालांकि यह दृष्टिकोण एक यादृच्छिक हमलावर के जीवन को जटिल बना सकता है, अक्सर यह सबसे सरल क्रिप्टानालिसिस (oCERT [8]) का सामना नहीं करता है। यह दिखाया गया है कि अधिकांश सामान्य-उद्देश्य वाले हैश फ़ंक्शन क्रिप्टोग्राफ़िक हमलों के लिए प्रतिरोधी नहीं हैं:
- xxHash कुंजी को जाने बिना, हैश [12] को जानने के बिना एक दूसरे प्रोटोटाइप को पुनर्स्थापित करने के लिए प्रतिरोधी नहीं है।
- मुरमुरैश 2, मुरमुरैश 3, सिटीहैश 1.0.3 कुंजी और हैश को जाने बिना टक्करों के लिए प्रतिरोधी नहीं हैं: एक तरीका यह था कि जल्दी से उन टकरावों का पता लगाया जाए जो बीज की पसंद से स्वतंत्र हैं ("सार्वभौमिक" बहुसंकेतन) [13]।
- पायथन हैश कुंजी रिकवरी के लिए प्रतिरोधी नहीं है, एक हैश फ़ंक्शन का परिणाम जानने के बाद, जिसके बाद मीट-इन-बीच [13] का उपयोग करके 64-बिट राज्य के खिलाफ एक हमले को अंजाम देना संभव है।
- पायथन हैश कुंजी और हैश [14] को जाने बिना टक्कर प्रतिरोधी नहीं है।
2008-2010 तक, अधिकांश भाषाओं और चौखटों में काफी सरल हैश फ़ंक्शन का उपयोग किया गया था:
- PHP 4, ASP.NET और जावास्क्रिप्ट: DJBX33X,
- PHP 5, रूबी 1.8 और जावा: DJBX33A,
- जंग: डीजेबी (2012)
- अजगर: संशोधित एफएनवी,
- जुरी: मुरमुरश 2,
- हास्केल: एफएनवी -1,
- रेडिस: djbhash, बाद में मुरमुरैश 2।
अपवाद: पर्ल 4, ने 2003 के बाद से यादृच्छिक बीज के साथ वन-ए-ए-टाइम का उपयोग किया (इस साल सम्मेलन में इस हमले पर चर्चा की गई थी), बाद में (5.17.6) ने मुरमुरैश 3 का उपयोग किया।
टकरावों की संख्या को कम करने और DoS हमले को जटिल बनाने के लिए, पिछले एक साल में कई भाषाओं ने यादृच्छिक बीजों के साथ आधुनिक हैश फ़ंक्शन पर स्विच किया है। और जब यह पता चला कि इससे हमले की समस्या हल नहीं हुई है, तो कई ने हैश को दूसरी बार बदल दिया।
टकराव
प्रतिरोधी मैक उदाहरण:
- VMAC, UMAC, Poly1305-AES - AES-128 का उपयोग करें, लंबे संदेशों के लिए इष्टतम हैं।
- SipHash - एक PRF है, क्रिप्टोग्राफ़िक एल्गोरिदम का उपयोग नहीं करता है, छोटे संदेशों के लिए इष्टतम है।
- "मजबूत रूप से सार्वभौमिक स्ट्रिंग हैशिंग तेजी से है" [10]।
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) पर आधारित टकराव मुक्त हैश फ़ंक्शन के रूप में विकसित किया गया था। चूंकि इसे यादृच्छिक कुंजी के साथ उपयोग करने का इरादा है, इसलिए टकराव के प्रतिरोध की आवश्यकता नहीं है। यह गैर-क्रिप्टोग्राफिक हैश फ़ंक्शन से भिन्न होता है कि यह कुंजी के साथ सही और सुरक्षित रूप से काम करता है, दोनों मैक गुणों और एक सार्वभौमिक हैश फ़ंक्शन के गुण प्रदान करता है।

वर्तमान में भाषा की स्थिति इस प्रकार दिखती है:
- जंग: SipHash 2-4,
- रेल्स: सिपहैश 2-4,
- पर्ल (5.8.1): सिपहैश 2-4 (64 बिट्स) और एक-एक-बार (32 बिट्स),
- रूबी (1.9.3-p327), रुबी: सिपाश 2-4,
- अजगर (२. own.३, ३.२.३): अपना स्वयं का हैश फ़ंक्शन, जब -R चालू होता है, एक यादृच्छिक बीज जोड़ा जाता है:
- हास्केल (1.2): सिपाश (स्ट्रिंग्स के लिए),
- गो: एईश (एईएस-एनआई समर्थन के साथ) या एक साधारण देशी फ़ंक्शन (एफएनवी -1 की भिन्नता),
- PHP (5): DJBX33A, GET / POST तत्वों (max_input_vars) की संख्या पर एक सीमा है,
- जावा एसई (7u6 और 8): जब jdk.map.althashing.threshold को सक्षम किया जाता है, तो यादृच्छिक बीज (वैकल्पिक स्ट्रिंग हैशिंग) के साथ मुरमुरैश का उपयोग किया जाता है,
- स्काला: बाइट्सवाप 32 और मुरमुरैश 3 या हैश जावा से,
- .NET (4.5): UseRandomizedStringHashAl एल्गोरिदम को सक्षम करते समय, मार्विन 32 के स्वयं के विकास का उपयोग किया जाता है [9]।
कार्य खोलें:
- जावा: मुरमुरैश क्रिप्टैनालिसिस पर कोई प्रतिक्रिया नहीं [16],
- पायथन: मान्यता है कि "-R" स्विच बेकार है, और हैन्ड टेबल हमले को ठीक करने का सबसे अच्छा तरीका है [14]
- गो: इनेश को लागू किया, लेकिन अभी तक कोई क्रिप्टोकरंसी नहीं है [15]।
अन्य सुरक्षा विधियां
यह माना जाता है कि इस हमले के खिलाफ लड़ाई वह कार्य नहीं है जिसे हैश फ़ंक्शन करना चाहिए। आप इसके बजाय कर सकते हैं:
- सबसे खराब स्थिति में कम जटिलता वाले डेटा संरचनाओं का उपयोग करें। उदाहरण के लिए, एक संतुलित पेड़ - एक एवीएल पेड़ या एक लाल-काला पेड़ - किसी भी मामले में ओ (लॉग एन ) की गारंटी देता है। नए हमलों को ध्यान में रखना महत्वपूर्ण है, उदाहरण के लिए, विशेष रूप से उत्पन्न आंकड़ों के साथ एक पेड़ के कैस्केडिंग असंतुलन, लेकिन इस मामले में भी हमें एक बेहतर परिणाम मिलेगा - ओ ( एन लॉग एन )।
- संसाधित होने वाली वस्तुओं की संख्या को सीमित करें (उदाहरण के लिए, POST / GET),
- यदि अपवादों की संख्या सीमा से अधिक है (या संभव हो तो केवल डेटा छोड़ें), एक अपवाद बढ़ाएं
- सीपीयू टाइमआउट ऑपरेशन के लिए सामान्य से अधिक व्यस्त है, तो एक अपवाद उठाएं।
सिफारिशें
डेटा संरचनाओं के लिए जो अविश्वसनीय डेटा का उपयोग करते हैं, जटिलता ओ (लॉग
एन ) के साथ एल्गोरिदम लागू करते हैं, उदाहरण के लिए, एक संतुलित पेड़। यदि संभव न हो, तो फ़ंक्शंस (मैक) के परिवार से बेतरतीब ढंग से चुने गए हैश फ़ंक्शन का उपयोग करें, उदाहरण के लिए, वीएमएसी या सिफैश।