Passwords
如何使用任何生成密鑰米米m密碼總數nnn?
我的應用程序需要 AES-256 密鑰
K
才能進行某些安全操作。為了避免在應用程序中保存此密鑰,我實現了以下方案:
- 有 5 個人在申請中輸入了他們的密碼。讓我們打電話給他們
PW1..PW5
- 使用這些密碼,我將密鑰生成為:
K = KDF(PW1 || PW2 || PW3 || PW4 || PW5)
問題是,現在我需要修改應用程序,即使 5 個密碼中只有 3 個可用(但不少於 3 個),它也能正常工作。這是必需的,因為即使我們失去一兩個密碼(意外、拒絕輸入密碼等),我們也能夠從這種情況中恢復。
請你能告訴它如何實現嗎?
一種選擇是生成一個隨機密鑰,使用 Shamir 的秘密共享將其拆分,然後在從每個使用者密碼派生的密鑰下單獨加密每個拆分部分。
例如:
key = read from os.urandom() d1,d2,...d5 = split(key=key,n=5,k=3) e1 = encrypt(d1, KDF(PW1)), e2 = encrypt(d2, KDF(PW2))...
key
然後可以從所有加密的共享 (e1, ...
) 和使用者密碼 (PW1, ...
) 中得出。您可以將加密的共享儲存在應用程序中,並確信如果沒有至少三個密碼,您將無法導出密鑰。