web-dev-qa-db-ja.com

C#:アセンブリに署名する理由

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

  • 前の作者がこの方法でアセンブリに署名したのはなぜですか?
  • アセンブリに署名する必要はありますか?また、署名しないと何が問題になりますか?
  • アセンブリの署名にはどのような欠点がありますか?それは遅延を引き起こしますか?
141
Craig Johnston

前の作者がこの方法でアセンブリに署名したのはなぜですか?

彼は、すべてのアセンブリに同じキーで署名することを望んでいたかもしれません。

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

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

アセンブリの署名にはどのような欠点がありますか?それは遅延を引き起こしますか?

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

175
Darin Dimitrov

[〜#〜] gac [〜#〜] に配置する場合は、アセンブリに署名する必要があります。

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

リチャード・グリムズは 。NET でセキュリティに関する良いワークショップを書いており、これに関する章が含まれています:セキュリティワークショップ

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

33
Hans Olsson

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

17

既存の回答に加えて、DLLがサードパーティソフトウェアによって動的にロードおよび消費されるときの署名をmust useに追加します。それ自体は技術的な要件ではありませんが、サードパーティのソフトウェアプロデューサーがセキュリティ上の懸念によりこのようなポリシーを実施することは合理的であり、したがって非常に一般的です。

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

  • windowsシェル/ Windowsエクスプローラー拡張機能の開発:Windowsエクスプローラーのコンテキストメニュー拡張機能
  • 次のようなVisual Studio拡張機能の開発:プロジェクト/アイテムテンプレートWizard GUI
1
hardyVeles

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

1。バージョン管理

2。認証

a。バージョニングは、dllがどのバージョンでビルドされているかを示し、それらをGACにプッシュしている間、同じ名前の2つのdllが存在できますが、異なるバージョンです

b。認証は、dllが改ざんされておらず、作成時に同じものが存在するかどうかを示します。

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

1
Karthikeyan VK

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

つまり、そのフォルダをコピーして別のPCに入れると機能しません。そのマシンのみにそのアセンブリにサインインしているためです。

0
Ram Kumar