簡體   English   中英

使用.snk的私鑰對任意數據進行簽名

[英]Using .snk's private key to sign arbitrary data

我正在開發.NET 軟件包管理器 ,讓我思考的一件事是安全性。

鑒於任何人都可以將程序集上載到資源庫,我如何驗證該程序集來自受信任的來源? 例如,如果使用NHForge的私鑰對NHibernate.dll進行簽名,我會更加信任。 為了確保這一點,我要做的就是用NHForges的公鑰驗證程序集簽名。

現在,牢記這一點,一個人如何建立這種關系(這個特定的公鑰屬於這個特定的人)? 我提出的想法如下:

  • 項目作者創建一個XML文件,其中包含有關項目和作者的信息(姓名,電子郵件等)
  • 該XML文件使用從.snk文件提取的作者私鑰進行簽名,該私鑰隨后用於對程序集本身進行簽名。
  • 作者將此簽名的XML文件上傳到存儲庫,在該存儲庫中檢查該文件並建立作者與公共密鑰之間的關系。

要實現這一點(這是一個可行的主意,順便說一句嗎?),我需要一種編程方式來訪問.snk文件並讀取PK。 .NET中是否有此功能?

首先,強大的名字應該被用來作為一種安全機制,他們只是打算用來作為一個組件身份的機制。 對於這樣的事情,我將研究Authenticode,它是專為驗證程序集的發布者/源(即安全性而不只是身份)而設計的。

話雖如此,您概述的想法實際上是不可行的,因為您不能對XML文件進行強名稱簽名-強名稱簽名僅適用於.NET程序集。 從理論上講,您可以做的是維護每個公鑰到特定發布者的某種映射(也許通過發布者注冊過程或其他方式?),然后在將程序集的強名稱簽名添加到存儲庫之前對其進行驗證。

至於技術方面,您可以通過StrongNameGetPublicKey函數(這是非托管強命名API的一部分)從.snk文件中提取公鑰。 不過,您必須自己將.snk文件加載到內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM