2012-01-10 72 views
25

Tôi hiểu rằng IV duy nhất là quan trọng trong việc mã hóa để ngăn chặn các cuộc tấn công như phân tích tần số. Câu hỏi: For AES CBC encryption, whats the importance of the IV? có một câu trả lời khá rõ ràng giải thích tầm quan trọng của IV.Mã hóa AES cách vận chuyển IV

Có lỗ hổng bảo mật nào trong việc gửi IV trong văn bản rõ ràng không? Hoặc nó sẽ cần phải được mã hóa với cùng một khóa công khai/riêng được sử dụng để gửi khóa đối xứng?

Nếu IV cần được gửi mã hóa, thì tại sao không tạo khóa đối xứng mới mỗi lần và xem IV là một phần của khóa? Liệu nó tạo ra một khóa đối xứng là quá tốn kém? Hoặc là nó để giảm thiểu số lượng dữ liệu được vận chuyển?


Câu trả lời trên xuống Secret vs. Non-secret Initialization Vector trạng thái:

Một giao thức thiết lập quan trọng điển hình sẽ cho kết quả đều liên quan đến các bên tính toán một phần dữ liệu mà họ, nhưng chỉ có họ, cả hai đều biết. Với Diffie-Hellman (hoặc bất kỳ biến thể Elliptic Curve nào), đoạn dữ liệu được chia sẻ nói trên có độ dài cố định và chúng không có quyền kiểm soát giá trị của nó (cả hai đều có cùng chuỗi bit).

Làm cách nào để hai thực thể lấy được "chuỗi các bit giống nhau ngẫu nhiên" mà không có thông tin chia sẻ? Giả định rằng thông tin được chia sẻ đã được mã hóa chưa? Và, nếu thông tin được chia sẻ được gửi mã hóa, tại sao không chỉ gửi mã hóa IV?


Vì ứng dụng cần chuyển khóa đối xứng một cách an toàn, dường như việc tách IV khỏi chính bản thân là tối ưu hóa. Hay tôi đang thiếu một cái gì đó?

+0

lược đồ mà tôi đã sử dụng trong quá khứ là tạo khóa ngẫu nhiên mỗi lần và mã hóa khóa và iv cả bằng cặp khóa công khai/riêng được chia sẻ trước đó. Tôi chưa bao giờ cảm thấy điều này làm tăng tải trọng AES một cách đáng kể (vì mục đích sử dụng của tôi), nhưng có lẽ các giao thức cực kỳ hạn chế có thể có các yêu cầu nghiêm ngặt hơn về kích thước – rejj

Trả lời

25

Không có lỗ hổng bảo mật bằng cách gửi IV trong văn bản - điều này tương tự như lưu trữ muối cho băm trong bản rõ: Miễn là kẻ tấn công không kiểm soát được IV/muối, và miễn là nó là ngẫu nhiên , không có vấn đề gì cả.

26

Sự khác biệt chính giữa vector khởi tạo và khóa là khóa phải được giữ bí mật, trong khi IV không phải là - nó có thể đọc được bởi kẻ tấn công mà không có bất kỳ nguy hiểm nào đối với tính bảo mật của mã hóa đề án được đề cập. Ý tưởng là bạn có thể sử dụng cùng một khóa cho một số thư, chỉ sử dụng các vectơ khởi tạo khác nhau (ngẫu nhiên) cho mỗi thư, vì vậy quan hệ giữa các văn bản thuần tuý không hiển thị trong các bản mã tương ứng.

Điều đó nói rằng, nếu bạn đang sử dụng lược đồ thỏa thuận chính như Diffie-Hellman, cung cấp cho bạn một bí mật được chia sẻ mới cho mỗi phiên, bạn cũng có thể sử dụng nó để tạo véc tơ khởi tạo đầu tiên. Điều này không thực sự mang lại nhiều lợi thế về bảo mật so với việc lựa chọn vector khởi tạo trực tiếp và gửi nó với thông điệp, nhưng tiết kiệm một số bit của băng thông và một số bit entropy từ nguồn ngẫu nhiên của bạn. Và nó làm cho IV ngẫu nhiên hơn một chút trong trường hợp một trong các đối tác có nguồn ngẫu nhiên xấu (mặc dù DH cũng không thực sự an toàn trong trường hợp này).

Làm cách nào để hai thực thể lấy được "chuỗi các bit giống nhau ngẫu nhiên" mà không có phần thông tin được chia sẻ? Giả định rằng thông tin được chia sẻ đã được mã hóa chưa? Và, nếu thông tin được chia sẻ được gửi mã hóa, tại sao không chỉ gửi mã hóa IV?

Diffie-Hellman được dựa trên một vấn đề nhóm lý thuyết: Eve biết một (cyclic) nhóm G với máy phát điện g và thấy hai giá trị g^a (truyền từ Alice cho Bob) và g^b (truyền từ Bob Alice), trong đó ab là các số nguyên ngẫu nhiên lớn được Alice và Bob chọn, và không biết đến Eve và thậm chí cả đối tác khác). Bí mật được chia sẻ sau đó là (g^a)^b = g^(a·b) = (g^b)^a. Rõ ràng Bob (người biết b) có thể tính toán bí mật là (g^a)^b, trong khi Alice (ai biết a) có thể tính toán (g^b)^a. Eve bằng cách nào đó cần phải lấy được bí mật này để phá vỡ giao thức.

Trong một số nhóm này (được gọi là bài toán Diffie-Hellman tính toán) có vẻ là một vấn đề khó khăn và chúng tôi đang sử dụng các nhóm này trong Mật mã học. (Trong DH ban đầu, chúng ta sử dụng một nhóm con của thứ tự chính của nhóm nhân của một số trường hữu hạn lớn, trong Elliptic Curve DH chúng ta sử dụng một nhóm đường cong elliptic trên một trường hữu hạn. Các nhóm khác cũng làm việc.)

Sau đó cả Alice và Bob đều sử dụng một hàm dẫn xuất quan trọng để lấy ra tài liệu khóa thực tế (tức là các khóa mã hóa cho cả hai hướng, các khóa MAC và các IV bắt đầu).

+0

rất hữu ích, cảm ơn – RunHolt

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