it-swarm-vi.com

Đối với LUKS: Mật mã thích hợp nhất và an toàn nhất?

Tôi sắp mã hóa hai ổ cứng của mình bằng LUKS, vì tôi thực sự không thể tự làm được nên tôi sử dụng hướng dẫn trên wiki Arch Linux (có thể tìm thấy ở đây) . Trong một ví dụ trong hướng dẫn, mật mã được chỉ định là aes-xts-plain với kích thước khóa 512 bit. Là aes-xts-plain sự lựa chọn tốt nhất hoặc có một mật mã tốt hơn để sử dụng? Tôi muốn bảo mật hơn tốc độ.

22
Peter

Có ba thành phần bạn cần hiểu trong bất kỳ cách sử dụng mật mã khối nào và chúng áp dụng rõ ràng ở đây:

  • Các khối mật mã nguyên thủy. Đây có thể là một trong những quen thuộc, thuật toán mã hóa AES-ứng cử viên của bạn chẳng hạn như, tốt, AES, Serpent, Twofish, Blowfish, ...
  • Phương thức hoạt động. Sử dụng một mật mã khối như hiện tại, khối theo khối được gọi là sách mã điện tử, nhưng có các chế độ khác như chuỗi khối mã hóa và chế độ bộ đếm, với những ưu điểm và nhược điểm khác nhau.
  • Sơ đồ tạo vectơ khởi tạo, chẳng hạn như essiv kết hợp các kỹ thuật lấy dấu vân tay khác nhau có sẵn cho những kẻ tấn công chống lại CBC được sử dụng để mã hóa đĩa.

Vì vậy, khi bạn chọn một tùy chọn, ví dụ: aes-cbc-essiv, bạn thực sự đang yêu cầu AES, được sử dụng trong chế độ CBC với IV được mã hóa dựa trên một số định danh theo từng khối, trong khi aes-xts-plain sử dụng AES trong chế độ XTS với các IV cũ đơn giản được tạo từ một số thông tin trên mỗi khối.

Nó tập trung vào việc bạn có tin tưởng rằng XTS có đủ khả năng chống làm trắng (mà ESSIV chống lại) được đưa vào chế độ mã hóa hay không. Ở giai đoạn này, XTS là một chế độ hiện đại hơn với nhiều lợi thế kỹ thuật hơn, nhưng đã trải qua thử nghiệm mật mã ít hơn so với CBC.

Một điểm cần lưu ý với XTS, từ wikipedia:

Do việc phân tách, người dùng muốn mã hóa AES 256 và AES 128 sẽ cần chọn kích thước khóa tương ứng là 512 bit và 256 bit.

Cần phải cẩn thận khi tạo các kích thước khóa với chế độ này sao cho mỗi khối sử dụng một khóa có kích thước bit mong muốn. Tôi đã không nhìn vào thông tin LUKS để xem nó như thế nào, hoặc cryptsetup, phân chia các khóa của nó; đây có thể là điều bạn muốn làm để đảm bảo bạn có mức độ bảo mật chính xác mà bạn mong muốn. Như vậy, theo hướng dẫn của bạn, mã hóa 256 bit đã được sử dụng cho mỗi khối (với khóa 512 được chia thành hai phần).

16
user2213

Như đã đề cập về bài đăng gốc của bạn trên SU, đối với hầu hết các mục đích, mức độ an ninh cần thiết nên là đủ mà một kẻ tấn công không có cơ hội hợp lý phá vỡ nó trong một khoảng thời gian hữu ích (ví dụ cho dữ liệu cá nhân của bạn, bạn có thể muốn điều đó trở thành một 10 khoảng thời gian).

Vì vậy, trong ví dụ này giả sử bạn không có bí mật quốc gia hoặc dữ liệu nhạy cảm của công ty trên PC, AES-XTS-PLAIN dự kiến ​​sẽ chống lại khung thời gian hợp lý chống lại kẻ tấn công.

8
Rory Alsop

Mật mã thích hợp nhất là aes-xts-plain64 và nó được sử dụng distro wide (RedHat, CentOS, Oracle Linux, Ubuntu) theo mặc định. Hầu hết mọi người sử dụng aes vì rất nhiều thiết bị, ứng dụng hỗ trợ và hiệu suất của aes có thể được tăng tốc trên Bộ xử lý Intel . Và loại tính năng tăng tốc này mang lại cho aes rất nhiều lợi thế trên các mật mã khác. Bạn có thể đọc so sánh hiệu suất giữa simple implementation of aes vs hardware accelerated aestại đây . Và một điều được đề cập, nếu bạn sử dụng aes có một ưu điểm khác là nó được sử dụng rộng rãi vì vậy nếu có một cuộc tấn công có sẵn trên internet, bạn sẽ biết về nó nhanh chóng và bạn có thể sẽ nhận được cập nhật nhanh. Và có một số cuộc tấn công thụ động có sẵn khi triển khai aes dưới dạng mã hóa đĩa bạn có thể đọc từ tại đây

Nhưng sự lựa chọn của bạn có thể khác nhau. Và trong khi chọn mật mã, bạn chỉ cần đảm bảo rằng mật mã bạn chọn chưa bị xâm phạm. Bạn có thể kiểm tra nó từ tại đây . Có những mật mã tương tự khác có sẵn mà không hiệu quả (từ phối cảnh i/o) như aes nhưng các lựa chọn thay thế tốt. Nếu bạn không định sử dụng aes thì có hai người kế thừa của aes đó là an toàn hơnaes is Anubis = và serpent vì bạn có thể hy sinh tốc độ để bảo mật. May mắn thay, bạn có thể sử dụng chúng trong luks. Và nếu bạn muốn bảo vệ bí mật quốc gia hơn aes thì tôi đoán là aes được ưa thích trong FISMANIST-Special-Publication-800-53- Sửa đổi-4 .

Theo tôi, với thuật toán mã hóa, bạn nên nghiêm túc về thuật toán băm. Nếu bạn sử dụng hàm băm yếu hơn thuật toán siêu an toàn của bạn sẽ không giúp bạn nhiều. Bởi vì băm đóng một phần quan trọng trong quá trình mã hóa luks. Vì vậy, bạn không nên sử dụng sha1 nhưng sha512 là đủ an toàn. Nhưng bạn cũng có thể sử dụng whirepool hoặc người chiến thắng trong cuộc thi băm mật khẩu gần đây argon2i .

Từ câu trả lời khác của tôi về luks,

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,

[[email protected]]# ls /lib/modules/$(uname -r)/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à hàm băm bạn có thể sử dụng và so sánh I/O của chúng theo luks bằng lệnh sau,

[[email protected] 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,

[[email protected]]# ciphers="aes-xts serpent-xts anubis-xts"

[[email protected]]# 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

4
Muhammad