Passwords

如何使用任何生成密鑰米米m密碼總數nnn?

  • April 8, 2016

我的應用程序需要 AES-256 密鑰K才能進行某些安全操作。為了避免在應用程序中保存此密鑰,我實現了以下方案:

  1. 有 5 個人在申請中輸入了他們的密碼。讓我們打電話給他們PW1..PW5
  2. 使用這些密碼,我將密鑰生成為:
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, ...) 中得出。您可以將加密的共享儲存在應用程序中,並確信如果沒有至少三個密碼,您將無法導出密鑰。

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