[英]Bouncy Castle : Detached Enveloped Signature Changes at Every Run
为了使评论成为答案...
相同私钥对相同数据的签名可能有所不同的主要原因有两个。
某些签名算法,最重要的是DSA和ECDSA ,将签名创建显式地基于随机选择的值k 。 需要这种“随机性”, 随机签名值 k 的熵,保密性和唯一性 至关重要。 至关重要的是,违反这三个要求中的任何一个都可以向攻击者透露整个私钥。 两次使用相同的值(甚至在保持k秘密的情况下),使用可预测的值或在几个签名的每一个中甚至泄漏k的几位,都足以破坏算法。 可以通过实际随机的k或通过以确定性方式构建的k来满足该要求,这也保证了熵,保密性和唯一性,参见。 RFC 6967 。
但是,OP是指使用RSA的代码。 该算法不需要这样的随机参数(即使填充方案可能包含随机性)。
产生变化的另一个原因是,签名数据不仅仅包含文档数据。
在谈论“签名”时,通常人们不仅指签名过程字节数组输出,而是指根据CMS标准的签名容器。
在这样的容器中可能有多个单独的签名,并且每个签名都可以具有许多未签名或签名的属性。 顾名思义,“签名属性”意味着签名值计算也包括这些属性。
这些签名属性通常包括签名时间。 由于签名时间通常在不同的签名运行中有所不同,因此实际签名值也有所不同。
OP使用CMS签名容器。 因此,最有可能的原因就是OP签名发生变化的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.