【问题标题】:RSA signature size?RSA签名大小?
【发布时间】:2011-10-03 06:38:41
【问题描述】:

我想知道 RSA 签名的长度是多少?它是否总是与 RSA 密钥大小相同,例如如果密钥大小为 1024,则 RSA 签名为 128 字节,如果密钥大小为 512 位,则 RSA 签名为 64 字节?什么是 RSA 模数? 还有 RSA-sha1 是什么意思? 任何指针都非常感谢。

【问题讨论】:

    标签: security cryptography rsa digital-signature sha1


    【解决方案1】:

    你是对的,RSA 签名大小取决于密钥大小,RSA 签名大小等于模数的长度(以字节为单位)。这意味着对于“n 位密钥”,生成的签名将正好是 n 位长。虽然计算的签名值不一定是 n 位,但结果将被填充以完全匹配 n 位。

    下面是它的工作原理:RSA 算法基于modular exponentiation。对于这样的计算,最终结果是“正常”结果除以模数的余数。模运算在Number Theory 中扮演着重要角色。同余(≡)的定义是

    m is congruent to n mod k if k divides m - n
    

    简单示例 - 让 n = 2 和 k = 7,然后

    2 ≡ 2 (mod 7) because: 7 divides 2 - 2
    9 ≡ 2 (mod 7) because: 7 divides 9 - 2
    16 ≡ 2 (mod 7) because: 7 divides 16 - 2
    ...
    

    7其实确实除0,除法的定义是

    如果整数 n 具有 b = na 的性质,则整数 a 除以整数 b

    对于 a = 7 和 b = 0 选择 n = 0。这意味着每个整数都可以整除 0,但这也意味着同余可以扩展为负数(这里不再赘述,这对 RSA 并不重要)。

    所以要点是同余原理扩展了我们对余数的幼稚理解,模数是“模数后的数”,在我们的示例中为 7。因为给定一个模数,有无限数量的全等数,我们将其称为同余类,并且通常选择一个代表(最小同余整数 > 0)进行计算,就像我们在谈论计算的“余数”时直观地所做的那样。

    在 RSA 中,对消息 m 进行签名意味着用“私有指数”d 取幂,结果 r 是 >0 且小于模数 n 的最小整数,因此

    m^d ≡ r (mod n)
    

    这意味着两件事

    • r 的长度(以位为单位)以 n(以位为单位)为界
    • m 的长度(以位为单位)必须是

    为了使签名恰好 n 位长,应用了某种形式的填充。参照。 PKCS#1 获取有效选项。

    第二个事实意味着大于 n 的消息要么必须通过将 m 分成几块 cryptographically secure hash functions,例如您提到的SHA-1。将 SHA-1 应用于任意长度的消息 m 将产生一个 20 字节长的“散列”,小于 RSA 模数的典型大小,常见大小为 1024 位或 2048 位,即 128 或 256 字节,因此签名计算可以应用于任何任意消息。

    这种散列函数的加密属性确保(理论上 - 签名伪造是研究界的一个巨大话题)除了暴力破解之外不可能伪造签名。

    【讨论】:

    • 非常感谢!感谢您的帮助
    • 那么...多长时间了?如果我用 1024 位密钥加密单个字节,我的理解是签名将是 1024 位长。
    • 我更清楚地强调了结果:)你是对的,1024 位密钥将产生 1024 位签名。
    • @ixe013:注意,加密和签名不是同一个操作(虽然它的工作方式相似)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    相关资源
    最近更新 更多