【发布时间】:2011-10-03 06:38:41
【问题描述】:
我想知道 RSA 签名的长度是多少?它是否总是与 RSA 密钥大小相同,例如如果密钥大小为 1024,则 RSA 签名为 128 字节,如果密钥大小为 512 位,则 RSA 签名为 64 字节?什么是 RSA 模数? 还有 RSA-sha1 是什么意思? 任何指针都非常感谢。
【问题讨论】:
标签: security cryptography rsa digital-signature sha1
我想知道 RSA 签名的长度是多少?它是否总是与 RSA 密钥大小相同,例如如果密钥大小为 1024,则 RSA 签名为 128 字节,如果密钥大小为 512 位,则 RSA 签名为 64 字节?什么是 RSA 模数? 还有 RSA-sha1 是什么意思? 任何指针都非常感谢。
【问题讨论】:
标签: security cryptography rsa digital-signature sha1
你是对的,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)
这意味着两件事
为了使签名恰好 n 位长,应用了某种形式的填充。参照。 PKCS#1 获取有效选项。
第二个事实意味着大于 n 的消息要么必须通过将 m 分成几块 cryptographically secure hash functions,例如您提到的SHA-1。将 SHA-1 应用于任意长度的消息 m 将产生一个 20 字节长的“散列”,小于 RSA 模数的典型大小,常见大小为 1024 位或 2048 位,即 128 或 256 字节,因此签名计算可以应用于任何任意消息。
这种散列函数的加密属性确保(理论上 - 签名伪造是研究界的一个巨大话题)除了暴力破解之外不可能伪造签名。
【讨论】: