基本介紹
- 中文名:代碼簽名
- 外文名:Code Signing
- 軟體技術:軟體加密技術
- 技術用途:保護開發者權益防止植入代碼病毒
- 學科:密碼學
- 領域:密碼學
定義,功能實現原理,種類,特點,安全保證,使用證書頒發機構,CA的替代品,時間戳,問題,未簽名代碼,展望,
定義
代碼簽名可以提供幾大功能價值。最常用的需求是代碼簽名為部署提供了安全性。在某些程式語言中,它也可用來幫助防止名字空間衝突。幾乎每個代碼簽名的實現都提供某種數字簽名機制來驗證作者或構建系統的身份,以及校驗對象是否未被修改。它也可用來提供對象相關的版本信息,以及存儲對象的其他元數據。
代碼簽名作為軟體安全性依賴的效果取決於所支持簽名密鑰的安全性。與其他公鑰基礎設施(PKI)技術一樣,系統的完整性依賴於發布者對其私鑰免受未經授權訪問的保護。存儲在通用計算機的軟體中的密鑰易於受到影響。因此,將密鑰存儲在安全、防篡改的硬體密碼設備(也稱硬體安全模組,HSM)是更加安全的最佳實踐。
功能實現原理
1. 發布者從CA機構(如VeriSign)申請數字證書;
3. 用戶的運行環境訪問到該軟體包,並檢驗軟體發布者的代碼簽名數字證書的有效性。由於VeriSign根證書的公鑰已經嵌入到用戶的運行環境的可信根證書庫,所以運行環境可驗證發布者代碼簽名數字證書的真實性;
5. 用戶的運行環境使用同樣的算法新產生一個原代碼的哈希值;
6. 用戶的運行環境比較兩個哈希值。如果相同,將發出通知聲明代碼已驗證通過。所以用戶可以相信該代碼確實由證書擁有者發布,並且未經篡改。
整個過程對用戶完全透明,用戶將可以看到軟體發布者提示信息,並可以選擇是否信任該軟體發布者。在選擇信任軟體發布者之後,運行所有該軟體發布者簽名的程式時將可以不再收到任何提示信息。
種類
VeriSign 作為國際頂級的認證機構(CA),支持以下所有產品並且兼容性最好。其中微軟徽標認證證書、微軟移動代碼簽名證書、Brew代碼簽名證書是 VeriSign 專有的產品。其他代碼簽名證書產品則可以有更多的選擇餘地。
(1) 代碼簽名數字 ID(Code Signing Digital IDs): 主要包括:微軟代碼簽名證書 (Microsoft Authenticode Digital ID) :數字簽名 .exe, .dll, .cab, .msi, .ocx, .sys, .cat, .vbs;火狐控制項(FireFox Extension)簽名證書:數字簽名 .xpi; Java 代碼簽名證書 (Sun Java Signing Digital ID) :數字簽名 Sun J2SE/J2EE 的 Java Applet 檔案,以及數字簽名 J2ME MIDlet Suite 檔案,支持業界最多型號和最多品牌的手機。 Office宏代碼簽名證書 (Microsoft® Office and VBA):數字簽名 Office VBA 及宏代碼;Adobe AIR代碼簽名證書 (Adobe® AIR);數字簽名 .AIR 桌面應用程式;Shockwave代碼簽名證書 (Macromedia Shockwave®);數字簽名使用Macromedia® Director® 8 Shockwave Studio創建的應用程式。
(2) 微軟產品徽標認證證書 ("Designed for Windows logo" Digital IDs) :用於數字簽名微軟 Windows Logo 認證的各種軟體、硬體驅動程式等,提交已經簽名的軟體給微軟測試認證,還包括微軟 Windows Hardware Quality Labs (WHQL) testing programs(Windows 硬體質量實驗室測試計畫 ) 認證。用戶在向微軟提交註冊申請前,必須首先獲取一張微軟代碼簽名證書 (Microsoft Authenticode Digital ID)。在獲取微軟代碼簽名證書後,對微軟Windows Logo 認證的各種軟體、硬體驅動程式等進行數字簽名,而後將已簽名的軟體給微軟測試認證。從 Windows Vista開始,微軟在x64位的系統上強制推行數字簽名,沒有經過WHDL和RDS認證並數字簽名的硬體驅動程式將無法在Vista x64版本上成功安裝。在後續的Vista版本上,微軟會逐步加強對數字簽名的要求,最終要求所有的應用程式必須經過簽名才能在Windows系統上運行。對於開發過程中的項目,微軟允許進行TestSign模式的簽名。用戶可以使用工具64Signer實現TestSign簽名,避免把每一個開發中產生的臨時版本的驅動檔案都進行數字簽名的麻煩。
(3) 微軟移動代碼簽名證書 (Authenticated Content Signing for Microsoft Windows Mobile)(簡稱ACS,現已更名為Code Signing Account for Microsoft® Mobile2Market):支持使用微軟 Windows Mobile 的 SmartPhone 和 Pocket PC 的移動終端作業系統的移動套用軟體的非特權簽名和特權簽名,以確保移動下載的軟體代碼在移動終端 ( 如智慧型手機和 PDA) 的安全。
(4) Brew代碼簽名證書 (Authentic Document IDs for BREW) :用於數字簽名高通公司推出的無線二進制運行開發操作環境下的 基於CDMA網路 "無線網際網路發射平台" 上增值業務開發運行的 Brew 代碼。支持高通公司 (Qualcomm)BREW 系統的 BREW 套用代碼的數字簽名,以確保 BREW 檔案的安全套用。
(5) Symbian代碼簽名證書 (Symbian Siged) :用於數字簽名 Symbian S60 作業系統的智慧型手機下的 sis、sisx 格式檔案。
(6) Adobe PDF代碼簽名證書 (True Credentials® for Adobe) :用於數字簽名 Adobe PDF 文檔。
(7) Apple 代碼簽名證書
Code Signing Certificate for Apple
可以讓軟體開發商使用此簽名證書在證書有效期內不限數量的對 Apple作業系統上運行的代碼進行數字簽名。
特點
- 代碼簽名證書可消除 Internet Explorer 以及 Windows 作業系統中彈出的「不明發行商」。
- 完整的時間戳服務包括免費的在你的代碼上蓋上時間戳以保證簽名不會過期。每月簽名次數不超過50次。 可以隨時進行證書更換。
- 短時間之內快速反饋。
- 自證書審核完畢之日起,7 天內無條件退款。
- 一般都會有風險擔保。
- 完善的線上服務電話和電子郵件技術支持。
- 免費證書安裝狀態檢查。
安全保證
許多代碼簽名的實現提供方法來使用涉及一組密鑰的系統來簽名代碼,這類似SSL與SSH的流程。例如,在.NET中,開發人員每次構建之時,都將使用一個私鑰來簽名自己的庫或執行檔。此密鑰唯一且分屬給單個開發人員、小組,或者特定應用程式或實體。開發人員可以自己生成此密鑰,也可以從受信任的數字證書認證機構(CA)獲取一份密鑰。
代碼簽名在分發目的下很有價值,因為所提供代碼的原始碼可能並不明顯,如Java applet、ActiveX控制項或其他類似代碼。它的另一個重要用途是,為現有軟體安全地提供更新和補丁。Windows、Mac OS X和大多數Linux發行版為更新使用代碼簽名,從而確保其他人不可能通過補丁系統分發惡意代碼。它可以使作業系統驗證更新是否合法,即使更新是由第三方或藉助物理介質(如光碟、隨身碟)分發。
在Windows和Mac OS X上,首次運行軟體時將檢查代碼簽名以驗證軟體的身份,確保軟體沒有被第三方分銷商或下載網站惡意篡改。因為平台的分散性,這種代碼簽名形式沒有在Linux上使用,軟體包管理系統是所有軟體形式(不僅僅更新和補丁)的主要發行模式,並且允許直接檢查原始碼的開放原始碼模型(如果需要)。
使用證書頒發機構
用於代碼簽名的公鑰應該可以追溯到受信任的根機構CA,使用安全的公鑰基礎設施(PKI)是最佳做法。這雖不能保證代碼本身的可信,但可以確保它來自所聲明的來源(更明確來說,來自特定私鑰)。一個CA提供者可以提供根級別的信任,並能以代理方式將信任分配給其他人。如果用戶信任一個CA,那么用戶也相信該CA及其代理生成的密鑰所簽名的代碼合法性。許多作業系統和框架都內置對一個或多個現有CA的信任(例如VeriSign/Symantec、DigiCert、TC TrustCenter、Comodo、GoDaddy及GlobalSign等)。對大型組織來說,實現與公共CA功能相同但僅在組織內信任的私有CA也是常見的選擇。
CA的替代品
類似目的的另一種方式是——開發人員可以使用自己生成的密鑰。在此種情況下,用戶首次通常必須直接從開發人員那裡獲取公鑰,以便驗證對象的來源。許多代碼簽名系統將存儲簽名中的公鑰。部分軟體框架和作業系統將在執行前檢查代碼的簽名,並允許用戶選擇是否信任該開發者。應用程式開發者可以在安裝程式中包含公鑰以提供類似的系統。然後可以使用密鑰來確保需要運行的任何後續對象(例如升級、外掛程式或其他應用程式)都是來自同一開發人員。
時間戳
時間戳旨在解決證書過期後開始出現的信任警告。在實際套用中,時間戳將使代碼的信任期延長到證書有效期之後。
如果由於鑒權泄露或失效而必須撤銷證書,則撤銷事件的具體時間將納入撤銷記錄。在這種情況下,時間戳有助於確認代碼是在證書信任受損之前還是之後簽署。
問題
同任何安全措施一樣,代碼簽名也可以被擊破。用戶可能被誘騙而運行無簽名乃至拒絕被驗證的代碼,並且系統只能儘可能保持私鑰的安全性。
同樣重要的是,代碼簽名不會保護最終用戶免受軟體作者的惡意行為或無意破壞,而只是確認軟體未被作者以外的人修改。
未簽名代碼
在諸如遊戲主機等消費者設備語境中,未簽名代碼通常指一個未被通常必須有加密密鑰的應用程式接受和執行的軟體。大多數主機遊戲必須使用主機製造商設計的私鑰簽名,否則遊戲不會在主機上載入。使未簽名代碼被執行通常有幾種方法,包括軟體漏洞、使用modchip、運用交換技巧技術,或者運行一個softmod。
對於有簽名的應用程式複製到另一張DVD上就不能啟動的原因,通常不那么顯而易見。在Xbox上,原因是Xbox執行檔(XBE)包含一個媒體類型標誌,它指定了XBE可引導形式的媒體類型。對幾乎所有Xbox軟體來說,此設定使得執行檔只能從工廠生產的光碟啟動,將執行檔複製到可燒錄媒體上將終止軟體的可執行性。
但是,因為執行檔本已簽名,因此僅更改標記值不可行,那將使執行檔的簽名失效,從而在最初的驗證階段就檢查失敗。