摘要:通過分析,Net中強命名和AuthentiCode技術的使用,說明利用數字簽名技術可以有效地解決,Net程序集中版本控制、身份驗證、完整性驗證等問題,從而提高了,Net程序集并行執行的能力和安全性。
關鍵詞: 強命名 AuthentiCode 數字簽名 程序集
中圖分類號:TP309.7
文獻標識碼: A 文章編號:1002-2422(2007)06-0057-02
1 強命名
強命名是開發者利用私鑰對程序集文件進行數字簽名而得到的。通過強命名確保了程序集的唯一性標識,并行的執行方式和一定條件下的身份驗證、完整性驗證。
1.1 版本控制
版本控制解決了著名的“DLL Hell”問題。“DLL Hell”是Windows管理共享庫資源時遇到的一個難題。
強命名通過為所有的程序集提供全球唯一標識來徹底解決這一問題。強命名結合了程序集本身的名字、版本、文化和唯一的公鑰,只要其中任一不同,就不會發生名稱沖突。由于公鑰長達1024位,基本上沒有相同的可能,因此不存在名稱沖突的可能性。強命名提供了Side-bv-side執行的能力,即允許某一程序集的多個版本運行在同一臺計算機上,甚至同一進程內。這種并行執行的能力使程序在兼容以前的版本方面更靈活。因此,Net運行時(CLR)可以加載某一強命名程序集的多個版本。強命名程序集可以放在文件系統的一個特定的子目錄樹中,即全局程序集緩沖區(GAC),讓所有的程序共用;也可以不放入GAC中,僅供某個程序使用,但沒有強命名的程序集不能被放進GAC中,也無法實現版本控制。
1.2 身份驗證
.Net根據它所具有的程序集信息,把程序集劃分為具有相似特征的代碼組,再把權限集賦予代碼組,實現代碼訪問控制。利用,Net的配置工具可以很容易地根據強命名的公鑰建立新的代碼組和進行授權。CLR在加載程序集時就可以根據其強命名的公鑰是否滿足某一代碼組的成員條件劃分其歸屬。具有相同強命名公鑰的程序集就可被劃分到一組,達到為程序集授予更高級別權限的目的。
1.3 完整性驗證
.Net運行時負責把程序集裝入內存,然后綁定到應用程序域上。運行時必須確保程序集的內容自生成后沒有被篡改,即程序集的完整性必需得到保證,這是通過驗證強命名簽名來實現的。強命名簽名是利用程序集所有者的私鑰對整個程序集(包括元數據、代碼和資源)的摘要進行簽名,這個簽名被附加在程序集上,并且能通過包含于程序集元數據中對應的公鑰進行驗證。當運行時載入強命名程序集時它會驗證其簽名以決定是否加載,但對于在GAC中的程序集例外,運行時加載它們并不作驗證,這是因為強命名程序集在放入GAC時已經作了驗證。
1.4 強命名的局限性
在進行身份驗證時,基于強命名的證據假設所有各方在識別特定開發組織時都能認識公鑰,不認識的公鑰沒有辦法通過算法來辨別公鑰所有者的身份。也就是說,強命名的公鑰和擁有者的真實身份并沒有對應關系,知道了公鑰并不一定能確定公鑰擁有者的身份。因此強命名的身份驗證功能只有在對公鑰擁有者的身份非常確定時身份驗證才真正有效。