ऑप्टीमल असिमेट्रिक एन्क्रिप्शन

क्रिप्टोग्राफी में, इष्टतम असममित एन्क्रिप्शन पैडिंग (ओएईपी) एक पैडिंग (क्रिप्टोग्राफी) है जिसे अक्सर आरएसए (क्रिप्टोसिस्टम) के साथ प्रयोग किया जाता है। ओएईपी मिहिर लड़ने के लिए और फिलिप रोगवे द्वारा पेश किया गया था, और बाद में PKCS1|PKCS#1 v2 और RFC 2437 में मानकीकृत किया गया।

OAEP एल्गोरिथम Feistel नेटवर्क का एक रूप है जो असममित एन्क्रिप्शन से पहले प्लेनटेक्स्ट को संसाधित करने के लिए यादृच्छिक oracles G और H की एक जोड़ी का उपयोग करता है। जब किसी सुरक्षित ट्रैपडोर वन-वे फंक्शन के साथ जोड़ा जाता है | ट्रैपडोर वन-वे क्रमचय $$f$$, यह प्रसंस्करण एक संयुक्त योजना में परिणाम के लिए यादृच्छिक ऑरेकल मॉडल में सिद्ध होता है जो चुने चुना सादा पाठ हमला सिफरटेक्स्ट अप्रभेद्यता के तहत सिमेंटिक सुरक्षा है। (IND-CPA)। जब कुछ ट्रैपडोर क्रमपरिवर्तन (जैसे, RSA) के साथ लागू किया जाता है, तो OAEP भी चुने हुए सिफरटेक्स्ट हमले के विरुद्ध सुरक्षित साबित होता है। OAEP का उपयोग सभी या कुछ भी रूपांतरित नहीं होता है बनाने के लिए किया जा सकता है।

ओएईपी निम्नलिखित दो लक्ष्यों को पूरा करता है:


 * 1) यादृच्छिकता का एक तत्व जोड़ें जिसका उपयोग नियतात्मक एन्क्रिप्शन योजना (जैसे, पारंपरिक आरएसए (एल्गोरिदम)) को एक संभाव्य एन्क्रिप्शन योजना में बदलने के लिए किया जा सकता है।
 * 2) यह सुनिश्चित करके सिफरटेक्स्ट (या अन्य सूचना रिसाव) के आंशिक डिक्रिप्शन को रोकें कि एक विरोधी ट्रैपडोर वन-वे फ़ंक्शन को उलटने में सक्षम हुए बिना प्लेन टेक्स्ट के किसी भी हिस्से को पुनर्प्राप्त नहीं कर सकता है। ट्रैपडोर वन-वे क्रमचय $$f$$.

OAEP (बेल्लारे/रोगावे, 1994) के मूल संस्करण ने रैंडम ऑरेकल मॉडल में सादा पाठ-जागरूक एन्क्रिप्शन (जो उन्होंने दावा किया कि चुने हुए सिफरटेक्स्ट हमले के खिलाफ सुरक्षा का तात्पर्य है) का एक रूप दिखाया जब OAEP का उपयोग किसी ट्रैपडोर क्रमपरिवर्तन के साथ किया जाता है। बाद के परिणामों ने इस दावे का खंडन किया, यह दिखाते हुए कि OAEP केवल सिफरटेक्स्ट अभेद्यता थी। IND-CCA1 सुरक्षित। हालांकि, मूल योजना यादृच्छिक ऑरेकल मॉडल में सिफरटेक्स्ट अप्रभेद्यता साबित हुई थी। IND-CCA2 सुरक्षित जब OAEP का उपयोग RSA क्रमपरिवर्तन के साथ मानक एन्क्रिप्शन एक्सपोनेंट्स का उपयोग करके किया जाता है, जैसा कि RSA-OAEP के मामले में होता है। एक बेहतर योजना (ओएईपी+ कहलाती है) जो इस समस्या को हल करने के लिए विक्टर शौप द्वारा किसी भी ट्रैपडोर वन-वे क्रमचय के साथ काम करती है। हाल के काम से पता चला है कि मानक मॉडल (क्रिप्टोग्राफी) में (अर्थात, जब हैश फ़ंक्शंस को रैंडम ऑरेकल के रूप में मॉडल नहीं किया जाता है) RSA समस्या की अनुमानित कठोरता के तहत RSA-OAEP की IND-CCA2 सुरक्षा को साबित करना असंभव है।

एल्गोरिथम
आरेख में,


 * MGF मास्क जनरेशन फंक्शन है, आमतौर पर MGF1,
 * हैश चुना हुआ क्रिप्टोग्राफ़िक हैश फ़ंक्शन है,
 * hLen बाइट्स में हैश फ़ंक्शन के आउटपुट की लंबाई है,
 * k बाइट्स में RSA (क्रिप्टोसिस्टम) मापांक n की लंबाई है,
 * M गद्देदार होने वाला संदेश है (अधिकतम $$k - 2 \cdot \mathrm{hLen} - 2$$ बाइट्स),
 * एल संदेश से जुड़ा एक वैकल्पिक लेबल है (लेबल डिफ़ॉल्ट रूप से खाली स्ट्रिंग है और एन्क्रिप्शन की आवश्यकता के बिना डेटा को प्रमाणित करने के लिए इस्तेमाल किया जा सकता है),
 * PS का एक बाइट स्ट्रिंग है $$k - \mathrm{mLen} - 2 \cdot \mathrm{hLen} - 2$$ अशक्त बाइट्स।
 * ⊕ एक Exclusive or-ऑपरेशन है।

एन्कोडिंग
RFC 8017 PKCS#1 v2.2 के लिए एन्कोडिंग के लिए निम्नानुसार OAEP योजना निर्दिष्ट करता है:


 * 1) चुने गए हैश फ़ंक्शन का उपयोग करके लेबल L को हैश करें: $$\mathrm{lHash} = \mathrm{Hash}(L)$$
 * 2) एक पैडिंग स्ट्रिंग PS उत्पन्न करें जिसमें शामिल हो $$k - \mathrm{mLen} - 2 \cdot \mathrm{hLen} - 2$$ बाइट्स मान 0x00 के साथ।
 * 3) डेटा ब्लॉक DB बनाने के लिए lHash, PS, सिंगल बाइट 0x01, और संदेश M को सम्‍मिलित करें: $$\mathrm{DB} = \mathrm{lHash} || \mathrm{PS} || \mathrm{0x01} || \mathrm{M}$$. इस डेटा ब्लॉक की लंबाई है $$k - \mathrm{hLen} - 1$$ बाइट्स।
 * 4) लंबाई hLen का एक यादृच्छिक बीज उत्पन्न करें।
 * 5) डेटा ब्लॉक के लिए उपयुक्त लंबाई का मास्क बनाने के लिए मास्क जनरेटिंग फंक्शन का उपयोग करें: $$\mathrm{dbMask} = \mathrm{MGF}(\mathrm{seed}, k - \mathrm{hLen} - 1)$$
 * 6) जनरेट किए गए मास्क के साथ डेटा ब्लॉक को मास्क करें: $$\mathrm{maskedDB} = \mathrm{DB} \oplus \mathrm{dbMask}$$
 * 7) बीज के लिए hLen लंबाई का मास्क बनाने के लिए मास्क जनरेटिंग फंक्शन का उपयोग करें: $$\mathrm{seedMask} = \mathrm{MGF}(\mathrm{maskedDB}, \mathrm{hLen})$$
 * 8) बीज को उत्पन्न मास्क से मास्क करें: $$\mathrm{maskedSeed} = \mathrm{seed} \oplus \mathrm{seedMask}$$
 * 9) एन्कोडेड (गद्देदार) संदेश बाइट 0x00 है जो नकाबपोश और नकाबपोश के साथ जुड़ा हुआ है: $$\mathrm{EM} = \mathrm{0x00} || \mathrm{maskedSeed} || \mathrm{maskedDB}$$

डिकोडिंग
डिकोडिंग एल्गोरिथम में उठाए गए कदमों को उलट कर काम करता है:


 * 1) चुने गए हैश फ़ंक्शन का उपयोग करके लेबल L को हैश करें: $$\mathrm{lHash} = \mathrm{Hash}(L)$$
 * 2) चरण 9 को उलटने के लिए, एन्कोडेड संदेश EM को बाइट 0x00, मास्कडसीड (लंबाई hLen के साथ) और मास्कडडीबी में विभाजित करें:  $$\mathrm{EM} = \mathrm{0x00} || \mathrm{maskedSeed} || \mathrm{maskedDB}$$
 * 3) सीडमास्क उत्पन्न करें जिसका उपयोग बीज को ढकने के लिए किया गया था: $$\mathrm{seedMask} = \mathrm{MGF}(\mathrm{maskedDB}, \mathrm{hLen})$$
 * 4) चरण 8 को उलटने के लिए, बीज को सीडमास्क से पुनर्प्राप्त करें: $$\mathrm{seed} = \mathrm{maskedSeed} \oplus \mathrm{seedMask}$$
 * 5) dbMask उत्पन्न करें जिसका उपयोग डेटा ब्लॉक को मास्क करने के लिए किया गया था: $$\mathrm{dbMask} = \mathrm{MGF}(\mathrm{seed}, k - \mathrm{hLen} - 1)$$
 * 6) चरण 6 को उलटने के लिए, डेटा ब्लॉक DB को पुनर्प्राप्त करें: $$\mathrm{DB} = \mathrm{maskedDB} \oplus \mathrm{dbMask}$$
 * 7) चरण 3 को उलटने के लिए, डेटा ब्लॉक को उसके भागों में विभाजित करें: $$\mathrm{DB} = \mathrm{lHash'} || \mathrm{PS} || \mathrm{0x01} || \mathrm{M}$$.
 * 8) सत्यापित करें कि:
 * 9) * lHash' परिकलित lHash के बराबर है
 * 10) * PS में केवल बाइट 0x00 होते हैं
 * 11) * PS और M को 0x01 बाइट द्वारा अलग किया जाता है और
 * 12) * ईएम की पहली बाइट बाइट 0x00 है।
 * 13) यदि इनमें से कोई भी शर्त पूरी नहीं होती है, तो पैडिंग अमान्य है।

आरएसए में उपयोग: एन्कोडेड संदेश को फिर आरएसए के साथ एन्क्रिप्ट किया जा सकता है। RSA की नियतात्मक संपत्ति को अब OAEP एन्कोडिंग का उपयोग करके टाला जाता है क्योंकि बीज बेतरतीब ढंग से उत्पन्न होता है और पूरे एन्कोडेड संदेश को प्रभावित करता है।

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

कार्यान्वयन
PKCS#1 मानक में, यादृच्छिक ऑरेकल समान हैं। PKCS#1 मानक के लिए यह आवश्यक है कि रैंडम ऑरेकल उचित हैश फ़ंक्शन के साथ MGF1 हो।

यह भी देखें

 * कुंजी एनकैप्सुलेशन