Encryption

如何計算碼本查找表的大小以破解分組密碼?

  • August 12, 2020

我正在讀一本名為《嚴肅密碼學》的書。有一個頁面說塊大小必須足夠大以防止碼本攻擊:

當使用 16 位塊時,查找表只需要 2^16 × 16 = 2^20 位記憶體,即 128 KB。對於 32 位塊,記憶體需求增長到 16 GB,這仍然是可管理的。但是對於 64 位塊,您必須儲存 2 個 70 位(一個 zetabit,或 128 艾字節),所以算了吧。對於較大的塊,密碼本攻擊不會成為問題。

從哪裡來2^16 * 16?我認為它應該是2^16 + 2^16密文可能性的總和和與這個特定密文匹配的明文可能性的總和,對吧?

哪裡 $ 2^{16}\cdot16 $ 位從何而來?

這 $ 2^{16} $ term 是可能的 16 位塊的數量。這 $ 16 $ 位項是儲存塊所需的空間(可以是密文塊,明文用作索引;反之亦然)。兩者相乘得到總尺寸,就像價格一樣 $ n $ 事情是 $ n $ 一件事的價格的倍數。

如果我們添加明文和密文塊的數量,我們會得到塊的數量,而不是大小。雖然我們需要能夠操作所有明文和所有密文,但我們不需要空間來儲存所有明文和所有密文:一種是免費提供的,作為表的索引,它不使用空間。就像如果我們想儲存對應於輸入0到的輸出,我們需要 10 個數字(如),告訴它對應於, to , to ,… to ; 而不是 20 位數。9``0``9``8730629415``0``8``1``7``2``3``9``5

在這張表中 $ 2^{16} $ 值,永遠不會有兩個相同的值。這使它略微可壓縮,降至 $ \log_2((2^{16})!) $ 位,節省 9%。

這樣的表不需要覆蓋所有明文/密文對才有用。一個小得多的表可以允許一些攻擊。例如,一個表 $ 2^8 $ 條目而不是 $ 2^{16} $ 允許解密大約一個塊 $ 2^8 $ .

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