In Digital Signature , if data changes, will signature change?

时间:2017-09-16 11:00:30

标签: java digital-signature self-signed ibm-integration-bus

I am signing the data using self signed certificate as I observed that after signing the data, capturing the signature in a file, noticed the signature has been changing when ever data changes. this is a challenge to verify the data using this signature at destination.

The issue is how the verifier will verify the data using the changing signature every instance, would like to understand.

if data changes the signature will also change everytime?

1 个答案:

答案 0 :(得分:2)

是的,每次数据更改时都必须重新计算签名值。但是,用于验证数据的公钥保持不变。因此,只要您获得数据,签名和相应的可信公钥,您就可以验证数据。

通常签名由加密安全的单向散列和两个相关的非对称变换组成,这些变换依赖于 - 希望 - NP难问题。通过消息计算单向散列;找不到会产生相同哈希值的第二条消息是不可能的。然后使用私钥将该散列值转换为签名,该私钥被编码为多个字节。在接收到数据时,重新计算散列,并使用计算的散列和签名值作为输入,并使用公钥作为输入来调用验证函数。

例如,对于RSA,验证函数只是检索单向散列函数,因此可以比较两者。显然,如果数据不同,这将失败。它应该,否则任何有权访问数据的人都可以在没有签名失效的情况下对其进行更改。

如果要逐步更新签名,可以查看散列(或Merkle)树。您可以存储Merkle树,只重新计算已更改元素的哈希值。您还可以在树中添加或删除哈希值。但是,您仍然必须对生成的最顶层哈希执行私钥操作。