2012-02-22 35 views
2

我試圖做一個基於網絡的安全密碼管理和共享工具,既作爲學術練習,也充分理解和使用它感到安全。如何使用「主機驗證」模式共享信息?

我真的很喜歡'主機驗證'應用程序的想法,在客戶端使用JavaScript完成加密/解密,並且只有加密信息纔會離開瀏覽器,就像PassPack或Clipperz一樣。我無法弄清楚Passpack如何設法讓人們共享密碼。如果沒有純文本或加密密鑰通過服務器傳輸給其他用戶,我看不出它是如何完成的,這使得這個過程本質上破壞了「主機驗證」範式。

任何人都可以指向我的解決方案嗎?

+0

如果您可以在服務器上以明文方式存儲密碼,則可以讓每個客戶端向您發送加密密鑰的公共部分,並傳輸用該加密密鑰加密的密碼。如果沒有共享者和接收者進行真正的密鑰交換,我不確定你能做得更好。 – millimoose 2012-02-22 19:47:18

+0

不是一個真正的編程問題,但我不是100%確定這是否是[crypto](http://crypto.stackexchange.com/)的東西,所以我會放棄它。建議你嘗試加密和其他論壇。 – 2012-02-22 21:26:24

+0

啊,我不知道加密。感謝您的建議,我一定會在那裏發帖。我同意加密可能並不完全正確,因爲這實際上是一個架構問題,但它值得一試。 – Travis 2012-02-22 22:10:41

回答

1

至少有三個主要障礙需要克服,以創建一個既有用又安全的系統。

首先,用戶必須將他的私鑰輸入到Web界面。 RSA密鑰的長度通常至少爲1024位,所以即使使用相對高效的base64編碼(由於許多字符在視覺上相似,這可能是一個不好的選擇),用戶將不得不輸入171個無意義的字符。用鍵盤,這將是乏味和容易出錯的。

其次,客戶端運行的JavaScript代碼來自Web服務器。您試圖避免攻擊者通過在客戶端進行加密和解密來訪問服務器上明文密碼的風險。但是,如果攻擊者可以訪問存儲在服務器上的明文密碼,他們可能也有能力修改服務器發送的JavaScript代碼。如果攻擊者可以修改javascript代碼,他們可以使用修改後的代碼來捕獲用戶的祕密。

最後,運行客戶端代碼的硬件和軟件是安全的。如果用戶使用的硬件和軟件受到損害(例如使用鍵盤記錄器),那麼可以在那裏捕獲機密。所以爲了安全起見,用戶只能使用他控制的電腦。如果您只能使用您控制的計算機,則基於Web的系統在傳統客戶機 - 服務器系統上的許多優點將被否定。

如果你可以解決這些問題,將公鑰作爲Inerdial存儲在服務器上似乎是一個不錯的選擇,但是你會遇到問題,即用戶無法知道服務器發送的公鑰實際上由他們想要提供密碼的人控制,而不是由攻擊者控制。

Nate Lawson在his Google Tech Talk提到javascript加密。

+0

我願意嘗試修復或解決這些問題(屏幕上的鍵盤等)。但是我已經意識到Javascript的其他一些缺點。對於在Adobe Flex/Air中執行客戶端代碼,您有什麼想法?在Flex方面,我並不是很強大,但它似乎適合編譯的客戶端代碼,可以在傳輸/下載時進行驗證。 – Travis 2012-02-23 15:04:10

+0

我不明白爲什麼它會比通過HTTPS的Javascript更可驗證。 – 2012-02-23 15:19:02

+0

@SamuelEdwinWard:這是一個可以校驗的單個對象,JavaScript可以在網站上的任何位置*。 – 2012-08-15 13:55:19