Điểm:1

Hiểu đại số đằng sau bảo mật của GCM

lá cờ ru

Tôi muốn hiểu đại số đằng sau bảo mật của GCM. Trước khi tôi đặt câu hỏi, hãy để tôi nêu hiểu biết của mình về toán học đằng sau GCM. Nếu đúng, câu hỏi của tôi ở cuối; nếu không chính xác, bạn có thể vui lòng giải thích sai lầm của tôi.

Để đơn giản, giả sử chỉ có một khối bản mã $c$. Chúng tôi muốn thẻ của mình có hai thuộc tính:

  1. $tag_k(c)$ phải là một hàm băm thống nhất phổ quát của $c$: có nghĩa là, cho tất cả $c$, nếu $k$ là ngẫu nhiên thống nhất, $P[tag_k(c) = y]$ là thống nhất cho tất cả $y$.

  2. $tag_k(c)$ không nên tiết lộ thông tin về $k$, ngay cả khi $c$ đã được biết đến.

Thuộc tính 1 dễ dàng được thỏa mãn bằng cách nhân với khác không $k$ Trong $GF(2^n)$, kể từ, trong $GF(2^n)$, $f(x) = ax$ là một hoán vị duy nhất cho tất cả $a \ne 0$, và $f$ do đó là một hàm băm thống nhất phổ quát.

Tài sản 2, tuy nhiên, sẽ không phải được hài lòng bởi $tag_k(c) = kc$, vì chúng ta có thể tính toán $c{^-1}$ và giải quyết $k = tag_k(c)c^{-1}$. Để đáp ứng Thuộc tính 2, chúng tôi giới thiệu một "bản mã bí mật", $c_0$, và xác định $tag_k(c) = kc + c_0$ (ngoài ra là XOR bitwise trong $GF(2^n)$). $c_0$ đang hoạt động hiệu quả như một miếng đệm một lần để mã hóa thẻ "root" $kc$.

Nếu chúng ta muốn xác thực hai khối bản mã thì sao? Chúng ta có thể lặp lại quy trình đó, đảm bảo sử dụng một $c_0$ mỗi lần. Trong thực tế, AES-GCM sử dụng c_0 = AES_k(bộ đếm ++).

Tuy nhiên, khi xác thực nhiều khối cùng một lúc, điều này không hiệu quả. Thay vào đó, chúng ta có thể sử dụng một thẻ cho nhiều khối mật mã, sử dụng công thức sau:

$$tag_k(c_1, c_2,...c_n) = kc_0 + \sum k^nc_n.$$ (Để đơn giản, tôi bỏ qua trường độ dài cũng như bản rõ đã xác thực). Điều này bảo tồn cả hai thuộc tính.

Chúng ta có thể bị cám dỗ để đơn giản hóa điều đó để $\sum kc_n$, nhưng điều này không thành công, vì chúng ta có thể thay thế $c_a, c_b$ với $giả_a, giả_b$ miễn là $fake_a + fake_b = c_a + c_b$. Ví dụ, chúng ta có thể lật một bit trong bất kỳ khối mật mã nào miễn là chúng ta lật bit tương ứng trong một khối khác. (Kiểu tấn công này được sử dụng để chống lại WEP, sử dụng CRC làm "MAC" của nó).

  1. Điều trên có đúng không?
  2. AES-GCM đã chọn như thế nào $k$?

Quan trọng hơn, làm thế nào để chúng ta tránh được các kiểu thất bại rõ ràng sau đây:

  1. Nếu $k = 0$, $tag(any\_ciphertext) = 0$
  2. Làm $c_n = 0$ đặt ra một vấn đề? Nó dường như không phá vỡ bất kỳ thuộc tính nào, nhưng nó vẫn có vẻ đáng lo ngại. (Lưu ý rằng chúng ta không thể đơn giản thêm các khối không, vì điều này sẽ thay đổi trường độ dài.)
  3. Đối với tôi, có vẻ như thuật toán đa khối sẽ đúng nếu mọi $k$ là một máy phát điện của $GF(2^n)$ hoặc ít nhất là có thứ tự rất cao. Nhưng nếu $k$ xảy ra ở mức thấp, kế hoạch sẽ thất bại.

Ví dụ: Tưởng tượng $k$ có thứ tự 2. Sau đó, chúng ta có thể lật một chút vào $c_1$ miễn là chúng ta lật cùng một bit trong $c_3$, từ $$\begin{align} k^2c_1 + k^4c_3 &= k^2(c_1 + c_3) \ &= k^2(c_1 + c_3 + d + d) \ &= k^2(c_1 + d) + k^4(c_3 + d)\end{align}.$$ Làm cách nào để GCM tránh chế độ lỗi này?

kelalaka avatar
lá cờ in
Câu hỏi rất dài và 5 Qs cùng một lúc! GCM rất mong manh như trong phần này [Hiểu tác động của các cuộc tấn công tiên tri phân vùng đối với mật mã luồng](https://crypto.stackexchange.com/q/88716/18298) và [Tệ hại của việc sử dụng cùng một IV hai lần với AES/ GCM?](https://crypto.stackexchange.com/a/68525/18298) và [Những ràng buộc khi sử dụng GCM với kích thước thẻ là 96 và 128 bit là gì?](https://crypto.stackexchange.com /q/27374/18298)
kelalaka avatar
lá cờ in
Đồng thời xem [bài báo của Joux](https://csrc.nist.gov/csrc/media/projects/block-cipher-techniques/documents/bcm/comments/800-38-series-drafts/gcm/joux_comments.pdf)
Điểm:2
lá cờ my

Tôi muốn hiểu đại số đằng sau bảo mật của GCM.

Chà, bạn đã viết ra cơ chế hoạt động của phần xác thực của GCM; tuy nhiên để hiểu tại sao những cơ chế đó hoạt động, sẽ rất hữu ích nếu tiếp cận nó theo một cách khác.

GCM sử dụng số học trong $GF(2^{128})$; đây là một cánh đồng; điểm quan trọng là, trong một trường, bất kỳ đa thức bậc khác không nào nhiều nhất $n$ có nhiều nhất $n$ số không; nghĩa là, đối với bất kỳ phương trình nào:

$$a_n x^n + a_{n-1} x^{n-1} + ... + a_0 x^0 = 0$$

có nhiều nhất $n$ giải pháp cho $x$ (giả sử rằng ít nhất một trong các $a_i$ các giá trị khác không).

Tại sao điều này là quan trọng sẽ rõ ràng sau.

Bây giờ, những gì GCM làm để xác thực là nó lấy dữ liệu được mã hóa (và AAD) và dịch dữ liệu đó thành một đa thức; sau đó nó chuyển đổi nonce thành giá trị không đổi của đa thức, rồi đánh giá đa thức đó ở một giá trị bí mật $k$và kết quả của đánh giá đó là thẻ; đó là:

$$tag := a_n k^n + a_{n-1} k^{k-1} + ... + a_1 k^1 + \text{hash}(nonce)$$

Bây giờ, giả sử chúng ta có một cặp thông báo/thẻ khác cho cùng một nonce; thông báo/thẻ đó sẽ vượt qua kiểm tra tính toàn vẹn của GCM nếu:

$$tag' := a'_n k^n + a'_{n-1} k^{k-1} + ... + a'_1 k^1 + \text{hash}(nonce)$$

Những gì chúng ta có thể làm là trừ hai đa thức (một đa thức tương ứng với bản mã tốt được tạo bởi bộ mã hóa hợp lệ và một đa thức tương ứng với phỏng đoán của kẻ tấn công); chúng tôi nhận được sau đó [1]:

$$0 = (a_n-a'_n)k^n + (a_{n-1} - a'_{n-1})k^{n-1} + ... + (a_1 - a'_1) k^1 + (thẻ - thẻ')k^0$$

Phương trình này chỉ đúng nếu cặp bản mã/thẻ thứ hai hợp lệ.

Bây giờ, chúng ta quay trở lại quan sát ban đầu: đây là đa thức bậc nhất $n$ và vì vậy có nhiều nhất $n$ các giá trị khác nhau của $k$ mà phương trình này là đúng. Chúng ta cũng biết rằng ít nhất một hệ số của đa thức là khác 0 (đa thức toàn bằng 0 là đúng nếu bản mã 'giả mạo' hoàn toàn giống với bản mã hợp lệ, không được coi là giả mạo). Và, nếu $k$ được chọn không thể đoán trước, sau đó có $2^{128}$ các giá trị có thể, và do đó, xác suất mà nó chỉ là một trong số đó $n$ giá trị là tối đa $n2^{-128}$, đó là thực sự nhỏ bé.

Bây giờ, để biến lập luận này thành một bằng chứng thực tế (đã được thực hiện), chúng ta cần giả sử rằng a) $k$ được chọn đồng nhất một cách ngẫu nhiên, và b) $\text{hash}(nonce)$ cũng được chọn ngẫu nhiên (vì nếu không, kẻ tấn công có thể suy ra một số điều về giá trị của đa thức, điều này sẽ rất tệ); hóa ra là chúng ta có thể kết hợp cả hai vào sức mạnh mã hóa của AES.

Bây giờ, để trả lời câu hỏi của bạn:

  1. Điều trên có đúng không?

Gần; bạn đã sai một chi tiết; sử dụng ký hiệu của bạn, chúng tôi nhận được tính toán thẻ là $tag_k(c_1, c_2,...c_n) = c_0 + \sum k^nc_n$ (lưu ý rằng $c_0$ không được nhân với $k$):

  1. AES-GCM đã chọn như thế nào $k$?

Nó mã hóa khối hoàn toàn bằng không bằng AES bằng khóa GCM.

  1. Nếu $k=0$, $tag(\text{any_ciphertext})=0$

Không, $c_0$ không được nhân với $k$, vì vậy chúng tôi có trong trường hợp này:

$$tag(\text{any_ciphertext}) = c_0$$

Điều đó vẫn có nghĩa là, trong trường hợp cụ thể này, bản mã có thể được sửa đổi tùy ý mà không cần sửa đổi thẻ, tuy nhiên điều đó không rõ ràng.

Câu hỏi rõ ràng là: "điều này vẫn không tệ sao?". Chà, với thẻ 128 bit, kẻ tấn công luôn có xác suất $2^{-128}$ chỉ mù quáng đoán một cặp bản mã/thẻ hợp lệ - $k=0$ có cùng xác suất xảy ra và do đó không làm tăng xác suất giả mạo.

  1. Làm $c_n=0$ đặt ra một vấn đề?

Không; nếu bạn đi qua logic trên, $c_n=0$ không phải là một trường hợp đặc biệt.

  1. Nhưng nếu $k$ xảy ra ở mức thấp, kế hoạch sẽ thất bại.

Kịch bản thất bại cụ thể này vẫn nằm trong xác suất $n2^{-128}$ như được trình bày ở trên; nếu bạn (nói) kiểm tra nếu $k$ có một đơn đặt hàng nhỏ và từ chối những giá trị đó, bạn sẽ không thực sự giảm xác suất giả mạo.


[1]: Trong trường đặc trưng chẵn như $GF(2^{128})$, phép cộng và phép trừ là cùng một phép toán và vì vậy chúng ta thường viết cả hai dưới dạng $+$; tôi giữ nó như $-$ to make có phần rõ ràng hơn đối với những người chưa từng sử dụng các quy ước như vậy.

lá cờ ru
Câu trả lời tuyệt vời! Nếu tôi hiểu không lầm thì bạn đang nói: Đúng vậy, có những trường hợp $tag_{forgery}$ có mối quan hệ rất đơn giản với $tag_{real}$: khi $k = 0$, chúng giống hệt nhau và khi $ k$ là lệnh 2, chúng tuân theo sơ đồ lật bit mà tôi đã trình bày. Nhưng cái gì cơ? Điều đó không làm yếu đi tính bảo mật: miễn là chúng tôi tiết lộ _không có gì_ về $k$, thì thực tế vẫn là đối với mỗi lần giả mạo, có nhiều nhất $n$ thẻ (trong số $2^{128}$) khớp với nó; đối với một số $k$, các thẻ đã thay đổi này dễ dàng được tính toán từ $tag_{real}$ và đối với một số $k$ thì không. Đúng không?
poncho avatar
lá cờ my
@SRobertJames: thực ra với trường này thì không có $k$ với lệnh 2; mặt khác, có chính xác hai giá trị của $k$ có bậc 3, vì vậy điểm của bạn vẫn hợp lệ.
lá cờ ru
Bạn đã chỉ ra rằng, với $c'$ và $k$, có nhiều nhất $n$ $tag'$s xác thực $c'$. Làm sao chúng ta biết được $tag'$s đó là hàm ngẫu nhiên của $k$? Có lẽ một số $tag'$ hoạt động với số lượng rất lớn $k$ và một số hoạt động với ít hoặc không có $k$. Đối với hàm tuyến tính $ax + b$, đây không phải là vấn đề, bởi vì hàm tuyến tính trong trường hữu hạn là một hoán vị; nhưng đối với một hàm đa thức, điều này không đúng. Ví dụ. $x^2 ​​+ x$ gửi một nửa $GF(2^2)$ đến $0$.
poncho avatar
lá cờ my
@SRobertJames: phù hợp hơn với những gì bạn đang thực sự hỏi; thực ra khá dễ dàng để lấy một tập hợp các giá trị $n$ cho $k$ và tạo một giả mạo phù hợp với nó nếu bất kỳ giá trị nào trong số $k$ đó là chính xác. Việc tính toán nhiều hơn một chút so với 'lật hai bit', nhưng vẫn khá khả thi.
poncho avatar
lá cờ my
@SRobertJames: dành cho 'là ánh xạ giữa các tin nhắn và thẻ được phân phối đồng đều', tốt, hãy nhớ $hash(\text{nonce})$ mà chúng tôi đưa vào tính toán thẻ? Miễn là điều này được phân phối đồng đều và độc lập với phần còn lại của quá trình tính toán thẻ (và vì nó dựa trên AES nên điều đó có vẻ hợp lý), thì bản thân các thẻ sẽ được phân bổ đồng đều.

Đă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.