軟件代碼數(shù)字簽名基本原理
在通過(guò)精美的包裝盒銷售軟件的時(shí)代,大家使用防偽標(biāo)志、正版序列號(hào)等識(shí)別方式來(lái)讓用戶知道什么是正版軟件。但在當(dāng)今的網(wǎng)絡(luò)時(shí)代,有利的一面是軟件開發(fā)商可以通過(guò)網(wǎng)絡(luò)不受時(shí)間、地域的限制而快速發(fā)行軟件,但不利的一面,則是用戶無(wú)法辨認(rèn)軟件的真?zhèn)?,無(wú)法確認(rèn)軟件發(fā)行方的真實(shí)身份。在沒(méi)有間諜軟件、病毒程序和木馬程序之前,大家可以不用擔(dān)心某個(gè)軟件到底是不是軟件中聲稱的開發(fā)商開發(fā)的,但是在今天互聯(lián)網(wǎng)的開放性環(huán)境下,使得用戶根本無(wú)法確認(rèn)通過(guò)各大下載站下載的軟件是否真的是由軟件中聲稱的開發(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ò)程中被非法篡改。
軟件開發(fā)商在自己電腦上生成私鑰和證書請(qǐng)求文件(CSR)提交給天威誠(chéng)信,同時(shí)提交有關(guān)身份證明文件(如營(yíng)業(yè)執(zhí)照等)查驗(yàn),驗(yàn)證身份后從天威誠(chéng)信獲得代碼簽名證書的公鑰文件。這樣就完成了證書的申請(qǐng)和頒發(fā)。
軟件開發(fā)商使用代碼簽名工具(如微軟發(fā)型的Signtool.exe和SignCode.exe)給要簽名的代碼生成一個(gè)Hash表,再用其私鑰加密Hash表產(chǎn)生加密的Hash,接著就把加密的Hash連同其公鑰證書與軟件代碼一起打包生成簽名后的新的軟件代碼,軟件開發(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í)的軟件開發(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)代碼簽名后不僅保證了軟件開發(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)代碼簽名證書。