Làm cách nào để xác định loại mật mã & chế độ mật mã nào tôi có thể sử dụng trong dm-crypt / LUKS?


14

Tôi đang sử dụng một hệ thống dựa trên Ubuntu và tôi gặp khó khăn trong việc xác định loại mật mã và chế độ mật mã nào có sẵn cho tôi.

Trang người đàn ông cryptsetup nói:

"Xem / Proc / crypto để biết danh sách các tùy chọn khả dụng. Bạn có thể cần tải thêm các mô-đun mật mã hạt nhân để có thêm tùy chọn."

My / Proc / crypto có rất ít trong đó. Làm cách nào để tìm ra mô-đun mật mã hạt nhân bổ sung nào có sẵn để tôi tải?


/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.
Đánh dấu

2
Tôi nghĩ rằng đây là một câu hỏi hay. Tôi đã tự tìm kiếm thông tin này. /proc/cryptolà tuyệt vời, nhưng nó không liệt kê các chuỗi mật mã hợp lệ; những thứ như aes-xts-plain64hay aes-cbc-essiv:sha256. Một câu trả lời tốt sẽ cung cấp thông tin đó và cho biết các mô-đun nào /lib/modules...cần được tải để sử dụng chúng.
starfry

@starfry Tôi cũng thích điều này. Vì không có sự tương ứng đặt tên giữa chuỗi mật mã nên là gì và bên trong chuỗi của tôi /proc/crypto. Nó không có ý nghĩa.
CMCDragonkai

Câu trả lời:


10

Có rất nhiều, rất nhiều tài liệu và trang hướng dẫn để đọc qua, nhưng một tài liệu có thể khiến bạn đặc biệt quan tâm là Đặc tả định dạng trên đĩa LUKS (PDF).

Phụ lục B (nghĩa là, tự nhiên, gần cuối) nói,

Đăng ký đặc tả mật mã và Hash

Ngay cả khi mật mã tênmật mã chế độ chuỗi không được giải thích bởi bất kỳ hoạt động LUKS, họ phải có cùng ý nghĩa cho tất cả triển khai để đạt được khả năng tương thích giữa các triển khai LUKS dựa trên khác nhau. LUKS phải đảm bảo rằng hệ thống mật mã bên dưới có thể sử dụng tên mật mã và chuỗi chế độ mật mã, và vì các chuỗi này có thể không phải lúc nào cũng có nguồn gốc từ hệ thống mật mã, LUKS có thể cần ánh xạ chúng vào một cái gì đó phù hợp.

Tên mật mã hợp lệ được liệt kê trong Bảng 1.

Các chế độ mật mã hợp lệ được liệt kê trong Bảng 2. Theo hợp đồng, các chế độ mật mã sử dụng IV và chỉnh sửa phải bắt đầu từ IV / tinh chỉnh hoàn toàn. Điều này áp dụng cho tất cả các cuộc gọi đến các nguyên thủy mã hóa / giải mã đặc biệt là khi xử lý tài liệu chính. Hơn nữa, các chế độ mã hóa IV / chỉnh sửa này thường cắt luồng mật mã thành các khối độc lập bằng cách chỉnh lại các chỉnh sửa / IV tại các ranh giới của ngành. Yêu cầu IV / tinh chỉnh hoàn toàn cho khối được mã hóa / giải mã đầu tiên tương đương với yêu cầu khối đầu tiên được xác định để nghỉ tại khu vực 0.

Bảng 3 liệt kê các thông số băm hợp lệ cho trường hash-spec . Việc triển khai tuân thủ không phải hỗ trợ tất cả các thông số kỹ thuật mật mã, chế độ mật mã hoặc hàm băm.

Bảng 1: Tên mật mã hợp lệ

  • aes - Tiêu chuẩn mã hóa nâng cao - Trin PUB 197
  • twofish - Twofish: Mật mã khối 128 bit - http://www.schneier.com/apers-twofish-apers.html     (Xem bên dưới)
  • con rắn - http://www.cl.cam.ac.uk/~rja14/serpent.html
  • diễn viên5 - RFC 2144
  • diễn viên6 - RFC 2612

Bảng 2: Các chế độ mật mã hợp lệ

  • ecb - Đầu ra mật mã được sử dụng trực tiếp
  • cbc-plain - Mật mã được vận hành ở chế độ CBC. Chuỗi CBC được cắt mọi khu vực và được định nghĩa lại với số khu vực là vectơ ban đầu (được chuyển đổi thành 32 bit và thành endian nhỏ). Chế độ này được chỉ định trong [Fru05b], Chương 4.
  • cbc-essiv: hash - Mật mã được vận hành ở chế độ ESSIV bằng cách sử dụng hàm băm để tạo khóa IV cho khóa gốc. Chẳng hạn, khi sử dụng sha256 làm hàm băm, thông số chế độ mật mã là Cbcessiv: sha256. ESSIV được chỉ định trong [Fru05b], Chương 4.
  • xts-plain64 - http://grouper.ieee.org/groups/1619/email/pdf00086.pdf, plain64 là phiên bản 64 bit của vector ban đầu đơn giản

Bảng 3: Thông số kỹ thuật băm hợp lệ

  • sha1 - RFC 3174 - Thuật toán băm an toàn Hoa Kỳ 1 (SHA1)
  • sha256 - Biến thể SHA theo Trin 180-2
  • sha512 - Biến thể SHA theo Trin 180-2
  • ripemd160 - http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html    (Xem bên dưới)

Lưu ý của biên tập viên: Phần trên được sao chép từ thông số kỹ thuật. Sau khi viết, URL của các tài liệu này đã thay đổi:


1

Bạn có thể liệt kê các mật mã được hỗ trợ bởi các nhân của bạn bằng lệnh sau đây,

[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

Bạn có thể liệt kê các mật mã và băm bạn có thể sử dụng và so sánh I / O của chúng luksbằng lệnh sau,

[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

Bạn có thể so sánh các mật mã cụ thể bằng lệnh sau,

[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


Làm thế nào để bạn biết tập tin nào trong số 58 tập tin trên chuyển đổi thành chế độ mật mã tương thích cryptsetup? Nó không thể là lệnh điểm chuẩn vì nó không liệt kê anubis-xts ...
Xen2050

1

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,arc4vv 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ừlmkivmode, 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ằngecbkhô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. plain64dường như được khuyến khích phổ biến nhất.
    • nullIV 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.
    • essivSử 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à ecbchế độ 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ã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/cryptonameskcipher

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 typeof skcipherchỉ 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-xtskhi được chỉ định với dm-crypt. Các keysizetrườ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 moduledò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ừ anubismô-đ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-anubissẽ tải mô-đun cung cấp mật mã anubis.

Khi sử dụng cryptsetup benchmarklệnh, chỉ có mật mã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-foobartất cả đều tương đương.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.