Password-Based-Encryption

密碼所有權的簡單證明

  • January 3, 2020

我想在網路瀏覽器上做一個完全無伺服器的 p2p 聊天應用程序,所以它甚至沒有數據庫來儲存帳戶,但我仍然希望在它上面有某種身份系統(使用者可以在這個聊天中擁有使用者名只有他們可以使用)。為了實現這一點,我開始研究一個有點讓人聯想到旅行碼的身份驗證系統,用於各種圖像板上(我不知道這是否真的是要走的路,我願意接受新的建議):

  • 使用者輸入密碼,
  • 應用程序使用單向函式從該密碼生成公共資訊(例如雜湊或公鑰),
  • 然後使用tripphrasesproquintidenticons等系統將此公共資訊轉換為對人類有意義的標識符。
Examples:
"MyPassword" --(CRC32)--> "7d586a02" --(proquint)--> "hotig-muhig-donig-fubag"
"MyPassword" --(MD5)--> "48503dfd58720bd5ff35c102065a52d7" --(tripphrase)--> "interleave my calcifugous ghost"

在 p2p 系統中使用散列作為標識符(即零信任且沒有中央事實來源)的問題在於,沒有什麼可以阻止某些使用者使用他們想要的任何標識符編寫消息,同時假裝他們通過在本地散列密碼獲得了該標識符,就像協議說的那樣。因此,我想要的是一種在不洩露密碼的情況下證明身份所有權的方法。我只能想到一種方法來解決這個問題:

  • 愛麗絲輸入密碼,

  • 應用程序從此密碼派生一個私鑰/公鑰對,

  • 公鑰用於生成 Alice 的人類有意義的標識符,

  • Bob 想要驗證 Alice 的身份:

    • Bob 向 Alice 發送一個挑戰(即一個隨機數),
    • 愛麗絲用她的私鑰加密隨機數,
    • Alice 將結果發回給 Bob,
    • Bob 使用 Alice 的公鑰解密結果(可以通過將 Alice 的標識符轉換回公鑰來獲得),
    • 如果解密後的號碼與之前發送的號碼相同,那麼 Alice 確實擁有密碼,否則 Alice 就是在謊報自己的身份。

但我想知道是否有比這更簡單的協議來解決我的問題。最好,我想完全避免使用公鑰密碼術。由於我做這個項目只是為了好玩,我並不真正關心以下幾點:

  • 密碼的強度,
  • 如果兩個使用者使用相同的密碼並因此獲得相同的標識符,
  • 如果其他人知道密碼的雜湊值或關聯的公鑰,這清楚地給出了秘密密碼的資訊,那麼零知識證明就沒有必要了。

任何想法?

謝謝您的幫助。

您可以使用標準簽名方案。使用者將輸入密碼,並收到他們的私鑰和相關的使用者名。然後,為了發布消息,他們簽署消息並廣播消息、使用者名和簽名。其他使用者將使用者名轉換為公鑰,然後驗證簽名。

這與比特幣處理身份危機的方式相同:將消息綁定到密鑰而不是真人。

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