#1 楼
如果$ d,N $是私钥,则对消息$ m $进行签名计算为$ m ^ d \ bmod N $。 $ \ bmod N $使之签名的消息在$ 0 $和$ N $之间。因此,它不大于$ N $。但是,在大多数应用程序中,通常会有一些编码或协议字段会使它变大。
评论
$ \ begingroup $
谢谢。当我们说2048位加密时-我们是说N本身就是2048位吗?
$ \ endgroup $
– ispiro
2012年8月10日15:06
$ \ begingroup $
好吧,我在这里找到了答案:stackoverflow.com/a/2922135/939213-是的,模数本身是2048。
$ \ endgroup $
– ispiro
2012年10月10日15:26
#2 楼
PKCS#1,“ RSA”标准,描述了应如何对签名进行编码,它是使用big-endian无符号编码的字节序列,始终具有模数大小。这意味着对于2048位模数,所有签名的长度都精确地为256个字节,从不多于从不。PKCS#1是使用最广泛的标准,但是在某些领域中还有其他标准否则可能会决定。从数学上讲,RSA签名是介于$ 1 $和$ N-1 $之间的整数,其中$ N $是模数。在某些协议中,签名周围可能会有一些包裹,例如指示使用哪种算法,或嵌入证书。例如,在CMS中,“签名”不仅包含RSA值本身,而且还包含许多其他数据,对于几乎无限的总大小(由于包含巨大的CRL,我看到的签名大小为几兆字节) 。
评论
$ \ begingroup $
在某些RSA变体中,包括ISO / IEC 9796-2(具有总消息恢复功能,以及“签名产生功能”,而不是更常见的“替代签名产生功能”),签名是$的一点字符串。 \ lceil \ log_2N \ rceil-1 $位,对应于$ 1 $和$(N-3)/ 2 $之间的整数(的big-endian编码):即$ \ min \ big(J ^ s \ bmod N,N-(J ^ s \ bmod N)\ big)$其中$ J $是消息的符号和参数的函数。
$ \ endgroup $
–fgrieu♦
2014-09-18 6:29
$ \ begingroup $
这个技巧可以扩展;例如如果验证程序已准备好计算256个RSA验证,并且尝试猜测丢失的位,则可以跳过完整的字节(8位)。也许更重要的是,在ISO / IEC 9796-2中,可以将部分签名数据“免费”嵌入签名中,因此,尽管签名值的大小为$ n $位(或$ n-1 $,但您可以这样,取决于情况,签名的存在所隐含的开销可能会大大减少。
$ \ endgroup $
–托马斯·波宁(Thomas Pornin)
2014年9月18日上午11:25
#3 楼
RSA签名大小取决于密钥大小,RSA签名大小等于模数的长度(以字节为单位)。这意味着对于“ n位密钥”,生成的签名将恰好为n位长。尽管计算出的签名值不一定是n位,但是将填充结果以恰好匹配n位。对于这种计算,最终结果是“正常”结果的其余部分除以模量。在数论中,模块化算术起着重要作用。在那里,一致性的定义是(我将使用“一致性”,因为我不知道如何获得那些三行等号)$ m \ equiv n \ mod k $如果$ k $除以$ m-n $
简单示例:假设$ n = 2 $和$ k = 7 $,则
$ 2 \ equiv 2 \ mod 7 $($ 7 $除以$ 2-2 $)
$ 9 \ equiv 2 \ mod 7 $($ 7 $除以$ 9-2 $)
$ 16 \ equiv 2 \ mod 7 $($ 7 $除以$ 16-2 $)
...
$ 7 $实际上会除以$ 0 $,除法的定义是
整数$ a $除以整数$ b $如果整数$ n $具有$ b = n·a $的属性。
对于$ a = 7 $和$ b = 0 $选择$ n = 0 $ 。这意味着每个整数都除以$ 0 $,但也意味着可以将同余数扩展为负数(此处不再赘述,对于RSA而言并不重要)。
所以要点是一致性原理扩展了我们对余数的幼稚理解,模数是“模后的数”,在我们的示例中为7美元。由于给定模有无数个全等数,因此我们称其为全等类,通常选择一个代表(最小的全等整数$ \ geq 0 $)进行计算,就像我们说话时直观地做到的一样关于计算的“余数”。
在RSA中,对消息$ m $签名意味着使用“私有指数” $ d $进行幂运算,结果$ r $是$ 0 \ leq r
$$ m ^ d \ equiv r \ bmod n。$$
这意味着两件事:
$ r $的长度(以位为单位)由$ n $的长度(以位为单位)。
$ m $的长度(以位为单位)必须为$ \ leq $ length($ n $)(也以位为单位)。
要使签名的长度恰好是$ n $位,可以使用某种形式的填充。 cf. PKCS#1提供有效的选项。
第二个事实意味着大于n的消息要么必须通过将$ m $分成几块$
这种哈希函数的密码属性确保了(理论上,签名伪造在研究界是一个巨大的话题),不可能伪造除暴力之外的签名。
评论
$ \ begingroup $
但是由于签名是$ m ^ d \ bmod n $-似乎长度甚至可以是$ 0 $。还是您指的是将其作为一项额外功能进行填充的系统?
$ \ endgroup $
– ispiro
2012年8月10日15:05
$ \ begingroup $
是的,我将其称为附加功能
$ \ endgroup $
– K Kiran
2012年8月10日15:09
$ \ begingroup $
实际上,模幂运算对大于$ n $的数字很好用。只是这会平凡地给我们签名冲突(因为$ m + n \ equiv m \ mod n $,我们也有$(m + n)^ d \ equiv m ^ d \ mod n $),这是首先使用哈希的原因。
$ \ endgroup $
–PaŭloEbermann
2012年8月11日上午10:31
评论
附带说明:虽然签名大小将与密钥大小相对应,但这并不意味着签名消息的大小就是消息的大小加签名大小。可以将部分消息嵌入签名本身,从而使合并后的大小变小。这称为邮件恢复。