我正在编写一个客户端-服务器模型(客户端是服务器上的一个脚本,它收集数据并通过 REST 将其发送到服务器)并希望对发送的数据进行加密。
目前我有一个生成随 secret 钥的函数,它从特定时区添加时间 - IP-HOSTNAME-YEAR-MONTH-DAY-HOUR-(MINUTE/2)
key 的每个部分都通过 SHA256 运行 3,000 - 10,000 次,最终生成 128 位 key 。脚本总的来说需要大约 0.8 - 1 秒才能完成。
数据通过 AES 加密,使用部分 128 位 key 作为 key 和 iv。
服务器脚本,监听任何连接,验证是否列出了 IP 地址,然后继续解密数据(使用相同的方法生成 key 和 iv)
我的问题是: - 我是在重新发明轮子吗? - 是否有更好的做法来为数据加密生成动态的、有时间限制的 key ?
我的目标是拥有一个限制在 60-120 秒内的 key ,然后丢弃它,使用多个循环生成 key (感谢阅读 Truecrypt 的 python 方式),所以如果捕获到任何数据,它就不会不会被“轻易”解密。 此外,服务器模型将有一个 SSL 证书,它将用于加密加密。
我正在考虑为每个客户端脚本(生成的 RSA)提供一个静态 key ,用于 AES 加密。
感谢您的诚实回答以及改进此问题的任何新想法。
请您参考如下方法:
使用最简单的 SSL/TLS(无 PKI)作为 REST 的传输保护可能是一次就成功的最有效方法。
除此之外,您还应该澄清几个主题。例如:
- 客户端不被可能冒充服务器的攻击者欺骗是否重要?如果是,那么您必须正确设置 PKI,以便客户端可以通过证书。或者,您可以使用 TLS-SRP。
- 服务器不被可能冒充真实用户的攻击者欺骗是否重要?如果是,那么您必须设置身份验证方案:例如 HTTP Digest、SSL客户端证书、TLS-SRP 等。
- 客户端或服务器的妥协不会危及之前 session 中交换的数据是否重要?如果是,那么您必须将密码套件限制为提供完美前向保密的密码( DHE)。
只有当您在设置 SSL 时遇到麻烦时,您才应该考虑汇总您自己的协议(protocol)。
