C#:なぜアセンブリに署名するのですか?


146

私が引き継いだいくつかのC#コード(Visual Studio 2005)では、アセンブリがすべて同じ.snkファイルで署名されていることに気付きました。

  • なぜ前の著者はこのように議会に署名したのでしょうか?
  • アセンブリに署名する必要はありますか?署名しないと何が問題になりますか?
  • アセンブリの署名にはどのような欠点がありますか?遅延の原因になりますか?

回答:


186

なぜ前の著者はこのように議会に署名したのでしょうか?

わからない、多分彼はすべてのアセンブリに同じ鍵で署名したかったのかもしれない。

アセンブリに署名する必要はありますか?アセンブリに署名しないと何が問題になりますか?

いいえ、必要ありませんが、アセンブリの信頼性を保証できるメカニズムです。これにより、アセンブリが改ざんされていないことを確認できます。実際、この作成者が作成したものです。それらをGACに配置する場合にも必要です。

アセンブリの署名にはどのような欠点がありますか?遅延の原因になりますか?

署名されたアセンブリは、他の署名されたアセンブリのみを読み込むことができます。また、特定のバージョンに関連付けられているため、別のバージョンを使用する場合は、バインディングリダイレクトを使用するか、アプリケーションを再コンパイルする必要があります。署名の検証のため、パフォーマンスのオーバーヘッドも少しありますが、気にする必要がないほど小さいです。


2
署名の検証は、GACに配置されると(.NET 2.0以降)実行されなくなることに注意してください。GACに追加するときに一度だけ発生します。
2016年

1
最近の署名についてどう思いますか?Webベースのシステムでは?私が正しければ、それはインストールされたソフトウェアについて話すときにだけ必要でしたよね?TFSを使用してアプリをAzureに公開すると、改ざんされていないことがわかりますか?または、セキュリティの一部が欠けていますか?
リックウルフ2017年

最初の質問:彼はアセンブリ署名キーファイルを持つプロジェクトからプロジェクトテンプレートを作成し、そのプロジェクトテンプレートを使用して別のものを作成し、キーファイルを置き換えるのを忘れました。(「彼」を「私」に置き換えれば、今朝私が何をしていたかわかるでしょう:))。それで、それは偶然です。
hardyVeles

33

アセンブリをGACに配置する場合は、アセンブリに署名する必要があります。

実行可能ファイルに署名する場合、リンク先のクラスライブラリも署名する必要があります。サードパーティのライブラリを使用している場合(特に、ActiveXコントロールなどを使用する必要がある場合)、これは難しい場合があります。

Richard Grimesが.NETのセキュリティに関する優れたワークショップを書いており、これには次の章が含まれていますSecurity Workshop

すべてのアセンブリが同じ.snkファイルで署名されている理由は、コードカバレッジを使用したユニットテストを使用した場合です。コードカバレッジを実行できるようにするには(少なくともVisual Studio 2005のテストバージョンに組み込まれているツールを使用して)、アセンブリが署名されている場合、署名に使用される.snkファイルを指定する必要がありますが、ソリューション全体に対して1つの.snkファイルを指定するので、さまざまな.snkファイルでさまざまなクラスライブラリに署名する場合、一度に1つの.snkファイルのコードカバレッジのみをチェックできます。


17

アセンブリに署名する非常に重要な理由は、アセンブリであることを確認できるようにするためです。秘密キーはあなたのものなので、他の誰も同じキーでアセンブリに署名することはできません。これは、アセンブリの公開キーが既知のものである場合(GetType().Assembly.GetName().GetPublicKey()関数を使用してこれを取得できる)、アセンブリはあなたのものであり、改ざんされていないことを意味します。


1

署名dllのすべての使用方法にもかかわらず、dllは2つの理由でのみ署名されるべきです

1.バージョン管理

2.認証

a。バージョン管理は、dllがビルドされているバージョンを示し、GACにそれらをプッシュしている間、同じ名前の2つのdllが存在する可能性がありますが、バージョンが異なります

b。認証は、dllが改ざんされていないかどうかを示し、作成時と同じように存在します。

基本とdll署名について詳しく知りたい場合は、ここを参照してください。


1
最近の署名についてどう思いますか?Webベースのシステムでは?私が正しければ、それはインストールされたソフトウェアについて話すときにだけ必要でしたよね?TFSを使用してアプリをAzureに公開すると、改ざんされていないことがわかりますか?または、セキュリティの一部が欠けていますか?
リックウルフ2017年

1
今日、dllに署名する必要がある理由がわかりません。これは、紺碧のPaasソリューションとして展開されます。しかし、iaasソリューションを使用している場合は、同じIIS内のWebアプリケーションでDLLを再利用する可能性があります。私はお勧めしません。GAC(マイクロサービスアーキテクチャ)のDLLを使用するのではなく、APIのURLを介してそれらを呼び出す必要があります。
Karthikeyan VK 2017年

1

既存の回答に加えて、DLLがサードパーティのソフトウェアによって動的に読み込まれて使用される場合、署名を使用する必要があることを付け加えます。それ自体は技術的な要件ではありませんが、サードパーティのソフトウェアプロデューサーがセキュリティ上の懸念によりこのようなポリシーを適用することは合理的であり、非常に一般的です。

アセンブリに署名する必要がある例:

  • Windows Shell / Windows Explorer拡張機能の開発、例:Windows Explorerのコンテキストメニュー拡張機能
  • Visual Studio拡張機能の開発:プロジェクト/アイテムテンプレートウィザードGUI

0

署名とアセンブリは重要です。そのPCのみにインストールされているexeまたはアセンブリを確認するため。

つまり、そのフォルダをコピーして別のPCに置くと、機能しません。それはその機械にのみそのアセンブリをサインインしているからです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.