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

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

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

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

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

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

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

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

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

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

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

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

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

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


 * $$\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 होता है (या एक अलग पासवर्ड जिसमें समान हैश मान होता है)।

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


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

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

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

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

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

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

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

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

उदाहरण

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



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

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

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


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

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

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

या

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

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

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

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

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

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

यह भी देखें

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

बाहरी संबंध

 * Ophcrack page by Philippe Oechslin The original rainbow table research