2015-10-14 41 views
9

Tôi muốn biết liệu có bất kỳ sự khác biệt nào giữa hai phương thức mã hóa này không? Tôi chưa bao giờ sử dụng chúng trước đây. Khách hàng của tôi yêu cầu tôi sử dụng mã hóa AES-128 nhưng khi tôi google nó, nó cho tôi thấy "aes-128-cbc", "aes-128-ctr", "aes-256-cbc", hoặc "aes-256-ctr "vì vậy tôi muốn biết cái nào tôi nên sử dụng sẽ giống như AES-128?Có sự khác biệt nào giữa mã hóa aes-128-cbc và aes-128 không?

link tham khảo: this is where I have to send encryption method

+0

"aes-128" không chỉ định chế độ, nhưng mật mã "aes-128- *" làm. Không rõ chế độ "aes-128" nào mặc định, vì vậy bạn nên tìm ra điều đó trước. –

Trả lời

21

3 điều:

  • AES: Advanced Encryption Standard. Đây là tên của thuật toán mã hóa (mã hóa đối xứng). Các thuật toán mã hóa đối xứng khác là: DES, 3-DES, v.v.
  • 128: Điều này có thể đề cập đến kích thước khóa. Mã hóa AES sử dụng 3 kích thước chính (128bit, 192bit và 256bit). Kích thước khối trong AES cũng là 128 bit.
  • CBC: Đây là chế độ mã hóa mà bạn muốn. Có một số chế độ mã hóa, phụ thuộc vào tốc độ bạn muốn thuật toán của bạn hoạt động, song song và mức độ bảo mật. Một vài chế độ là CBC (Cipher Block Chaining), ECB (Electronic Code Book), CFB (Cipher Feed Back), CTR (Counter), vv ..

Bây giờ, khách hàng của bạn yêu cầu bạn mã hóa bằng AES-128. Vì vậy, bạn nên sử dụng mã hóa AES với kích thước khóa 128 bit. Bất kỳ chế độ nào bạn có thể sử dụng sẽ thuộc sở thích của bạn. Tôi thích CBC hơn.

+1

Xem xét mạnh mẽ việc chuyển từ CBC sang CTR + HMAC –

+0

@ScottArciszewski, HMAC là lược đồ xác thực thư sử dụng so sánh băm. Điều đó luôn có thể được thực hiện cùng với bất kỳ mã hóa nào được thực hiện. Tôi nghĩ rằng tôi vẫn thích CBC + HMAC (Sha-1/2) trên CTR (+ HMAC), và rằng quá với một số muối. – vish4071

+0

Thành thật mà nói, các lề bảo mật cho cả hai đều có thể hoán đổi cho nhau. Chế độ CTR có lợi thế mà bạn tránh phải đối phó với đệm, vì nó biến đổi AES thành một mật mã dòng và xâu khóa chính với bản rõ của bạn. Thư viện mã hóa của Defuse 2.0 được thiết lập để sử dụng hiệu quả một nonce 256 bit (bitce 128 bit và một bit 128 bit cho HKDF, vì vậy ngay cả khi nonce va chạm, cặp khóa cho thông điệp đó sẽ không) - giả sử PR của tôi được sáp nhập tất nhiên. Điều này có nghĩa là một vụ va chạm sinh nhật sẽ xảy ra với xác suất 50% sau 2^128 thông báo. –

3

Nhìn vào liên kết bạn đã bao gồm, nó cho biết sẽ chấp nhận một số chế độ khác nhau, bao gồm CBC. Trừ khi bạn có một lý do cụ thể không sử dụng nó, sau đó sử dụng AES-128-CBC. Chế độ CBC là chế độ đa năng tốt. Bạn cũng sẽ cần phải hiểu việc sử dụng padding (sử dụng PKCS # 5 hoặc PKCS # 7, bất kỳ hệ thống nào của bạn cho phép) và Vector khởi tạo, IV, để chế độ CBC hoạt động chính xác.

Không sử dụng chế độ ECB vì nó không an toàn và rò rỉ thông tin.

+0

"Không sử dụng chế độ ECB vì nó không an toàn và rò rỉ thông tin". Được trích dẫn để nhấn mạnh. https://filippo.io/the-ecb-penguin/ –

+0

... và để xác thực thư. –

13

Chỉ cần lưu ý nhanh về CBC so với ECB. Khi bạn mã hóa bằng ECB, mỗi 128 bit (tùy thuộc vào kích thước khối) của dữ liệu được mã hóa bằng cùng một khóa. Nếu có bất kỳ mẫu nào trong bản rõ, văn bản được mã hóa kết quả cũng sẽ có thể dự đoán được, cho dù thuật toán mã hóa có tốt hay không.

ECB:

Plain text: aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa 
      ---------------- ---------------- ---------------- 
Encrypted: bdefjakjapqeiowp bdefjakjapqeiowp bdefjakjapqeiowp 

Nếu bạn sử dụng CBC, khối đầu tiên được XOR với bản IV (vector khởi tạo) và được mã hóa với khóa và khối thứ hai được XOR với khối đầu tiên và sau đó được mã hóa bằng khóa, thứ ba với khóa. Mật mã kết quả sau đó ít bị tổn thương hơn khi phân tích tần số. CBC Encryption mode

This image is taken from Wikimedia Commons, the free media repository

Điểm bất lợi là bạn không thể parallelize mã hóa/giải mã kể từ khi bạn cần kết quả của khối trước đó, vì vậy nó có thể chậm hơn. Nhưng trong thực tế, nó không tạo ra sự khác biệt thực sự nào.

+1

có lỗi trong tiêu đề ví dụ không? nên là ECB tôi giả sử – klappvisor

0

Ở đây aes-128-cbcaes-128. aes là viết tắt của dịch vụ mã hóa nâng cao, 128 là tốc độ bit và CBC là chế độ mã hóa.

Tuy nhiên, điều này được đọc và chỉ được sử dụng ở OPEN SSL Định dạng.Trước khi mở SSL, PHP đã sử dụng mcrypt_encrypt không được thiết kế đúng cách (các phiên bản cũ hơn của PHP). aes-128 cũng có thể được đặt lại thành rijndael trong khi sử dụng mcrypt.

Các vấn đề liên quan