Des

DES奇偶校驗位

  • May 22, 2019

密鑰名義上以 8 個字節儲存或傳輸,每個字節具有奇校驗。根據 ANSI X3.92-1981(現稱為 ANSI INCITS 92-1981)第 3.5 節:

> > KEY 的每個 8 位字節中的一位可用於密鑰生成、分發和儲存中的錯誤檢測。位 8、16、…、64 用於確保每個字節具有奇校驗。 > > >

據我了解這個 Wikipedia 文本,在 DES 的每個字節中基本上只有 6 位,因為第 7 位是由於奇偶校驗而確定的。這是否意味著 DES 基本上只有 2^48 個可能的密鑰(8 個奇偶校驗位,8 個由奇偶校驗確定,48 個隨機位)?

每第 8 位是前 7 位的奇校驗。這意味著有 8 個奇偶校驗位和 56 個隨機位加起來總共 64。因此密鑰空間為 2 56,有效密鑰大小為 56 位。

不,你不正確。每個字節中用於“錯誤檢測”的位奇偶校驗位。請注意,位的計數通常很奇怪,對於第一個最左邊的位(通常是最重要的位)使用 1 而不是 0 的偏移量。

因此,如果您有一個字節數組,那麼每個字節的每個最低有效位都是奇偶校驗位。該位以這樣一種方式設置,即每個字節在操作後設置奇數位。換句話說,如果其他位的計數是偶數,則設置它,否則不設置。或者,如果所有0 位或 1 位的數量都是偶數,它就會被翻轉 - 這相當於同一件事。

因此,假設您有以下單個 DES 密鑰:

pos: 1234 5678 9 .. etc. .... .... .... .... .... .... .... .... .... .... .... ....
bin: 0000_0000 0000_0001 0000_0010 0000_0011 0000_0100 0000_0101 0000_0110 0000_0111
hex:    0    0    0    1    0    2    0    3    0    4    0    5    0    6    0    7
1's:         0         1         1         2         1         2         2         3

那麼奇偶調整後的結果是這樣的:

pos: 1234 5678 9 .. etc. .... ...P .... ...P .... ...P .... ...P .... ...P .... ...P
bin: 0000_0001 0000_0001 0000_0010 0000_0010 0000_0100 0000_0100 0000_0111 0000_0111
hex:    0    1    0    1    0    2    0    2    0    4    0    4    0    7    0    7
1's:         1         1         1         1         1         1         3         3

因此,由於有 8 個字節,並且每個字節的一位用於奇偶校驗,因此每個字節有 7 位用於密碼本身。有 64 / 8 = 8 個字節,每個字節 7 位,8 * 7 = 56 位有效密鑰大小。

奇偶校驗調整和驗證取決於庫,但通常您確實需要至少提供 8 個完整字節/64 位。

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