【问题标题】:Lower Limit on RSA message length in M2CryptoM2Crypto 中 RSA 消息长度的下限
【发布时间】:2012-08-31 22:44:59
【问题描述】:

我正在尝试使用外部站点使用 Python M2Crypto 的 RSA 提供给我的公钥对消息进行编码。本质上,我正在做这样的事情:

from M2Crypto import RSA
import os
rsa = RSA.load_pub_key(os.path.join(BASE_PATH, 'external_site.pem'))
rsa_result = rsa.public_encrypt(message, 3).encode('base64')

如果我在加密时不使用填充,则会收到错误消息:

RSAError: data too small for key size

我了解为什么消息长度(RSA 加密的模数)有上限,但我不明白为什么会有下限。有人可以解释一下或指出正确的方向来解决吗?

【问题讨论】:

  • 我猜你没有使用填充。
  • 没错,对于这个问题,我没有使用填充。这也更多是关于对 RSAError 的理解,而不是加密是否安全。
  • 您可能需要以某种方式告诉您的 API 使用 OAEP 填充。如果您使用填充,错误可能会消失。不填充消息长度可能需要等于模数长度。但是不使用填充有严重的安全问题,所以除非你真的知道自己在做什么,否则不要这样做。
  • CodesInChaos,如果你发布你的答案,我会关闭这个问题。
  • 我无法发布完整的答案,因为我不知道有问题的语言/库。只需根据我的评论,用你用来修复它的代码自己写一个完整的答案。

标签: python encryption rsa m2crypto


【解决方案1】:

消息中必须有一个下限,否则,RSA 操作将是一个正则算术,而不是模算术。

其中

必须为真,对于给定消息 ,换句话说, 需要足够大以减少 ,否则攻击者可以简单地计算 并恢复消息,因为它从未减少了。因此,

对于每条消息 都必须是真实的。


举个例子:

然后 对于这个例子,我们不需要,因为失败发生在到达那个点之前。

如果我们选择我们的,那么 或大致(为了满足上述等式)

还有:

没有 mod 存在,这就是重点,mod 55 从来没有做任何事情。由于是公开的,所以可以简单地计算并得知消息是

【讨论】:

    【解决方案2】:

    (重复评论中的答案,只是为了“关闭”)

    您可能需要以某种方式告诉您的 API 使用 OAEP 填充。如果您使用填充,错误可能会消失。不填充消息长度可能需要等于模数长度。但是不使用填充有严重的安全问题,所以除非你真的知道自己在做什么,否则不要这样做。

    【讨论】:

    • 不要。如果这是答案,让@CodesInChaos 发布它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2012-02-11
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    相关资源
    最近更新 更多