मैं यह कैसे निर्धारित करूं कि dip-crypt / LUKS में मैं किस सिफर और सिफर मोड का उपयोग कर सकता हूं?


14

मैं एक उबंटू-आधारित प्रणाली का उपयोग कर रहा हूं, और मुझे यह निर्धारित करने में कठिनाई हो रही है कि मेरे लिए क्या सिफर और सिफर मोड उपलब्ध हैं।

क्रायसिपेटअप मैन पेज कहता है:

"उपलब्ध विकल्पों की सूची के लिए / देखें / क्रिप्टो करें। अधिक विकल्प प्राप्त करने के लिए आपको अतिरिक्त कर्नेल क्रिप्टो मॉड्यूल लोड करने की आवश्यकता हो सकती है।"

इसमें मेरा / proc / crypto बहुत कम है। मुझे कैसे पता चलेगा कि लोड करने के लिए कौन से अतिरिक्त कर्नेल क्रिप्टो मॉड्यूल उपलब्ध हैं?


/lib/modules/*/kernel/crypto/देखने के लिए एक संभावित स्थान है, लेकिन फाइल सिस्टम पर मॉड्यूल कहीं भी हो सकते हैं।
मार्क

2
मुझे लगता है कि यह एक अच्छा सवाल है। मैं खुद इस जानकारी की तलाश में हूं। /proc/cryptoमहान है, लेकिन यह वैध सिफर तारों को सूचीबद्ध नहीं करता है; जैसी चीजें aes-xts-plain64या aes-cbc-essiv:sha256। एक अच्छा जवाब उस जानकारी को प्रदान करेगा और यह दिखाने के लिए कि /lib/modules...उन्हें उपयोग करने के लिए किन मॉड्यूलों को लोड करने की आवश्यकता है।
स्टार

@starfry मुझे इसमें भी दिलचस्पी है। जैसा कि सिफर स्ट्रिंग क्या है और मेरे अंदर क्या है, इसके बीच कोई नामकरण पत्राचार नहीं है /proc/crypto। इसका कोई मतलब नहीं है।
CMCDragonkai

जवाबों:


10

के माध्यम से पढ़ने के लिए कई, कई दस्तावेज और मैन पेज हैं, लेकिन एक दस्तावेज जिसमें विशेष रूप से आपकी रुचि हो सकती है, वह है एलयूकेएस-डिस्क प्रारूप विनिर्देश (पीडीएफ)।

परिशिष्ट B (जो, स्वाभाविक रूप से, अंत के पास है) कहता है,

सिफर और हैश विनिर्देश रजिस्ट्री

भले ही सिफर-नाम और सिफर-मोड स्ट्रिंग्स की व्याख्या किसी भी एलयूकेएस ऑपरेशन द्वारा नहीं की गई हो, लेकिन अलग-अलग एलयूकेएस-आधारित कार्यान्वयनों के बीच संगतता प्राप्त करने के लिए उनके पास सभी कार्यान्वयनों के लिए समान अर्थ होना चाहिए। LUKS को यह सुनिश्चित करना है कि अंडरलेइंग सिफर सिस्टम सिफर नाम और सिफर मोड स्ट्रिंग्स का उपयोग कर सकता है, और चूंकि ये तार हमेशा सिफर सिस्टम के मूल निवासी नहीं हो सकते हैं, LUKS को उन्हें कुछ उपयुक्त में मैप करने की आवश्यकता हो सकती है।

मान्य सिफर नाम तालिका 1 में सूचीबद्ध हैं।

मान्य सिफर मोड तालिका 2 में सूचीबद्ध हैं। अनुबंध के अनुसार, आईवीएस और ट्विक्स का उपयोग करके सिफर मोड को सभी-शून्य IV / ट्विन से शुरू होना चाहिए। यह सभी कॉल के लिए लागू होता है एन्क्रिप्ट / डिक्रिप्ट प्रिमिटिव्स विशेष रूप से जब मुख्य सामग्री को संभालना। इसके अलावा, ये IVs / tweaks साइफर मोड आमतौर पर सेक्टर सचिवों पर tweaks / IVs को फिर से भेजकर स्वतंत्र ब्लॉकों में सिफर धारा को काटते हैं। पहले एन्क्रिप्टेड / डिक्रिप्ट किए गए ब्लॉक के लिए सभी-शून्य IV / tweak की आवश्यकता उस आवश्यकता के बराबर है जिसे पहले ब्लॉक को सेक्टर 0 पर आराम करने के लिए परिभाषित किया गया है।

तालिका 3 हैश-स्पेक फ़ील्ड के लिए मान्य हैश चश्मा सूचीबद्ध करती है । एक अनुपालन कार्यान्वयन में सभी सिफर, सिफर मोड या हैश विनिर्देशों का समर्थन नहीं होता है।

तालिका 1: मान्य सिफर नाम

  • anes - उन्नत एन्क्रिप्शन स्टैंडर्ड - FIPS PUB 197
  • Twofish - Twofish: एक 128-बिट ब्लॉक सिफर - http://www.schneier.com/paper-twofish-paper.html     (नीचे देखें)
  • नागिन - http://www.cl.cam.ac.uk/~rja14/serpent.html
  • कास्ट 5 - आरएफसी 2144
  • कास्ट 6 - आरएफसी 2612

तालिका 2: मान्य सिफर मोड

  • ecb - सिफर आउटपुट का सीधा उपयोग किया जाता है
  • cbc-plain - सीबीसी सीबीसी मोड में संचालित होता है। सीबीसी चेनिंग को प्रत्येक सेक्टर में काटा जाता है, और प्रारंभिक वेक्टर के रूप में सेक्टर संख्या के साथ पुनर्निवेशित किया जाता है (32-बिट और थोड़ा-एंडियन में परिवर्तित)। यह मोड [Fru05b], अध्याय 4 में निर्दिष्ट है।
  • cbc-Essiv: हैश - मूल कुंजी के लिए IV कुंजी उत्पन्न करने के लिए hash का उपयोग करते हुए सिफर ESSIV मोड में संचालित होता है । उदाहरण के लिए, हैश के रूप में sha256 का उपयोग करते समय, सिफर मोड कल्पना "cbcessiv: sha256" है। ESSIV को [Fru05b], अध्याय 4 में निर्दिष्ट किया गया है।
  • xts-plain64 - http://grouper.ieee.org/groups/1619/email/pdf00086.pdf, plain64 सादे प्रारंभिक वेक्टर का 64-बिट संस्करण है

तालिका 3: मान्य हैश विनिर्देश

  • sha1 - RFC 3174 - यूएस सिक्योर हैश एल्गोरिथम 1 (SHA1)
  • sha256 - SHA वैरिएंट के अनुसार FIPS 180-2
  • sha512 - SHA वैरिएंट के अनुसार FIPS 180-2
  • ripemd160 - http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html    (नीचे देखें)

संपादक का नोट: ऊपर विनिर्देशन से कॉपी किया गया है। इसके लेखन के बाद, इन दस्तावेजों के URL बदल गए हैं:


1

आप निम्न आदेश के साथ अपने गुठली द्वारा समर्थित सिफर को सूचीबद्ध कर सकते हैं,

[root@arif]# ls /lib/modules/[your kernel version]/kernel/crypto/
algif_rng.ko.xz   blowfish_common.ko.xz   cmac.ko.xz               cts.ko.xz          gf128mul.ko.xz           michael_mic.ko.xz  rsa_generic.ko.xz      tgr192.ko.xz           xts.ko.xz
ansi_cprng.ko.xz  blowfish_generic.ko.xz  crc32_generic.ko.xz      deflate.ko.xz      ghash-generic.ko.xz      pcbc.ko.xz         salsa20_generic.ko.xz  twofish_common.ko.xz   zlib.ko.xz
anubis.ko.xz      camellia_generic.ko.xz  crct10dif_common.ko.xz   des_generic.ko.xz  jitterentropy_rng.ko.xz  pcrypt.ko.xz       seed.ko.xz             twofish_generic.ko.xz
arc4.ko.xz        cast5_generic.ko.xz     crct10dif_generic.ko.xz  dh_generic.ko.xz   khazad.ko.xz             rmd128.ko.xz       serpent_generic.ko.xz  vmac.ko.xz
async_tx          cast6_generic.ko.xz     cryptd.ko.xz             drbg.ko.xz         lrw.ko.xz                rmd160.ko.xz       sha512_generic.ko.xz   wp512.ko.xz
authencesn.ko.xz  cast_common.ko.xz       crypto_null.ko.xz        fcrypt.ko.xz       mcryptd.ko.xz            rmd256.ko.xz       tcrypt.ko.xz           xcbc.ko.xz
authenc.ko.xz     ccm.ko.xz               crypto_user.ko.xz        gcm.ko.xz          md4.ko.xz                rmd320.ko.xz       tea.ko.xz              xor.ko.xz

आप उन कमांडरों और हैश को सूचीबद्ध कर सकते हैं जिनका आप उपयोग कर सकते हैं और उनके I / O की तुलना luksनिम्नलिखित कमांड द्वारा कर सकते हैं ,

[root@arif arif]# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       289342 iterations per second for 256-bit key
PBKDF2-sha256     353293 iterations per second for 256-bit key
PBKDF2-sha512     227555 iterations per second for 256-bit key
PBKDF2-ripemd160  233224 iterations per second for 256-bit key
PBKDF2-whirlpool  236165 iterations per second for 256-bit key
argon2i       4 iterations, 917485 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id      4 iterations, 951672 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm |       Key |      Encryption |      Decryption
        aes-cbc        128b       642.2 MiB/s      2495.8 MiB/s
    serpent-cbc        128b        89.3 MiB/s       542.6 MiB/s
    twofish-cbc        128b       100.4 MiB/s       343.1 MiB/s
        aes-cbc        256b       477.2 MiB/s      1979.2 MiB/s
    serpent-cbc        256b        89.3 MiB/s       538.9 MiB/s
    twofish-cbc        256b       173.3 MiB/s       343.1 MiB/s
        aes-xts        256b      1668.0 MiB/s      1664.1 MiB/s
    serpent-xts        256b       535.7 MiB/s       523.4 MiB/s
    twofish-xts        256b       332.6 MiB/s       339.8 MiB/s
        aes-xts        512b      1384.5 MiB/s      1380.7 MiB/s
    serpent-xts        512b       539.3 MiB/s       524.4 MiB/s
    twofish-xts        512b       335.0 MiB/s       340.1 MiB/s

आप निम्न आदेश द्वारा विशिष्ट सिफर की तुलना कर सकते हैं,

[root@arif]# ciphers="aes-xts serpent-xts anubis-xts"

[root@arif]# echo "#     Algorithm |       Key |      Encryption |      Decryption";for i in $ciphers ; do cryptsetup benchmark --cipher $i|tail -n 1; done

#     Algorithm |       Key |      Encryption |      Decryption
        aes-xts        256b      1613.9 MiB/s      1642.8 MiB/s
    serpent-xts        256b       538.9 MiB/s       521.9 MiB/s
     anubis-xts        256b       182.0 MiB/s       182.1 MiB/s


आप कैसे जानते हैं कि ऊपर दी गई 58 फाइलों में से कौन सी क्रायसिपेटेटअप संगत सिफर मोड में बदल जाती है? यह बेंचमार्क कमांड नहीं हो सकता है क्योंकि यह एबिस-एक्सटीएस को सूचीबद्ध नहीं करता है ...
Xen2050

1

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-xtskeysizeक्या कुंजी के आकार इस सिफर के साथ इस्तेमाल किया जा सकता क्षेत्रों में भी हमें बताओ।

यदि यह एक मॉड्यूल से था, तो मॉड्यूल नाम 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सब बराबर हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.