安全签名algorithm的兼容性

经过一番研究之后,似乎有人build议使用带有PSS填充的RSA,因为它的安全属性已经很好了。 问题在于签名algorithm很难兼容 ,特别是对于这样的需求。

我想实现的是至less在以下环境中进行签名和validation:

  • 牡丹
  • OpenSSL的
  • encryption+
  • Node.js(使用OpenSSL)

在PolarSSL和其他软件上兼容也许会很有趣。

node.jsencryption页面中有一个关于创build和validation签名的例子。 这很好,但我需要与Botan EMSAx(SHA256)兼容,并且真的认为签名应该用RSA-PSS之类的安全软件来填充。 节点示例页面仅显示'RSA-SHA256'但没有使用填充。

PSS填充可以通过使用OpenSSL来实现:

 openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:32 \ -sign rsa.key -out data.txt.sha256 data.txt 

我的testing代码看起来像这样:

 var s = crypto.createSign('RSA-SHA256'); var key = fs.readFileSync('rsa.key').toString(); s.update(message); var signature = s.sign(key, 'base64'); 

但它为相同的input产生相同的输出,这不是我想要的,而且显然与我使用Botan的C ++实现不兼容。

如果无法以最小的努力达到兼容性,对于selectalgorithm的任何build议,我可能会努力尝试联系这些encryption库的开发者,看看是否有一个algorithm的共识来获得作为事实上的标准实施。 (是的,我知道这似乎是绝望。)是否有这样的持续努力?

您目前正在使用PSS签名格式,而Node.js几乎肯定使用PKCS#1 v1.5兼容签名 – 如果查看当前的代码,Node.js似乎仅限于这些。 一个区别是,PSS生成的签名确实包含一个随机组件,而PKCS#1 v1.5兼容签名则不包含。

虽然PSS签名当然是首选,但似乎唯一的select是恢复到用于Botan的PKCS#1 v1.5兼容签名,或者在Node.js中实现PSS签名。 PKCS#1 v1.5签名应该仍然安全,即使它们与PSS签名相比具有不太理想的属性。

Interesting Posts