1

我正在编写一个客户端 - 服务器模型(客户端是服务器上的一个脚本,它收集数据并通过 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 加密。

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

4

2 回答 2

3

是的,不要!密码技术需要数年的时间来开发和测试是有原因的,它们极难做到正确。听起来您可能想看看使用 RSA 或其他一些 PKI 基础设施。如果我是你,我会研究 PyCrypto https://www.dlitz.net/software/pycrypto/。不管怎样,不要实现你自己的制图系统,它会被破坏和不安全!

于 2012-04-10T05:45:48.753 回答
3

使用最简单的 SSL/TLS(没有 PKI)作为 REST 的传输保护可能是最有效的方法来让轮子第一次就正确。

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

  1. 客户端不被可能冒充服务器的攻击者欺骗是否重要?如果是,那么您必须正确设置 PKI,以便客户端可以使用证书对服务器进行身份验证。或者,您可以使用 TLS-SRP。
  2. 服务器不被可能冒充真实用户的攻击者欺骗是否重要?如果是,那么您必须设置一个身份验证方案:例如 HTTP Digest、SSL 客户端证书、TLS-SRP 等。
  3. 客户端或服务器的妥协不会危及先前会话中交换的数据是否重要?如果是,那么您必须将密码套件限制为提供完美前向保密 (DHE) 的密码。

只有当您在设置 SSL 时遇到问题时,您才应该考虑使用您自己的协议。

于 2012-04-10T07:16:28.680 回答