Public-Key

從公共數據庫中檢索加密私鑰的系統有多安全?

  • September 24, 2018

有問題的系統是一個有多個使用者的系統。每個使用者都有一個與其帳戶相關聯的密碼,並且每個使用者都擁有多個公私密鑰對。使用者的私鑰使用使用者的密碼進行加密,並儲存在可公開訪問的數據庫中。像這樣的系統將允許使用者從任何機器上檢索他們的公私鑰對,並使用他們的密碼解密私鑰。

假設使用強加密算法來加密私鑰(可能是 Blowfish/Twofish),該系統可能會受到哪些類型的攻擊?

**PS:**我可以想到兩種方法來加密使用者的私鑰。

  • 每個私鑰都可以單獨加密和儲存
  • 私鑰可以聚合到一個文件中,然後加密並儲存

在第一個選項中,使用者將能夠單獨檢索密鑰,而將其他密鑰加密,而不會有暴露風險。然而,這可能會導致對使用者密碼的關聯攻擊,因為會有多個密文都使用相同的密鑰(密碼)加密。在加密之前聚合私鑰可能有助於避免這種情況,但隨後使用者將不得不檢索整個文件並立即解密他們的所有密鑰,這可能會暴露他們的所有秘密。這兩種方法中的哪一種(或者可能有更多)更安全?

編輯

到目前為止,這個問題的答案已經提到從密碼中獲取密鑰並儲存秘密,隨機生成的鹽在登錄時提供給使用者。這些是我腦海中閃過的好主意。但是,我未能澄清的是系統數據庫具有所有公開數據,沒有儲存的隱藏欄位。有了這樣一個系統,就有可能將其實現為分佈式 P2P 網路,並且可以消除數據洩露的威脅(沒有什麼可竊取的,因為它都是公開的)。

有了這個要求,儲存秘密是不可能的,我們應該假設任何用於從密碼中派生密鑰的算法也是公開的,以避免通過晦澀難懂的安全性。因為派生算法是公開的,所以它不會為私鑰加密增加任何安全性(理論上),而不是僅使用密碼作為密鑰。

假設每個使用者平均約 100 個私鑰。如果使用 TwoFish,對這些用相同密鑰加密的密文進行關聯攻擊有多現實?暴力破解仍然是最簡單的方法嗎?

每個擁有約 100 萬個密鑰的使用者怎麼樣?使某種關聯攻擊合理化需要多少個密鑰(大約)?有什麼方法可以加強這個系統,比如通過某種方式增加密碼熵?

使用者的私鑰使用使用者的密碼進行加密,並儲存在可公開訪問的數據庫中。

像這樣的可公開訪問的數據庫很容易通過離線字典攻擊被破壞,因為密碼通常具有非常低的熵。這可以通過添加鹽(也儲存在公共數據庫中)來改進(但仍然可以破解)。這篇文章介紹瞭如何使用鹽來保護密碼:你能幫我理解什麼是加密“鹽”嗎?

另一方面,我不認為用不同的密鑰(從相同的密碼派生)加密客戶端的私鑰在這裡有幫助,因為如果對手找到正確的密碼,它可以輕鬆破解所有派生的密鑰。

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