程式碼簽章是將數位簽章應用於軟體二進位檔案或檔案的流程。此數位簽章驗證軟體作者或發行者的身分,並驗證檔案自簽章以來是否未被更改或竄改。程式碼簽章向軟體接收者表明程式碼可以受到信任,而且程式碼簽章在打擊入侵系統或資料的惡意企圖方面發揮著重要作用。
程式碼簽章的使用案例包括內部或外部使用的軟體、修補程式或修正程式、測試、IoT装置產品開發、運算環境和行動應用程式。除了程式碼和軟體之外,程式碼簽章還適用於應用程式、韌體、檔案、訊息、XML、指令碼、容器和圖像。
與其他PKI技術一樣,程式碼簽章涉及公開金鑰/私密金鑰對、憑證授權中心和數位憑證。在發行者對軟體進行簽章時,他們會創建一個限定封裝,其中包含發行者的軟體、程式碼簽章憑證和數位簽章。程式碼簽章憑證包含發行者的身分和公開金鑰,以及CA的簽章,用於確認CA已驗證此身分。數位簽章是使用發行者私密金鑰的軟體的已簽章雜湊。在傳遞軟體時,使用者代理程式將檢查憑證的有效性和完整性(確定自簽章以來軟體是否被更改)。它使用憑證中的公開金鑰來顯示數位簽章中的雜湊。然後,它將數位簽章雜湊與最近運算的軟體雜湊進行比較。如果雜湊匹配,那麼客戶或使用者就得以確認軟體沒有被竄改。私密金鑰管理是程式碼簽章中的一個重要安全要素。如果金鑰被盜或管理不當,那麼網路犯罪分子可以使用金鑰來簽署惡意程式碼,並將其作為更新傳送給開發人員或客戶系統。
Java和Microsoft等主要軟體平台要求程式碼簽章,以防止惡意軟體傳播。對程式碼進行簽章也是安全方面的最佳做法,這樣客戶或使用者就不會下載被竄改的程式碼或來自未知來源的程式碼。它將來自貴組織的程式碼或軟體與被封裝為看似來自貴組織的程式碼區分開來。此外,如果沒有為軟體簽章,那麼軟體被提供給公眾之後,使用者就可能會遇到安全警告標籤。如果程式碼是為內部使用而組建並開發,程式碼簽章可促進劃分權責制和控制。
可以對任何類型的二進位檔案或檔案進行簽章,包括:
• 可從網站下載的軟體應用程式
• 內部的IT應用程式
• 行動應用程式
• XML檔案
• 指令碼
• 軟體圖像
• 容器
• 驅動程式和公用程式
• 韌體
首先,軟體發行者產生一個公開金鑰/私密金鑰對。然後,他們透過向憑證授權中心(CA)提交憑證簽章要求(CSR)及其公開金鑰來獲得程式碼簽章憑證。CA驗證發行者的身分並對憑證要求進行驗證。如果驗證成功,CA將頒發程式碼簽章憑證。憑證包括發行者的身分、公開金鑰和CA的簽章。CA的簽章很重要,因為它作為受信任的第三方證明了憑證持有者的身分。程式碼簽章憑證不僅確認發行者的身分,還確認軟體的完整性。在發行者對軟體進行簽章時,他們會創建一個限定封裝,其中包含軟體、程式碼簽章憑證和數位簽章。
數位簽章還需要以下步驟:
程式碼簽章可以手動進行,或將其作為持續整合/持續傳遞(CI/CD)流程等軟體開發生命週期的一部分來自動執行。