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

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

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

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

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

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

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

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

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

प्रीकंप्यूटेड हैश चेन
एक पासवर्ड हैश फ़ंक्शन एच और पासवर्ड पी का एक परिमित सेट दिया गया है, लक्ष्य एक डेटा संरचना की पूर्व गणना करना है, जो हैश फ़ंक्शन के किसी भी आउटपुट एच को दिया गया है, या तो पी में एक तत्व पी का पता लगा सकता है जैसे कि एच (पी) = एच, या निर्धारित करें कि पी में ऐसा कोई पी नहीं है। ऐसा करने का सबसे आसान तरीका पी में सभी पी के लिए एच (पी) की गणना करना है, लेकिन फिर तालिका को स्टोर करने के लिए बिग-ओ नोटेशन की आवश्यकता होती है। Θ (| पी | एन) अंतरिक्ष के बिट्स, जहां |पी| सेट पी का आकार है और एन एच के आउटपुट का आकार है, जो बड़े | पी | के लिए निषेधात्मक है। हैश चेन इस स्थान की आवश्यकता को कम करने की एक तकनीक है। विचार एक रिडक्शन फंक्शन आर को परिभाषित करना है जो हैश वैल्यू को वापस पी में वैल्यू में मैप करता है। हैश फ़ंक्शन का कोडोमेन। हैश फ़ंक्शन को रिडक्शन फ़ंक्शन के साथ वैकल्पिक करके, वैकल्पिक पासवर्ड और हैश मान की श्रृंखला बनाई जाती है। उदाहरण के लिए, यदि P लोअरकेस वर्णानुक्रमिक 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 को डिज़ाइन करना भी मुश्किल हो सकता है।

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

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

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

उदाहरण

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

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

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


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

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

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

या

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

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

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

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

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

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

यह भी देखें

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

बाहरी संबंध

 * Ophcrack page by Philippe Oechslin The original rainbow table research