アセンブリへの遅延署名

開発者側が日常的にアクセスしないキーペアを、組織で厳重に保護できます。公開キーは多くのユーザーが使用できることもありますが、秘密キーにアクセスできるユーザーはごくわずかです。厳密な名前付きのアセンブリを開発する場合、厳密な名前付きの対象アセンブリを参照する各アセンブリには、対象アセンブリに厳密な名前を付けるために使用された公開キーのトークンを格納します。そのためには、開発プロセス中に公開キーを使用できる必要があります。

ビルド時に遅延署名または部分署名を使用すると、ポータブル実行可能 (PE) ファイルの領域を厳密な名前の署名のために予約できます。しかし、実際の署名は後の段階 (通常はアセンブリの出荷直前) まで遅れます。

アセンブリに遅延署名する手順の概要を次に示します。

  1. 最終的な署名を行う組織からキー ペアの公開キー部分を取得します。通常、このキーは .snk ファイル形式です。このファイルは、.NET Framework SDK に用意されている厳密名ツール (Sn.exe) を使用して作成できます。

  2. System.Reflection の 2 つのカスタム属性を使用して、アセンブリのソース コードに注釈を付けます。

    • AssemblyKeyFileAttribute は、公開キーを格納するファイルの名前をパラメータとしてコンストラクタに渡します。

    • AssemblyDelaySignAttribute は、遅延署名を使用していることを示すために、true をパラメータとしてコンストラクタに渡します。たとえば、次のようにします。

          <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
          <Assembly:AssemblyDelaySignAttribute(true)>
      
          [assembly:AssemblyKeyFileAttribute("myKey.snk")]
          [assembly:AssemblyDelaySignAttribute(true)]
      
  3. コンパイラは、公開キーをアセンブリ マニフェストに挿入し、PE ファイル内の領域を完全な厳密な名前の署名のために予約します。実際の公開キーはアセンブリのビルド中に格納してください。これにより、このアセンブリを参照するほかのアセンブリが、それぞれのアセンブリ参照に格納するキーを取得できるようになります。

  4. アセンブリには有効な厳密な名前の署名がないため、厳密な名前の署名の検証をオフにする必要があります。検証をオフにするには、厳密名ツールで –Vr オプションを使用します。

    アセンブリ myAssembly.dll の検証をオフにする例を次に示します。

    sn –Vr myAssembly.dll
    

    ヒント

    -Vr オプションは開発時にだけ使用します。検証省略リストにアセンブリを追加すると、セキュリティ上の脆弱性が生じます。悪意のあるアセンブリは、検証省略リストに追加されたアセンブリの完全限定アセンブリ名 (アセンブリ名、バージョン、カルチャ、および公開キー トークン) を使用することによって、その ID を偽装できます。これによって、悪意のあるアセンブリの検証も省略できます。

  5. その後、通常は出荷の直前に、アセンブリを組織の署名機関に送信し、–R オプション付きで厳密名ツールを使用して、実際の厳密な名前の署名を取得します。

    sgKey.snk キー ペアを使用して厳密な名前でアセンブリ myAssembly.dll に署名する例を次に示します。

    sn -R myAssembly.dll sgKey.snk
    

参照

処理手順

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

関連項目

厳密名ツール (Sn.exe)

概念

アセンブリの作成

その他の技術情報

アセンブリを使用したプログラミング