Keys

如何使用 DES 從 56 位生成密鑰

  • July 1, 2021

首先,我只想為我對這個系統缺乏知識而道歉。

教授甚至在上課之前就給了我們一個練習來解決。我厭倦了線上看影片,但我只知道如何使用 64 位初始密鑰。

初始 56 位十六進制密鑰:‘B092EBA02E3798’ 將密鑰 K16(在最後一圈)以十六進製表示為 64 位。

所以我的問題是,在進行初始排列之前,我是否必須將我的 56 位轉換為 64 位。如果是的話,我該怎麼做。謝謝您的幫助。

DES 密鑰被定義為 64 位。其中 56 個是實際密鑰,8 個是奇偶校驗位。這允許它適合 8 個字節。

根據密鑰調度,K16 大概是指最後一個子密鑰。每個 DES 子密鑰的長度為 48 位。 在此處輸入圖像描述

將 56 位密鑰編碼為 64 位是通過在每個 7 位字節中添加一個奇偶校驗位來完成的。但是我知道沒有將 48 位子密鑰表示為 64 位的標準方法。

關於您的 56 位密鑰在算法中的位置可能沒有足夠的資訊。

如果 56 位值B092EBA02E3798表示 PC1 之後的 CD 塊,則keytab -s 表顯示所選密鑰 K16 是將 PC2 應用於 CD 塊的結果:

 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  15 18 12 25  2  6  4  1 16  7 22 11 24 20 13  5 27  9 17  8 28 21 14  3
  2  16 19 13 26  3  7  5  2 17  8 23 12 25 21 14  6 28 10 18  9  1 22 15  4
  3  18 21 15 28  5  9  7  4 19 10 25 14 27 23 16  8  2 12 20 11  3 24 17  6
  4  20 23 17  2  7 11  9  6 21 12 27 16  1 25 18 10  4 14 22 13  5 26 19  8
  5  22 25 19  4  9 13 11  8 23 14  1 18  3 27 20 12  6 16 24 15  7 28 21 10
  6  24 27 21  6 11 15 13 10 25 16  3 20  5  1 22 14  8 18 26 17  9  2 23 12
  7  26  1 23  8 13 17 15 12 27 18  5 22  7  3 24 16 10 20 28 19 11  4 25 14
  8  28  3 25 10 15 19 17 14  1 20  7 24  9  5 26 18 12 22  2 21 13  6 27 16
  9   1  4 26 11 16 20 18 15  2 21  8 25 10  6 27 19 13 23  3 22 14  7 28 17
 10   3  6 28 13 18 22 20 17  4 23 10 27 12  8  1 21 15 25  5 24 16  9  2 19
 11   5  8  2 15 20 24 22 19  6 25 12  1 14 10  3 23 17 27  7 26 18 11  4 21
 12   7 10  4 17 22 26 24 21  8 27 14  3 16 12  5 25 19  1  9 28 20 13  6 23
 13   9 12  6 19 24 28 26 23 10  1 16  5 18 14  7 27 21  3 11  2 22 15  8 25
 14  11 14  8 21 26  2 28 25 12  3 18  7 20 16  9  1 23  5 13  4 24 17 10 27
 15  13 16 10 23 28  4  2 27 14  5 20  9 22 18 11  3 25  7 15  6 26 19 12  1
 16  14 17 11 24  1  5  3 28 15  6 21 10 23 19 12  4 26  8 16  7 27 20 13  2

 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  42 53 32 38 48 56 31 41 52 46 34 49 45 50 40 29 35 54 47 43 51 37 30 33
  2  43 54 33 39 49 29 32 42 53 47 35 50 46 51 41 30 36 55 48 44 52 38 31 34
  3  45 56 35 41 51 31 34 44 55 49 37 52 48 53 43 32 38 29 50 46 54 40 33 36
  4  47 30 37 43 53 33 36 46 29 51 39 54 50 55 45 34 40 31 52 48 56 42 35 38
  5  49 32 39 45 55 35 38 48 31 53 41 56 52 29 47 36 42 33 54 50 30 44 37 40
  6  51 34 41 47 29 37 40 50 33 55 43 30 54 31 49 38 44 35 56 52 32 46 39 42
  7  53 36 43 49 31 39 42 52 35 29 45 32 56 33 51 40 46 37 30 54 34 48 41 44
  8  55 38 45 51 33 41 44 54 37 31 47 34 30 35 53 42 48 39 32 56 36 50 43 46
  9  56 39 46 52 34 42 45 55 38 32 48 35 31 36 54 43 49 40 33 29 37 51 44 47
 10  30 41 48 54 36 44 47 29 40 34 50 37 33 38 56 45 51 42 35 31 39 53 46 49
 11  32 43 50 56 38 46 49 31 42 36 52 39 35 40 30 47 53 44 37 33 41 55 48 51
 12  34 45 52 30 40 48 51 33 44 38 54 41 37 42 32 49 55 46 39 35 43 29 50 53
 13  36 47 54 32 42 50 53 35 46 40 56 43 39 44 34 51 29 48 41 37 45 31 52 55
 14  38 49 56 34 44 52 55 37 48 42 30 45 41 46 36 53 31 50 43 39 47 33 54 29
 15  40 51 30 36 46 54 29 39 50 44 32 47 43 48 38 55 33 52 45 41 49 35 56 31
 16  41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32

其中第 1 到 24 位來自 C 寄存器,第 25 到 56 位來自 D 寄存器。

B092EBA 擴展的 AC 寄存器值為

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 25 26 27 28
Val  1  0  1  1  0  0  0  0  1  0  0  1  0  0  1  0  1  1  1  0  1  0  1  1  1  0  1  0

將 Permuted Choice 2 應用於 C 寄存器給出:

PC2 14 17 11 24  1  5  3 28 15  6 21 10 23 19 12  4 26  8 16  7 27 20 13  2
    0  1  0  1  1  0  1  0  1  0  1  0  1  0  1  1  0  0  0  0  1  0  0  0

或 5AA5B08。

擴展出來的 02E3798 的 AD 寄存器值為

Bit 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
Val  0  0  0  0  0  0  1  0  1  1  1  0  0  0  1  1  0  1  1  1  1  0  0  1  1  0  0  0

將置換選擇 2 應用於 D 寄存器給出:

PC2 41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32
    0  1  0  1  1  0  0  0  0  0  0  1  1  1  1  0  0  1  1  0  0  0  0  0

或 581E60。

這給出了 5AA5B08581E60 的選定鍵值,這是一個 48 位值。前 4 個 S 框的 f(R,K) 的關鍵輸入來自 C,而後 4 個來自 D。

另一方面,如果 56 位值 B092EBA02E3798 表示輸入到 PC1 的八個連續 8 位字節的第 1 位(MS)到第 7 位(LS),這將擴展為 64 位值,其中附加位用於奇偶校驗但在這裡忽略並設置為零:

                    P
1  0  1  1  0  0  0  0
0  1  0  0  1  0  0  0
1  0  1  1  1  0  1  0
0  1  1  1  0  1  0  0
0  0  0  0  0  0  1  0
0  1  1  1  0  0  0  0
1  1  0  1  1  1  1  0
0  0  1  1  0  0  0  0

或 B048BA740270BE30。

該值可以輸入到 Eugene Steyer 的Javascript DES 範例的副本中,可以對其進行編輯以允許輸入任意鍵和數據並生成:

KS[16]:  011100 001110 010011 001011 100000 101000 000111 101001

這將是 70E4CB8281E9,一個 48 位的值。

在沒有看到您的作業上下文的情況下,我懷疑是否需要此處顯示的第二種方法來展示您的工作,這意味著展示 PC1 和 PC2 以及提到展示所選鍵 16 是 PC2 的鍵表應用於 CD 塊。

它有助於理解數字加密標準是一個互操作性標準,它引用了 IBM 的兩個 DES 專利中的硬體實現,使用從 1 開始的大端位排序並具有與主機的 8 位介面。

輸入密鑰字節、PC1、PC2 和 CD 塊之間的關係在另一個問題的答案中顯示。

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