【问题标题】:Is there a public key stream cipher encryption?是否有公钥流密码加密?
【发布时间】:2012-04-02 00:36:09
【问题描述】:

我有一个程序会定期将敏感数据的小片段(比如 8 个字节)附加到多个日志文件中。我希望对这些数据进行加密。我希望程序在启动时自动启动,所以我不想在程序启动时输入密码。我也不希望它在某处存储密码,因为这几乎会破坏加密的目的。

出于这些原因,在我看来,公钥加密是一个不错的选择。程序知道我的公钥,但我的私钥在其他地方受密码保护。

到目前为止,一切都很好。但是当我尝试使用 PyCrypto 来 RSA(或 ElGamal)加密一个 5 字节的小字符串时,输出会爆炸到 128 个字节。我的日志文件已经足够大了……另一方面,当我尝试使用对称加密(如 Blowfish)时,输出字符串与输入字符串一样大。

所以,我的问题是:是否有一种相当安全的公钥加密算法,我可以一次加密 8 个字节的数据并且不会让它崩溃? (我想2倍就可以了)。我想我想要的是一个公钥流密码。

如果没有这样的事情,我想我会放弃并使用对称加密并在启动时手动提供密码。

【问题讨论】:

  • 我不认为有这样的事情;在 SSL 之类的事物中,有一种使用会话密钥(即从非对称密码保护的东西派生的对称密码密钥)的趋势,但我不知道如何在您的情况下使用它(通信是单向的……)

标签: python encryption public-key-encryption


【解决方案1】:

通常这是通过程序创建一些(真实)随机数来解决的,这些随机数用作对称加密算法的密钥。

在您的程序中,您必须执行以下操作:

  1. 生成一些真正的随机数据(可能使用 /dev/random)作为密钥。
  2. 使用公钥算法加密密钥。
  3. 将密钥用于其他对称算法。

要解密这个,

  1. 使用私钥解密密钥。
  2. 使用密钥和对称算法解密数据。

您可能希望为“好”密钥获取一些随机数据(例如 >=256 位)。

【讨论】:

  • 这听起来像是要走的路。 (伊纳克)
  • 也许你是对的,但我真的不明白这一点。每次启动时,我都必须提供私钥,以便它可以找回旧密码。与仅在启动时为对称算法提供密码相比有什么好处?
  • 这个想法是使用公钥进行加密。解密时必须使用私钥。 (也许我错过了一个要求?)
  • 也许我错过了什么。您生成密码并使用公钥将其加密存储在某处。但是每次启动程序时,它不能只生成一个新的密钥,否则日志将是一团糟。所以它必须用密码解密文件。为此,它将需要我的私钥。我的私钥要么不会存储在同一台计算机上,要么会受到密码保护。无论哪种方式,都比只提供我的对称密码更容易。如果程序只运行一次,您的方法只会更好。就像在 SSL 连接中一样。
  • 密码使用错误。正确的词或短语是“对称密钥”。
【解决方案2】:

您需要做一些类似于 SSL 的事情:使用公钥加密交换密钥,然后使用对称加密。非对称加密在性能方面非常低效,不应该用于这种东西。

【讨论】:

  • “交换密钥”与谁?只涉及一台计算机。您的答案似乎与@Andreas Florath 的相似,但我不明白如果最终要使用对称加密,为什么需要涉及公钥加密?
  • 如何避免选择密码?无论阅读器是什么,无论是客户端还是其他什么,如果需要在编写器和阅读器之间以可以嗅探或拦截的方式交换密码,则需要对其进行加密。如果您不需要这个,只需使用对称密码加密您的日志。
  • 也许我误解了 Gurgeh 的想法,但我认为他想避免使用记录器的密码来写入加密的日志文件。如果他使用公钥加密,他可以在系统上留下一个公钥,用于加密日志,但不能用于解密。他将他的私钥保密,并在需要时使用它来解密日志。这里怎么需要密码?
  • @BrendanWood,这正是我想要的。
  • 这里避免使用公钥加密的原因是性能开销。如果不经常写入日志,那很好,但是不断地这样做会破坏他的记录器的性能。对称加密应该快 1000 到 10000 倍。
猜你喜欢
  • 1970-01-01
  • 2014-06-23
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多