我想知道RSA签名的长度是多少?是否总是与RSA密钥大小相同,如果密钥大小为1024,则RSA签名为128字节,如果密钥大小为512位,则RSA签名为64字节?什么是RSA模数? 那么RSA-sha1是什么意思? 任何指针都非常感激。
答案 0 :(得分:48)
您是对的,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,除法的定义是
如果存在具有b = na
属性的整数n,则整数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来进行签名< = n,但实际上并没有这样做,因为它太慢了(模幂运算在计算上很昂贵) ,所以我们需要另一种方法来“压缩”我们的消息,使其小于n。为此,我们使用cryptographically secure hash functions,例如您提到的SHA-1。将SHA-1应用于任意长度的消息m将产生一个20字节长的“散列”,小于RSA模数的典型大小,常见大小为1024位或2048位,即128或256字节,因此签名计算可以应用于任何任意消息。
这种哈希函数的加密属性确保(理论上 - 签名伪造是研究界的一个重要主题),除了蛮力之外,不可能伪造签名。