我正在使用RSA签名非常小的邮件,并且签名和公钥已添加到每封邮件中,与实际内容相比,这需要大量空间。相同级别的加密是否需要较少的空间?验证性能是否与RSA相同?

评论

ECDSA签名约为64个字节

@CodeInChaos比RSA短,但是如果公钥较大,则不会节省空间;)

#1 楼


我正在考虑切换到ECDSA,使用相同级别的加密是否需要较少的空间?


该问题的答案是肯定的,ECDSA签名和公钥都可以比具有类似安全级别的RSA签名和公钥小得多。如果将192位ECDSA曲线与1k RSA密钥进行比较(大致相同的安全级别; 192位ECDSA曲线可能会更强一些);那么RSA签名和公钥可以分别以128字节表示(假设您愿意为公钥使用节省空间的格式,而不是标准的PKCS格式); ECDSA签名将为48个字节,而公钥将为25个字节。

随着您提高所需的安全级别,优势将更加根本地倾向于ECDSA;那是因为必须增加RSA模数大小,快得多于ECDSA曲线大小,以提高安全级别。


验证性能是否与RSA处于相同范围内? >

好吧,不,ECDSA签名验证比RSA慢(对于合理的安全级别)。这就是RSA闪耀的地方。您可以比验证ECDSA签名更快地验证RSA签名。根据此网页,在其测试环境中,2k RSA签名验证花费了0.16毫秒,而256位ECDSA签名验证花费了8.53毫秒(有关测试平台的详细信息,请参见页面)。现在说句公道话,这不是一个苹果对苹果的比较(256位ECDSA可能比2k RSA强一点),但是即使相差不大50倍,RSA仍然更快。 />
我确实有一个问题。您提到您要在签名消息中包含RSA公钥。这是否意味着验证者使用该公钥来验证消息?如果是这样,您怎么知道想要伪造消息的人不仅会提供自己的公共密钥以及签名(使用其私钥签名)?也就是说,接收者如何知道他在消息中看到的公钥是发送的公钥?

评论


$ \ begingroup $
“这是否意味着验证者使用该公钥来验证消息?”它用于识别发件人,因此您可以将其添加到白名单。如果其他人在同一(或新)消息上签名,您会发现它不是来自您列入白名单的同一个人。
$ \ endgroup $
–梅斯
2012年7月12日在20:35

$ \ begingroup $
@Joshua:好吧,如果您担心消息开销,是否不能用一些短标识符替换公钥,并让验证者将标识符映射到公钥?如果可以这样做,则可以将RSA的开销减少一半左右,而无需使用其他公钥算法。
$ \ endgroup $
–雨披
2012年7月12日在20:43



$ \ begingroup $
听起来像是慢速的ECC实现。 eBacs的结果似乎要好一些。 bench.cr.yp.to/results-sign.html
$ \ endgroup $
– CodesInChaos
2012年7月12日在21:45

$ \ begingroup $
@poncho不幸的是,因为它是一个去中心化的系统(如电子邮件),所以拥有一个中央机构(用户需要注册以将其标识符映射到密钥)会破坏整个概念。
$ \ endgroup $
–梅斯
2012年7月12日在21:51

$ \ begingroup $
@Joshua:哈希将使您知道何时密钥是正确的密钥,因此您不必信任任何人即可将其提供给您。如果您还没有所需的密钥,则可以通过任何方法获取它。 (从URL检索。从DNS检索。从密钥服务器检索。任何方法都可以,不需要信任。)
$ \ endgroup $
– David Schwartz
2012年7月13日在15:35

#2 楼

为了获得128位安全级别,您需要256位ECC。压缩的公共密钥大约需要32个字节,签名使用64个字节。

验证时间在很大程度上取决于曲线,表示形式和实现方式的选择。 Ed25519应该是最快的版本之一,尤其是在使用批验证的情况下。但是我不确定是否可以创建优化版本的Windows版本。

评论


$ \ begingroup $
似乎ECC需要的空间较小,但是本文(nicj.net/files/…)指出:“因此,对于比消息生成更频繁地要求消息验证的应用程序,RSA可能是更好的选择。”验证性能对我而言至关重要,因此我将不得不研究差异有多大。
$ \ endgroup $
–梅斯
2012年7月12日在20:17

$ \ begingroup $
在Ed25519实现中,签名,验证和密钥生成都非常快。
$ \ endgroup $
– joeforker
2012年7月13日在12:21