Hạt nhân 5.1, hiện tại tại thời điểm tôi viết này, có hai định dạng khác nhau cho chuỗi mật mã, định dạng "cũ" và định dạng "mới". Tất cả mọi thứ trong câu hỏi này cho đến nay, và dường như tất cả các tài liệu cũng vậy, liên quan đến định dạng "cũ", vì vậy tôi sẽ mô tả nó ở đây. Đây chỉ là mã hóa. Nếu sử dụng tính toàn vẹn với dm-crypt, thì người ta phải xem xét các mật mã AEAD và nó thậm chí còn phức tạp hơn.
Định dạng phân tích bởi các hạt nhân là " mật mã [ :
keycount ] -
chế độ -
ivmode [ :
ivopts ]". Ví dụ: aes-xts-plain64
, blowfish-cbc-essiv:sha256
, aes:64-cbc-lmk
.
Cipher
Các mật mã để sử dụng, ví dụ làaes
,anubis
,twofish
,arc4
vv Người tài xế dm-crypt hạt nhân không có một danh sách các mật mã. Điều này được chuyển qua API Crypto của Linux, do đó, bất kỳ mật mã phù hợp nào được hỗ trợ bởi kernel đều có thể được sử dụng.
keycount
Sức mạnh tùy chọn của hai số lượng phím để sử dụng với mật mã. Điều này mặc định là 1 cho mọi thứ trừlmk
ivmode, trong đó nó mặc định là 64. Điều này thực sự chỉ áp dụng cho LMK và các giá trị khác 1 sẽ không hoạt động đúng với các chế độ khác.
chế độ Chế độ chuỗi khối để sử dụng với mật mã. Ví dụ nhưecb
,cbc
,xts
. Ngoài việc biết rằngecb
không sử dụng IV, trình điều khiển md-crypt chuyển điều này qua API Crypto của Linux và có thể sử dụng bất kỳ chế độ chuỗi nào được hỗ trợ bởi kernel.
ivmode Thuật toán được sử dụng để tạo vectơ khởi tạo (IV) cho từng khu vực. Trong mã hóa khóa đối xứng điển hình, không giống như dm-crypt, IV là một bit dữ liệu khác được truyền vào mật mã cùng với khóa khi mã hóa hoặc giải mã. Chỉ có một IV được thông qua cho toàn bộ hoạt động. Vì dm-crypt cần có khả năng đọc và ghi riêng từng khu vực, nên nó không mã hóa toàn bộ đĩa dưới dạng một thao tác. Thay vào đó, có IV cho mỗi lĩnh vực. Thay vì truyền vào IV dưới dạng dữ liệu, thuật toán tạo IV được chỉ định ở đây. Đây không phải là một phần của API Crypto Linux, vì việc tạo IV không được thực hiện bởi mật mã và cácgiá trị ivmode được phépđược xác định là trình điều khiển dm-crypt. Họ đang:
plain
, plain64
, plain64be
, benbi
Những chỉ cần sử dụng số lĩnh vực, trong các định dạng khác nhau, như IV. Đồng nghĩa với các chế độ khối như XTS được thiết kế để chống lại các cuộc tấn công như hình mờ khi sử dụng IV đơn giản và có thể dự đoán được. plain64
dường như được khuyến khích phổ biến nhất.
null
IV luôn bằng không. Để kiểm tra và tương thích ngược, bạn không nên sử dụng điều này.
lmk
Tương thích với sơ đồ mã hóa Loop-AES.
tcw
Tương thích với TrueCrypt.
essiv
Sử dụng số khu vực được mã hóa với một hàm băm của khóa. Đồng nghĩa với các chế độ, như CBC, không chịu được các cuộc tấn công khác nhau khi sử dụng IV đơn giản như thế nào plain64
.
ivopts Băm được sử dụng vớiessiv
ivmode , bị bỏ qua cho tất cả các chế độ khác.
Trong trường hợp đặc biệt, " mật mã-plain
" hoặc chỉ " mật mã " được hiểu là " mật mã-cbc-plain
". Một trường hợp đặc biệt khác là ecb
chế độ không có ivmode để chỉ định.
Làm thế nào điều này liên quan đến /proc/crypto
Đối với /proc/crypto
, chỉ có mật mã và chế độ có liên quan. dm-crypt với việc xây dựng một đặc tả API Crypto có dạng " mật mã chế độ " và yêu cầu điều này từ kernel. Đây là những gì người ta nên tìm kiếm như là cho a . Thí dụ:(
)
/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
The type
of skcipher
chỉ ra đây là một mật mã khóa đối xứng, những gì dm-crypt sử dụng và tên của xts(aes)
sẽ được viết aes-xts
khi được chỉ định với dm-crypt. Các keysize
trường cũng cho chúng ta biết kích thước khóa nào có thể được sử dụng với mật mã này.
Nếu đây là từ một mô-đun, tên mô-đun có thể hiển thị trong module
dòng. Tuy nhiên, nhiều mật mã (thường là các phần mềm trong phần mềm không có bất kỳ mã cụ thể phần cứng nào) được triển khai như một mật mã chung được kết hợp với mã chuỗi khối chung để tạo ra mã hóa cuối cùng. Ví dụ:
name : xts(anubis)
driver : xts(ecb(anubis-generic))
module : kernel
type : skcipher
name : anubis
driver : anubis-generic
module : anubis
type : cipher
Trong trường hợp này, mật mã anubis được kết hợp với mã chế độ chuỗi khối XTS hạt nhân để tạo ra mật mã cuối cùng xts(anbuis)
, được gán một mô-đun kernel
. Nhưng để có sẵn điều này, chúng ta cần mật mã anubis chung, từ anubis
mô-đun. Hầu hết các mật mã đều có một bí danh mô-đun là " crypto-
mật mã " có thể được sử dụng để tải chúng, ví dụ như modprobe crypto-anubis
sẽ tải mô-đun cung cấp mật mã anubis.
Khi sử dụng cryptsetup benchmark
lệnh, chỉ có mật mã và chế độ là vấn đề, vì đó là tất cả những gì được điểm chuẩn. Nếu chế độ không được chỉ định, nó mặc định là CBC. Các ivmode hoàn toàn bị bỏ qua. Như vậy, đối với điểm chuẩn, aes
, aes-cbc
, và aes-cbc-foobar
tất cả đều tương đương.
/lib/modules/*/kernel/crypto/
là một nơi có khả năng để tìm, nhưng các mô-đun có thể ở bất cứ đâu trên hệ thống tập tin.