【问题标题】:Encrypting data in Python -在 Python 中加密数据 -
【发布时间】:2012-04-10 15:16:28
【问题描述】:

我正在编写一个客户端-服务器模型(客户端是服务器上的一个脚本,它收集数据并通过 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 方式),因此如果捕获任何数据,它不会t 被“轻松”解密。 此外,服务器模型将有一个 SSL 证书,它将用于加密加密。

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

感谢您的诚实回答以及任何改进此问题的新想法。

【问题讨论】:

  • “数据加密的时间限制密钥”“用于加密的 SSL 证书”重新发明加密是最容易出错的方法。

标签: python encryption pycrypto


【解决方案1】:

使用最简单的 SSL/TLS(无 PKI)作为 REST 的传输保护可能是最有效的方法,让您在第一时间就做好准备。

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 2021-07-23
      • 2012-10-14
      • 1970-01-01
      相关资源
      最近更新 更多