Des
DES奇偶校驗位
密鑰名義上以 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 位。