表M0的GCM構造
我正在閱讀有關 GCM The Galois/Counter Mode of Operation (GCM) 的論文。我對錶 M0 和 R 的實現有一些疑問。
當我必須乘以變數 P 時,它只不過是對索引的轉移。在第 10 頁的頂部,我有乘以 X · P 的範例,我想下面的範例是兩個元素相乘。
Z ← 0, V ← X for i =0 to 127 do if Yi =1 then Z ← Z ⊕ V end if V ← V · P end for return Z
據我了解:
V ← V P
等於:
如果 V127 =0 那麼 V ← rightshift(V ) 否則 V ← rightshift(V ) ⊕ R
根據公式(3)(5)中第9頁的範例,它們是否相同,對嗎?
好吧,已經在第 11 頁 X (7) 的分解範例中,xi 指的是 X 的 1 個字節,但我的疑問是在 P ^ 8i 中,在第一個 8 · i 會給出零,最後當 i是 15 將是 120。那部分我不太明白。
轉到算法 3 及其上面的解釋:
而 i> 0 做 M ← M
$$ 2i $$P i ←li/2J
假設 i 的值是 64,如果我沒記錯的話,這個循環將乘以 P 八倍。
好吧,在乘以 P 的部分:
米←米
$$ 2i $$·P
等於:
如果 M
$$ 2i $$127 =0 然後 M ← 右移(M$$ 2i $$) 否則 M ← 右移(M$$ 2i $$) ⊕ R 結束 if
增加的 247 個將是:
米
$$ i + j $$= M ⊕M$$ j $$
上面解釋的一切都很好,建立表M0和R就足夠了嗎?但我不明白以下海拔P^8(i+1)和P^128。
謝謝。
這是我讀過的最糟糕的“主流”加密論文之一。對不起,麥格魯和維加。
欄位表示和位順序
GCM 在二進制領域工作 $ GF(2^{128}) $ . 該欄位的元素可以表示為具有二進制係數(即 0 或 1)的多項式。
使用本文的符號,以下是一些欄位元素的範例:
- $ 1 $ (注意這是 $ 0\alpha^{127} + 0\alpha^{126} + \ldots + 0\alpha^1 + 1 $ ; 我們根本不會用 0 寫係數)。
- $ \alpha^1 + 1 $
- $ \alpha^2 + \alpha $
- $ \alpha^{127} + \alpha^{64} + 1 $
- $ \alpha^{127} $
涼爽的。那麼我們如何在記憶體中表示它,因為我們只有位和字節,實際上沒有多項式?直接的方法是簡單地將係數分組為八個一組,在字節內。這就提出了一個問題:如何對字節內的位進行排序?以及如何對 16 字節緩衝區(總共 128 位)中的字節進行排序?
一個直接的答案是對位和字節都使用小端。即字節的最低有效位(即你得到什麼
x & 0x01
,注意稱這個“小端”並不常見,但我需要稱它為某事)是 8 位組的最低有效位;並且緩衝區的最低有效字節(即你得到的b[0]
)是 16 組中最低有效的 8 位組。因此,這些範例將被編碼為:
- $ 1 $ :
0x01 0x00 ... 0x00
- $ \alpha^1 + 1 $ :
0x03 0x00 ... 0x00
- $ \alpha^2 + \alpha $ :
0x06 0x00 ... 0x00
- $ \alpha^{127} + \alpha^{64} + 1 $ :
0x01 0x00 ... 0x01 ... 0x00 0x80
- $ \alpha^{127} $ :
0x00 ... 0x00 0x80
這看起來很自然(至少對我來說是這樣);但是您可以為“小端”位順序和大端字節順序提出令人信服的論據,因為它看起來更像我們編寫多項式的方式。沒關係。這就是 GCM 所做的嗎?不,不是。
GCM對位使用“大端”,對字節使用小端。我們的例子變成:
- $ 1 $ :
0x80 0x00 ... 0x00
- $ \alpha^1 + 1 $ :
0xC0 0x00 ... 0x00
- $ \alpha^2 + \alpha $ :
0x06 0x00 ... 0x00
- $ \alpha^{127} + \alpha^{64} + 1 $ :
0x80 0x00 ... 0x80 ... 0x00 0x01
- $ \alpha^{127} $ :
0x00 ... 0x00 0x01
所以就是這樣。
現在實際回答問題
根據公式(3)(5)中第9頁的範例,它們是否相同,對嗎?
是的。
好吧,已經在第 11 頁 X (7) 的分解範例中,xi 指的是 X 的 1 個字節,但我的疑問是在 P ^ 8i 中,在第一個 8 · i 會給出零,最後當 i是 15 將是 120。那部分我不太明白。
正如我所描述的,多項式的係數被分成 16 個字節,每個字節有 8 位。公式(7)只是數學上的表達方式。注意 $ P = \alpha $ . 為什麼不用兩個不同的名字來稱呼同一個東西呢?
例如,取欄位元素 $ X = \alpha^{15} + 1 $ . 這由字節緩衝區表示
0x80 0x01
。所以在分解中,我們有:
- $ x_0 $ = $ 1 $ =
0x80
- $ x_1 $ = $ \alpha^7 $ =
0x01
(我們將其視為 8 位多項式)接著, $ X = \bigoplus\limits_{i=0}^{15} x_iP^{8i} = \bigoplus\limits_{i=0}^{15} x_i\alpha^{8i} = x_0\alpha^0 + x_1\alpha^8 + … $ = $ 1\alpha^0 + (\alpha^7)\alpha^8 = 1 + \alpha^{15} $ .
假設 i 的值是 64,如果我沒記錯的話,這個循環將乘以 P 八倍。
桌子 $ M $ 包含 $ M[x] = xH $ 對於所有 8 位多項式和 128 位多項式 $ H $ (根據密鑰計算)。
該循環乘以 $ P $ 七次。該循環正在計算 $ M[128], M[64], M[32], … M[1] $ . 回想一下,索引實際上是一個多項式,所以這與 $ M[1], M[\alpha], M[\alpha^2], …, M[\alpha^7] $ . 是的, $ 128 = 0x80 $ (數)等於 $ 1 $ (多項式)。歡迎來到 GCM。
上面解釋的一切都很好,建立表M0和R就足夠了嗎?但我不明白下面的海拔 P^8(i+1) 和 P^128。
我認為我所解釋的內容涵蓋了您的其餘問題,但我不確定。隨時要求澄清,我會編輯答案。