शून्य से भरे राज्य सरणी पर KECCAK कैसे संचालित होता है?

Aug 18 2020

मैं जावा में स्पंज लागू करने की कोशिश कर रहा हूं। राज्य सभी शून्य के खाली 200 बाइट सरणी के रूप में शुरू होता है। NIST से KMAC नमूनों के दस्तावेज़ में, निम्नलिखित होता है:

(काली रेखा एक pdf पृष्ठ विराम है)

जिस तरह से इम रीडिंग यह है कि शून्य के झुंड के साथ एक राज्य KECCAK में भेजा गया था, और फिर जाहिरा तौर पर यादृच्छिक डेटा वाला एक राज्य वापस आ गया था। क्या SHA3 / KECCAK खाली डेटा को यादृच्छिक डेटा में बदल देता है? क्या मैं यहाँ सही प्रश्न पूछ रहा हूँ? किसी भी मदद की सराहना की है।

जवाब

7 RubenDeSmet Aug 18 2020 at 17:12

मुझे व्यक्तिगत रूप से Keccak.team प्यूसीडो कोड दस्तावेज़ को यह समझने में बहुत मददगार लगता है कि केकेक-पी कैसे।

जैसा कि डैनीन्यू ने टिप्पणियों में कहा, अधिकांश (सभी?) क्रिप्टोग्राफ़िक क्रमांकन "राउंड कॉन्स्टेंट्स" को रोजगार देते हैं। ये स्थिरांक किसी तरह से कक्केक राज्य में मिश्रित होते हैं।

छद्मकोड दस्तावेज़ एक तालिका के रूप में गोल स्थिरांक देता है:

RC[0]   0x0000000000000001  RC[12]  0x000000008000808B
RC[1]   0x0000000000008082  RC[13]  0x800000000000008B
RC[2]   0x800000000000808A  RC[14]  0x8000000000008089
RC[3]   0x8000000080008000  RC[15]  0x8000000000008003
RC[4]   0x000000000000808B  RC[16]  0x8000000000008002
RC[5]   0x0000000080000001  RC[17]  0x8000000000000080
RC[6]   0x8000000080008081  RC[18]  0x000000000000800A
RC[7]   0x8000000000008009  RC[19]  0x800000008000000A
RC[8]   0x000000000000008A  RC[20]  0x8000000080008081
RC[9]   0x0000000000000088  RC[21]  0x8000000000008080
RC[10]  0x0000000080008009  RC[22]  0x0000000080000001
RC[11]  0x000000008000000A  RC[23]  0x8000000080008008

और बताते हैं कि उनका उपयोग कैसे किया जाता है। के इटा-स्टेप में$n^\text{th}$ केकेक-पी दौर, द $n^\text{th}$ दौर निरंतर $RC[n]$ शुरू हो जाता है और पहले शब्द लेन में XOR'd हो जाता है।

गोल स्थिरांक के अलावा, केकेक क्रमपरिवर्तन में एक बहुत अच्छा प्रसार है: प्रारंभिक अवस्था में कहीं एक बिट कई आउटपुट बिट्स में महत्वपूर्ण योगदान देगा।

दोनों साधन के संयोजन अपने Keccak क्रमचय कि लग रहा है बहुत यादृच्छिक। बेशक, यह शून्य एन्ट्रापी को यादृच्छिक में बदल नहीं सकता है, क्योंकि कोई परिमित एल्गोरिथ्म ऐसा नहीं कर सकता है, लेकिन केकेक का लक्ष्य चीजों को मिलाना और उन्हें यादृच्छिक दिखाना है।

ThomasM Aug 22 2020 at 21:13

केकेक क्रमपरिवर्तन फ़ंक्शन सामान्य रूप से शून्य इनपुट पर मैप करेगा (सभी बिट्स 0 हैं) शून्य आउटपुट पर, यदि आईओटी-स्टेप के लिए नहीं, जिसमें राज्य का एक शब्द XORed बुद्धि एक गैर-शून्य निरंतर है।

पूर्ण प्रसार के लिए लगभग तीन (24) राउंड पर्याप्त होते हैं यानी राज्य का प्रत्येक बिट बाद में हर दूसरे तीन राउंड को प्रभावित करता है। एक कह सकता है, क्रमचय पूरी तरह से आठ बार राज्य को मिलाता है। इसका मतलब है कि यदि केवल एक बिट 1 है, तो यह राज्य में जल्दी से फैल जाएगा ताकि 3 राउंड बाद में लगभग आधे राज्य बिट्स 1 हो।

चलो $R$राज्य मूल्यों का समुच्चय बनें, जिसे यथोचित रूप से "नियमित रूप से देखना" (जो भी सटीक परिभाषा हो) कहा जा सकता है, जैसे सभी या लगभग सभी बिट्स का मूल्य समान है, या एक छोटा सा पैटर्न नियमित रूप से दोहराता है। सभी के बीच$2^{1600}$ राज्यों, उन में $R$बहुत छोटे अंश हैं। यह बहुत संभावना नहीं है कि किसी भी राज्य में$R$ में एक आउटपुट पर भी मैप किया जाता है $R$। यह जब तक है$|R| \ll 2^{800}$ ("जन्मदिन विरोधाभास" देखें)।

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