Câu hỏi 1: Tại sao tính bảo mật của tin nhắn bị mất khi sử dụng cùng một IV hai lần? Từ nguyên tắc, tôi chỉ có thể thấy rằng kết quả XOR(p1, p2) có thể được suy ra vì dòng dữ liệu phía trên giống nhau - chứ không phải bản thân p1, p2.
Trên thực tế, trong khá nhiều trường hợp, kiến thức về $p_1 \oplus p_2$ có thể được sử dụng để phục hồi một phỏng đoán tốt về $p_1, p_2$. Điều đó phụ thuộc vào sự phân bố $p_1, p_2$ được rút ra từ - nếu có các chuỗi bit ngẫu nhiên, rõ ràng là không thể khai thác để khôi phục $p_1, p_2$ - mặt khác, nếu chúng là các chuỗi ASCII tiếng Anh, thì nó thực sự dễ dàng một cách đáng ngạc nhiên (ngoại trừ bạn sẽ không biết đó là $p_1$ và đó là $p_2$)
Câu hỏi 2: Làm thế nào/Tại sao Khóa AES có thể được tiết lộ bằng cách sử dụng cùng một IV một vài lần?
Trên thực tế, bạn sẽ không tự khôi phục khóa AES; bạn có thể phục hồi giá trị nội tại $H$.
Xác thực GCM hoạt động như thế này; thẻ được tính bằng cách mở rộng AAD và bản mã thành một chuỗi giá trị 128 bit $x_n, x_{n-1}, ..., x_1$ và tính toán:
$$tag = x_n H^n + x_{n-1}H^{n-1} + ... + x_1H^1 + E_k(nonce)$$
Nếu chúng tôi nhận được hai thông báo riêng biệt được mã hóa với cùng một lần khởi động, chúng tôi có thể trừ hai phương trình, dẫn đến [1]:
$$tag - tag' = (x_n - x'_n) H^n + (x_{n-1} - x'_{n-1} ) H^{n-1} + ... + (x_1 - x'_1)H^1$$
Vì các bản mã (hoặc AAD) khác nhau nên sẽ có một số hệ số khác 0 trong phương trình này.
Và, chúng tôi biết tất cả các hệ số (không giống như trường hợp GCM đơn lẻ, nơi chúng tôi không biết giá trị $E_k(không có)$); đây là một đa thức đã biết của ẩn số $H$ bằng cấp $n$; nó chỉ ra rằng, trong các trường hữu hạn, điều này là thực tế để giải quyết.
Giờ đây, kiến thức về $H$ không cho phép chúng tôi đọc bất kỳ bản mã nào; những gì nó sẽ cho phép chúng tôi làm là sửa đổi các bản mã theo cách như vậy để giữ cho thẻ hợp lệ, do đó làm mất hiệu lực đảm bảo tính toàn vẹn của GCM.
[1]: Ghi chú công chứng nhỏ: vì chúng ta đang làm việc trong một trường hữu hạn có đặc trưng hai, nên các phép toán $+$ và $-$ thực sự giống nhau và theo truyền thống thì luôn viết nó là $+$. tôi đã viết nó như $-$ để làm cho nó rõ ràng hơn những gì chúng ta đang làm.