軟件數(shù)字簽名基本原理
在通過精美的包裝盒銷售軟件的時代,大家使用防偽標志、正版序列號等識別方式來讓用戶知道什么是正版軟件。但在當今的網(wǎng)絡時代,有利的一面是軟件開發(fā)商可以通過網(wǎng)絡不受時間、地域的限制而快速發(fā)行軟件,但不利的一面,則是用戶無法辨認軟件的真?zhèn)?,無法確認軟件發(fā)行方的真實身份。在沒有間諜軟件、病毒程序和木馬程序之前,大家可以不用擔心某個軟件到底是不是軟件中聲稱的開發(fā)商開發(fā)的,但是在今天互聯(lián)網(wǎng)的開放性環(huán)境下,使得用戶根本無法確認通過各大下載站下載的軟件是否真的是由軟件中聲稱的開發(fā)商分發(fā)的!如何保證軟件代碼在網(wǎng)絡傳輸過程中不會被非法修改,同時還能讓用戶非常清楚地識別軟件發(fā)行者的真實身份( 軟件真實來源 ),答案就在代碼簽名。
以微軟代碼為例,為了保證微軟 Windows系統(tǒng)的安全和用戶安全,微軟推出了 Microsoft Authenticode 技術(shù),即微軟認證技術(shù),此技術(shù)保證了只有使用了 Windows 的受信任的根證書頒發(fā)機構(gòu)頒發(fā)的代碼簽名證書對軟件代碼數(shù)字簽名之后,才允許在 Windows 上運行,從而保證了軟件代碼來自真實的發(fā)行者并確保軟件代碼沒有在分發(fā)的過程中被非法篡改。
軟件開發(fā)商在自己電腦上生成私鑰和證書請求文件 (CSR) 提交給天威誠信 ,同時提交有關(guān)身份證明文件 ( 如營業(yè)執(zhí)照等 ) 查驗, 驗證身份后從天威誠信獲得代碼簽名證書的公鑰文件。這樣就完成了證書的申請和頒發(fā)。
軟件開發(fā)商使用代碼簽名工具 ( 如微軟發(fā)型的 Signtool.exe 和 SignCode.exe) 給要簽名的代碼生成一個 Hash 表,再用其私鑰加密 Hash 表產(chǎn)生 加密的 Hash,接著就把加密的 Hash 連同其公鑰證書與軟件代碼一起打包生成簽名后的新的軟件代碼,軟件開發(fā)商就可以把已經(jīng)簽名的代碼放到網(wǎng)上發(fā)行了。
最終用戶從網(wǎng)上下載已經(jīng)簽名的代碼時,Windows系統(tǒng)會從簽名代碼中解讀出其簽名證書 ( 公鑰 ) 和 加密的 Hash,然后首先確認簽名證書合法有效且未被證書頒發(fā)機構(gòu)撤回,其次再查找 Windows 系統(tǒng)中受信任的根證書,確認簽名證書是由受信任的根證書簽發(fā)的。最后用簽名時使用的同樣算法對軟件代碼生成一個 Hash 表,并使用公鑰解密簽名時 加密的 Hash 表,比較從代碼中解包出來的 Hash 表與本地重新計算生成的 Hash 表是否一致,如果一致,則表明此代碼在傳輸過程中未有任何修改。驗證簽名證書正確且未被修改之后,就可以確認此代碼確實是來自真實的軟件開發(fā)商了。
從以上整個過程的簡單介紹,可以看出:
(1) 購買代碼簽名證書一定要從 Windows 內(nèi)置的受信任的根證書頒發(fā)機構(gòu)購買 ( 如: Thawte, VeriSign),否則無法通過驗證。而通過人為的添加根證書到 Windows 受信任的根證書存儲區(qū),首先不可能要求所有網(wǎng)上用戶在使用代碼之前先下載和安裝某個根證書,其次如果誰都可以人為添加不受信的根證書就無法保證簽名證書的唯一性和權(quán)威性了。
(2) 代碼簽名后不僅保證了軟件開發(fā)商的真實身份,而且還保證了代碼的完整性,以免代碼被病毒干擾和被非法篡改。
(3) Windows默認設(shè)置下,一些驅(qū)動程序和控件程序只有使用了 Windows 受信任的證書頒發(fā)機構(gòu)頒發(fā)的代碼簽名證書簽名才允許下載和安裝。
(4) 第三方安全防護軟件通常會給予經(jīng)過有效數(shù)字簽名的程序更高的運行權(quán)限,并且能夠給予簽名證書設(shè)置白名單從而避免誤報攔截。
所以,如果您要讓您的代碼能讓用戶放心地下載,就一定要申請代碼簽名證書。
