Node.js 一种安全签名算法的兼容性

Node.js 一种安全签名算法的兼容性,node.js,openssl,rsa,signature,botan,Node.js,Openssl,Rsa,Signature,Botan,经过一些研究,似乎建议使用带有PSS填充的RSA,因为已知其安全性良好。问题是签名算法很难兼容,特别是与这样的需求兼容 我希望实现的是至少在以下环境中进行签名和验证: 植物学 OpenSSL 加密++ Node.js使用OpenSSL 在PolarSSL和其他设备上具有兼容性也可能很有趣 node.js crypto页面中有一个关于创建和验证签名的示例。这工作得很好,但我需要与Botan EMSAxSHA256兼容,而且我真的认为应该使用RSA-PSS之类的东西填充签名以确保安全。节点示例页面仅

经过一些研究,似乎建议使用带有PSS填充的RSA,因为已知其安全性良好。问题是签名算法很难兼容,特别是与这样的需求兼容

我希望实现的是至少在以下环境中进行签名和验证:

植物学 OpenSSL 加密++ Node.js使用OpenSSL 在PolarSSL和其他设备上具有兼容性也可能很有趣

node.js crypto页面中有一个关于创建和验证签名的示例。这工作得很好,但我需要与Botan EMSAxSHA256兼容,而且我真的认为应该使用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
我的测试代码如下所示:

var s = crypto.createSign('RSA-SHA256');
var key = fs.readFileSync('rsa.key').toString();

s.update(message);

var signature = s.sign(key, 'base64');
<>但是它为相同的输入产生相同的输出,这不是我想要的,显然与使用BoTAN的C++实现不兼容。
如果不可能以最小的努力实现兼容性,任何关于选择哪种算法的建议,我可能会努力尝试联系这些加密库的开发人员,看看是否有任何关于作为事实标准实现的算法的共识。是的,我知道这看起来很绝望。有这样的持续努力吗?

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


尽管PSS签名肯定是首选,但您唯一的选择似乎是恢复到适用于Botan的PKCS1 v1.5兼容签名,或者在Node.js中实现PSS签名。PKCS1 v1.5签名应该仍然是安全的,尽管它们的性能不如PSS签名

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


尽管PSS签名肯定是首选,但您唯一的选择似乎是恢复到适用于Botan的PKCS1 v1.5兼容签名,或者在Node.js中实现PSS签名。PKCS1 v1.5签名应该仍然是安全的,尽管它们的性能不如PSS签名

签名兼容性似乎仍处于初级阶段。我担心这将是答案,但我不会将其标记为正确,因为我希望有其他方法,Node.js的另一个加密库或某种更高级别的解决方案。我有点害怕自己开始实现加密算法,但也许是时候了。说签名兼容性还处于初级阶段似乎很奇怪,因为PKCS1 v1.5的兼容性可能是100%,并且仍然主要用于SSH、TLS、,等等。只有当您有特殊需要阻止PKCS1 v1.5的安全使用时,签名兼容性才会出现问题。@nak,我的建议是,我找不到PSS填充的兼容实现,这似乎是一条出路。因为你似乎对这个主题很了解;是否有一组重要的加密库正在实现的标准集,允许使用不同的算法写入和验证签名数据结构?ECDSA具有不同的曲线/RSA/其他?@hg。我建议单独问一个问题,因为我绝对不是这方面的专家。然而,最好的办法是查看库的常见用法——这通常意味着大型CA机构支持的SSL证书的所有算法通常都得到很好的支持。RSA+DSA+ECDSAp256是最有可能的。签名兼容性似乎还处于初级阶段。我担心这将是答案,但我不会将其标记为正确,因为我希望有其他方法,Node.js的另一个加密库或某种更高级别的解决方案。我有点害怕自己开始实现加密算法,但也许是时候了。说签名兼容性还处于初级阶段似乎很奇怪,因为PKCS1 v1.5的兼容性可能是100%,并且仍然主要用于SSH、TLS、,等等。只有当您有特殊需要阻止PKCS1 v1.5的安全使用时,签名兼容性才会出现问题。@nak,我的建议是,我找不到PSS填充的兼容实现,这似乎是一条出路。因为你似乎对这个主题很了解;是否存在一个标准集,该标准集是c的重要集
rypto LIB正在实现允许使用不同算法写入和验证签名数据结构?ECDSA具有不同的曲线/RSA/其他?@hg。我建议单独问一个问题,因为我绝对不是这方面的专家。然而,最好的办法是查看库的常见用法——这通常意味着大型CA机构支持的SSL证书的所有算法通常都得到很好的支持。RSA+DSA+ECDSAp256最有可能是它。