Điểm:2

Mã hóa khóa: Có cần phải được xác thực không?

lá cờ in

Alice muốn lưu trữ các tập tin $m_i$ trên nền tảng lưu trữ đám mây không đáng tin cậy của Bob, với hạn chế bổ sung là cô ấy chỉ có thể lưu trữ một khóa chính $k$ chính cô ấy.

Cô ấy mã hóa các tập tin bằng chìa khóa $k_i$ tương ứng và thu được $c_i := Enc_{k_i}(m_i) $. Cô ấy cũng mã hóa các khóa như $k'_i := Enc_k(k_i)$ và gửi các bộ dữ liệu $(k'_i,c_i)$ để Bob lưu trữ.

Có vẻ khá tự nhiên rằng chế độ mã hóa được sử dụng cho $c_i$ được mã hóa xác thực. Nhưng đối với $k'_i$, do tính chất entropy cao của tải trọng và thực tế là chúng chỉ được sử dụng để giải mã mã hóa được xác thực, có vẻ như mã hóa $Enc_k(k_i)$ không cần phải xác thực.

Điều đó có đúng không? Nếu vậy, một lập luận chính thức và mạch lạc hơn cho nó là gì? Nếu không, thư giãn này kích hoạt cuộc tấn công nào?

SEJPM avatar
lá cờ us
Tùy thuộc vào chế độ mã hóa và triển khai được sử dụng, điều này có thể được sử dụng để thực hiện các cuộc tấn công khóa liên quan. Mặc dù những điều này thường phần nào nằm trong suy nghĩ của các nhà thiết kế mật mã hiện đại nhưng không phải lúc nào họ cũng bảo vệ được chúng.
SAI Peregrinus avatar
lá cờ si
Tôi nghĩ rằng bạn có thể giải quyết vấn đề cần xác thực riêng $k_{i}$ bằng cách sử dụng AEAD cam kết khóa để mã hóa tin nhắn, vì điều đó về cơ bản cũng giống như vậy. Phiên bản đơn giản là đặt hàm băm của khóa vào dữ liệu được liên kết.
Maarten Bodewes avatar
lá cờ in
Tôi sẽ đặt hàm băm của khóa *được bọc* trong AEAD, vì việc hủy gói có thể đặt khóa trong một môi trường an toàn (đó là cách hoạt động của TPM chẳng hạn). Tất nhiên, một tùy chọn khác là lưu trữ muối hoặc "thông tin" khác với tệp và lấy các khóa $k_i$.
kelalaka avatar
lá cờ in
[Một giải pháp thay thế](https://crypto.stackexchange.com/q/84439/18298)
Điểm:0
lá cờ in

Nếu mật mã AEAD có thể xác thực khi chìa khóa sai một khóa ngẫu nhiên đã được sử dụng thì tôi đoán mật mã sẽ được coi là không an toàn. Vì vậy, tôi nghĩ rằng việc loại trừ khóa trong phép tính sẽ tạo ra nhiều sự khác biệt.

Mặt khác, rất khó có khả năng một AD đầu vào sẽ được xử lý như một khóa trong mật mã khối. Vì vậy, việc đưa nó vào AD cũng không làm cho hầu hết các thuật toán trở nên không an toàn. Mặc dù vậy, tôi vẫn hơi lo lắng về thuật toán MAC bên trong; nó có thể là có một mối quan hệ toán học kỳ lạ có thể được khai thác; Tôi không nghĩ có bất kỳ yêu cầu cụ thể nào để tránh điều đó.

Tuy nhiên, nói chung tôi sẽ không coi khóa là dữ liệu. Đó có lẽ là thiết kế khôn ngoan và nguy hiểm hơn. Các khóa có thể được lưu trữ trong các vùng chứa không cung cấp dữ liệu (ví dụ: trong kho khóa phần cứng hoặc TPM). Ngay cả khi bạn không có kế hoạch sử dụng các khóa được bảo vệ ngay bây giờ, nó sẽ loại trừ tùy chọn này trong tương lai.

Vì vậy, những lựa chọn khác là có:

  1. Bao gồm bản mã của khóa được bọc dưới dạng dữ liệu AEAD. Bằng cách đó, chìa khóa được bảo vệ kép. Tuy nhiên, nếu bạn sử dụng sai chế độ (chẳng hạn như chế độ bộ đếm) thì kẻ tấn công có thể thực hiện các thay đổi theo bit trong khóa dữ liệu bổ sung, điều này sẽ khiến tôi hơi khó chịu. Vì vậy, tôi sẽ sử dụng chế độ gói khóa được thiết kế cho mục đích này trong trường hợp đó hoặc quay trở lại CBC với IV bằng không (yuk). Điều đó sẽ không cung cấp cho kẻ tấn công nhiều quyền kiểm soát đối với giá trị khóa.

  2. Thay vì gói khóa, lấy khóa bằng cách sử dụng dữ liệu dẫn xuất khóa (ví dụ: nhãn/thông tin/bộ đếm trình tự/muối) được lưu trữ cùng với bản mã. Nếu muốn, bạn có thể bao gồm dữ liệu phái sinh khóa được lưu trữ trong AD.Điều này có nhược điểm là bạn không thể trực tiếp sử dụng các khóa ngẫu nhiên (được tạo cục bộ) để mã hóa dữ liệu.

Kết luận: Tôi sẽ lo lắng hơn về cách bạn bọc hoặc lấy các khóa được sử dụng với dữ liệu. Bao gồm chính các khóa dẫn xuất trong AD là một ý tưởng tồi, nhưng bạn có thể bao gồm khác dữ liệu chẳng hạn như bản mã hoặc dữ liệu dẫn xuất trong AD và khiến đối thủ khó tạo tổ hợp khóa/bản mã được bao bọc hơn.


Ngoài chế độ gói đặc biệt, tôi cũng khuyên bạn nên sử dụng các phím 256 bit để tránh các cuộc tấn công đa mục tiêu. Sử dụng chế độ gói đặc biệt hoặc dẫn xuất khóa sẽ bảo vệ chống lại các cuộc tấn công khóa liên quan. Với loại trường hợp sử dụng này, bạn cũng có thể phải lo lắng về thay đổi trong tập tinkẻ thù tráo đổi nội dung bản mã của tệp.

Maarten Bodewes avatar
lá cờ in
Như mọi khi, hy vọng có câu trả lời đầy cảm hứng toán học hơn từ những người dùng thiên về toán học hơn của chúng tôi. Đối với một người, tôi đoán rằng một mật mã AEAD đặc biệt hoạt động kém trong các trường hợp nhất định có thể được tạo ra, chứng tỏ rằng có những mối nguy hiểm. Nếu điều đó là không thể thì điều đó có thể được chứng minh.
SAI Peregrinus avatar
lá cờ si
"Nếu mật mã AEAD có thể xác thực khi sử dụng sai khóa thì tôi đoán mật mã đó sẽ được coi là không an toàn." AES-GCM, AES-GCM-SIV và ChaCha20-Poly1305 đều không cam kết khóa, nên có thể tạo một thông báo xác thực theo nhiều khóa.
Maarten Bodewes avatar
lá cờ in
OK, tôi có thể đã viết sai vì nó sẽ là một khóa ngẫu nhiên, kẻ tấn công không thể chỉ bao gồm khóa mà họ muốn; họ chỉ có bản mã. Thay đổi câu trả lời để phản ánh điều đó, cảm ơn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.