Dot-Net

為開源項目的原始碼控制添加強名稱密鑰是否存在任何安全問題?

  • May 6, 2012

給定一個強名稱密鑰(snk 文件)。將此文件添加到開源項目的原始碼控制是否存在任何安全問題?

簡單的答案是肯定的和否定的——這取決於您首先對程序集進行強名稱簽名的目的。

強名稱簽名的 MSDN 頁面很好地總結了這兩個目的。

強命名為應用程序或組件提供了唯一標識,其他軟體可以使用該標識明確引用它。例如,強命名使應用程序作者和管理員能夠指定要用於共享組件的精確服務版本。這使得不同的應用程序可以指定不同的版本,而不會影響其他應用程序。此外,您可以使用組件的強名稱作為安全證據來建立兩個組件之間的信任關係。

任何公開分發的庫 (DLL) 都應進行強名稱簽名,只要它旨在供最終使用者使用。(即除非它是實現細節等。)

*我所看到的簽名的主要目的往往是出於更多技術原因,包括唯一標識(命名空間有時可能會無意中發生衝突)以及為 GAC 提供程序集。在這種情況下,公開密鑰文件沒有安全隱患,因為一開始就沒有任何打算。不提供信任/來源保證,但唯一標識仍然有效。*MSDN頁面主要討論這個場景;您應該和不應該簽署集會的時間;和周圍的細節。

但是,如果您簽署程序集是為了進行身份驗證——特別是為了向消費者提供程序集來自聲明的來源的保證——那麼公開的(公開分發的)密鑰將完全使此信任模型無效。也就是說,任何人都可以任意修改您的項目程式碼,並正確地重建和退出您的程序集,本質上是偽造您的身份。不幸的是,MSDN 頁面沒有很好地解決這種用法(可能是因為它需要被更廣泛地視為安全策略的一部分),但它仍然很重要。

最後,請注意,CLR/.NET 使用兩種類型的密鑰證書文件對程序集進行簽名。正如您所提到的,第一個是 SNK;這是不受密碼保護的。第二個是 PFX,它實際上只是 SNK 密鑰文件的受密碼保護的版本。只要此密碼足夠安全,使用您的開源軟體分發安全 PFX 就不會出現安全問題。Visual Studio(和命令行密鑰生成實用程序)當然能夠創建兩者。

引用自:https://stackoverflow.com/questions/10474852