2012-04-10 51 views
1

我正在編寫客戶端 - 服務器模型(客戶端是收集數據並通過REST將其發送到服務器的服務器上的腳本),並且要加密發送的數據。在Python中加密數據 -

目前我有生成隨機密鑰,其從特定的時區中附加時間的函數 - IP-HOSTNAME年 - 月 - 日 - 小時 - (MINUTE/2)

的每個部分通過SHA256密鑰從3000 - 10,000次運行,最後生成128位密鑰。總的來說,腳本需要0.8〜1秒才能完成。

數據通過AES加密,使用密鑰和iv的128位密鑰的部分。

的服務器腳本,監聽任何連接,如果IP地址列驗證,然後前進到解密數據(使用相同的方法來生成密鑰和iv)

我的問題是: - 我我重新發明輪子? - 是否有更好的做法來生成數據加密的動態時間限制密鑰?

我的目標是有一個限制在60-120秒內的密鑰,然後丟棄它,使用多個週期來生成密鑰(感謝閱讀Python的Truecrypt方式),所以如果有任何數據被捕獲,它會不容易解密「。 此外,服務器模型將具有SSL證書,它將用於加密加密的證書。

我正在考慮給每個客戶端腳本(RSA生成)提供一個靜態密鑰,這將用於AES加密。

謝謝你的誠實答案和任何新的想法來改善這一點。

+2

「數據加密的時間限制密鑰」「它將用於加密的SSL證書」重新創建加密是最容易出錯的方法。 – 2012-04-10 05:01:52

回答

3

使用最簡單的SSL/TLS(無PKI)作爲REST的傳輸保護可能是第一次使輪子正確運行的最有效方法。

除此之外,您應該澄清幾個主題。例如:

  1. 重要的是客戶端不會被可能正在冒充服務器的攻擊者欺騙嗎?如果是,則必須正確設置PKI,以便客戶端可以使用證書對服務器進行身份驗證。或者,您可以使用TLS-SRP。
  2. 重要的是服務器不會被可能冒充真實用戶的攻擊者欺騙嗎?如果是這樣,那麼你必須設置一個認證方案:例如HTTP摘要,SSL客戶端證書,TLS-SRP等。
  3. 重要的是,在客戶端或服務器的妥協不會危及數據交換以前的會議?如果是這樣,那麼您必須將密碼套件限制爲提供完美前向保密(DHE)的密碼。

只有當您在設置SSL時遇到困難時,您應該考慮自行組建協議。

3

是的,不!密碼技術需要花費數年時間才能開發和測試,原因很簡單,他們很難找到正確的答案。這聽起來像你可能想看看使用RSA或其他PKI基礎設施。如果我是你,我會考慮PyCrypto https://www.dlitz.net/software/pycrypto/。無論哪種方式,不要實施你自己的製圖系統,它會被破壞和不安全!