我一直在考慮服務,例如pwnedlist.com和shouldichangemypassword.com以及他們的根本問題 - 信任。查詢服務器是否存在記錄,服務器無法確切知道正在查詢什麼記錄
也就是說用戶必須相信,這些服務都不會收穫提交的查詢。
Pwnedlist.com提供提交用戶查詢這是一個進步的SHA-512散列的選項,但如果查詢不存在於數據庫中還是泄露信息。也就是說,惡意服務會知道給定的電子郵件地址是有效的(另請參閱:爲什麼您不應該點擊垃圾郵件中的取消訂閱鏈接)。
我想出瞭解決辦法如下:
1)相反,用戶計算並提交散列自己的,散列(我會用我的例子中,更簡單的MD5)通過客戶端計算側的javascript:
md5("[email protected]") = "b58996c504c5638798eb6b511e6f49af"
2)現在,而不是發送整個哈希作爲查詢到服務器中,僅第一N位被髮送:
GET http://remotesite.com?query=b58996
3)個E服務器與存在於所有哈希迴應是,在相同N位開始數據庫:
{
"b58996afe904bc7a211598ff2a9200fe",
"b58996c504c5638798eb6b511e6f49af",
"b58996443fab32c087632f8992af1ecc",
...etc... }
4)客戶端的JavaScript對由服務器返回的哈希值的列表,並通知用戶是否她的電子郵件地址存在於數據庫中。 由於「b58996c504c5638798eb6b511e6f49af」是存在於服務器響應,電子郵件存在於數據庫 - 通知用戶!
現在,這個解決方案的一個明顯問題是,用戶必須信任客戶端的JavaScript只傳輸它說它將傳輸的內容。然而,足夠知識的個人將能夠驗證查詢沒有被泄露(通過觀察發送到服務器的查詢)。這不是一個完美的解決方案,但如果用戶可以(理論上)驗證網站功能,它會增加信任級別。
是什麼這麼認爲這個解決方案的?重要的是,有沒有人知道任何現有的例子或這種技術的討論?
注意:pwnedlist.com和shouldichangemypassword.com顯然是由知名人士/組織運營的,我沒有理由相信。這更多的是一個思考練習。