可以/哪些加密算法被菊花鏈起來以創建一個密碼計算難題?
目標
創建一個快速生成的計算難題,平均需要幾分鐘的電腦時間來解決,沒有任何可利用的弱點,利用現有/經過測試的加密算法
問題
假設我們有一個字元串:“Prefix: LLLLLLLLLLLLLLLLLLLLLL ”,其中 L 可以是任何字母數字字元,“Prefix:”是預設前綴,“LLLLLLLLLLLLLLLLLLLLLL”是謎題的解決方案。
讓我們選擇 3 種加密算法(作為範例),AES256、Triplefish、Camellia
謎題創建者採用“前綴:LLLLLLLLLLLLLLLLLLLLLLLL”,使用 key_AES256 使用 AES256 對其進行加密,然後使用 key_Triplefish 對 Triplefish 進行加密,然後使用 key_Camellia 對 Camellia 進行加密,從而產生 daisy_chained_puzzle
謎題創建者發送 daisy_chained_puzzle、key_AES256 缺少 1 個字元前綴、key_Triplefish 缺少 1 個字元前綴、key_Camellia 缺少 1 個字元前綴
解謎者詳盡地嘗試了這 3 個缺失字元的所有組合,並在偶然發現帶有“前綴:”的解密解決方案時返回該解決方案,並推斷該解決方案是後綴“LLLLLLLLLLLLLLLLLLLLLL”
擔心
提供的“前綴:”是否會提供可以被利用的弱點?
提供每個鍵的後綴會導致弱點嗎?
問題
加密算法可以像這樣使用菊花鏈來創建一個簡單的計算難題/哪種加密算法最適合該任務?
帶走煩惱
提供的“前綴:”是否會提供可以被利用的弱點?
不,任何安全密碼都應該受到保護以免受明文攻擊。準確地說,對於選擇的明文攻擊,密文應該是無法區分的(不會洩露任何資訊)。這縮寫為 IND_CPA。這是一個比已知明文更強大的概念:它讓攻擊者選擇明文消息。
提供每個鍵的後綴會導致弱點嗎?
不,對稱密碼的密鑰通常應由隨機位組成。隨機意味著密鑰中的各個位之間沒有關係。由於應該沒有關係,因此應該不可能獲得有關密鑰其他部分的任何資訊。
顯然,這不僅僅是密碼的一個屬性,它也應該是密鑰生成方法的一個屬性。由於密鑰由隨機位組成,因此密鑰生成方法只是使用的隨機數生成器。因此,您必須使用種子良好的 PRNG(例如,僅
/dev/urandom
在 Posix 機器上)。這對於例如 HMAC 也是如此,以防您遵循 e-sushi 的建議並使用基於散列的密鑰派生函式 (KDF) 而不是鍊式密碼。
答案
加密算法可以像這樣使用菊花鏈來創建一個簡單的計算難題/哪種加密算法最適合該任務?
是的,您可以將它們串起來,但請繼續閱讀。
沒有更有意義的特定加密算法。如果您真的想使用密碼,您可以使用密碼創建 MAC 算法(AES/CBC-MAC 或 AES-CMAC)並將其連結起來。
AES 會更可取,因為有很多平台可以加速分組密碼。關於與您的目標的兼容性:任何現代密碼都可以;您的算法都沒有被破壞,並且都使用大塊大小,這將有利於任務。
從這個意義上說,Threefish 將是一個不錯的選擇,因為它的塊大小很大。該塊密碼是為在類雜湊算法中鍊式使用而設計的,當然主要是 Skein。
除非您的目標是讓人們嘗試不同的對稱算法,否則沒有充分的理由選擇不同的算法;您不妨選擇一個分組密碼並多次使用它。
備擇方案
區塊鏈技術,這是一個明顯的例子,通常基於 e-sushi 已經提到的散列函式 - 在這種情況下,目標通常是在隨機輸出中找到特定的位模式(1 位的前綴)散列函式 - 好處是您可以輕鬆調整您正在尋找的輸出位數,以增加或減少尋找答案的時間。
再說一次,找到任何東西所需的時間也是隨機的,所以雖然你可以調整難度,但找到答案的時間是不確定的(即你只能調整平均時間來找到一個或多個答案)。
如果您正在尋找更多控制權來尋找答案,那麼基於密碼的密鑰派生函式 (PBKDF)(例如 bcrypt、scrypt、PBKDF2 或 Argon2)會更有意義。