Kernel 5.1, saat ini pada saat saya menulis ini, memiliki dua format berbeda untuk string cipher, format "lama" dan format "baru". Segala sesuatu dalam pertanyaan ini sejauh ini, dan tampaknya semua dokumen juga, berkaitan dengan format "lama", jadi saya akan jelaskan di sini. Ini hanya untuk enkripsi. Jika menggunakan integritas dengan dm-crypt, maka seseorang harus mempertimbangkan cipher AEAD dan itu menjadi semakin rumit.
Format yang diuraikan oleh kernel adalah " cipher [ :
keycount ] -
mode -
ivmode [ :
ivopts ]". Contoh: aes-xts-plain64
, blowfish-cbc-essiv:sha256
, aes:64-cbc-lmk
.
cipher
cipher The penggunaan, contoh adalahaes
,anubis
,twofish
,arc4
, dll kernel pengemudi dm-crypt tidak memiliki daftar cipher. Ini diteruskan ke Linux Crypto API, sehingga cipher yang cocok yang didukung oleh kernel dapat digunakan.
keycount
Kekuatan opsional dua tombol untuk digunakan dengan sandi. Ini default ke 1 untuk semuanya kecualilmk
ivmode, di mana defaultnya ke 64. Ini benar-benar hanya berlaku untuk LMK dan nilai selain 1 tidak akan bekerja dengan baik dengan mode lain.
mode Blok chaining mode untuk digunakan dengan cipher. Contohnya adalahecb
,cbc
,xts
. Selain mengetahui bahwaecb
tidak menggunakan IV, driver md-crypt melewati ini ke Linux Crypto API dan dapat menggunakan mode chaining yang didukung oleh kernel.
ivmode Algoritma yang digunakan untuk menghasilkan vektor inisialisasi (IV) untuk setiap sektor. Dalam enkripsi kunci simetris tipikal, tidak seperti dm-crypt, IV adalah data lain yang dikirimkan ke dalam cipher bersama dengan kunci ketika mengenkripsi atau mendekripsi. Hanya ada satu IV yang diteruskan untuk seluruh operasi. Karena dm-crypt perlu dapat membaca dan menulis masing-masing sektor secara individual, ia tidak mengenkripsi seluruh disk sebagai operasi tunggal. Sebaliknya, ada IV untuk setiap sektor. Daripada meneruskan IV sebagai data, algoritma untuk membuat IV ditentukan di sini. Ini bukan bagian dari Linux Crypto API, karena generasi IV tidak dilakukan oleh cipher, dannilai-nilai ivmode yang diizinkandidefinisikan sebagai driver dm-crypt. Mereka:
plain
, plain64
, plain64be
, benbi
Ini hanya menggunakan jumlah sektor, dalam berbagai format, seperti IV. Dimaksudkan untuk mode blok seperti XTS yang dirancang untuk menahan serangan seperti watermarking saat menggunakan IV yang sederhana dan dapat diprediksi. plain64
tampaknya paling direkomendasikan.
null
IV selalu nol. Untuk pengujian dan kompatibilitas mundur, Anda tidak harus menggunakan ini.
lmk
Kompatibel dengan skema enkripsi Loop-AES.
tcw
Kompatibel dengan TrueCrypt.
essiv
Menggunakan nomor sektor yang dienkripsi dengan hash kunci. Dimaksudkan untuk mode, seperti CBC, yang tidak tahan terhadap berbagai serangan ketika menggunakan IV sederhana plain64
.
ivopts Hash untuk digunakan denganessiv
ivmode , diabaikan untuk semua mode lainnya.
Sebagai kasus khusus, " sandi-plain
" atau hanya " sandi " ditafsirkan sebagai " sandi-cbc-plain
". Kasus khusus lain adalah bahwa ecb
mode tidak memiliki ivmode untuk ditentukan.
Bagaimana ini berhubungan dengan /proc/crypto
Sehubungan dengan itu /proc/crypto
, hanya cipher dan mode yang relevan. dm-crypt dengan membangun spesifikasi API Crypto dari bentuk " mode (
cipher)
" dan meminta ini dari kernel. Ini adalah apa yang harus dicari /proc/crypto
sebagai name
untuk a skcipher
. Contoh:
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
The type
dari skcipher
menunjukkan ini cipher simetrik key, apa kegunaan dm-crypt, dan nama xts(aes)
akan ditulis aes-xts
ketika ditentukan dengan dm-crypt. Kolom keysize
juga memberi tahu kami ukuran kunci apa yang dapat digunakan dengan sandi ini.
Jika ini dari modul, nama modul mungkin muncul di module
baris. Namun, banyak cipher (biasanya dalam perangkat lunak yang tidak memiliki kode spesifik perangkat keras) diimplementasikan sebagai cipher generik yang dikombinasikan dengan kode rantai blok generik untuk menghasilkan skcipher akhir. Sebagai contoh:
name : xts(anubis)
driver : xts(ecb(anubis-generic))
module : kernel
type : skcipher
name : anubis
driver : anubis-generic
module : anubis
type : cipher
Dalam hal ini cipher anubis dikombinasikan dengan kode mode rantai blok XTS kernel untuk menghasilkan cipher terakhir xts(anbuis)
, yang telah diberi modul kernel
. Tetapi untuk mendapatkan ini tersedia kita perlu cipher anubis generik, yang berasal dari anubis
modul. Kebanyakan cipher memiliki alias modul " crypto-
cipher " yang dapat digunakan untuk memuatnya, misalnya modprobe crypto-anubis
akan memuat modul yang menyediakan cipher anubis.
Saat menggunakan cryptsetup benchmark
perintah, hanya cipher dan mode yang penting, karena hanya itu yang ditentukan. Jika mode tidak ditentukan, standarnya adalah CBC. The ivmode benar-benar diabaikan. Dengan demikian, untuk benchmarking, aes
, aes-cbc
, dan aes-cbc-foobar
semua setara.
/lib/modules/*/kernel/crypto/
mungkin tempat untuk melihat, tetapi modul dapat di mana saja di sistem file.