2011-02-24 13 views
17

मैं PHP mcrypt फ़ंक्शन में उपलब्ध विभिन्न modes का परीक्षण कर रहा हूं। ईसीबी सबसे ट्यूटोरियल में प्रयुक्त विधि है, लेकिन दोनों को लिंक किए गए पेज और some users द्वारा अनुशंसित नहीं है, इसलिए मुझे लगता है कि या तो सीबीसी या CFB चाल करना चाहिए।PHP: मैक्रीप्ट - कौन सा मोड?

पीएचपी प्रलेखन भी वसा में यह mcrypt के लिए उपलब्ध अलग प्रकार की तुलना नहीं है और इसके बजाय, जो मैं भी पल के लिए खरीदने के लिए उत्सुक नहीं हूँ 'Schneier द्वारा एप्लाइड क्रिप्टोग्राफी' की पुस्तक को दर्शाता है।

तो mcrypt -modes में से कौन सा मैं उपयोग करना चाहता हूं और क्यों?

+1

डुप्लिकेट नहीं है लेकिन उपयोगी पोस्ट http://stackoverflow.com/questions/2809855/which-php-mcrypt-cipher-is-safest hi केविन;) – kjy112

+0

हाँ मुझे पता है कि यह पोस्ट है, यह मेरा है, लेकिन मुझे अभी भी याद आती है 'mcrypt' के लिए उपलब्ध विभिन्न तरीकों के किसी भी पेशेवर/विपक्ष को बाहर करें। _CFC_ पर _CBC_ क्यों चुनें? – Industrial

उत्तर

22

mcrypt वास्तव में listed की तुलना में अधिक मोड को लागू करता है, तो आप उन्हें उपयोग करने के लिए स्ट्रिंग के नाम का इस्तेमाल कर सकते हैं:

  • cbc - सीबीसी मोड
  • cfb - 8 बिट CFB मोड;
  • ncfb - ब्लॉक आकार सीएफबी मोड;
  • nofb - OFB मोड (ofb नहीं);
  • ctr - सीटीआर मोड।

मोड कार्यान्वयन विवरण में भिन्न होते हैं, इसलिए उनकी उपयुक्तता आपके डेटा और पर्यावरण पर निर्भर करती है।

पैडिंग:

  • सीबीसी मोड केवल पूरा ब्लॉक इतना mcrypt पैड शून्य बाइट्स के साथ अपने प्लेन एन्क्रिप्ट करता है, जब तक कि आप अपनी खुद की गद्दी को लागू।

  • CFB, ओएफबी और सीटीआर मोड किसी भी लम्बाई के संदेशों को एन्क्रिप्ट।

प्रारंभ वेक्टर:

  • सीबीसी और CFB मोड एक यादृच्छिक चतुर्थ (MCRYPT_RAND उपयोग न करें) की आवश्यकता होती है।

  • OFB मोड केवल एक अद्वितीय चतुर्थ (उदाहरण के लिए एक वैश्विक काउंटर, शायद डेटाबेस प्राथमिक कुंजी यदि पंक्तियों को कभी संशोधित या हटाया नहीं जाता है) की आवश्यकता होती है।

  • सीटीआर की आवश्यकता है कि प्रत्येक काउंटर ब्लॉक अद्वितीय है (न सिर्फ संदेश है, जो पहली काउंटर खंड है की चतुर्थ, लेकिन बाकी, संदेश के प्रत्येक ब्लॉक के लिए 1 से काउंटर ब्लॉक incrementing द्वारा गठित) । NIST recommendations में

में अधिक जानकारी।

ब्लॉक (आमतौर पर एक है, लेकिन 16 8 बिट CFB मोड में) प्रति उपयोग किया जाता है जैसे कि क्या एन्क्रिप्शन या डिक्रिप्शन parallelized किया जा सकता और कितने सिफर पुनरावृत्तियों के रूप में जो PHP में महत्वहीन होना चाहिए प्रदर्शन में अंतर, कर रहे हैं।

जो महत्वहीन होना चाहिए क्योंकि आप एक MAC लागू होगी malleability में मतभेद रहे हैं।

और उनकी सुरक्षा में अंतर हो सकते हैं, लेकिन इसके लिए आपको cryptographer से परामर्श लेना चाहिए।

+0

व्यापक उत्तर @aaz के लिए धन्यवाद! – Industrial

+1

@aaz - आप कहते हैं "(MCRYPT_RAND का उपयोग न करें)" क्या मैं पूछ सकता हूं क्यों? – buggedcom

+1

@buggedcom - इन तरीकों की सुरक्षा IV पर अप्रत्याशित होने पर निर्भर करती है। 'MCRYPT_RAND' PHP यादृच्छिक संख्या जनरेटर का उपयोग करता है, जो इस आवश्यकता को पूरा कर सकता है या नहीं। यह एक हार्डवेयर आरएनजी से जुड़ा हो सकता है, या यह π के अंक वापस कर सकता है। लेकिन आप अपने सिस्टम पर ['man 4 random'] (http://linux.die.net/man/4/random) देख सकते हैं ताकि यह देखने के लिए कि '/ dev/random' का उद्देश्य क्रिप्टोग्राफ़िक सामग्री उत्पन्न करने के लिए है, और डिफ़ॉल्ट 'MCRYPT_DEV_RANDOM' इसका उपयोग करता है। – aaz

संबंधित मुद्दे