假設我有一個方案從N
不同的輸入中派生出密鑰。每個輸入可能不完全安全(f.x.錯誤的密碼),但組合它們是安全的。執行此操作的簡單方法是按順序連接所有輸入,並使用散列作爲結果。糾正密鑰加密的錯誤
現在我想允許從N
輸入中只給出N-1
的密鑰派生(或更確切地說是密鑰解密)。一個簡單的方法來做到這一點是生成一個隨機密鑰K
,產生N
臨時密鑰對輸入的不同N
子集,每一個輸入缺失(即Hash(input_{1}, ..., input_{N-1}), Hash(input_{0}, input_{2}, ..., input_{N-1}), Hash(input_{0}, input_{1}, input_{3},..., input_{N-1}), ..., Hash(input_{0}, ..., input_{N-2})
),然後與每個N
鍵加密K
和存儲所有的結果。
現在我想要一個廣義的解決方案,我可以在N
輸入中使用K
解密密鑰。要擴大上述方案的天真方式需要存儲(N
選擇N-K
)值,這很快就變得不可行。
是否有一個良好的算法對於這一點,這並不意味着這多少存儲空間?
我曾經想過一個辦法使用類似Shamir的祕密共享方案,但想不出一個好辦法,因爲投入是固定的。
我曾考慮過類似的情況。但考慮一個極端情況:N = 256,每個輸入只包含一位。然後,連接和散列方案具有256位安全性,我期望254/256門限方案具有254位安全性。但是我可以用分而治之的方法來破解這個方案:首先嚐試第一個輸入的兩個可能值,然後嘗試第二個輸入的兩個可能值等等,從而使系統最多使用2 * 254 * 100000迭代PBKDF2。 – 2010-10-28 13:25:14
(但是也許系統可以通過不包含MAC來搶救?這將要求分離密鑰的組件與隨機數據無法區分,但AFAIK應該是真實的)。 – 2010-10-28 13:26:17
這種可能性絕對會使問題更加有趣。我假定每個輸入都可以歸類或以某種方式排列它們,並知道你有哪些和哪些丟失了?這在您的散列解決方案中是隱含的,但是想確認這在設計中是可行的。 – 2010-10-28 16:07:57