यूनिवर्सल हैशिंग: Difference between revisions
No edit summary |
(→परिचय) |
||
Line 44: | Line 44: | ||
ध्यान दें कि सार्वभौमिकता की परिभाषा केवल इस बात से संबंधित है कि क्या <math>h(x)-h(y)=0</math>, जो संघटनों की गणना करता है। एकसमान असमानता गुण अधिक दृढ़ होता है। | ध्यान दें कि सार्वभौमिकता की परिभाषा केवल इस बात से संबंधित है कि क्या <math>h(x)-h(y)=0</math>, जो संघटनों की गणना करता है। एकसमान असमानता गुण अधिक दृढ़ होता है। | ||
(इसी प्रकार, यूनिवर्सल समूह XOR यूनिवर्सल हो सकता है यदि <math>\forall x,y\in U, ~ x\ne y</math>, मान <math>h(x) \oplus h(y) ~\bmod~ m</math> को <math>[m]</math> में समान रूप से वितरित किया जाता है जहां <math>\oplus</math> बिटवाइज़ विशिष्ट या ऑपरेशन है। यह केवल तभी संभव है जब <math>m</math> दो की घात हो।) | (इसी प्रकार, यूनिवर्सल समूह एक्सओआर (XOR) यूनिवर्सल हो सकता है यदि <math>\forall x,y\in U, ~ x\ne y</math>, मान <math>h(x) \oplus h(y) ~\bmod~ m</math> को <math>[m]</math> में समान रूप से वितरित किया जाता है जहां <math>\oplus</math> बिटवाइज़ विशिष्ट या ऑपरेशन है। यह केवल तभी संभव है जब <math>m</math> दो की घात हो।) | ||
एक और भी दृढ़ स्थिति युग्मानूसार स्वतंत्रता है- हमारे पास यह गुण है जब <math>\forall x,y\in U, ~ x\ne y</math> हमारे पास संभावना है कि <math>x,y</math> हैश मानों <math>z_1, z_2</math> के किसी भी युग्म के लिए हैश होगा जैसे कि वे पूरी तरह से यादृच्छिक थे- <math>P(h(x)=z_1 \land h(y)=z_2)= 1/m^2</math>। युग्मानूसार स्वतंत्रता को कभी-कभी दृढ़ सार्वभौमिकता कहा जाता है। | एक और भी दृढ़ स्थिति [[जोड़ीवार स्वतंत्र|युग्मानूसार स्वतंत्रता]] है- हमारे पास यह गुण है जब <math>\forall x,y\in U, ~ x\ne y</math> हमारे पास संभावना है कि <math>x,y</math> हैश मानों <math>z_1, z_2</math> के किसी भी युग्म के लिए हैश होगा जैसे कि वे पूरी तरह से यादृच्छिक थे- <math>P(h(x)=z_1 \land h(y)=z_2)= 1/m^2</math>। युग्मानूसार स्वतंत्रता को कभी-कभी दृढ़ सार्वभौमिकता कहा जाता है। | ||
एक अन्य गुण एकरूपता है. हम कहते हैं कि समूह एक समान है यदि सभी हैश मान समान रूप से संभावित हैं- <math>P(h(x)=z)=1/m</math> किसी भी हैश मान <math>z</math> के लिए। सार्वभौमिकता का तात्पर्य एकरूपता नहीं है। हालाँकि, दृढ़ सार्वभौमिकता का तात्पर्य एकरूपता से है। | एक अन्य गुण एकरूपता है. हम कहते हैं कि समूह एक समान है यदि सभी हैश मान समान रूप से संभावित हैं- <math>P(h(x)=z)=1/m</math> किसी भी हैश मान <math>z</math> के लिए। सार्वभौमिकता का तात्पर्य एकरूपता नहीं है। हालाँकि, दृढ़ सार्वभौमिकता का तात्पर्य एकरूपता से है। | ||
समान दूरी के गुण वाले समूह को देखते हुए, कोई हैश फ़ंक्शन में <math>[m]</math> मानों के साथ एक समान रूप से वितरित यादृच्छिक स्थिरांक जोड़कर | समान दूरी के गुण वाले समूह को देखते हुए, कोई हैश फ़ंक्शन में <math>[m]</math> मानों के साथ एक समान रूप से वितरित यादृच्छिक स्थिरांक जोड़कर युग्मानूसार स्वतंत्र या दृढ़ता से यूनिवर्सल हैश समूह का उत्पादन कर सकता है। (इसी प्रकार, यदि <math>m</math> दो की घात है, तो हम एक्सओआर यूनिवर्सल हैश समूह से एक विशेष या समान रूप से वितरित यादृच्छिक स्थिरांक के साथ युग्मानूसार स्वतंत्रता प्राप्त कर सकते हैं।) चूंकि स्थिरांक द्वारा बदलाव कभी-कभी अनुप्रयोगों में अप्रासंगिक होता है (जैसे हैश टेबल), समान दूरी के गुण और युग्मानूसार स्वतंत्र के बीच सावधानीपूर्वक अंतर कभी-कभी नहीं किया जाता है।<ref> | ||
{{cite book | {{cite book | ||
| last1 = Motwani | | last1 = Motwani | ||
Line 87: | Line 63: | ||
}} | }} | ||
</ref> | </ref> | ||
[[UMAC]] और [[Poly1305-AES]] और कई अन्य [[संदेश प्रमाणीकरण कोड]] एल्गोरिदम यूनिवर्सल हैशिंग पर आधारित हैं।<ref> | कुछ अनुप्रयोगों (जैसे हैश टेबल) के लिए, हैश मानों के कम से कम महत्वपूर्ण बिट्स का भी यूनिवर्सल होना महत्वपूर्ण है। जब कोई समूह दृढ़ता से यूनिवर्सल होता है, तो इसकी गारंटी होती है- यदि <math>H</math>, <math>m=2^L</math> के साथ दृढ़ता से यूनिवर्सल समूह है, तो सभी <math>h \in H</math> के लिए <math>h \bmod{2^{L'}}</math> फ़ंक्शन से बना समूह भी <math>L'\leq L</math> के लिए दृढ़ता से यूनिवर्सल है। दुर्भाग्य से, यह बात (केवल) यूनिवर्सल समूहों के लिए सत्य नहीं है। उदाहरण के लिए, सर्वसमिका फ़ंक्शन <math>h(x)=x</math> से बना समूह स्पष्ट रूप से यूनिवर्सल है, लेकिन फ़ंक्शन <math>h(x)=x \bmod{2^{L'}}</math> से बना समूह यूनिवर्सल होने में विफल रहता है। | ||
[[UMAC|यूएमएसी (UMAC)]] और [[Poly1305-AES|पॉली1305-एईएस (Poly1305-AES)]] और कई अन्य [[संदेश प्रमाणीकरण कोड]] एल्गोरिदम यूनिवर्सल हैशिंग पर आधारित हैं।<ref> | |||
David Wagner, ed. | David Wagner, ed. | ||
[https://books.google.com/books?id=11BsCQAAQBAJ "Advances in Cryptology - CRYPTO 2008"]. | [https://books.google.com/books?id=11BsCQAAQBAJ "Advances in Cryptology - CRYPTO 2008"]. | ||
Line 98: | Line 75: | ||
2014. | 2014. | ||
p. 10. | p. 10. | ||
</ref> | </ref> ऐसे अनुप्रयोगों में, सॉफ़्टवेयर प्रत्येक संदेश के लिए विशिष्ट अस्थायी रूप के आधार पर, प्रत्येक संदेश के लिए एक नया हैश फ़ंक्शन चुनता है। | ||
ऐसे अनुप्रयोगों में, सॉफ़्टवेयर प्रत्येक संदेश के लिए एक नया हैश फ़ंक्शन चुनता | |||
कई हैश | कई हैश टेबल कार्यान्वयन यूनिवर्सल हैशिंग पर आधारित हैं। ऐसे अनुप्रयोगों में, प्रायः सॉफ़्टवेयर नया हैश फ़ंक्शन तभी चुनता है जब उसे पता चलता है कि "बहुत अधिक" कीज़ टकरा गई हैं तब तक, एक ही हैश फ़ंक्शन का बार-बार उपयोग किया जाता रहेगा। (कुछ संघटन समाधान योजनाएं, जैसे कि [[ गतिशील उत्तम हैशिंग |गतिशील पूर्ण हैशिंग]], प्रत्येक बार संघटन होने पर नया हैश फ़ंक्शन चुनती हैं। अन्य संघटन समाधान योजनाएं, जैसे [[कोयल हैशिंग|कुक्कू हैशिंग]] और [[2-विकल्प हैशिंग]], नया हैश फ़ंक्शन चुनने से पहले कई संघटनों की अनुमति देती हैं)। पूर्णांकों, सदिशों और स्ट्रिंग्स के लिए सबसे तीव्र ज्ञात यूनिवर्सल और दृढ़ता से यूनिवर्सल हैश फ़ंक्शन का सर्वेक्षण पाया गया है।<ref> | ||
ऐसे अनुप्रयोगों में, | |||
(कुछ | |||
{{cite arXiv | {{cite arXiv | ||
| last = Thorup | | last = Thorup | ||
Line 114: | Line 87: | ||
== गणितीय गारंटी == | == गणितीय गारंटी == | ||
<math>n</math> कीज़ के किसी भी निश्चित समुच्चय <math>S</math> के लिए, यूनिवर्सल समूह का उपयोग निम्नलिखित गुणों की गारंटी देता है। | |||
# | # <math>S</math> में किसी निश्चित <math>x</math> के लिए, बिन <math>h(x)</math> में कीज़ की अपेक्षित संख्या <math>n/m</math> है। श्रृंखलन द्वारा हैश तालिकाओं को कार्यान्वित करते समय, यह संख्या की <math>x</math> (उदाहरण के लिए परिप्रश्न, सम्मिलन या विलोपन) से जुड़े ऑपरेशन के अपेक्षित कार्यावधि के समानुपाती होती है। | ||
# | # <math>S</math> में <math>x\ne y</math> के साथ कीज़ <math>x,y</math> के युग्म की अपेक्षित संख्या जो (<math>h(x) = h(y)</math>) से टकराती है, ऊपर <math>n(n-1)/2m</math> से परिबद्ध है, जो <math>O(n^2/m)</math> क्रम की है। जब बिन्स की संख्या, <math>m</math> को <math>n</math> में रैखिक चुना जाता है (अर्थात, <math>\Omega(n)</math> में फ़ंक्शन द्वारा निर्धारित किया जाता है, तो संघटन की अपेक्षित संख्या <math>O(n)</math> होती है। जब <math>n^2</math> बिन्स में हैशिंग की जाती है, तो कम से कम आधी संभावना के साथ कोई संघटन नहीं होता है। | ||
# | #कम से कम <math>t</math> कीज़ वाली बिन्स में कीज़ की अपेक्षित संख्या ऊपर <math>2n/(t-2(n/m)+1)</math> से परिबद्ध है।<ref name="BDP"> | ||
{{cite journal | {{cite journal | ||
| doi = 10.1007/s00453-007-9036-3 | | doi = 10.1007/s00453-007-9036-3 | ||
Line 130: | Line 103: | ||
| year = 2008 | | year = 2008 | ||
| s2cid = 9855995 | url = http://people.csail.mit.edu/mip/papers/3sum/3sum.pdf | | s2cid = 9855995 | url = http://people.csail.mit.edu/mip/papers/3sum/3sum.pdf | ||
}}</ref> इस प्रकार, यदि प्रत्येक बिन की क्षमता को औसत आकार | }}</ref> इस प्रकार, यदि प्रत्येक बिन की क्षमता को औसत आकार (<math>t = 3n/m</math>) से तीन गुना तक सीमित किया जाता है, तो अतिप्रवाहित बिन्स में कीज़ की कुल संख्या अधिकतम <math>O(m)</math> होती है। यह केवल उस हैश समूह के साथ लागू होता है जिसकी संघटन की संभावना <math>1/m</math> से ऊपर होती है। यदि कमजोर परिभाषा का उपयोग किया जाता है, इसे <math>O(1/m)</math> द्वारा सीमित किया जाता है, तो यह परिणाम अब सत्य नहीं है।<ref name="BDP" /> | ||
जैसा कि उपरोक्त गारंटी किसी भी निश्चित | जैसा कि उपरोक्त गारंटी किसी भी निश्चित समुच्चय <math>S</math> के लिए होती है, वे तब भी मान्य होती हैं जब डेटा समुच्चय किसी प्रतिद्वंद्वी द्वारा चुना जाता है। हालाँकि, प्रतिद्वंद्वी को एल्गोरिदम के हैश फ़ंक्शन के यादृच्छिक चयन से पहले (या उससे स्वतंत्र) यह विकल्प चुनना होगा। यदि प्रतिद्वंद्वी एल्गोरिथ्म की यादृच्छिक चयन का निरीक्षण कर सकता है, तो यादृच्छिकता का कोई उद्देश्य नहीं है, और स्थिति नियतात्मक हैशिंग के समान है। | ||
दूसरी और तीसरी गारंटी | दूसरी और तीसरी गारंटी का उपयोग प्रायः [[डबल हैशिंग|रीहैशिंग]] के संयोजन में किया जाता है। उदाहरण के लिए, कुछ <math>O(n)</math> संख्या में संघटनों को संभालने के लिए यादृच्छिक एल्गोरिदम तैयार किया जा सकता है। यदि यह बहुत अधिक संघटन देखता है, तो यह समूह से एक और यादृच्छिक <math>h</math> चुनता है और दोहराता है। सार्वभौमिकता यह गारंटी देती है कि पुनरावृत्ति की संख्या [[ज्यामितीय वितरण|ज्यामितीय यादृच्छिक]] चर है। | ||
== निर्माण == | == निर्माण == | ||
चूँकि किसी भी कंप्यूटर डेटा को एक या अधिक मशीनी शब्दों के रूप में दर्शाया जा सकता है, इसलिए आमतौर पर तीन प्रकार के डोमेन के लिए हैश फ़ंक्शन की आवश्यकता होती है: मशीनी शब्द (पूर्णांक); मशीनी शब्दों के निश्चित-लंबाई वाले वैक्टर; और चर-लंबाई वाले | चूँकि किसी भी कंप्यूटर डेटा को एक या अधिक मशीनी शब्दों के रूप में दर्शाया जा सकता है, इसलिए आमतौर पर तीन प्रकार के डोमेन के लिए हैश फ़ंक्शन की आवश्यकता होती है: मशीनी शब्द (पूर्णांक); मशीनी शब्दों के निश्चित-लंबाई वाले वैक्टर; और चर-लंबाई वाले सदिश (स्ट्रिंग्स)। | ||
=== पूर्णांकों को हैश करना === | === पूर्णांकों को हैश करना === | ||
Line 223: | Line 196: | ||
=== हैशिंग | === हैशिंग सदिश === | ||
यह अनुभाग मशीनी शब्दों के एक निश्चित-लंबाई वाले | यह अनुभाग मशीनी शब्दों के एक निश्चित-लंबाई वाले सदिश को हैश करने से संबंधित है। इनपुट को सदिश के रूप में समझें <math>\bar{x} = (x_0, \dots, x_{k-1})</math> का <math>k</math> मशीनी शब्द (पूर्णांक) <math>w</math> प्रत्येक बिट)। अगर <math>H</math> समान अंतर संपत्ति वाला एक सार्वभौमिक परिवार है, निम्नलिखित परिवार (कार्टर और वेगमैन के समय का है)।<ref name=CW77 /> इसमें समान अंतर गुण भी है (और इसलिए सार्वभौमिक है): | ||
: <math>h(\bar{x}) = \left( \sum_{i=0}^{k-1} h_i(x_i) \right)\,\bmod~m</math>, जहां प्रत्येक <math>h_i\in H</math> यादृच्छिक रूप से स्वतंत्र रूप से चुना जाता है। | : <math>h(\bar{x}) = \left( \sum_{i=0}^{k-1} h_i(x_i) \right)\,\bmod~m</math>, जहां प्रत्येक <math>h_i\in H</math> यादृच्छिक रूप से स्वतंत्र रूप से चुना जाता है। | ||
Line 240: | Line 213: | ||
}}, section 5.3 | }}, section 5.3 | ||
</ref> | </ref> | ||
व्यवहार में, यदि डबल-सटीक अंकगणित उपलब्ध है, तो इसे हैश फ़ंक्शंस के मल्टीपल-शिफ्ट हैश परिवार के साथ त्वरित किया जाता है।<ref name=DGMP />एक | व्यवहार में, यदि डबल-सटीक अंकगणित उपलब्ध है, तो इसे हैश फ़ंक्शंस के मल्टीपल-शिफ्ट हैश परिवार के साथ त्वरित किया जाता है।<ref name=DGMP />एक सदिश के साथ हैश फ़ंक्शन को प्रारंभ करें <math>\bar{a} = (a_0, \dots, a_{k-1})</math> यादृच्छिक विषम पूर्णांकों पर <math>2w</math> प्रत्येक बिट. फिर यदि डिब्बे की संख्या है <math>m=2^M</math> के लिए <math>M\le w</math>: | ||
: <math>h_{\bar{a}}(\bar{x}) = \left(\big( \sum_{i=0}^{k-1} x_i \cdot a_i \big) ~\bmod ~ 2^{2w} \right) \,\, \mathrm{div}\,\, 2^{2w-M}</math>. | : <math>h_{\bar{a}}(\bar{x}) = \left(\big( \sum_{i=0}^{k-1} x_i \cdot a_i \big) ~\bmod ~ 2^{2w} \right) \,\, \mathrm{div}\,\, 2^{2w-M}</math>. | ||
गुणन की संख्या को आधा करना संभव है, जो व्यवहार में मोटे तौर पर दो गुना गति में बदल जाता है।<ref name=thorup09 />एक | गुणन की संख्या को आधा करना संभव है, जो व्यवहार में मोटे तौर पर दो गुना गति में बदल जाता है।<ref name=thorup09 />एक सदिश के साथ हैश फ़ंक्शन को प्रारंभ करें <math>\bar{a} = (a_0, \dots, a_{k-1})</math> यादृच्छिक विषम पूर्णांकों पर <math>2w</math> प्रत्येक बिट. निम्नलिखित हैश परिवार सार्वभौमिक है:<ref name=black> | ||
{{cite conference | {{cite conference | ||
| last1 = Black | first1 = J. | | last1 = Black | first1 = J. | ||
Line 257: | Line 230: | ||
: <math>h_{\bar{a}}(\bar{x}) = \left(\Big( \sum_{i=0}^{\lceil k/2 \rceil} (x_{2i} + a_{2i}) \cdot (x_{2i+1} + a_{2i+1}) \Big) \bmod ~ 2^{2w} \right) \,\, \mathrm{div}\,\, 2^{2w-M}</math>. | : <math>h_{\bar{a}}(\bar{x}) = \left(\Big( \sum_{i=0}^{\lceil k/2 \rceil} (x_{2i} + a_{2i}) \cdot (x_{2i+1} + a_{2i+1}) \Big) \bmod ~ 2^{2w} \right) \,\, \mathrm{div}\,\, 2^{2w-M}</math>. | ||
यदि डबल-प्रिसिजन ऑपरेशन उपलब्ध नहीं हैं, तो कोई इनपुट को आधे-शब्दों के | यदि डबल-प्रिसिजन ऑपरेशन उपलब्ध नहीं हैं, तो कोई इनपुट को आधे-शब्दों के सदिश के रूप में व्याख्या कर सकता है (<math>w/2</math>-बिट पूर्णांक)। इसके बाद एल्गोरिदम का उपयोग किया जाएगा <math>\lceil k/2 \rceil</math> गुणन, कहाँ <math>k</math> सदिश में आधे शब्दों की संख्या थी। इस प्रकार, एल्गोरिदम इनपुट के प्रति शब्द एक गुणन की दर से चलता है। | ||
उसी योजना का उपयोग पूर्णांकों को हैश करने के लिए भी किया जा सकता है, उनके बिट्स को बाइट्स के वैक्टर के रूप में व्याख्या करके। इस संस्करण में, | उसी योजना का उपयोग पूर्णांकों को हैश करने के लिए भी किया जा सकता है, उनके बिट्स को बाइट्स के वैक्टर के रूप में व्याख्या करके। इस संस्करण में, सदिश तकनीक को सारणीबद्ध हैशिंग के रूप में जाना जाता है और यह गुणन-आधारित सार्वभौमिक हैशिंग योजनाओं के लिए एक व्यावहारिक विकल्प प्रदान करता है।<ref>{{cite conference | ||
| last1 = Pătraşcu | first1 = Mihai | author1-link = Mihai Pătrașcu (computer scientist) | | last1 = Pătraşcu | first1 = Mihai | author1-link = Mihai Pătrașcu (computer scientist) | ||
| last2 = Thorup | first2 = Mikkel | author2-link = Mikkel Thorup | | last2 = Thorup | first2 = Mikkel | author2-link = Mikkel Thorup | ||
Line 279: | Line 252: | ||
| pages = 1624–1638 | | pages = 1624–1638 | ||
| doi = 10.1093/comjnl/bxt070 | | doi = 10.1093/comjnl/bxt070 | ||
| publisher = Oxford University Press}}</ref> एक | | publisher = Oxford University Press}}</ref> एक सदिश के साथ हैश फ़ंक्शन को प्रारंभ करें <math>\bar{a} = (a_0, \dots, a_{k})</math> यादृच्छिक पूर्णांकों पर <math>2w</math> बिट्स गणना करना | ||
: <math>h_{\bar{a}}(\bar{x})^{\mathrm{strong}} = (a_0 + \sum_{i=0}^{k-1} a_{i+1} x_{i} \bmod ~ 2^{2w} ) \,\, \mathrm{div}\,\, 2^w </math>. | : <math>h_{\bar{a}}(\bar{x})^{\mathrm{strong}} = (a_0 + \sum_{i=0}^{k-1} a_{i+1} x_{i} \bmod ~ 2^{2w} ) \,\, \mathrm{div}\,\, 2^w </math>. | ||
Line 287: | Line 260: | ||
=== हैशिंग स्ट्रिंग === | === हैशिंग स्ट्रिंग === | ||
यह मशीनी शब्दों के एक चर-आकार वाले | यह मशीनी शब्दों के एक चर-आकार वाले सदिश को हैश करने को संदर्भित करता है। यदि स्ट्रिंग की लंबाई को एक छोटी संख्या से सीमित किया जा सकता है, तो ऊपर से सदिश समाधान का उपयोग करना सबसे अच्छा है (वैचारिक रूप से ऊपरी सीमा तक शून्य के साथ सदिश को पैडिंग करना)। आवश्यक स्थान स्ट्रिंग की अधिकतम लंबाई है, लेकिन मूल्यांकन करने का समय है <math>h(s)</math> की लंबाई मात्र है <math>s</math>. जब तक स्ट्रिंग में शून्य वर्जित हैं, सार्वभौमिकता को प्रभावित किए बिना हैश फ़ंक्शन का मूल्यांकन करते समय शून्य-पैडिंग को अनदेखा किया जा सकता है।<ref name=thorup09 />ध्यान दें कि यदि स्ट्रिंग में शून्य की अनुमति है, तो पैडिंग से पहले सभी स्ट्रिंग्स में एक काल्पनिक गैर-शून्य (उदाहरण के लिए, 1) वर्ण जोड़ना सबसे अच्छा हो सकता है: इससे यह सुनिश्चित होगा कि सार्वभौमिकता प्रभावित नहीं होती है।<ref name=kaser2013 /> | ||
अब मान लीजिए कि हम हैश करना चाहते हैं <math>\bar{x} = (x_0,\dots, x_\ell)</math>, जहां पर एक अच्छा बंधन है <math>\ell</math> एक प्राथमिकता ज्ञात नहीं है. द्वारा प्रस्तावित एक सार्वभौमिक परिवार <ref name=DGMP> | अब मान लीजिए कि हम हैश करना चाहते हैं <math>\bar{x} = (x_0,\dots, x_\ell)</math>, जहां पर एक अच्छा बंधन है <math>\ell</math> एक प्राथमिकता ज्ञात नहीं है. द्वारा प्रस्तावित एक सार्वभौमिक परिवार <ref name=DGMP> | ||
Line 347: | Line 320: | ||
मॉड्यूलर अंकगणित के कम्प्यूटेशनल दंड को कम करने के लिए, व्यवहार में तीन युक्तियों का उपयोग किया जाता है:<ref name=thorup09 /># कोई प्रधान चुनता है <math>p</math> दो की घात के करीब होना, जैसे [[मेर्सन प्रीमियम]] यह अंकगणित मॉड्यूलो की अनुमति देता है <math>p</math> विभाजन के बिना लागू किया जाना है (जोड़ और बदलाव जैसे तेज़ संचालन का उपयोग करके)। उदाहरण के लिए, आधुनिक आर्किटेक्चर पर कोई भी काम कर सकता है <math>p = 2^{61}-1</math>, जबकि <math>x_i</math>के 32-बिट मान हैं. | मॉड्यूलर अंकगणित के कम्प्यूटेशनल दंड को कम करने के लिए, व्यवहार में तीन युक्तियों का उपयोग किया जाता है:<ref name=thorup09 /># कोई प्रधान चुनता है <math>p</math> दो की घात के करीब होना, जैसे [[मेर्सन प्रीमियम]] यह अंकगणित मॉड्यूलो की अनुमति देता है <math>p</math> विभाजन के बिना लागू किया जाना है (जोड़ और बदलाव जैसे तेज़ संचालन का उपयोग करके)। उदाहरण के लिए, आधुनिक आर्किटेक्चर पर कोई भी काम कर सकता है <math>p = 2^{61}-1</math>, जबकि <math>x_i</math>के 32-बिट मान हैं. | ||
# कोई ब्लॉक पर | # कोई ब्लॉक पर सदिश हैशिंग लागू कर सकता है। उदाहरण के लिए, कोई स्ट्रिंग के प्रत्येक 16-शब्द ब्लॉक पर सदिश हैशिंग लागू करता है, और स्ट्रिंग हैशिंग को लागू करता है <math>\lceil k/16 \rceil</math> परिणाम। चूंकि धीमी स्ट्रिंग हैशिंग को काफी छोटे सदिश पर लागू किया जाता है, यह अनिवार्य रूप से सदिश हैशिंग जितना तेज़ होगा। | ||
# कोई व्यक्ति भाजक के रूप में दो की शक्ति को चुनता है, जिससे अंकगणित मॉड्यूलो की अनुमति मिलती है <math>2^w</math> विभाजन के बिना लागू किया जाना है ([[बिट मास्किंग]] के तेज़ संचालन का उपयोग करके)। UMAC#NH हैश-फ़ंक्शन परिवार|NH हैश-फ़ंक्शन परिवार यह दृष्टिकोण अपनाता है। | # कोई व्यक्ति भाजक के रूप में दो की शक्ति को चुनता है, जिससे अंकगणित मॉड्यूलो की अनुमति मिलती है <math>2^w</math> विभाजन के बिना लागू किया जाना है ([[बिट मास्किंग]] के तेज़ संचालन का उपयोग करके)। UMAC#NH हैश-फ़ंक्शन परिवार|NH हैश-फ़ंक्शन परिवार यह दृष्टिकोण अपनाता है। | ||
Revision as of 14:06, 23 July 2023
गणित और कंप्यूटिंग में, यूनिवर्सल हैशिंग (यादृच्छिक एल्गोरिथ्म या डेटा संरचना में) निश्चित गणितीय गुण के साथ हैश फ़ंक्शन के समूह से यादृच्छिक रूप से हैश फ़ंक्शन का चयन करने को संदर्भित करता है (नीचे परिभाषा देखें)। यह प्रत्याशित रूप से कम संख्या में संघटन की गारंटी देता है, भले ही डेटा किसी प्रतिद्वंद्वी द्वारा चुना गया हो। कई यूनिवर्सल समूह (हैशिंग पूर्णांक, वैक्टर, स्ट्रिंग्स के लिए) ज्ञात हैं, और उनका मूल्यांकन प्रायः बहुत कुशल होता है। कंप्यूटर विज्ञान में यूनिवर्सल हैशिंग के कई उपयोग हैं, उदाहरण के लिए हैश टेबल, यादृच्छिक एल्गोरिदम और क्रिप्टोग्राफी के कार्यान्वयन में।
परिचय
माना कि हम कुछ यूनिवर्स से कीज़ को बिन्स (लेबल ) में मैप करना चाहते हैं। एल्गोरिदम को कीज़ के कुछ डेटा सेट को संभालना होगा, जो पहले से ज्ञात नहीं है। प्रायः, हैशिंग का लक्ष्य कम संख्या में संघटनों ( से कीज़ जो एक ही बिन में आती है) को प्राप्त करना है। नियतात्मक हैश फ़ंक्शन प्रतिकूल सेटिंग में कोई गारंटी नहीं दे सकता है यदि , क्योंकि प्रतिद्वंद्वी को बिन की पूर्वचित्र के रूप में चुन सकता है। इसका अर्थ यह है कि सभी डेटा कीज़ एक ही बिन में आ जाती हैं, जिससे हैशिंग अनुपयोगी हो जाती है। इसके अलावा, नियतात्मक हैश फ़ंक्शन रीहैशिंग की अनुमति नहीं देता है- कभी-कभी इनपुट डेटा हैश फ़ंक्शन (उदाहरण के लिए बहुत अधिक संघटन होते हैं) के लिए व्यर्थ हो जाता है, इसलिए कोई हैश फ़ंक्शन को बदलना चाहेगा।
इन समस्याओं का समाधान हैश फ़ंक्शंस के समूह से किसी फ़ंक्शन को यादृच्छिक रूप से चुनना है। फ़ंक्शंस के समूह को यूनिवर्सल समूह कहा जाता है यदि, ।
दूसरे शब्दों में, जब हैश फ़ंक्शन को से यादृच्छिक रूप से समान रूप से खींचा जाता है, तो यूनिवर्स की कोई भी दो अलग-अलग कीज़ अधिकतम की संभावना के साथ टकराती हैं। यदि हैश फ़ंक्शन प्रत्येक कीज़ को वास्तव में यादृच्छिक हैश कोड निर्दिष्ट करता है तो हम टकराव की बिल्कुल यही संभावना की अपेक्षा करेंगे।
कभी-कभी, परिभाषा को स्थिर कारक द्वारा शिथिल कर दिया जाता है, जिसके लिए केवल संघटन की संभावना की आवश्यकता होती है न कि की। यह अवधारणा 1977 में कार्टर और वेगमैन[1] द्वारा प्रस्तुत की गई थी, और कंप्यूटर विज्ञान में इसके कई अनुप्रयोग पाए गए हैं (उदाहरण के लिए देखें[2])।
यदि संघटन की संभावना पर हमारी ऊपरी सीमा है, तो हम कहते हैं कि हमारे पास -लगभग सार्वभौमिकता है। इसलिए उदाहरण के लिए, यूनिवर्सल समूह में -लगभग सार्वभौमिकता होती है।
कई, लेकिन सभी नहीं, यूनिवर्सल समूह में निम्नलिखित दृढ़ एकसमान असमानता गुण होते हैं-
, जब को समूह से यादृच्छिक रूप से निकाला जाता है, तो अंतर समान रूप से में वितरित होता है।
ध्यान दें कि सार्वभौमिकता की परिभाषा केवल इस बात से संबंधित है कि क्या , जो संघटनों की गणना करता है। एकसमान असमानता गुण अधिक दृढ़ होता है।
(इसी प्रकार, यूनिवर्सल समूह एक्सओआर (XOR) यूनिवर्सल हो सकता है यदि , मान को में समान रूप से वितरित किया जाता है जहां बिटवाइज़ विशिष्ट या ऑपरेशन है। यह केवल तभी संभव है जब दो की घात हो।)
एक और भी दृढ़ स्थिति युग्मानूसार स्वतंत्रता है- हमारे पास यह गुण है जब हमारे पास संभावना है कि हैश मानों के किसी भी युग्म के लिए हैश होगा जैसे कि वे पूरी तरह से यादृच्छिक थे- । युग्मानूसार स्वतंत्रता को कभी-कभी दृढ़ सार्वभौमिकता कहा जाता है।
एक अन्य गुण एकरूपता है. हम कहते हैं कि समूह एक समान है यदि सभी हैश मान समान रूप से संभावित हैं- किसी भी हैश मान के लिए। सार्वभौमिकता का तात्पर्य एकरूपता नहीं है। हालाँकि, दृढ़ सार्वभौमिकता का तात्पर्य एकरूपता से है।
समान दूरी के गुण वाले समूह को देखते हुए, कोई हैश फ़ंक्शन में मानों के साथ एक समान रूप से वितरित यादृच्छिक स्थिरांक जोड़कर युग्मानूसार स्वतंत्र या दृढ़ता से यूनिवर्सल हैश समूह का उत्पादन कर सकता है। (इसी प्रकार, यदि दो की घात है, तो हम एक्सओआर यूनिवर्सल हैश समूह से एक विशेष या समान रूप से वितरित यादृच्छिक स्थिरांक के साथ युग्मानूसार स्वतंत्रता प्राप्त कर सकते हैं।) चूंकि स्थिरांक द्वारा बदलाव कभी-कभी अनुप्रयोगों में अप्रासंगिक होता है (जैसे हैश टेबल), समान दूरी के गुण और युग्मानूसार स्वतंत्र के बीच सावधानीपूर्वक अंतर कभी-कभी नहीं किया जाता है।[3]
कुछ अनुप्रयोगों (जैसे हैश टेबल) के लिए, हैश मानों के कम से कम महत्वपूर्ण बिट्स का भी यूनिवर्सल होना महत्वपूर्ण है। जब कोई समूह दृढ़ता से यूनिवर्सल होता है, तो इसकी गारंटी होती है- यदि , के साथ दृढ़ता से यूनिवर्सल समूह है, तो सभी के लिए फ़ंक्शन से बना समूह भी के लिए दृढ़ता से यूनिवर्सल है। दुर्भाग्य से, यह बात (केवल) यूनिवर्सल समूहों के लिए सत्य नहीं है। उदाहरण के लिए, सर्वसमिका फ़ंक्शन से बना समूह स्पष्ट रूप से यूनिवर्सल है, लेकिन फ़ंक्शन से बना समूह यूनिवर्सल होने में विफल रहता है।
यूएमएसी (UMAC) और पॉली1305-एईएस (Poly1305-AES) और कई अन्य संदेश प्रमाणीकरण कोड एल्गोरिदम यूनिवर्सल हैशिंग पर आधारित हैं।[4][5] ऐसे अनुप्रयोगों में, सॉफ़्टवेयर प्रत्येक संदेश के लिए विशिष्ट अस्थायी रूप के आधार पर, प्रत्येक संदेश के लिए एक नया हैश फ़ंक्शन चुनता है।
कई हैश टेबल कार्यान्वयन यूनिवर्सल हैशिंग पर आधारित हैं। ऐसे अनुप्रयोगों में, प्रायः सॉफ़्टवेयर नया हैश फ़ंक्शन तभी चुनता है जब उसे पता चलता है कि "बहुत अधिक" कीज़ टकरा गई हैं तब तक, एक ही हैश फ़ंक्शन का बार-बार उपयोग किया जाता रहेगा। (कुछ संघटन समाधान योजनाएं, जैसे कि गतिशील पूर्ण हैशिंग, प्रत्येक बार संघटन होने पर नया हैश फ़ंक्शन चुनती हैं। अन्य संघटन समाधान योजनाएं, जैसे कुक्कू हैशिंग और 2-विकल्प हैशिंग, नया हैश फ़ंक्शन चुनने से पहले कई संघटनों की अनुमति देती हैं)। पूर्णांकों, सदिशों और स्ट्रिंग्स के लिए सबसे तीव्र ज्ञात यूनिवर्सल और दृढ़ता से यूनिवर्सल हैश फ़ंक्शन का सर्वेक्षण पाया गया है।[6]
गणितीय गारंटी
कीज़ के किसी भी निश्चित समुच्चय के लिए, यूनिवर्सल समूह का उपयोग निम्नलिखित गुणों की गारंटी देता है।
- में किसी निश्चित के लिए, बिन में कीज़ की अपेक्षित संख्या है। श्रृंखलन द्वारा हैश तालिकाओं को कार्यान्वित करते समय, यह संख्या की (उदाहरण के लिए परिप्रश्न, सम्मिलन या विलोपन) से जुड़े ऑपरेशन के अपेक्षित कार्यावधि के समानुपाती होती है।
- में के साथ कीज़ के युग्म की अपेक्षित संख्या जो () से टकराती है, ऊपर से परिबद्ध है, जो क्रम की है। जब बिन्स की संख्या, को में रैखिक चुना जाता है (अर्थात, में फ़ंक्शन द्वारा निर्धारित किया जाता है, तो संघटन की अपेक्षित संख्या होती है। जब बिन्स में हैशिंग की जाती है, तो कम से कम आधी संभावना के साथ कोई संघटन नहीं होता है।
- कम से कम कीज़ वाली बिन्स में कीज़ की अपेक्षित संख्या ऊपर से परिबद्ध है।[7] इस प्रकार, यदि प्रत्येक बिन की क्षमता को औसत आकार () से तीन गुना तक सीमित किया जाता है, तो अतिप्रवाहित बिन्स में कीज़ की कुल संख्या अधिकतम होती है। यह केवल उस हैश समूह के साथ लागू होता है जिसकी संघटन की संभावना से ऊपर होती है। यदि कमजोर परिभाषा का उपयोग किया जाता है, इसे द्वारा सीमित किया जाता है, तो यह परिणाम अब सत्य नहीं है।[7]
जैसा कि उपरोक्त गारंटी किसी भी निश्चित समुच्चय के लिए होती है, वे तब भी मान्य होती हैं जब डेटा समुच्चय किसी प्रतिद्वंद्वी द्वारा चुना जाता है। हालाँकि, प्रतिद्वंद्वी को एल्गोरिदम के हैश फ़ंक्शन के यादृच्छिक चयन से पहले (या उससे स्वतंत्र) यह विकल्प चुनना होगा। यदि प्रतिद्वंद्वी एल्गोरिथ्म की यादृच्छिक चयन का निरीक्षण कर सकता है, तो यादृच्छिकता का कोई उद्देश्य नहीं है, और स्थिति नियतात्मक हैशिंग के समान है।
दूसरी और तीसरी गारंटी का उपयोग प्रायः रीहैशिंग के संयोजन में किया जाता है। उदाहरण के लिए, कुछ संख्या में संघटनों को संभालने के लिए यादृच्छिक एल्गोरिदम तैयार किया जा सकता है। यदि यह बहुत अधिक संघटन देखता है, तो यह समूह से एक और यादृच्छिक चुनता है और दोहराता है। सार्वभौमिकता यह गारंटी देती है कि पुनरावृत्ति की संख्या ज्यामितीय यादृच्छिक चर है।
निर्माण
चूँकि किसी भी कंप्यूटर डेटा को एक या अधिक मशीनी शब्दों के रूप में दर्शाया जा सकता है, इसलिए आमतौर पर तीन प्रकार के डोमेन के लिए हैश फ़ंक्शन की आवश्यकता होती है: मशीनी शब्द (पूर्णांक); मशीनी शब्दों के निश्चित-लंबाई वाले वैक्टर; और चर-लंबाई वाले सदिश (स्ट्रिंग्स)।
पूर्णांकों को हैश करना
यह खंड हैशिंग पूर्णांकों के मामले को संदर्भित करता है जो मशीन शब्दों में फिट होते हैं; इस प्रकार, गुणा, जोड़, भाग आदि जैसे ऑपरेशन सस्ते मशीन-स्तरीय निर्देश हैं। ब्रह्माण्ड को हैशेड होने दीजिये .
कार्टर और वेगमैन का मूल प्रस्ताव[1]एक प्राइम चुनना था और परिभाषित करें
कहाँ बेतरतीब ढंग से चुने गए पूर्णांक मॉड्यूलो हैं साथ . (यह एक रैखिक सर्वांगसम जनरेटर का एकल पुनरावृत्ति है।)
उसे देखने के लिए एक सार्वभौमिक परिवार है, इस पर ध्यान दें केवल तभी धारण करता है जब
कुछ पूर्णांक के लिए बीच में और . तब से , अगर उनका अंतर शून्येतर है और इसका व्युत्क्रम मापांक है . के लिए समाधान पैदावार
- .
वहाँ हैं के लिए संभावित विकल्प (तब से बाहर रखा गया है) और, अलग-अलग अनुमत सीमा में, दाहिनी ओर के लिए संभावित गैर-शून्य मान। इस प्रकार टकराव की संभावना है
- .
देखने का दूसरा तरीका एक सार्वभौमिक परिवार सांख्यिकीय दूरी की धारणा के माध्यम से है। अंतर लिखिए जैसा
- .
तब से शून्येतर है और में समान रूप से वितरित किया जाता है , यह इस प्रकार है कि मापांक में भी समान रूप से वितरित किया जाता है . का वितरण इस प्रकार लगभग एक समान है, संभावना में अंतर तक नमूनों के बीच. परिणामस्वरूप, एक समान परिवार से सांख्यिकीय दूरी होती है जो कि जब नगण्य हो जाता है .
सरल हैश फ़ंक्शंस का परिवार
केवल लगभग सार्वभौमिक है: सभी के लिए .[1] इसके अलावा, यह विश्लेषण लगभग कड़ा है; कार्टर और वेगमैन [1]बताते हैं कि जब कभी भी .
मॉड्यूलर अंकगणित से बचना
हैशिंग पूर्णांकों के लिए कला की स्थिति डाइट्ज़फेलबिंगर एट अल द्वारा वर्णित बहु-शिफ्ट योजना है। 1997 में।[8] मॉड्यूलर अंकगणित से बचकर, इस विधि को लागू करना बहुत आसान है और व्यवहार में भी काफी तेजी से चलता है (आमतौर पर कम से कम चार के कारक से)[9]). योजना मानती है कि डिब्बे की संख्या दो की शक्ति है, . होने देना एक मशीन शब्द में बिट्स की संख्या हो। फिर हैश फ़ंक्शंस को विषम सकारात्मक पूर्णांकों पर पैरामीटराइज़ किया जाता है (यह एक शब्द में फिट बैठता है बिट्स)। मूल्यांकन करना , गुणा करें द्वारा मापांक और फिर उच्च क्रम बनाए रखें हैश कोड के रूप में बिट्स। गणितीय संकेतन में, यह है
यह योजना एक समान अंतर संपत्ति को संतुष्ट नहीं करती है और केवल है-लगभग-सार्वभौमिक; किसी के लिए , .
हैश फ़ंक्शन के व्यवहार को समझने के लिए, ध्यान दें कि, यदि और फिर, समान उच्चतम-क्रम वाले 'एम' बिट्स हों इसके उच्चतम क्रम के एम बिट्स के रूप में या तो सभी 1 या सभी 0 हैं (यह इस पर निर्भर करता है कि क्या या बड़ा है)। मान लें कि सबसे कम महत्वपूर्ण सेट बिट पद पर प्रकट होता है . तब से एक यादृच्छिक विषम पूर्णांक है और विषम पूर्णांकों का रिंग में व्युत्क्रम होता है (गणित) , यह इस प्रकार है कि के बीच समान रूप से वितरित किया जाएगा -बिट पूर्णांक स्थिति पर सबसे कम महत्वपूर्ण सेट बिट के साथ . इसलिए संभावना यह है कि ये बिट्स सभी 0 या सभी 1 हैं . दूसरी ओर, यदि , फिर उच्च-क्रम के एम बिट्स
इसमें 0 और 1 दोनों शामिल हैं, इसलिए
यह निश्चित है . अंततः, यदि फिर बिट का
1 और है यदि और केवल यदि बिट्स 1 भी हैं, जो प्रायिकता से घटित होता है .
यह विश्लेषण कड़ा है, जैसा कि उदाहरण से दिखाया जा सकता है और . वास्तव में 'सार्वभौमिक' हैश फ़ंक्शन प्राप्त करने के लिए, कोई मल्टीपल-ऐड-शिफ्ट योजना का उपयोग कर सकता है जो उच्च-क्रम बिट्स चुनता है
कहाँ के साथ एक यादृच्छिक धनात्मक पूर्णांक है और के साथ एक यादृच्छिक गैर-नकारात्मक पूर्णांक है . इसके लिए अंकगणित करने की आवश्यकता है -बिट अहस्ताक्षरित पूर्णांक। मल्टीपल-शिफ्ट का यह संस्करण डाइट्ज़फेलबिंगर के कारण है, और बाद में वोल्फेल द्वारा इसका अधिक सटीक विश्लेषण किया गया।[10]
हैशिंग सदिश
यह अनुभाग मशीनी शब्दों के एक निश्चित-लंबाई वाले सदिश को हैश करने से संबंधित है। इनपुट को सदिश के रूप में समझें का मशीनी शब्द (पूर्णांक) प्रत्येक बिट)। अगर समान अंतर संपत्ति वाला एक सार्वभौमिक परिवार है, निम्नलिखित परिवार (कार्टर और वेगमैन के समय का है)।[1] इसमें समान अंतर गुण भी है (और इसलिए सार्वभौमिक है):
- , जहां प्रत्येक यादृच्छिक रूप से स्वतंत्र रूप से चुना जाता है।
अगर दो की घात है, एक योग को अनन्य या से प्रतिस्थापित कर सकता है।[11] व्यवहार में, यदि डबल-सटीक अंकगणित उपलब्ध है, तो इसे हैश फ़ंक्शंस के मल्टीपल-शिफ्ट हैश परिवार के साथ त्वरित किया जाता है।[12]एक सदिश के साथ हैश फ़ंक्शन को प्रारंभ करें यादृच्छिक विषम पूर्णांकों पर प्रत्येक बिट. फिर यदि डिब्बे की संख्या है के लिए :
- .
गुणन की संख्या को आधा करना संभव है, जो व्यवहार में मोटे तौर पर दो गुना गति में बदल जाता है।[11]एक सदिश के साथ हैश फ़ंक्शन को प्रारंभ करें यादृच्छिक विषम पूर्णांकों पर प्रत्येक बिट. निम्नलिखित हैश परिवार सार्वभौमिक है:[13]
- .
यदि डबल-प्रिसिजन ऑपरेशन उपलब्ध नहीं हैं, तो कोई इनपुट को आधे-शब्दों के सदिश के रूप में व्याख्या कर सकता है (-बिट पूर्णांक)। इसके बाद एल्गोरिदम का उपयोग किया जाएगा गुणन, कहाँ सदिश में आधे शब्दों की संख्या थी। इस प्रकार, एल्गोरिदम इनपुट के प्रति शब्द एक गुणन की दर से चलता है।
उसी योजना का उपयोग पूर्णांकों को हैश करने के लिए भी किया जा सकता है, उनके बिट्स को बाइट्स के वैक्टर के रूप में व्याख्या करके। इस संस्करण में, सदिश तकनीक को सारणीबद्ध हैशिंग के रूप में जाना जाता है और यह गुणन-आधारित सार्वभौमिक हैशिंग योजनाओं के लिए एक व्यावहारिक विकल्प प्रदान करता है।[14] उच्च गति पर मजबूत सार्वभौमिकता भी संभव है।[15] एक सदिश के साथ हैश फ़ंक्शन को प्रारंभ करें यादृच्छिक पूर्णांकों पर बिट्स गणना करना
- .
परिणाम दृढ़ता से सार्वभौमिक है बिट्स प्रायोगिक तौर पर, यह हाल के इंटेल प्रोसेसर पर 0.2 सीपीयू चक्र प्रति बाइट पर चलता हुआ पाया गया .
हैशिंग स्ट्रिंग
यह मशीनी शब्दों के एक चर-आकार वाले सदिश को हैश करने को संदर्भित करता है। यदि स्ट्रिंग की लंबाई को एक छोटी संख्या से सीमित किया जा सकता है, तो ऊपर से सदिश समाधान का उपयोग करना सबसे अच्छा है (वैचारिक रूप से ऊपरी सीमा तक शून्य के साथ सदिश को पैडिंग करना)। आवश्यक स्थान स्ट्रिंग की अधिकतम लंबाई है, लेकिन मूल्यांकन करने का समय है की लंबाई मात्र है . जब तक स्ट्रिंग में शून्य वर्जित हैं, सार्वभौमिकता को प्रभावित किए बिना हैश फ़ंक्शन का मूल्यांकन करते समय शून्य-पैडिंग को अनदेखा किया जा सकता है।[11]ध्यान दें कि यदि स्ट्रिंग में शून्य की अनुमति है, तो पैडिंग से पहले सभी स्ट्रिंग्स में एक काल्पनिक गैर-शून्य (उदाहरण के लिए, 1) वर्ण जोड़ना सबसे अच्छा हो सकता है: इससे यह सुनिश्चित होगा कि सार्वभौमिकता प्रभावित नहीं होती है।[15]
अब मान लीजिए कि हम हैश करना चाहते हैं , जहां पर एक अच्छा बंधन है एक प्राथमिकता ज्ञात नहीं है. द्वारा प्रस्तावित एक सार्वभौमिक परिवार [12] स्ट्रिंग का इलाज करता है एक बहुपद मॉड्यूलो के गुणांक के रूप में एक बड़ा अभाज्य। अगर , होने देना एक प्रमुख बनें और परिभाषित करें:
- , कहाँ समान रूप से यादृच्छिक है और यूनिवर्सल फ़ैमिली मैपिंग पूर्णांक डोमेन से यादृच्छिक रूप से चुना जाता है .
मॉड्यूलर अंकगणित के गुणों का उपयोग करके, बड़े स्ट्रिंग के लिए बड़ी संख्या उत्पन्न किए बिना उपरोक्त गणना की जा सकती है:[16]
uint hash(String x, int a, int p)
uint h = INITIAL_VALUE
for (uint i=0 ; i < x.length ; ++i)
h = ((h*a) + x[i]) mod p
return h
यह रोलिंग हैश#राबिन-कार्प रोलिंग हैश|राबिन-कार्प रोलिंग हैश एक रैखिक सर्वांगसम जनरेटर पर आधारित है।[17] उपरोक्त एल्गोरिदम को मल्टीप्लिकेटिव हैश फ़ंक्शन के रूप में भी जाना जाता है।[18] व्यवहार में, मॉड ऑपरेटर और पैरामीटर पी को केवल पूर्णांक को ओवरफ्लो करने की अनुमति देकर पूरी तरह से टाला जा सकता है क्योंकि यह कई प्रोग्रामिंग भाषाओं में मॉड (मैक्स-इंट-वैल्यू + 1) के बराबर है। नीचे दी गई तालिका कुछ लोकप्रिय कार्यान्वयनों के लिए h और a को प्रारंभ करने के लिए चुने गए मान दिखाती है।
Implementation | INITIAL_VALUE | a |
---|---|---|
Bernstein's hash function djb2[19] | 5381 | 33 |
STLPort 4.6.2 | 0 | 5 |
Kernighan and Ritchie's hash function[20] | 0 | 31 |
java.lang.String.hashCode() [21]
|
0 | 31 |
दो तारों पर विचार करें और जाने लंबे समय तक की लंबाई हो; विश्लेषण के लिए, छोटी स्ट्रिंग को संकल्पनात्मक रूप से लंबाई तक शून्य के साथ गद्देदार किया गया है . आवेदन करने से पहले टक्कर इसका आशय है गुणांक वाले बहुपद का मूल है . इस बहुपद में अधिकतम है जड़ें मॉड्यूलो , इसलिए टकराव की संभावना अधिकतम है . यादृच्छिक के माध्यम से टकराव की संभावना कुल टकराव की संभावना लाता है . इस प्रकार, यदि प्रधान हैशेड स्ट्रिंग्स की लंबाई की तुलना में पर्याप्त रूप से बड़ा है, परिवार सार्वभौमिक (सांख्यिकीय दूरी में) के बहुत करीब है।
अज्ञात-लंबाई स्ट्रिंग को निश्चित-लंबाई वाले हैश मानों में हैश करने के लिए उपयोग किए जाने वाले हैश फ़ंक्शंस के अन्य सार्वभौमिक परिवारों में राबिन फ़िंगरप्रिंट और बुजस शामिल हैं।
मॉड्यूलर अंकगणित से बचना
मॉड्यूलर अंकगणित के कम्प्यूटेशनल दंड को कम करने के लिए, व्यवहार में तीन युक्तियों का उपयोग किया जाता है:[11]# कोई प्रधान चुनता है दो की घात के करीब होना, जैसे मेर्सन प्रीमियम यह अंकगणित मॉड्यूलो की अनुमति देता है विभाजन के बिना लागू किया जाना है (जोड़ और बदलाव जैसे तेज़ संचालन का उपयोग करके)। उदाहरण के लिए, आधुनिक आर्किटेक्चर पर कोई भी काम कर सकता है , जबकि के 32-बिट मान हैं.
- कोई ब्लॉक पर सदिश हैशिंग लागू कर सकता है। उदाहरण के लिए, कोई स्ट्रिंग के प्रत्येक 16-शब्द ब्लॉक पर सदिश हैशिंग लागू करता है, और स्ट्रिंग हैशिंग को लागू करता है परिणाम। चूंकि धीमी स्ट्रिंग हैशिंग को काफी छोटे सदिश पर लागू किया जाता है, यह अनिवार्य रूप से सदिश हैशिंग जितना तेज़ होगा।
- कोई व्यक्ति भाजक के रूप में दो की शक्ति को चुनता है, जिससे अंकगणित मॉड्यूलो की अनुमति मिलती है विभाजन के बिना लागू किया जाना है (बिट मास्किंग के तेज़ संचालन का उपयोग करके)। UMAC#NH हैश-फ़ंक्शन परिवार|NH हैश-फ़ंक्शन परिवार यह दृष्टिकोण अपनाता है।
यह भी देखें
- के-स्वतंत्र हैशिंग
- रोलिंग हैशिंग
- सारणीकरण हैशिंग
- न्यूनतम-वार स्वतंत्रता
- यूनिवर्सल वन-वे हैश फ़ंक्शन
- कम-विसंगति अनुक्रम
- उत्तम हैशिंग
संदर्भ
- ↑ 1.0 1.1 1.2 1.3 1.4 Carter, Larry; Wegman, Mark N. (1979). "Universal Classes of Hash Functions". Journal of Computer and System Sciences. 18 (2): 143–154. doi:10.1016/0022-0000(79)90044-8. Conference version in STOC'77.
- ↑ Miltersen, Peter Bro. "Universal Hashing" (PDF). Archived from the original (PDF) on 24 May 2011. Retrieved 24 June 2009.
- ↑ Motwani, Rajeev; Raghavan, Prabhakar (1995). Randomized Algorithms. Cambridge University Press. p. 221. ISBN 0-521-47465-5.
- ↑ David Wagner, ed. "Advances in Cryptology - CRYPTO 2008". p. 145.
- ↑ Jean-Philippe Aumasson, Willi Meier, Raphael Phan, Luca Henzen. "The Hash Function BLAKE". 2014. p. 10.
- ↑ Thorup, Mikkel (2015). "High Speed Hashing for Integers and Strings". arXiv:1504.06804 [cs.DS].
- ↑ 7.0 7.1 Baran, Ilya; Demaine, Erik D.; Pătraşcu, Mihai (2008). "Subquadratic Algorithms for 3SUM" (PDF). Algorithmica. 50 (4): 584–596. doi:10.1007/s00453-007-9036-3. S2CID 9855995.
- ↑ Dietzfelbinger, Martin; Hagerup, Torben; Katajainen, Jyrki; Penttonen, Martti (1997). "A Reliable Randomized Algorithm for the Closest-Pair Problem" (Postscript). Journal of Algorithms. 25 (1): 19–51. doi:10.1006/jagm.1997.0873. Retrieved 10 February 2011.
- ↑ Thorup, Mikkel (18 December 2009). "Text-book algorithms at SODA".
- ↑ Woelfel, Philipp (1999). Efficient Strongly Universal and Optimally Universal Hashing. Mathematical Foundations of Computer Science 1999. LNCS. Vol. 1672. pp. 262–272. doi:10.1007/3-540-48340-3_24.
- ↑ 11.0 11.1 11.2 11.3 Thorup, Mikkel (2009). String hashing for linear probing. Proc. 20th ACM-SIAM Symposium on Discrete Algorithms (SODA). pp. 655–664. CiteSeerX 10.1.1.215.4253. doi:10.1137/1.9781611973068.72. ISBN 978-0-89871-680-1., section 5.3
- ↑ 12.0 12.1 Dietzfelbinger, Martin; Gil, Joseph; Matias, Yossi; Pippenger, Nicholas (1992). Polynomial Hash Functions Are Reliable (Extended Abstract). Proc. 19th International Colloquium on Automata, Languages and Programming (ICALP). pp. 235–246.
- ↑ Black, J.; Halevi, S.; Krawczyk, H.; Krovetz, T. (1999). UMAC: Fast and Secure Message Authentication (PDF). Advances in Cryptology (CRYPTO '99)., Equation 1
- ↑ Pătraşcu, Mihai; Thorup, Mikkel (2011). The power of simple tabulation hashing. Proceedings of the 43rd annual ACM Symposium on Theory of Computing (STOC '11). pp. 1–10. arXiv:1011.5200. doi:10.1145/1993636.1993638. ISBN 9781450306911.
- ↑ 15.0 15.1 Kaser, Owen; Lemire, Daniel (2013). "Strongly universal string hashing is fast". Computer Journal. Oxford University Press. 57 (11): 1624–1638. arXiv:1202.4961. doi:10.1093/comjnl/bxt070.
- ↑ "Hebrew University Course Slides" (PDF).
- ↑ Robert Uzgalis. "Library Hash Functions". 1996.
- ↑ Kankowsk, Peter. "Hash functions: An empirical comparison".
- ↑ Yigit, Ozan. "String hash functions".
- ↑ Kernighan; Ritchie (1988). "6". The C Programming Language (2nd ed.). pp. 118. ISBN 0-13-110362-8.
{{cite book}}
: CS1 maint: multiple names: authors list (link) - ↑ "String (Java Platform SE 6)". docs.oracle.com. Retrieved 2015-06-10.
अग्रिम पठन
- Knuth, Donald Ervin (1998). The Art of Computer Programming, Vol. III: Sorting and Searching (3rd ed.). Reading, Mass; London: Addison-Wesley. ISBN 0-201-89685-0.