厳密な名前付きアセンブリの作成と使用

厳密な名前は、単純テキスト名、バージョン番号、カルチャ情報 (設定されている場合) から成るアセンブリの識別子と、公開キーおよびデジタル署名で構成されます。 厳密な名前は、対応する秘密キーを使用して、アセンブリ ファイルから生成されます。 アセンブリ ファイルは、アセンブリ マニフェストを格納します。アセンブリ マニフェストは、アセンブリを構成するすべてのファイルの名前およびハッシュを格納します。

厳密な名前付きアセンブリのみ、他の厳密な名前付きアセンブリ内の型を参照できます。 それ以外の場合は、厳密な名前付きアセンブリのセキュリティが確保されません。

この概要は、次のセクションで構成されています。

  • 厳密な名前のシナリオ

  • 完全に信頼されているアセンブリの署名検証のバイパス

  • 関連トピック

厳密な名前のシナリオ

厳密な名前でアセンブリに署名してから、その名前を使用してアセンブリを参照するプロセスの概要を、次のシナリオに示します。

  1. 厳密な名前付きのアセンブリ A を、次の方法の 1 つを使用して作成します。

    • Visual Studio 2005 など、厳密な名前の作成をサポートする開発環境を使用します。

    • 厳密名ツール (Sn.exe) を使用して暗号キー ペアを作成し、コマンド ライン コンパイラまたはアセンブリ リンカー (Al.exe) を使用してアセンブリにキーのペアを割り当てます。 Windows Software Development Kit (SDK) には、Sn.exe と Al.exe の両方が用意されています。

  2. 開発環境またはツールが、アセンブリ マニフェストを格納するファイルのハッシュに、開発者の秘密キーで署名します。 このデジタル署名は、アセンブリ A のマニフェストを格納するポータブル実行可能 (PE) ファイルに格納されます。

  3. アセンブリ B はアセンブリ A のコンシューマーです。 アセンブリ B のマニフェストの参照セクションには、アセンブリ A の公開キーを表すトークンが含まれます。 トークンは完全な公開キーの一部であり、領域を節約するためにキー自体の代わりに使用されます。

  4. 共通言語ランタイムは、アセンブリがグローバル アセンブリ キャッシュに配置されるときに、厳密な名前の署名を検証します。 実行時に厳密な名前によってバインドする場合、共通言語ランタイムは、アセンブリ B のマニフェストに格納されたキーと、アセンブリ A の厳密な名前の生成に使用されたキーを比較します。 .NET Framework のセキュリティ チェックに合格してバインドが成功した場合、アセンブリ A のビットは変更がなく、アセンブリ A の開発者が提供したビットと同一であることが、アセンブリ B に対して保証されます。

メモメモ

このシナリオでは、信頼性問題は扱いません。アセンブリは、厳密な名前に加えて、完全な Microsoft Authenticode 署名を持つことができます。Authenticode 署名には、信頼を確立する証明書が含まれます。厳密な名前はこの方法でのコード署名を必要としないことに注意してください。厳密な名前の署名の生成に使用するキーは、Authenticode 署名の生成に使用するキーと同じである必要はありません。

ページのトップへ

完全に信頼されているアセンブリの署名検証のバイパス

.NET Framework Version 3.5 Service Pack 1 以降では、アセンブリが完全信頼のアプリケーション ドメイン (MyComputer ゾーンに既定のアプリケーション ドメインなど) に読み込まれている場合は、厳密な名前の署名の検証が行われなくなりました。 これは、厳密な名前のバイパス機能と呼ばれます。 完全信頼環境での StrongNameIdentityPermission の要求は、そのシグネチャに関係なく、署名された完全信頼アセンブリであれば常に成功します。 厳密な名前のバイパス機能により、このような状況における完全信頼アセンブリの厳密な名前の署名の検証による不要なオーバーヘッドを回避し、アセンブリを高速に読み込むことができます。

バイパス機能は、厳密な名前を使用して署名されたすべてのアセンブリと、次のような特性を持つすべてのアセンブリに適用されます。

  • StrongName 証拠のない (たとえば、MyComputer ゾーンの証拠が付与されている)、完全に信頼されているアセンブリ

  • 完全に信頼されている AppDomain に読み込まれたアセンブリ

  • AppDomainApplicationBase プロパティで指定された場所から読み込まれたアセンブリ

  • 遅延署名されていないアセンブリ

この機能は、アプリケーションごとまたはコンピューターごとに無効にできます。 「方法 : 厳密な名前のバイパス機能を無効にする」を参照してください。

ページのトップへ

関連トピック

タイトル

説明

方法 : 公開キーと秘密キーのキー ペアを作成する

アセンブリに署名するための暗号キー ペアの作成方法を説明します。

方法 : 厳密な名前でアセンブリに署名する

厳密な名前付きアセンブリの作成方法を説明します。

方法 : 厳密な名前のアセンブリを参照する

コンパイル時または実行時に厳密な名前付きアセンブリ内にある型またはリソースを参照する方法を説明します。

方法 : 厳密な名前のバイパス機能を無効にする

厳密な名前の署名の検証をバイパスする機能を無効にする方法を説明します。 この機能は、すべてのアプリケーションまたは特定のアプリケーションで無効にできます。

アセンブリの作成

シングルファイル アセンブリとマルチファイル アセンブリの概要を説明します。

方法 : アセンブリに遅延署名する (Visual Studio)

アセンブリの作成後、厳密な名前でアセンブリに署名する方法について説明します。

Sn.exe (厳密名ツール)

厳密な名前を持つアセンブリを作成するときに役立つ、.NET Framework に含まれるツールについて説明します。 このツールには、キーの管理、署名の生成、署名の検査に関する各オプションが用意されています。

Al.exe (アセンブリ リンカー)

モジュール ファイルまたはリソース ファイルからアセンブリ マニフェストを含むファイルを生成する、.NET Framework に含まれるツールについて説明します。

ページのトップへ