इंद्रधनुष तालिका

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

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

फिलिप ओचस्लिन द्वारा इंद्रधनुष तालिका का आविष्कार मार्टिन हेलमैन द्वारा पहले के एक सरल एल्गोरिथम के एक अनुप्रयोग के रूप में किया गया था।

पृष्ठभूमि
उपयोगकर्ता प्रमाणीकरण के लिए, पासवर्ड या तो सादे पाठ या क्रिप्टोग्राफिक हैश के रूप में संग्रहीत किए जाते है। चूंकि डेटाबेस एक्सेस से समझौता होने पर प्लेनटेक्स्ट के रूप में संग्रहीत पासवर्ड आसानी से चोरी हो जाते है, डेटाबेस सामान्यतः इसके अतिरिक्त हैश स्टोर करते है। इस प्रकार, कोई भी - प्रमाणीकरण प्रणाली सहित - केवल डेटाबेस में संग्रहीत मूल्य को देखकर पासवर्ड सीख सकता है।

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

हैश से पासवर्ड सीखना एक स्ट्रिंग को खोजना है, जो हैश फ़ंक्शन में इनपुट करते समय, वही हैश बनाता है। यह हैश फ़ंक्शन के व्युत्क्रम फ़ंक्शन के समान है।

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

व्युत्पत्ति
या

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

प्रीकंप्यूटेड हैश श्रंखला
एक पासवर्ड हैश फ़ंक्शन एच और पासवर्ड पी का एक परिमित सेट दिया गया है, लक्ष्य एक डेटा संरचना की पूर्व गणना करना है, जो हैश फ़ंक्शन के किसी भी आउटपुट एच को दिया गया है, या तो पी में एक तत्व पी का पता लगा सकता है जैसे कि एच (पी) = एच, या निर्धारित करें कि पी में ऐसा कोई पी नहीं है। ऐसा करने की सबसे आसान विधि पी में सभी पी के लिए एच (पी) की गणना करना है, लेकिन फिर तालिका को संग्रहीत करने के लिए Θ(|पी|एन) के बिट्स की आवश्यकता होती है, जहां |पी| सेट पी का आकार है और एन एच के आउटपुट का आकार है, जो बड़े | पी | के लिए निषेधात्मक है। हैश श्रंखला इस स्थान की आवश्यकता को कम करने की एक तकनीक है। विचार एक रिडक्शन फंक्शन आर को परिभाषित करना है जो हैश वैल्यू को वापस पी में वैल्यू में मैप करता है। हैश फंकशन। हैश फ़ंक्शन को रिडक्शन फ़ंक्शन के साथ वैकल्पिक करके, वैकल्पिक पासवर्ड और हैश मान की श्रृंखला बनाई जाती है। उदाहरण के लिए, यदि पी लोअरकेस वर्णानुक्रमिक 6-वर्ण पासवर्ड का सेट था, और हैश मान 32 बिट लंबा था, तो एक श्रृंखला इस तरह दिख सकती है:
 * $${\color{Red}\mathtt{aaaaaa}}\,\xrightarrow[\;H\;]{}\,\mathtt{281DAF40}\,\xrightarrow[\;R\;]{}\,\mathtt{sgfnyd}\,\xrightarrow[\;H\;]{}\,\mathtt{920ECF10}\,\xrightarrow[\;R\;]{}\,{\color{Violet}\mathtt{kiebgt}}$$

कटौती फ़ंक्शन के लिए एकमात्र आवश्यकता एक विशिष्ट आकार में एक सादा पाठ मान वापस करने में सक्षम होना है।

तालिका उत्पन्न करने के लिए, हम P से प्रारंभिक पासवर्ड का एक यादृच्छिक सेट चुनते है, प्रत्येक के लिए कुछ निश्चित लंबाई k की श्रृंखलाओं की गणना करते है, और प्रत्येक श्रृंखला में केवल पहला और अंतिम पासवर्ड संग्रहीत करते है। पहले पासवर्ड को प्रारंभिक बिंदु कहा जाता है और अंतिम को समापन बिंदु कहा जाता है। उपरोक्त उदाहरण श्रृंखला में, aaaaaa प्रारंभिक बिंदु होगा और kiebgt समापन बिंदु होगा, और अन्य कोई भी पासवर्ड (या हैश मान) संग्रहीत नहीं किया जाएगा।

अब, उलटा करने के लिए एक हैश मान एच दिया गया है (इसके लिए संबंधित पासवर्ड खोजें), आर, फिर एच, फिर आर, और इसी तरह से एच से प्रारंभ होने वाली श्रृंखला की गणना करें। यदि किसी भी बिंदु पर मान तालिका में समापन बिंदुओं में से एक से मेल खाता है, तो संबंधित प्रारंभिक बिंदु पूरी श्रृंखला को फिर से बनाने की अनुमति देता है। इस बात की बहुत अधिक संभावना है कि इस श्रृंखला में मान h होगा, और यदि ऐसा है, तो श्रृंखला में तुरंत पूर्ववर्ती मान वह पासवर्ड p है जिसे हम चाहते है।

उदाहरण के लिए, हैश दिया 920ECF10, इसकी श्रृंखला की गणना पहले R लगाकर की जा सकती है:


 * $$\mathtt{920ECF10}\,\xrightarrow[\;R\;]{}\,{\color{Violet}\mathtt{kiebgt}}$$

चूँकि "kiebgt" हमारी तालिका में समापन बिंदुओं में से एक है, संबंधित प्रारंभिक पासवर्ड "aaaaaa" 920ECF10 तक पहुँचने तक इसकी श्रृंखला का अनुसरण करने की अनुमति देता है:


 * $${\color{Red}\mathtt{aaaaaa}}\,\xrightarrow[\;H\;]{}\,\mathtt{281DAF40}\,\xrightarrow[\;R\;]{}\,\mathtt{sgfnyd}\,\xrightarrow[\;H\;]{}\,\mathtt{920ECF10}$$

इस प्रकार, पासवर्ड sgfnyd है (या एक अलग पासवर्ड जिसमें समान हैश मान है)।

ध्यान दें कि इस श्रृंखला में हमेशा हैश मान h नहीं होता है, ऐसा हो सकता है कि एच से प्रारंभ होने वाली श्रृंखला एक अलग प्रारंभिक बिंदु वाली श्रृंखला के साथ विलीन हो जाती है। उदाहरण के लिए, हैश वैल्यू FB107E70 की श्रृंखला भी kiebgt की ओर ले जाती है:


 * $$\mathtt{FB107E70}\,\xrightarrow[\;R\;]{}\,\mathtt{bvtdll}\,\xrightarrow[\;H\;]{}\,\mathtt{0EE80890}\,\xrightarrow[\;R\;]{}\,{\color{Violet}\mathtt{kiebgt}}$$

संबंधित प्रारंभिक पासवर्ड द्वारा उत्पन्न श्रृंखला aaaaaa तब तक पीछा किया जाता है FB107E70 पहुंच गया। बिना पहुंचे ही तलाश खत्म हो जाएगी FB107E70 क्योंकि यह मान शृंखला में समाहित नहीं है। इसे झूठा अलार्म कहा जाता है। इस स्थितियों में, मैच को नजरअंदाज कर दिया जाता है और एच की श्रृंखला को दूसरे मैच की तलाश में बढ़ाया जाता है। यदि h की श्रृंखला बिना किसी अच्छे मिलान के लंबाई k तक विस्तारित हो जाती है, तो किसी भी श्रृंखला में पासवर्ड कभी भी निर्मित नहीं किया गया था।

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

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

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

इंद्रधनुष तालिका
इंद्रधनुष तालिका साधारण हैश श्रंखला के साथ टकराव की समस्या को प्रभावी ढंग से हल करते है, एकल कमी फ़ंक्शन R को संबंधित कमी कार्यों R1 से Rk के अनुक्रम के साथ बदलकर। इस तरह, दो श्रृंखलाओं के टकराने और विलय होने के लिए उन्हें एक ही पुनरावृत्ति पर समान मूल्य पर हिट करना होगा: परिणामस्वरूप, इन श्रृंखलाओं में अंतिम मान समान होंगे। एक अंतिम पोस्टप्रोसेसिंग पास तालिका में जंजीरों को क्रमबद्ध कर सकता है और किसी भी दोहरे श्रृंखला को हटा सकता है जिसमें अन्य श्रृंखलाओं के समान अंतिम मान होते है। तालिका भरने के लिए नई श्रृंखलाएं उत्पन्न की जाती है। ये श्रृंखलाएं टक्कर-मुक्त नहीं है (वे कुछ समय के लिए ओवरलैप हो सकती है) लेकिन वे विलय नहीं करेंगी, जिससे टक्करों की कुल संख्या में भारी कमी आती है।

रिडक्शन फ़ंक्शंस के अनुक्रमों का उपयोग करने से यह बदलता है कि लुकअप कैसे किया जाता है: क्योंकि रुचि का हैश मान श्रृंखला में किसी भी स्थान पर पाया जा सकता है, यह k विभिन्न श्रृंखलाओं को उत्पन्न करने के लिए आवश्यक है। पहली श्रृंखला मानती है कि हैश मान अंतिम हैश स्थिति में है और केवल आरके लागू होता है, अगली श्रृंखला मानती है कि हैश मान दूसरे-से-अंतिम हैश स्थिति में है और Rk−1, फिर H, फिर Rk लागू करता है, और इसी तरह अंतिम श्रृंखला तक, जो एच के साथ बारी-बारी से सभी कमी कार्यों को लागू करता है। यह एक गलत अलार्म उत्पन्न करने की एक नयी विधि बनती है: हैश मान की स्थिति का एक गलत "अनुमान" अनावश्यक रूप से एक श्रृंखला का मूल्यांकन कर सकता है।

चूंकि इंद्रधनुष तालिकाओं को अधिक श्रृंखलाओं का पालन करना पड़ता है, वे इसके लिए कम तालिकाओं का निर्माण करते है: विलय श्रृंखलाओं के कारण सरल हैश श्रृंखला तालिकाएं एक निश्चित आकार से आगे नहीं बढ़ सकती है, जो तेजी से अक्षम हो जाती है, इससे निपटने के लिए, वे कई तालिका बनाए रखते है, और प्रत्येक लुकअप को प्रत्येक तालिका के माध्यम से खोजना चाहिए। रेनबो तालिकाएँ k गुना बड़ी तालिकाओं के साथ समान प्रदर्शन प्राप्त कर सकती है, जिससे उन्हें k कम लुकअप का कारक निष्पादित करने की अनुमति मिलती है।

उदाहरण

 * 1) नीचे की छवि में हैश ("re3xes") से प्रारंभ करते हुए, कोई तालिका में उपयोग की गई अंतिम कमी की गणना करता है और जांचता है कि क्या पासवर्ड तालिका के अंतिम कॉलम में दिखाई देता है (चरण 1)।
 * 2) यदि परीक्षण विफल हो जाता है (रेम्बो तालिका में प्रकट नहीं होता है), तो दो अंतिम कटौतियों के साथ एक श्रृंखला की गणना करता है (इन दो कटौती को चरण 2 में दर्शाया गया है)
 * नोट: यदि यह नया परीक्षण फिर से विफल हो जाता है, तो पासवर्ड मिलने तक 3 कमी, 4 कमी आदि के साथ जारी रखें। यदि किसी श्रृंखला में पासवर्ड नहीं है, तो हमला विफल हो गया है।
 * 1) यदि यह परीक्षण सकारात्मक है (चरण 3, लिनक्स23 श्रृंखला के अंत में और तालिका में दिखाई देता है), तो पासवर्ड श्रृंखला की शुरुआत में प्राप्त किया जाता है जो लिनक्स23 का उत्पादन करता है। यहां हम तालिका में संग्रहीत संबंधित श्रृंखला की शुरुआत में पासवर्ड पाते है।
 * 2) इस बिंदु पर (चरण 4), एक श्रृंखला उत्पन्न करता है और प्रत्येक पुनरावृत्ति पर लक्ष्य हैश के साथ हैश की तुलना करता है। हम श्रृंखला में हैश re3xes पाते है, और वह पासवर्ड जिसने इसे (संस्कृति) श्रृंखला में एक कदम पहले उत्पन्न किया: हमला सफल रहा।



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

इंद्रधनुष तालिका उस हैश फंक्शन के लिए विशिष्ट है जिसे वे उदाहरण के लिए बनाए गए थे, एमडी 5 तालिका केवल एमडी 5 हैश को क्रैक कर सकते है। इस तकनीक के सिद्धांत का आविष्कार फिलिप ओचस्लिन [3] द्वारा समय/मेमोरी ट्रेडऑफ के एक तेज रूप के रूप में किया गया था, जिसे उन्होंने माइक्रोसॉफ़्ट विंडोज़ पासवर्ड क्रैकिंग ओफक्रैक में लागू किया था। अधिक शक्तिशाली रेनबोक्रैक प्रोग्राम बाद में विकसित किया गया था जो एलएम हैश, एमडी5, और एसएचए-1 सहित विभिन्न प्रकार के कैरेक्टर सेट और हैशिंग एल्गोरिदम के लिए इंद्रधनुष तालिका उत्पन्न और उपयोग कर सकता है।

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


 * $$T = |P| $$
 * $$t = \frac {|P|}{2L}$$

इस प्रकार 8-कैरेक्टर लोअरकेस अल्फ़ान्यूमेरिक पासवर्ड केस (|P| ≃ 3×1012) एक पर्सनल कंप्यूटर के साथ आसानी से ट्रैक्तालिका होगा जबकि 16-कैरेक्टर लोअरकेस अल्फ़ान्यूमेरिक पासवर्ड केस (|P| ≃ 10)25) पूरी तरह से असभ्य होता है।

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

या

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

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

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

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

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

सामान्य उपयोग
यूनिक्स, लिनक्स, और बीएसडी के लगभग सभी वितरण और विविधताएं लवण के साथ हैश का उपयोग करती है, चूंकि कई अनुप्रयोग नमक के बिना केवल एक हैश (सामान्यतः एमडी5) का उपयोग करते है। माइक्रोसॉफ्ट विंडोज एनटी/2000 परिवार लैन प्रबंधक और एनटी लैन प्रबंधक हैशिंग विधि (एमडी4 पर आधारित) का उपयोग करता है और यह अनसाल्टेड भी है, जो इसे सबसे लोकप्रिय जनरेट की गई तालिकाओं में से एक बनाता है। 2020 तक इंद्रधनुष तालिका का उपयोग कम देखा गया है क्योंकि नमकीन बनाना अधिक सामान्य है और जीपीयू-आधारित ब्रूट फोर्स के हमले अधिक व्यावहारिक हो गए है। चूंकि, इंद्रधनुष तालिका आठ और नौ अक्षरों वाले एनटीएलएम पासवर्ड के लिए उपलब्ध है।

यह भी देखें

 * ए5/1
 * पशुबल का आक्रमण
 * DistrRTgen
 * पोलार्ड का कंगारू एल्गोरिदम

बाहरी संबंध

 * Ophcrack page by Philippe Oechslin The original rainbow table research