Algorithm-Design

如果第一個密鑰位被翻轉,哪些 DES s-box 會受到影響?

  • June 3, 2020

而不是翻轉輸入位……如果翻轉密鑰的第一個位,那麼在 DES 的加密/解密期間哪些 s-box 會受到影響?

Permuted Choice 1 確定如何將輸入塊載入到 C 和 D 寄存器中:

置換選擇 1.jpg

Permuted Choice 1 是描述如何從輸入密鑰的 8 個連續字節載入 C 和 D 寄存器的選擇置換,注意 LSB 僅用於奇偶校驗。(字節順序中的大端位來自 IBM)。

置換選擇 2 確定哪些 C 和 D 寄存器位用作 f(R,K) 的輸入:

置換選擇 2.jpg

Permuted Choice 2 也是一種選擇置換,從 C 和 D 28 位寄存器中的每一個中選擇兩個 24 位值,這些寄存器根據密鑰調度進行移位。

DES 標準還定義了哪些選定的密鑰位與每個 S Box 相關聯:

f (R, K) .jpg

這將 E 排列顯示為 R 異或的值,其中選定的密鑰位作為 8 個 S 盒的輸入。

密鑰調度會導致 C 和 D 寄存器中的輪換,從而在不同的輪次中使用不同的密鑰位。

程序keytab.c複製了 Meyers Metyas 書中 Cryptography 中的兩個表。

呼叫keytab -b將用每個位置的輸入塊索引填充輸入塊,將這些位置轉換為 C 和 D 寄存器中的適當位置,迭代密鑰調度並通過 PC2 為每一輪生成選定的密鑰,給出引用輸入的 Ks 位列表塊索引:

 Bit  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24  
KS  
  1  10 51 34 60 49 17 33 57  2  9 19 42  3 35 26 25 44 58 59  1 36 27 18 41  
  2   2 43 26 52 41  9 25 49 59  1 11 34 60 27 18 17 36 50 51 58 57 19 10 33  
  3  51 27 10 36 25 58  9 33 43 50 60 18 44 11  2  1 49 34 35 42 41  3 59 17  
  4  35 11 59 49  9 42 58 17 27 34 44  2 57 60 51 50 33 18 19 26 25 52 43  1  
  5  19 60 43 33 58 26 42  1 11 18 57 51 41 44 35 34 17  2  3 10  9 36 27 50  
  6   3 44 27 17 42 10 26 50 60  2 41 35 25 57 19 18  1 51 52 59 58 49 11 34  
  7  52 57 11  1 26 59 10 34 44 51 25 19  9 41  3  2 50 35 36 43 42 33 60 18  
  8  36 41 60 50 10 43 59 18 57 35  9  3 58 25 52 51 34 19 49 27 26 17 44  2  
  9  57 33 52 42  2 35 51 10 49 27  1 60 50 17 44 43 26 11 41 19 18  9 36 59  
 10  41 17 36 26 51 19 35 59 33 11 50 44 34  1 57 27 10 60 25  3  2 58 49 43  
 11  25  1 49 10 35  3 19 43 17 60 34 57 18 50 41 11 59 44  9 52 51 42 33 27  
 12   9 50 33 59 19 52  3 27  1 44 18 41  2 34 25 60 43 57 58 36 35 26 17 11  
 13  58 34 17 43  3 36 52 11 50 57  2 25 51 18  9 44 27 41 42 49 19 10  1 60  
 14  42 18  1 27 52 49 36 60 34 41 51  9 35  2 58 57 11 25 26 33  3 59 50 44  
 15  26  2 50 11 36 33 49 44 18 25 35 58 19 51 42 41 60  9 10 17 52 43 34 57  
 16  18 59 42  3 57 25 41 36 10 17 27 50 11 43 34 33 52  1  2  9 44 35 26 49  

 Bit 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48  
KS  
  1  22 28 39 54 37  4 47 30  5 53 23 29 61 21 38 63 15 20 45 14 13 62 55 31  
  2  14 20 31 46 29 63 39 22 28 45 15 21 53 13 30 55  7 12 37  6  5 54 47 23  
  3  61  4 15 30 13 47 23  6 12 29 62  5 37 28 14 39 54 63 21 53 20 38 31  7  
  4  45 55 62 14 28 31  7 53 63 13 46 20 21 12 61 23 38 47  5 37  4 22 15 54  
  5  29 39 46 61 12 15 54 37 47 28 30  4  5 63 45  7 22 31 20 21 55  6 62 38  
  6  13 23 30 45 63 62 38 21 31 12 14 55 20 47 29 54  6 15  4  5 39 53 46 22  
  7  28  7 14 29 47 46 22  5 15 63 61 39  4 31 13 38 53 62 55 20 23 37 30  6  
  8  12 54 61 13 31 30  6 20 62 47 45 23 55 15 28 22 37 46 39  4  7 21 14 53  
  9   4 46 53  5 23 22 61 12 54 39 37 15 47  7 20 14 29 38 31 63 62 13  6 45  
 10  55 30 37 20  7  6 45 63 38 23 21 62 31 54  4 61 13 22 15 47 46 28 53 29  
 11  39 14 21  4 54 53 29 47 22  7  5 46 15 38 55 45 28  6 62 31 30 12 37 13  
 12  23 61  5 55 38 37 13 31  6 54 20 30 62 22 39 29 12 53 46 15 14 63 21 28  
 13   7 45 20 39 22 21 28 15 53 38  4 14 46  6 23 13 63 37 30 62 61 47  5 12  
 14  54 29  4 23  6  5 12 62 37 22 55 61 30 53  7 28 47 21 14 46 45 31 20 63  
 15  38 13 55  7 53 20 63 46 21  6 39 45 14 37 54 12 31  5 61 30 29 15  4 47  
 16  30  5 47 62 45 12 55 38 13 61 31 37  6 29 46  4 23 28 53 22 21  7 63 39  

這些代表表 3-10 K(i) 中的第一組 24 個密鑰位,在輪 (i) 中使用的密鑰和表 3-11 在 K(i) 中的第二組 24 個密鑰位,在輪 (i) 中使用的密鑰) 見第 3 章。 數據加密標準 數據加密標準的描述部分和用於每輪 DES 的密鑰向量的生成小節,密碼學 電腦數據安全的新維度,副標題為安全的設計和實現指南系統,由 Carl H. Meyer 和 Stephen M. Matyas 於 1982 年出版。

表格展示了 16 輪 DES 的輸入塊索引中給出的置換選擇 2 選擇的 C 和 D 寄存器內容。

KS 位告訴我們每個輸入塊密鑰位在每一輪中使用哪些 S Box。

請注意,對於輸入塊,第 1 位(密鑰第一個字節的最高有效位)在 14 輪中用作 S 框 1 到 4 的輸入。

考慮到 e-suishi 的評論,答案可以通過閱讀或應用實踐的研究來實現。您還可以注意到 keytab 程序執行的過程與 fgrieu 的評論所描述的相匹配。

在這種情況下,keytab 通過提供一個表示輸入塊索引的整數值而不是表示二進制值的 1 或 0 來為 16 輪中的每一輪生成調度鍵。

這個想法來自 DES 的原始 BSD libcrypt 實現(des0.tar.gz,文件 crypt.c),它使用整數來表示各個位。

進行算法設計密碼分析可能意味著驗證您閱讀的內容。

你的問題可能是一個技巧問題。如果您正在尋找“直接更改”,user1430 的答案就是答案。

但是,如果您在 S4/Round1 中翻轉 k1,您還至少修改了 S4 中的 2 位,然後,在 2 輪之間使用 P 和 E,您修改 Round2 48 位輸入的 2 到 6 位。等等

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