如果您更加詳細地解釋你的應用程序,我可能會發現,我關閉基地在這裏,但現在我會讓你的使用情況和威脅模型的一些假設。
我的理解是,您有一些敏感信息需要在具有間歇性連接的移動設備和某些遠程服務之間進行同步。該服務只能由經過身份驗證的用戶訪問,並且用戶必須向移動設備進行身份驗證才能訪問其信息副本,即使該信息處於脫機狀態。
如果您想要強大的安全性,請使用基於密碼的加密方式對移動設備的副本進行加密。
您可以使用相同的密碼來驗證服務,但一般來說,我會避免重複使用相同的密鑰用於不同的目的。更好的方法是爲移動設備提供主加密密碼,該密碼加密移動數據庫以及用於向同步服務驗證用戶的「密碼」。請注意,服務認證密碼實際上可以是用於SSL客戶端認證認證的私鑰,也可以是基於字符的密碼。
您必須評估只有一個密碼的風險,但在很多情況下,我認爲這爲用戶提供了便利,再加上一個強大的主密碼提供的安全性,易記的密碼是一個很好的平衡。
注意,這種方法將允許用戶,其服務的訪問已被撤銷,繼續訪問他們的本地副本,但沒有任何新的更新。您可以包含一些移動軟件強制執行的時間限制的概念,但是一個有決心的攻擊者可以繞過這個限制。
如果您只是需要玩具安全,您在移動設備上存儲正確散列的建議已足夠,並且散列真實密碼或備用散列確實無關緊要,因爲如果使用正確的散列,它應該花費數十億年時間才能找到能夠讓他們訪問遠程服務的密碼衝突。
但是,假設攻擊者可以看到密碼的哈希,什麼從在同步數據看太阻止他們?他們爲什麼需要恢復密碼?加密移動數據庫可以防止這種情況發生。
您是在談論永久離線訪問,還是重新驗證已經在線的人,現在他們已經不在? – Whisk 2008-10-20 21:52:55
最終目標是讓客戶端稍後連接到服務器並同步其數據/更新。 – pc1oad1etter 2008-10-20 23:38:52
對不起,我感到困惑。我並不是指所有用戶共享的「主」密碼,我的意思是一個保護用戶的移動數據庫和用戶的服務認證憑證的密碼。這有效地驗證用戶離線和在線。 – erickson 2008-10-28 15:54:35