2009-07-26 14 views
1

我正在寫一個安全措施,我正在寫一個應用程序,其中包含一個包含SNK的安全DLL。如果此程序集存在,我檢查獲取它的公鑰時返回的Byte數組,並將其與我的應用程序進行比較。使用簽名的程序集的公鑰作爲安全措施

是否有足夠的安全性來確保某人沒有修改我的程序集或在正確的位置提供了他們自己的DLL來返回公鑰?

我看了一下混淆器做了什麼,他們辭去了我的程序集,但他們實際上是在使用SNK還是他們正在閱讀程序集的內部並重新使用它?

回答

3

如果您保留用於簽署程序集安全的.snk文件,那麼沒有人應該能夠使用相同的公鑰創建新的安全dll。

使用強名稱簽署程序集需要加密密鑰對。該對的私鑰用於簽署程序集。如果有人要修改安全程序集,則需要重新簽名,這需要原始的snk文件。如果使用不同的snk文件,程序集將具有不同的公鑰。

如果要添加對security.dll的引用,運行時將確保在加載它時使用了正確的程序集。如果發現一個程序集具有相同的名稱和版本,但具有不同的強名稱,則會出現錯誤,因爲該框架將按照與最初引用的程序集不同的程序集來分類。

查看MSDN docs瞭解更多信息。

2

所有使用相同SNK簽名的程序集都具有相同的公鑰,因此不,這不是任何身份的安全措施。請記住,強烈命名程序集並不是爲了安全,而是爲了版本控制和確保唯一性。

+2

只要攻擊者能夠訪問你的二進制文件,他們就可以改變它們,並用一個新的密鑰讓它們退出。他們也可以改變你的調用程序集以將它尋找的公鑰轉換爲它們自己的公鑰。 – 2009-07-27 14:03:22