アセンブリへの遅延署名
更新 : 2007 年 11 月
開発者側が日常的にアクセスしないキー ペアを、組織で厳重に保護できます。公開キーは多くのユーザーが使用できることもありますが、秘密キーにアクセスできるユーザーはごくわずかです。厳密な名前付きのアセンブリを開発する場合、厳密な名前付きの対象アセンブリを参照する各アセンブリには、対象アセンブリに厳密な名前を付けるために使用された公開キーのトークンを格納します。そのためには、開発プロセス中に公開キーを使用できる必要があります。
ビルド時に遅延署名または部分署名を使用すると、ポータブル実行可能 (PE) ファイルの領域を厳密な名前の署名のために予約できます。しかし、実際の署名は後の段階 (通常はアセンブリの出荷直前) まで遅れます。
アセンブリに遅延署名する手順の概要を次に示します。
最終的な署名を行う組織からキー ペアの公開キー部分を取得します。通常、このキーは .snk ファイル形式です。このファイルは、Windows Software Development Kit (SDK) に用意されている厳密名ツール (Sn.exe) を使用して作成できます。
System.Reflection の 2 つのカスタム属性を使用して、アセンブリのソース コードに注釈を付けます。
AssemblyKeyFileAttribute は、公開キーを格納するファイルの名前をパラメータとしてコンストラクタに渡します。
AssemblyDelaySignAttribute は、遅延署名を使用していることを示すために、true をパラメータとしてコンストラクタに渡します。たとえば、次のようにします。
<Assembly:AssemblyKeyFileAttribute("myKey.snk")> <Assembly:AssemblyDelaySignAttribute(true)>
[assembly:AssemblyKeyFileAttribute("myKey.snk")] [assembly:AssemblyDelaySignAttribute(true)]
コンパイラは、公開キーをアセンブリ マニフェストに挿入し、PE ファイル内の領域を完全な厳密な名前の署名のために予約します。実際の公開キーはアセンブリのビルド中に格納してください。これにより、このアセンブリを参照するほかのアセンブリが、それぞれのアセンブリ参照に格納するキーを取得できるようになります。
アセンブリには有効な厳密な名前の署名がないため、厳密な名前の署名の検証をオフにする必要があります。検証をオフにするには、厳密名ツールで –Vr オプションを使用します。
アセンブリ myAssembly.dll の検証をオフにする例を次に示します。
sn –Vr myAssembly.dll
注意 : -Vr オプションは開発時にだけ使用します。検証省略リストにアセンブリを追加すると、セキュリティ上の脆弱性が生じます。悪意のあるアセンブリは、検証省略リストに追加されたアセンブリの完全限定アセンブリ名 (アセンブリ名、バージョン、カルチャ、および公開キー トークン) を使用することによって、その ID を偽装できます。これによって、悪意のあるアセンブリの検証も省略できます。
その後、通常は出荷の直前に、アセンブリを組織の署名機関に送信し、–R オプション付きで厳密名ツールを使用して、実際の厳密な名前の署名を取得します。
sgKey.snk キー ペアを使用して厳密な名前でアセンブリ myAssembly.dll に署名する例を次に示します。
sn -R myAssembly.dll sgKey.snk