2011-11-26 68 views
4

我一直在考慮服務,例如pwnedlist.comshouldichangemypassword.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顯然是由知名人士/組織運營的,我沒有理由相信。這更多的是一個思考練習。

回答

1

服務,如pwnedlist.com與公共信息工作。根據定義,每個人都可以訪問這些數據,因此試圖保護它是一個有爭議的問題。攻擊者只會從The Pirate Bay下載它。

然而,使用像這樣的散列函數仍然很容易中斷,因爲它的無懈可擊和缺乏關鍵的直接。在所有的現實中,像sha-512這樣的消息摘要功能並不適合這項工作。

你是一個Bloom Filter好得多。這使您可以創建泄露數據的黑名單,而無需獲取純文本。這是因爲基於置換的強力可能會發現碰撞比真正的純文本。查找和插入是一個很酷的O(1)複雜性,而它自己的表佔用的空間要小得多,大約是使用傳統SQL數據庫的空間的1/10,000,但是這個值根據指定的錯誤率而變化。