अंडरहैंड सी प्रतियोगिता की भावना में , मैं एक अंडरहैंड कोड प्रतियोगिता शुरू कर रहा हूं। इस प्रतियोगिता का उद्देश्य सीधे तौर पर कुछ कोड को लागू करना है, जबकि इसके अंदर एक नापाक बग को छिपाना है।
प्रतियोगिता
आप एक गुप्त रूसी तिल हैं जो एक अमेरिकी जासूस एजेंसी के आईटी विभाग में काम कर रहे हैं। आपके अमेरिकी बॉस ने आपको गुप्त संदेशों को एन्क्रिप्ट करने के लिए उपयोग करने के लिए पासवर्ड हैशिंग एल्गोरिथ्म को लागू करने के लिए कहा है।
आपका बॉस चाहता है कि आप निम्नलिखित फ़ंक्शन को लागू करें:
f: String -> byte[16]
जो AES कुंजी के रूप में उपयोग करने के लिए उपयुक्त 16-बाइट मात्रा में एक पासवर्ड परिवर्तित करता है। आपका बॉस एक सुरक्षित फ़ंक्शन चाहता है, जिसका इस संदर्भ में मतलब है कि अलग-अलग पासवर्ड स्ट्रिंग को अत्यधिक संभावना के साथ अलग परिणाम उत्पन्न करना चाहिए। उदाहरण के लिए, इनपुट के md5 हैश को वापस करना सरल कार्यान्वयन होगा f
।
बेशक, रूसी जासूसी एजेंसी में आपका असली मालिक आपको इस प्रक्रिया से वंचित करना चाहेगा। आपका कार्य f
इस तरह लागू करना है कि रूसियों द्वारा लौटाए गए कुंजी का उपयोग करके एन्क्रिप्ट किए गए सभी गुप्त संदेशों को डिक्रिप्ट कर सकते हैं f
।
ऐसा करने के लिए, आपको इसे लागू करना होगा f
ताकि यह केवल 2 ^ 128 संभावित आउटपुट के एक छोटे उपसमूह को लौटाए। विशेष रूप से, आपका f
अधिकतम 2 ^ 16 विभिन्न परिणामों पर वापस लौटना चाहिए ताकि रूसी वे एन्क्रिप्ट किए गए प्रत्येक एन्क्रिप्ट किए गए संदेश के लिए सही कुंजी के लिए एक आसान जानवर-बल खोज कर सकें।
हालांकि, ध्यान रखें कि जासूसी मृत्युदंड देती है। पकड़े नहीं जाने के लिए, आपके फ़ंक्शन f
को कम से कम 2 ^ 8 विभिन्न परिणाम उत्पन्न करने होंगे, ताकि कुछ आउटपुट के सरसरी निरीक्षण से f
डुप्लिकेट प्रकट होने की संभावना न हो। और सबसे महत्वपूर्ण बात यह है कि आप जिस कोड को सीमित करने के लिए परिचय देते हैं f
, उसे जानबूझकर नहीं, बल्कि अनजाने में देखना चाहिए। यदि आप कभी भी एक अदालत के कमरे में जाते हैं, तो कुछ उचित संदेह होना चाहिए कि क्या आपने बग को जानबूझकर या दुर्घटना से परिचित कराया था।
आंकना
मैं और मेरे द्वारा भर्ती किए गए दो अन्य लोग प्रविष्टियों का न्याय करेंगे (यदि आप न्यायाधीश चाहते हैं तो मुझे ईमेल करें)। मैं जीतने वाली प्रविष्टि के लिए 200 प्रतिष्ठा इनाम की पेशकश कर रहा हूं। सबमिशन 1 मई तक अपलोड करना होगा।
निम्नलिखित मानदंडों को ध्यान में रखते हुए:
f
कल्पना का पालन करता है , अर्थात यह 2 ^ 8 और 2 ^ 16 संभावित आउटपुट के बीच उत्पन्न करता है। यह महसूस न करें कि ये कठिन सीमाएँ हैं, लेकिन यदि आप बहुत अधिक सीमा से बाहर हैं तो हम अंक काट लेंगे।- क्या बग अनजाने में हुई गलती का परिणाम है?
f
यादृच्छिक देखो के आउटपुट करते हैं ?- आपका कार्यान्वयन जितना छोटा होगा
f
, उतना अच्छा होगा। - आपका कार्यान्वयन जितना स्पष्ट होगा
f
, उतना अच्छा होगा।
टिप्पणियाँ
अपने कोड को लागू करने के लिए आप किसी भी भाषा का उपयोग कर सकते हैं। आप सादे दृष्टि में एक बग को छिपाने की कोशिश कर रहे हैं, इसलिए बाधित कोड का सुझाव नहीं दिया गया है।
आप पिछले अंडरहैंड सी प्रतियोगिता के विजेताओं में से कुछ पर एक नज़र डालना चाहते हैं जो एक अच्छा सबमिशन बनाता है।
इनपुट स्ट्रिंग्स मुद्रण योग्य अस्की (126 के माध्यम से 32, समावेशी) होंगे। आप चाहें तो एक उचित अधिकतम लंबाई मान सकते हैं।