it-swarm-vi.com

Khi sử dụng AES và CBC, có cần giữ bí mật IV không?

Nếu tôi mã hóa một số dữ liệu bằng Khóa khởi tạo và Khóa khởi tạo ngẫu nhiên, thì lưu trữ tất cả ba mẩu thông tin trong cùng một hàng của bảng; Có cần thiết phải mã hóa IV cũng như Khóa không?

Cấu trúc bảng đơn giản hóa:

  • Dữ liệu được mã hóa
  • Khóa (được mã hóa bằng phương thức thứ hai)
  • IV (được mã hóa?)

Hãy cho rằng kiến ​​trúc và phương pháp là cần thiết: Giải thích đằng sau nó dài và buồn tẻ.

44
Stu Pegg

Từ Wikipedia :

Một vectơ khởi tạo có các yêu cầu bảo mật khác với khóa, vì vậy IV thường không cần phải bí mật . Tuy nhiên, trong hầu hết các trường hợp, điều quan trọng là vectơ khởi tạo không bao giờ được sử dụng lại dưới cùng một khóa . Đối với CBC và CFB, việc sử dụng lại IV làm rò rỉ một số thông tin về khối bản rõ đầu tiên và về bất kỳ tiền tố phổ biến nào được chia sẻ bởi hai thông báo.

Bạn không cần giữ bí mật IV, nhưng nó phải ngẫu nhiên và duy nhất.

51
Polynomial

Mặc dù trong trường hợp của bạn, IV phải là okay trong bản rõ trong DB, có một lỗ hổng nghiêm trọng nếu bạn cho phép người dùng kiểm soát IV.

Giải mã IV trong được sử dụng (và chỉ được sử dụng) để XOR khối đầu tiên vào bản rõ cuối cùng - vì vậy nếu kẻ tấn công có thể kiểm soát IV họ có thể tùy ý điều khiển khối dữ liệu đầu tiên và phần còn lại của bản rõ sẽ tồn tại mà không cần sửa đổi.

enter image description here

Nếu kẻ tấn công biết bản rõ gốc của khối đầu tiên, thì vấn đề sẽ được phóng to lại vì kẻ tấn công có thể chọn dữ liệu tùy ý cho khối đầu tiên mà không cần dùng thử và lỗi.

Điều này đặc biệt quan trọng trong trường hợp dữ liệu được mã hóa đang được truyền qua các kênh không tin cậy với IV, có thể vào trình duyệt hoặc ứng dụng, v.v.

8
George Powell