Classical-Cipher

連接“單詞”是否有可能創建一個與真正隨機生成的密鑰無法區分的密鑰?

  • July 21, 2021

通過連接“單詞”並將它們添加模 26,**是否可以創建與以真正隨機方式生成的密鑰無法區分的密鑰?**假設密鑰超過十個字母。

例如,長度互質的三個“單詞”(EATED、PIG、ELEPHANTINE)與它們自身連接並相加,就像 Vigenère 密碼(Modulo 26)的密鑰一樣:

 EATEDEATEDEATEDEATEDEATEDEATED...       
 PIGPIGPIGPIGPIGPIGPIGPIGPIGPIG...
 _______________________________ 
 TIZTLKPBKSMGIMJTIZTLKPBKSMGIMJ...  

 ELEPHANTINEELEPHANTINEELEPHANT...
 _______________________________
 XTDISKCUSFQKTQYAIMMTXTFVWBNIZC...
    I              M X

Bob 和 Alice 已經同意具體的值,比如最終字元串的第 4、19 和 21 個字母,作為關鍵材料(在本例中:I、M、X),因此他們將丟棄其餘部分。然後他們將使用一組不同的單詞,也許還有不同的值——例如,第二個字元串的第 6、11 和 18 個字母——直到它們達到所需的密鑰長度。假設他們不是以真正隨機的方式選擇數字,而是特設的,分佈不均勻,例如出於他們的頭腦(為了速度),但在他們想出和之前知道有效密鑰長度字。

關鍵是擺脫一次性便箋簿,只擁有一個單詞和數字列表。

重複該過程,使用長度互質的三個或更多單詞的不同集合以及要使用的對應值,直到生成密鑰,例如,一個長度為三十個字元的密鑰。

他們將使用包含 180,000 個可能單詞的普通話、俄語和英語條目的組合詞典(普通話和俄語是拼音的)。然後,他們以特別的方式選擇每個單詞。

僅使用每個結果中的少量字母將創建一個短密鑰並且需要相當多的工作,但問題是:這樣的密鑰與真正隨機生成的密鑰無法區分嗎?

是的,我會說,如果這些詞足夠長,彼此互質,並且是臨時選擇的。這樣的密鑰與以真正隨機方式生成的密鑰無法區分嗎?是還是不是?

沒有。從問題中的 3 個“單詞”開始,不可能有任何快速的公共轉換(就像問題中考慮的那樣)創建一個超過 10 個字母A…Z的密鑰,這與以真正隨機方式製作的密鑰無法區分,在加密的意義上。

取問題的數字,我們從 180,000 個單詞中選出 3 個單詞。那是 $ (180,000)^3 $ 選擇(忽略長度互質的要求,這顯著減少了選擇的數量;並假設保留的字母的位置是已知的,或者通過反複試驗找到)。無論我們對此輸入進行何種確定性轉換,它都不會產生更多結果。如果轉換的結果為 12 個字母A…Z,則無法獲得所有此類字元串,因為 $ (180,000)^3\ll26^{12} $ . 給定一個由 12 個字母組成的字元串,A…Z原則上可以測試它是否可以通過應用於輸入單詞的轉換生成,或者不是(至少通過列舉 $ (180,000)^3 $ 選擇和應用轉換)。對於“以真正隨機的方式”選擇的 12 個字母A…Z,機率最多為 $ (180,000)^3/26^{12}<6.2% $ , 那是 $ 100% $ 使用變換時。*如果測試“可以通過應用於輸入單詞的轉換生成”*是可行的,那麼這“可以與以真正隨機方式製作的密鑰區分開來”,在加密的意義上。

對於問題的轉換,該測試是可行的,並且比測試 $ (180,000)^3 $ 可能的輸入詞。一種方法是只考慮 $ (180,000)^2 $ 兩個單詞的組合,推斷出所選字母必須考慮的關鍵測試,並查看字典中是否存在。我估計這樣的測試在一台電腦上持續不到一個小時。

即使我們使用了像 SHA-256 這樣的加密轉換,測試仍然是可行的,因為 $ (180,000)^3\approx2^{52.4} $ SHA-256 雜湊值觸手可及。

第一段說“超過大約 10 個字母”而不是“超過 11 個”,因為即使有 11 個字母,我們仍然可以通過一些範例輸出來區分轉換的輸出和隨機輸出。問題是沒有任何轉變可以使所有 $ 26^{11} $ 11 個字母的結果同樣可能,因為 $ 26^{11} $ 不均分 $ (180,000)^3 $ . 充其量,一些(41%)11個字母的輸出將有機率 $ 1/((180,000)^3) $ ,而其他人 (59%) 是其兩倍。通過幾個例子可以將其與真正的隨機區分開來。對於 10 個字母的輸出,我們仍然可以通過更多範例來實現這一技巧。這是為了實現最佳的快速加密轉換,並且對於問題的簡單轉換要容易得多,我們可以根據輸出密鑰前幾個字元的大樣本隨機辨識輸出。


這裡最好的加密是一個基於密碼的密鑰派生函式,例如 Argon2,它是一個故意的慢散列,可以用來生成一個密鑰(任意長度),對於實際的對手來說,它與隨機沒有區別,給定具有足夠組合的輸入(在這裡,我們有 $ (180,000)^3\approx2^{52.4} $ ,如果我們願意等待 1 秒鐘讓 Argon2 轉換在電腦上執行,這是相當可觀的)。

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