我正在编写一个客户端 - 服务器模型(客户端是服务器上的一个脚本,它收集数据并通过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加密。
感谢您的诚实答案和任何改进这一点的新想法。
答案 0 :(得分:3)
是的,不要!加密技术需要数年时间才能开发和测试,因为它们很难做到正确。听起来您可能想要使用RSA或其他一些PKI基础架构。如果我是你,我会调查PyCrypto https://www.dlitz.net/software/pycrypto/。无论哪种方式,不要实施自己的制图系统,它将被破坏和不安全!
答案 1 :(得分:3)
使用最简单的SSL / TLS(不使用PKI)作为REST的传输保护可能是第一次正确启动滚轮的最有效方法。
除此之外,您应该澄清一些主题。例如:
只有在设置SSL时遇到麻烦,才应考虑卷起自己的协议。