在数字签名中,如果数据发生变化,签名是否会改变?

问题描述:

我使用自签名证书签署数据,因为我观察到在签署数据后,在文件中捕获签名,发现签名在数据更改时发生了变化。在目的地验证使用此签名的数据是一项挑战。在数字签名中,如果数据发生变化,签名是否会改变?

问题是验证者将如何验证数据使用不断变化的签名每个实例,想了解。

如果数据更改签名也会每次都改变?

+3

这就是这一点。否则,任何人都可以通过制作副本并将其附加到任何数据来完美地伪造任何签名。 – pvg

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

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

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


如果你想增量更新签名,你可以看看哈希(或Merkle)树。您可以存储Merkle树并仅重新计算已更改的元素的散列值。您也可以从树中添加或删除散列。但是,您仍然必须对得到的最顶端的散列执行私钥操作。

+0

谢谢!获取信息 –