Gcm

表M0的GCM構造

  • May 19, 2020

我正在閱讀有關 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。

我認為我所解釋的內容涵蓋了您的其餘問題,但我不確定。隨時要求澄清,我會編輯答案。

引用自:https://crypto.stackexchange.com/questions/80781