在Python中加密数据 -

时间:2012-04-10 05:00:05

标签: python encryption pycrypto

我正在编写一个客户端 - 服务器模型(客户端是服务器上的一个脚本,它收集数据并通过REST将其发送到服务器),并希望加密发送的数据。

目前我有一个生成随机密钥的功能,可以增加特定时区的时间 - IP-HOSTNAME-YEAR-MONTH-DAY-HOUR-(MINUTE / 2)

密钥的每个部分通过SHA256从3,000到10,000次运行,最后生成128位密钥。所有脚本都需要大约0.8到1秒才能完成。

数据通过AES加密,使用128位密钥的部分密钥和iv。

服务器脚本,侦听任何连接,验证是否列出了IP地址,然后继续解密数据(使用相同的方法生成密钥和iv)

我的问题是: - 我重新发明轮子了吗? - 为数据加密生成动态的,有时间限制的密钥是否有更好的做法?

我的目标是让一个密钥限制在60-120秒然后丢弃它,使用多个周期来生成密钥(感谢读取Truecrypt的python方式),所以如果有任何数据被抓住它就不会'可以“轻松”解密。 此外,服务器模型将具有SSL证书,它将用于加密加密。

我在考虑为每个客户端脚本(生成RSA)提供一个静态密钥,用于AES加密。

感谢您的诚实答案和任何改进这一点的新想法。

2 个答案:

答案 0 :(得分:3)

是的,不要!加密技术需要数年时间才能开发和测试,因为它们很难做到正确。听起来您可能想要使用RSA或其他一些PKI基础架构。如果我是你,我会调查PyCrypto https://www.dlitz.net/software/pycrypto/。无论哪种方式,不要实施自己的制图系统,它将被破坏和不安全!

答案 1 :(得分:3)

使用最简单的SSL / TLS(不使用PKI)作为REST的传输保护可能是第一次正确启动滚轮的最有效方法。

除此之外,您应该澄清一些主题。例如:

  1. 重要的是客户端不会被可能模仿服务器的攻击者欺骗?如果是,那么您必须正确设置PKI,以便客户端可以使用身份验证来验证服务器证书。或者,您可以使用TLS-SRP。
  2. 服务器是否不会被可能模仿真实用户的攻击者欺骗?如果是,那么您必须设置身份验证方案:例如HTTP摘要,SSL客户证书,TLS-SRP等
  3. 在客户端或服务器上的妥协是否不会危害先前会话中交换的数据?如果是,那么您必须将密码套件限制为提供完美前向保密的密码( DHE)。
  4. 只有在设置SSL时遇到麻烦,才应考虑卷起自己的协议。