2017-09-16 84 views
1

我使用自簽名證書籤署數據,因爲我觀察到在簽署數據後,在文件中捕獲簽名,發現簽名在數據更改時發生了變化。在目的地驗證使用此簽名的數據是一項挑戰。在數字簽名中,如果數據發生變化,簽名是否會改變?

問題是驗證者將如何驗證數據使用不斷變化的簽名每個實例,想了解。

如果數據更改簽名也會每次都改變?

+3

這就是這一點。否則,任何人都可以通過製作副本並將其附加到任何數據來完美地僞造任何簽名。 – pvg

回答

2

是的,每次數據更改時都必須重新計算簽名值。但是,用於驗證數據的公鑰保持不變。所以只要你有數據,一個簽名和一個相應的,可信的公鑰,你就可以驗證數據。

通常一個簽名由一個密碼安全的單向散列和兩個相關的非對稱變換組成,這個變換依賴於 - 希望 - NP難題。通過消息計算單向散列值;找到將產生相同散列值的第二條消息是不可能的。然後,使用私鑰將該散列值轉換爲簽名,並將其編碼爲多個字節。在接收到數據後,重新計算散列,並且使用計算出的散列和簽名值作爲輸入並使用公鑰作爲輸入來調用驗證函數。

例如,對於RSA,驗證函數只是檢索單向散列函數,因此可以比較兩者。如果數據不同,顯然這會失敗。它應該,否則任何有權訪問數據的人都可以更改它,而不會使簽名失效。


如果你想增量更新簽名,你可以看看哈希(或Merkle)樹。您可以存儲Merkle樹並僅重新計算已更改的元素的散列值。您也可以從樹中添加或刪除散列。但是,您仍然必須對得到的最頂端的散列執行私鑰操作。

+0

謝謝!獲取信息 –