2011-11-25 71 views

回答

3

要求Google提供像PGP/GPG這樣的端到端加密。對於基於瀏覽器的客戶端實現,您可能想要查看GPG encryption in JavaScript

我只是GOOGLE了它,不能告訴它是否真的安全(不發送你的私鑰給任何人)。我只想給你一點啓動。

編輯:看起來它發送客戶端的私鑰對你的服務器進行基於服務器的加密。這是而不是你想要什麼。但我相信即使我不知道是否有人完成了GPG的JavaScript實現也是可能的。

+3

最近甚至在Slashdot上:http://gpg4browsers.recurity.com/ –

+2

使用Javascript進行加密時存在一些問題。在使用JavaScript解決方案之前,您可能需要考慮本文中提出的幾點:http://www.matasano.com/articles/javascript-cryptography/ – Seth

2

是;例如,如果您的服務器是受SSL/TLS保護的通信中的鏈接,會發生這種情況。
參與者使用公開密鑰加密方案商定祕密的對稱密鑰;然後用它來加密他們的通信。

參與者也可以使用預期接收者的公鑰對其消息進行簡單加密。這樣,只有預期的接收者才能解密該消息。這不是一個非常先進的方案,可能很脆弱。 (其中,如果竊聽者可以猜出恰好是發送的內容,他可以使用預期收件人的公鑰對該消息進行加密,並查看結果是否與正在發送的內容匹配)。

有許多關於密碼協議的文獻可用;對於初學者來說,這裏有一篇關於Key Agreement Protocols的維基百科文章。

+0

使用TLS意味着兩個用戶都需要聯機嗎?我想實際存儲消息。 –

+0

不,您可以使用相同的算法交換對稱密鑰,而不管參與者何時登錄 - 只要步驟按正確的順序進行即可。 –

+2

@destructo_gold如果您將消息存儲在服務器上,我強烈建議使用PGP。它被設計爲加密電子郵件,這幾乎是相同的用例。但是,用戶必須永久保存一些數據(私鑰)到他們的機器上。 – MBober

2

如果我們在談論不可能然後第二部分S.L.除了密鑰交換必須通過其他方式完成之外,Barth的回答將實現這一點。這可以是電話或電子郵件,甚至另一個網站,但如果它通過您的網站完成,那麼它是開放的man-in-the-middle attack。你可以告訴你的用戶這樣做,你實際上不能幫助他們做到這一點。

在某個地方可能會有一個JavaScript庫實現GPG加密,因此您所要做的就是確保每封郵件在發送到Web服務器之前都在瀏覽器中加密。只要你喜歡,你可以存儲這些消息,它們是加密的。只有具有正確私鑰的用戶才能解密它。

由於網站使用的SSL和TLS容易受到中間人攻擊。我們沒有聽說這類攻擊的原因是中間的大多數人都是可以信賴的,所以攻擊根本不會發生。最近撤銷的證書DigiNotar等證書正是因爲伊朗政府被認爲是一箇中間人,並解密他們自己的公民的SSL流量。

如果您對通過好奇的系統管理員防止隨意窺探感到滿意,則可以通過您的網站完成密鑰交換。

還有一件事:安全性很難。

即使您使用衆所周知的加密技術來做到這一點,實施中存在缺陷的機率也會非常接近1。這並不意味着那些好奇的系統管理員可能會意外地閱讀郵件,但這確實意味着一個有決心和技能的對手將能夠找到方法。只要您負擔得起,您應該聘請專家重新設計或至少要檢查你的協議和實現。

+0

+1,儘管我並不認爲加密實現中的缺陷是悲觀的。另外我認爲SSL和TLS不容易受到設計中的中間人攻擊。這完全取決於你信任誰。 – MBober

+0

@MBober SSL/TLS是爲客戶端 - 服務器通信而設計的,而非客戶端 - 服務器端客戶端,沒有服務器讀取任何東西。當然,您可以通過一對普通的套接字連接來隧道SSL,但客戶端仍然需要某種方式來識別對方。 –

0

一般來說,如果用戶之間沒有能夠讀取和/或修改他們的消息的安全鏈接,只有通過某種方式來識別彼此(或者至少在一個方向上)時纔可能。

這可能是一個共享密鑰(如密碼短語)或一個已知的公鑰(或由一個已知​​的CA認證),其中另一個具有相應的私鑰。

就像TLS一樣,可以建立一個安全協議(使用密鑰交換,然後在兩個方向上使用MAC對稱加密)。 (另一種常用於即時消息傳遞的方式是OTR,即Off-the-Record messaging協議。)

如果沒有一種方法來識別另一個端點,那麼最終會出現允許中間人攻擊的方法。沒有證書的SSL/TLS或中間人知道相應私鑰的證書是不安全的,每個其他類似的加密方案都是不安全的。

另一個問題是您說我的網站的訪問者是。這看起來像您將在您的網站上提供的JavaScript中實現客戶端加密。不要這樣做......如果訪問者不相信你不讀取他們的數據,他們也不應該相信你給他們提供非惡意的JavaScript,這可能會實現別的東西,而不是你聲稱的那樣,再次允許MITM,甚至直接發送一份數據給你。

關於這方面的更多細節在Javascript Cryptography Considered Harmful(從稍微不同的角度)討論。