我同意第三方使用RSA-PSS算法来实现数字签名方案。我希望避免在我身边选择RSA参数,如salt长度、哈希算法等,并共享所需的配置参数。
相反,我想提到一个标准,在这个标准中,所有的参数都已经标准化了,这样我们两个人通常都可以引用相同的标准。我们将在他这边进行签字,在我这边进行核查。
这些参数是由FIPS、IETF或ISO/IEC启动的,这样我们才能避免大量开销吗?如果是的话,哪个标准处理这个问题?
发布于 2020-02-27 11:00:48
让我们首先去除只有一个选项的两个参数:蒙克生成函数(MGF)和预告片字段。在指定RSA的RFC 3447中,这些只能分别配置为MGF1和1。
您将找不到一个为MGF1选择一个哈希而另一个哈希的通用标准,因为任何哈希都将被认为是安全的,包括默认值(SHA-1)。另一方面,将有许多更高级别的协议或应用程序选择了一组特定的配置参数。
如果我们查看RFC 4055,其中PSS用于X.509v3证书(您将在例如浏览器中找到用于TLS的证书),我们将发现可以为证书中的特定公钥指定配置选项:
RSASSA-PSS-params ::= SEQUENCE {
hashAlgorithm [0] HashAlgorithm DEFAULT
sha1Identifier,
maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT
mgf1SHA1Identifier,
saltLength [2] INTEGER DEFAULT 20,
trailerField [3] INTEGER DEFAULT 1 }正如您所看到的,所有值都有其缺省值,因此这将是一组易于遵守的规则。在证书中,公钥及其参数被签名,因此应该保证参数的安全性。
然而,还有一个额外的细节:
maskGenAlgorithm字段标识掩码生成函数。默认的掩码生成函数是带有SHA-1的MGF1。对于MGF1,强烈建议底层哈希函数与hashAlgorithm__标识的哈希函数相同。
当然,这意味着通过指定字段MaskGenAlgorithm和mgf1SHA1Identifier ( 1:maskGenAlgorithm )来更改默认设置。由于SHA-1被认为是坏的,因此不是hashAlgorithm的一个选项,这意味着应该选择另一个哈希算法。
当所有其他参数都被设置时,这意味着哈希函数成为唯一的配置参数。
现在,由于SHA-2是常用的,它可能是最好的哈希算法家族选择。SHA-224和SHA-384只是SHA-256和SHA-512的较短的输出函数,它们对签名没有多大意义。这就剩下两个选择之一了。沙256是使用最多的,并在许多芯片上有硬件支持。沙512使用64位操作,在64位芯片上既快速又安全。
由于兼容性和硬件支持,我可能会稍微倾向于SHA-256。它仍然有大量的安全性和哈希数据的两倍以上的速度使用硬件支持。
所以我们有: SHA-256,MGF-1,SHA-256,20字节的salt和一个设置为1的预告片字段。只要通过在协议中显式地描述它来与你的朋友沟通,当涉及到PSS的时候,你就都设置好了。
只需要处理PSS参数。您还需要指定如何信任公钥(哦,亲爱的,我提到了X.509证书吗?),以及要使用的最小密钥大小。任何3072位或以上的密钥大小都可以,但是我会坚持3072位,它的安全级别与SHA-256's在大约128位的安全性上具有相同的安全级别。
https://crypto.stackexchange.com/questions/77881
复制相似问题