5.1 कर्नेल, जिस समय मैं इसे लिखता हूं, उसमें सिफर स्ट्रिंग के लिए दो अलग-अलग प्रारूप होते हैं, "पुराना" प्रारूप और "नया" प्रारूप। इस सवाल में सब कुछ अब तक, और जाहिर तौर पर सभी डॉक्स भी, "पुराने" प्रारूप से संबंधित हैं, इसलिए मैं यहां इसका वर्णन करूंगा। यह सिर्फ एन्क्रिप्शन के लिए है। यदि dm-crypt के साथ अखंडता का उपयोग कर रहे हैं, तो किसी को AEAD सिफर पर विचार करना चाहिए और यह और भी जटिल हो जाता है।
कर्नेल द्वारा पार्स किया गया प्रारूप " सिफर [ :कीकाउंट ] -मोड -ivmode [ :ivopts ]" है। उदाहरण: aes-xts-plain64, blowfish-cbc-essiv:sha256, aes:64-cbc-lmk।
सांकेतिक शब्दों
उपयोग करने के लिए सिफर, उदाहरण दिए गए हैंaes,anubis,twofish,arc4, आदि कर्नेल dm-तहखाने ड्राइवर सिफर की एक सूची भी नहीं है। यह लिनक्स क्रिप्टो एपीआई के माध्यम से पारित किया जाता है, इसलिए कर्नेल द्वारा समर्थित किसी भी उपयुक्त सिफर का उपयोग किया जा सकता है।
Keycount
सिफर के साथ उपयोग करने के लिए दो की संख्या की वैकल्पिक शक्ति। यहlmkivmodeको छोड़कर हर चीज के लिए 1 कोडिफॉल्ट करता है, जहां यह 64 पर डिफॉल्ट करता है। यह वास्तव में केवल LMK पर लागू होता है और 1 के अलावा अन्य मान अन्य मोड के साथ ठीक से काम नहीं करेगा।
मोड सिफर के साथ उपयोग करने के लिए ब्लॉक चेनिंग मोड। उदाहरण हैंecb,cbc,xts। यह जानने के अलावा किecbकोई IV का उपयोग नहीं करता है, md-crypt ड्राइवर इसे Linux Crypto API से गुज़रता है और कर्नेल द्वारा समर्थित किसी भी चेनिंग मोड का उपयोग कर सकता है।
ivmode प्रत्येक क्षेत्र के लिए इनिशियलाइज़ेशन वेक्टर (IV) उत्पन्न करने के लिए उपयोग किया जाने वाला एल्गोरिदम। डीएम-क्रिप्ट के विपरीत, विशिष्ट सममित कुंजी एन्क्रिप्शन में, IV एक अन्य बिट डेटा है, जो एन्क्रिप्ट या डिक्रिप्ट होने पर कुंजी के साथ सिफर में पारित हो जाता है। पूरे ऑपरेशन के लिए सिर्फ एक IV पास किया गया है। चूंकि dm-crypt को प्रत्येक सेक्टर को व्यक्तिगत रूप से पढ़ने और लिखने में सक्षम होने की आवश्यकता है, इसलिए यह पूरे डिस्क को एक ऑपरेशन के रूप में एन्क्रिप्ट नहीं करता है। इसके बजाय, प्रत्येक क्षेत्र के लिए एक IV है। डेटा के रूप में IV में पास होने के बजाय, IVs बनाने के लिए एक एल्गोरिथ्म यहां निर्दिष्ट किया गया है। यह लिनक्स क्रिप्टो एपीआई का हिस्सा नहीं है, क्योंकि आईवी जनरेशन सिफर द्वारा नहीं किया गया है, और अनुमत ivmode मूल्यों को डीएम-क्रिप्ट ड्राइवर के रूप में परिभाषित किया गया है। वो हैं:
plain, plain64, plain64be, benbi
ये बस क्षेत्र संख्या,, का उपयोग विभिन्न प्रारूपों में चतुर्थ के रूप में। XTS जैसे ब्लॉक मोड के लिए एक सरल और अनुमानित IV का उपयोग करते समय वॉटरमार्किंग जैसे हमलों का विरोध करने के लिए डिज़ाइन किया गया है। plain64सबसे अधिक अनुशंसित है।
nullIV हमेशा शून्य है। परीक्षण और पिछड़ी संगतता के लिए, आपको इसका उपयोग नहीं करना चाहिए।
lmk लूप-एईएस एन्क्रिप्शन योजना के साथ संगत।
tcw TrueCrypt के साथ संगत।
essivकुंजी के हैश के साथ एन्क्रिप्ट किए गए सेक्टर नंबर का उपयोग करता है। सीबीसी की तरह मोड के लिए साधन, कि एक सरल IV का उपयोग करते समय विभिन्न हमलों के लिए प्रतिरोधी नहीं हैं plain64।
ivopts हैश के साथ प्रयोग की जाने वालीessiv ivmode , सभी अन्य साधनों के लिए नजरअंदाज कर दिया।
एक विशेष मामले के रूप में, " सिफर-plain " या सिर्फ " सिफर " की व्याख्या " सिफर-cbc-plain " के रूप में की जाती है। एक और विशेष मामला यह है कि ecbमोड में निर्दिष्ट करने के लिए कोई ivmode नहीं है ।
यह किस तरह से संबंधित है /proc/crypto
के संबंध में /proc/crypto, केवल सिफर और मोड प्रासंगिक हैं। डीएम-क्रिप्ट के रूप में " मोड (सिफर) " के क्रिप्टो एपीआई विनिर्देश के निर्माण और कर्नेल से यह अनुरोध करें। यह एक में क्या ढूंढते हैं चाहिए /proc/cryptoके रूप में nameएक के लिए skcipher। उदाहरण:
name : xts(aes)
driver : xts-aes-aesni
module : kernel
priority : 401
refcnt : 1
selftest : passed
internal : no
type : skcipher
async : yes
blocksize : 16
min keysize : 32
max keysize : 64
ivsize : 16
chunksize : 16
walksize : 16
यह इंगित करता typeहै skcipherकि यह एक सममित कुंजी सिफर है, जो डीएम-क्रिप्ट का उपयोग करता है, और डीएम-क्रिप्ट के साथ निर्दिष्ट xts(aes)होने पर इसका नाम लिखा जाएगा aes-xts। keysizeक्या कुंजी के आकार इस सिफर के साथ इस्तेमाल किया जा सकता क्षेत्रों में भी हमें बताओ।
यदि यह एक मॉड्यूल से था, तो मॉड्यूल नाम moduleलाइन में दिखाई दे सकता है । हालांकि, कई सिफर (आमतौर पर सॉफ्टवेयर में जो कोई भी हार्डवेयर विशिष्ट कोड नहीं है) एक सामान्य सिफर के रूप में कार्यान्वित किए जाते हैं जो अंतिम स्किशर का उत्पादन करने के लिए जेनेरिक ब्लॉक चेनिंग कोड के साथ जोड़ा जाता है। उदाहरण के लिए:
name : xts(anubis)
driver : xts(ecb(anubis-generic))
module : kernel
type : skcipher
name : anubis
driver : anubis-generic
module : anubis
type : cipher
इस मामले में एबिस सिफर को कर्नेल XTS ब्लॉक चेनिंग मोड कोड के साथ जोड़कर अंतिम सिफर का उत्पादन किया जाता है xts(anbuis), जिसे एक मॉड्यूल सौंपा गया है kernel। लेकिन यह उपलब्ध होने के लिए हमें जेनेरिक एबिस सिफर की आवश्यकता होती है, जो anubisमॉड्यूल से होती है। अधिकांश सिफर में " crypto-सिफर " का एक मॉड्यूल उपनाम होता है जिसका उपयोग उन्हें लोड करने के लिए किया जा सकता है, उदाहरण के modprobe crypto-anubisलिए एबिस सिफर प्रदान करने वाले मॉड्यूल को लोड करेगा।
cryptsetup benchmarkकमांड का उपयोग करते समय , केवल सिफर और मोड का मामला, क्योंकि यह सब बेंचमार्क है। यदि मोड निर्दिष्ट नहीं है, तो यह सीबीसी के लिए चूक है। Ivmode पूरी तरह से नजरअंदाज कर दिया है। इस प्रकार, बेंचमार्क करने के लिए, aes, aes-cbc, और aes-cbc-foobarसब बराबर हैं।
/lib/modules/*/kernel/crypto/देखने के लिए एक संभावित स्थान है, लेकिन फाइल सिस्टम पर मॉड्यूल कहीं भी हो सकते हैं।