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