根據我對數字簽名的理解,當代碼簽名的exe文件中「簽名者」修改了PE本身。我注意到它將證書內容添加到PE的末尾,並且(顯然)爲頭添加了某種引用。複製數字簽名?
我的問題是:這有多安全?是否有人能夠對可執行文件進行反向工程,從而將其僞造成自己的可執行文件,從而僞造數字簽名?
根據我對數字簽名的理解,當代碼簽名的exe文件中「簽名者」修改了PE本身。我注意到它將證書內容添加到PE的末尾,並且(顯然)爲頭添加了某種引用。複製數字簽名?
我的問題是:這有多安全?是否有人能夠對可執行文件進行反向工程,從而將其僞造成自己的可執行文件,從而僞造數字簽名?
代碼簽名是一種公私密鑰操作。簽名操作計算.exe文件的散列(減去存儲簽名的位),然後使用簽名者的私鑰加密散列。
在客戶端驗證時,客戶端將重做哈希計算,並使用公鑰解密存儲的簽名。如果這兩個哈希匹配,那麼這個EXE沒有被篡改。
該文件的唯一位是加密的簽名 - everythign其他存儲在清除。沒有什麼能阻止你將exe文件拆分並將它(或其中的一部分)塞進另一個.exe。
簽名不是爲了防止盜竊 - 它在那裏檢測到篡改。
在附註中,我注意到,Windows可執行文件中的數字簽名不能阻止任何內容。它看起來只是用來查看可執行文件是否被篡改。我可能是錯的,或者我的設置可能已經以某種方式進行了配置,但是Windows甚至不會拋出一個表明數字簽名無效的錯誤。可以通過查看簽名的詳細信息來查明數字簽名是否有效。我對嗎? – asudhak 2012-08-08 16:54:48
不,因爲數字簽名還包含正在簽名的散列。如果更改內容,則最初使用的散列不匹配。 – vcsjones 2012-08-07 20:13:28
代碼簽名是公鑰/私鑰操作。反向工程的可執行文件不會給你任何東西,除非你也有最初簽署exe的私鑰 – 2012-08-07 20:16:01
@vcsjones:有道理,但如果我能夠控制散列,它真的很重要嗎? – asudhak 2012-08-07 20:17:36