>我正在编写一个客户端 - 服务器模型(客户端是服务器上的脚本,用于收集数据并通过REST将其发送到服务器),并希望加密发送的数据。
目前我有一个生成随机键的函数,该函数从特定时区添加时间 - IP-HOSTNAME-YEAR-MONTH-DAY-HOUR-(MINUTE/2)
密钥的每个部分从 3,000 - 10,000 次运行到 SHA256,最后生成 128 位密钥。脚本全部完成需要 ~0.8 - 1 秒。
数据通过AES加密,使用128位密钥的一部分作为密钥和iv。
服务器脚本侦听任何连接,验证是否列出了 IP 地址,然后继续解密数据(使用相同的方法生成密钥和 iv
)我的问题是:- 我在重新发明轮子吗?- 是否有更好的做法来生成用于数据加密的动态、有时间限制的密钥?
我的目标是拥有一个限制为 60-120 秒的密钥,然后将其丢弃,使用多个周期生成密钥(感谢读取 Truecrypt 的 python 方式),因此如果捕获任何数据,它不会"容易"解密。此外,服务器模型将具有用于加密加密的 SSL 证书。
我正在考虑为每个客户端脚本(RSA 生成)提供一个静态密钥,该密钥将用于 AES 加密。
感谢您的诚实回答和任何改进的新想法。
使用最简单的SSL/TLS(不带PKI)作为REST的传输保护可能是第一次获得正确方向盘的最有效方法。
除此之外,您应该澄清一些主题。例如:
- 客户端不会被可能冒充服务器的攻击者欺骗,这很重要吗?如果是,则必须正确设置 PKI,以便客户端可以使用证书对服务器进行身份验证。或者,您可以使用 TLS-SRP。
- 服务器不会被可能冒充真实用户的攻击者欺骗,这很重要吗?如果是,那么您必须设置身份验证方案:例如HTTP Digest,SSL客户端证书,TLS-SRP等。
- 客户端或服务器上的入侵不会危及先前会话中交换的数据,这是否重要?如果是,则必须将密码套件限制为提供完全前向保密(DHE)的密码。
仅当您在设置 SSL 时遇到问题时,才应考虑汇总自己的协议。
是的,不要!加密技术需要数年的开发和测试是有原因的,它们很难正确。听起来您可能希望考虑使用 RSA 或其他一些 PKI 基础结构。如果我是你,我会研究PyCrypto https://www.dlitz.net/software/pycrypto/。无论哪种方式,不要实施自己的制图系统,它将被破坏且不安全!