2010-10-20 231 views
5

由於中國防火牆已阻止谷歌appengine的https端口。所以我想通過javascript和python來模擬安全套接字層,以保護我的用戶信息不會被那些ISP和GFW捕獲。加密:在JavaScript和Python中模擬SSL

我的計劃:

  • 握手:

瀏覽器請求服務器,服務器生成一個加密關鍵k1和解密密鑰K2,K1發送給瀏覽器。 瀏覽器生成加密密鑰k3,並解密密鑰k4,將k3發送給服務器。

  • 瀏覽:

在會議期間,與K1瀏覽器對數據進行加密併發送至服務器,服務器解密用K2。服務器用k3加密數據並響應瀏覽器,用k4解密瀏覽器。

請找出我的錯誤。

如果它是正確的,我的問題是

  1. 如何生成一個密鑰對 的JavaScript和Python,還有 一些圖書館?
  2. 如何加密和解密數據在 javascript和python,有沒有 一些庫?

回答

0

如果安全性確實是一個大問題,那麼存在一個大問題:您的算法將被轉移到不安全的地方。你能信任客戶嗎?客戶可以信任服務器嗎?

+0

我認爲開源算法是可以的,有一些加密,即使你知道加密密鑰,但你不能解密它,並且你不能從加密密鑰中獲得解密密鑰。 – 2010-10-20 11:37:55

+1

不,問題是馬塞洛所說的,是什麼阻止中國的邪惡防火牆成爲一名中間人,並將一個完全不受保護的版本扔給你的客戶?或者發送他們自己的公鑰(因爲他們有他們的私鑰,他們可以解密所有內容)。使用SSL,您可以從頭開始安裝一對或根CA,客戶端使用它們來確保公鑰真的屬於正確的地址。當你試圖通過JavaScript來做到這一點,那麼你不能再驗證你的對手,並且打開一個大的安全漏洞。 – Onkelborg 2010-10-20 11:43:02

+0

只適用於我自己的網站,不適用於廣泛使用。 – 2010-10-20 11:57:09

2

您有一個基本問題,即SSL的JavaScript實現沒有內置的根證書來建立信任關係,這使得無法防止中間人攻擊。您從您的網站提供的任何證書(包括根證書)都可能被攔截並被間諜所取代。

請注意,這是一個基本的限制,而不是SSL工作方式的特性。所有加密安全都依賴於建立共享密鑰。使用主流瀏覽器部署的根證書爲驗證機構(CA)建立的信任網絡提供入口點,使您可以與已知的第三方建立共享密鑰。這些證書不能通過JavaScript代碼直接訪問AFAIK。它們僅用於建立安全(例如https)連接。

+0

謝謝。是的,我的計劃如此薄弱。但我想要的是多一點保護,我強迫我違揹我的意願。 – 2010-10-20 12:07:43

+0

如果沒有通過備用通信渠道部署共享密鑰或CA根目錄,或通過主要渠道部署它們,並通過備用渠道確認其有效性,則無法做到您想要的操作(例如,證書有指紋,可以指紋通過電話讀出來確認)。如果沒有這些,假設完全訪問您的通信渠道,發起中間人攻擊幾乎是微不足道的。 – 2010-10-20 21:37:45

1

你不能阻止中間的人陷入你的數據包/消息,特別是如果他們不在乎你是否知道。你可以做的是加密你的消息,以便阻止他們讀取你正在發送和接收的內容。從理論上講,這很好,但實際上,即使使用密鑰,您也無法手動完成現代加密:您也需要傳輸一些軟件,這就是它變得更加尷尬的地方。

您希望本地加密軟件的客戶端,或者至少足以能夠檢查加密軟件的數字簽名是否正確。數字簽名是很難難以僞造。交付已簽名的代碼,檢查其簽名,如果簽名根據您信任的公鑰進行驗證(唉,您必須將其轉換爲帶外),那麼您知道代碼(加上任何CA證書 - 信任根 - 已發送與它一起)可以被信任按照需要工作。數據包然後可以通過普通的HTTP;他們要麼到達他們想要的位置,要麼被攔截,但是無論哪種方式,只有預期的收件人才能夠閱讀它們。 只有 SSL的優勢在於它可以爲您創建幾乎所有的東西,並且使其變得簡單。

我不知道這是如何實現這一切都在Javascript中。顯然它可以做到這一點 - 它是一種圖靈完整的語言,它可以訪問所有必要的系統調用 - 但它可能是非常昂貴的。這可能是更容易想到使用GPG方面...

1

其他的答案在這裏是正確的(隱藏的,你是在所有通信,政府其實是一個不同的問題完全。):你贏了」能夠安全地交付將要在客戶端上運行的JavaScript。但是,如果您只是想更深入地研究這些東西,請查看開源項目Forge。它在JavaScript中的SSL/TLS的實施和一個簡單的Python SSL服務器:

http://github.com/digitalbazaar/forge/blob/master/README

如果你想閱讀更多的一些關於它的用途:

http://digitalbazaar.com/2010/07/20/javascript-tls-1/

http://digitalbazaar.com/2010/07/20/javascript-tls-2/