Sn.exe (厳密名ツール)

厳密名ツール (Sn.exe) は、厳密な名前を使用してアセンブリに署名する場合に役立ちます。 Sn.exe には、キーの管理、署名の生成、署名の検査に関する各オプションが用意されています。

警告

セキュリティに関しては、厳格な名前に依存しないでください。 厳格な名前は、一意の ID を提供するだけです。

厳密な名前付けと厳密な名前付きアセンブリについて詳しくは、「厳密な名前付きアセンブリ」 と「方法: 厳密な名前でアセンブリに署名する」 を参照してください。

厳密名ツールは Visual Studio と共に自動的にインストールされます。 ツールを起動するには、Visual Studio 開発者コマンド プロンプトまたは Visual Studio Developer PowerShell を使用します。

Note

64 ビット コンピューターでは、Visual Studio 用開発者コマンド プロンプトを使用して 32 ビット バージョンの Sn.exe を、Visual Studio x64 Win64 コマンド プロンプトを使用して 64 ビット バージョンを実行してください。

コマンド プロンプトに次のように入力します。

構文

sn [-quiet][option [parameter(s)]]

パラメーター

オプション 説明
-a identityKeyPairFile signaturePublicKeyFile AssemblySignatureKeyAttribute データを生成して、ID キーをファイルからの署名キーに移行します。
-ac identityPublicKeyFile identityKeyPairContainer signaturePublicKeyFile AssemblySignatureKeyAttribute データを生成して、ID キーをキー コンテナーからの署名キーに移行します。
-c [csp] 厳密な名前による署名に使用する既定の暗号サービス プロバイダー (CSP: Cryptographic Service Provider) を設定します。 この設定は、コンピューター全体に適用されます。 CSP 名を指定しない場合は、現在の設定がクリアされます。
-d container 指定したキー コンテナーを厳密な名前 CSP から削除します。
-D assembly1 assembly2 2 つのアセンブリの違いが、署名だけかどうかを検査します。 通常は、このオプションは、別のキー ペアを使用してアセンブリに再署名した後のチェック用として使用されます。
-e assembly outfile assembly から公開キーを抽出し、outfile に格納します。
-h このツールのコマンド構文とオプションを表示します。
-i infile container 指定したキー コンテナーに、infile に含まれるキー ペアをインストールします。 キー コンテナーは厳密な名前 CSP 内に常駐します。
-k [keysize] outfile 指定したサイズの新しい RSACryptoServiceProvider キーを生成し、指定したファイルに書き込みます。 公開キーと秘密キーの両方がファイルに書き込みまれます。

キーのサイズを指定しない場合、Microsoft Enhanced Cryptographic Provider をインストールしている場合は既定で 1,024 ビットのキーが生成され、インストールしていない場合は既定で 512 ビットのキーが生成されます。

Microsoft Enhanced Cryptographic Provider をインストールしている場合、keysize パラメーターは、8 ビット間隔で 384 ビットから 16,384 ビットまでの長さのキーをサポートします。 Microsoft Enhanced Cryptographic Provider をインストールしていない場合は、8 ビット間隔で 384 ビットから 512 ビットまでの長さのキーをサポートします。
-m [y or n] キー コンテナーがコンピューターに固有であるか、ユーザーに固有であるかを指定します。 y を指定した場合、キー コンテナーはコンピューターに固有です。 n を指定した場合、キー コンテナーはユーザーに固有です。

y も n も指定しない場合は、現在の設定が表示されます。
-o infile [outfile] infile から公開キーを抽出し、.csv ファイルに格納します。 公開キーの各バイトはコンマで区切られます。 この形式は、ソース コード内で、キーへの参照を初期化済みの配列としてハードコーディングする場合に便利です。 outfile を指定しない場合、出力はクリップボードに保存されます。 注: このオプションでは、入力が公開キーのみであるかどうかの検証は行われません。 infile に秘密キーとのキー ペアが格納されていた場合、秘密キーも抽出されます。
-p infile outfile [hashalg] infile 内のキー ペアから公開キーを抽出し、その公開キーを outfile に格納します。オプションで hashalg で指定された RSA アルゴリズムを使用します。 この公開キーは、アセンブリ リンカー (Al.exe)/delaysign+ オプションと /keyfile オプションを使用して、アセンブリへの署名を遅らせるときに使用できます。 アセンブリの署名を遅らせた場合、コンパイル時には公開キーだけが設定され、後で秘密キーが判明したときに追加される署名用にファイル内の領域が予約されます。
-pc container outfile [hashalg] container 内のキー ペアから公開キーを抽出し、outfile に格納します。 hashalg オプションを使用する場合、RSA アルゴリズムにより公開キーが抽出されます。
-Pb [y or n] 厳密な名前を省略するポリシーが強制されるかどうかを指定します。 y を指定すると、完全に信頼されている AppDomain に完全信頼アセンブリが読み込まれるとき、アセンブリの厳密な名前の検証は行われません。 n を指定した場合は、厳密な名前が正しいかどうかのみ検証されますが、特定の厳密な名前については確認されません。 StrongNameIdentityPermission は、完全に信頼されているアセンブリには効果がありません。 厳密な名前の一致については、独自のチェックを実行する必要があります。

yn も指定しない場合は、現在の設定が表示されます。 既定値は、y です。 注: 64 ビット コンピューターでは、Sn.exe の 32 ビットのインスタンスと 64 ビットのインスタンスの両方にこのパラメーターを設定する必要があります。
-q[uiet] クワイエット モードを指定します。このモードでは、成功メッセージは表示されません。
-R[a] assembly infile 以前に署名したアセンブリ、または署名を遅らせたアセンブリに、infile 内のキー ペアを使用して再署名します。

-Ra を使用すると、アセンブリ内のすべてのファイルについてハッシュが再計算されます。
-Rc[a] assembly container 以前に署名したアセンブリ、または署名を遅らせたアセンブリに、container 内のキー ペアを使用して再署名します。

-Rca を使用すると、アセンブリ内のすべてのファイルについてハッシュが再計算されます。
-Rh assembly アセンブリ内のすべてのファイルについてハッシュを再計算します。
-t[p] infile infile に格納されている公開キーに関するトークンを表示します。 infile には、以前に -p を使用してキー ペア ファイルから生成された公開キーが含まれている必要があります。 -t[p] オプションを使用して、トークンをキー ペア ファイルから直接抽出しないでください。

トークンは、ハッシュ関数によって公開キーから算出されます。 領域を節約するために、共通言語ランタイムは厳密な名前を持つアセンブリへの依存度を記録するときに、別のアセンブリへ参照の一部として公開キー トークンをマニフェスト内に格納します。 -tp オプションを指定すると、トークンの他に公開キーも表示されます。 AssemblySignatureKeyAttribute 属性がアセンブリに適用されている場合、トークンは ID キー用であり、ハッシュ アルゴリズムの名前と ID キーが表示されます。

このオプションはアセンブリ署名を検証しないため、信頼の決定には使用しないでください。 このオプションは、生の公開キー トークン データのみを表示します。
-T[p] assembly assembly に関する公開キー トークンを表示します。assembly には、アセンブリ マニフェストを含むファイルの名前を指定する必要があります。

トークンは、ハッシュ関数によって公開キーから算出されます。 領域を節約するために、共通言語ランタイムは厳密な名前を持つアセンブリへの依存度を記録するときに、別のアセンブリへ参照の一部として公開キー トークンをマニフェスト内に格納します。 -Tp オプションを指定すると、トークンの他に公開キーも表示されます。 AssemblySignatureKeyAttribute 属性がアセンブリに適用されている場合、トークンは ID キー用であり、ハッシュ アルゴリズムの名前と ID キーが表示されます。

このオプションはアセンブリ署名を検証しないため、信頼の決定には使用しないでください。 このオプションは、生の公開キー トークン データのみを表示します。
-TS assembly infile 入力ファイル内のキー ペアを使い、完全または不完全に署名されたアセンブリをテスト署名します。
-TSc assembly container キー コンテナー コンテナー 内のキー ペアを使い、完全または不完全に署名されたアセンブリをテスト署名します。
-v assembly assembly 内の厳密な名前を検査します。ここで、assembly はアセンブリ マニフェストを含むファイルの名前です。
-vf assembly assembly 内の厳密な名前を検査します。-v オプションとは異なり、-vf では -Vr オプションで無効化した場合であっても、検査を強制的に実行します。
-Vk regfile.reg assembly [userlist] [infile] 指定したアセンブリを登録して検証をスキップするために使用できる登録エントリ (.reg) ファイルを作成します。 -Vr オプションに適用されるアセンブリ名前付け規則が -Vk オプションにも適用されます。 userlist オプションと infile オプションについては、 -Vr オプションを参照してください。
-Vl コンピューター上の厳密な名前検査に関する、現在の設定を一覧表示します。
-Vr assembly [userlist] [infile] 検査をスキップする assembly を登録します。 必要に応じて、検証の省略を適用する必要があるコンマで区切られたユーザー名のリストを指定できます。 infile を指定した場合、検査は実行されますが、検査時には infile 内の公開キーが使用されます。 指定した厳密な名前を持つアセンブリをすべて登録するには、*, strongname という形式で assembly を指定します。 strongname は、トークン化した形式の公開キーを表す 16 進形式の文字列として指定します。 公開キー トークンの表示については、 -t オプションと -T オプションを参照してください。 注意: このオプションは開発時だけ使用します。 検証省略リストにアセンブリを追加すると、セキュリティ上の脆弱性が生じます。 悪意のあるアセンブリは、検証省略リストに追加されたアセンブリの完全限定アセンブリ名 (アセンブリ名、バージョン、カルチャ、および公開キー トークン) を使用することによって、その ID を偽装できます。 これによって、悪意のあるアセンブリの検証も省略できます。
-Vu assembly 検査をスキップする assembly の登録を解除します。 -Vr オプションに適用される規則と同じアセンブリ名前付け規則が -Vu オプションにも適用されます。
-Vx 検査をスキップするエントリをすべて削除します。
-? このツールのコマンド構文とオプションを表示します。

Note

Sn.exe の全オプションでは大文字と小文字が区別されます。また、オプションが正しく認識されるためには、表記されたとおりに正確に入力する必要があります。

Remarks

-R オプションと -Rc オプションは、署名を遅らせたアセンブリを処理する場合に便利です。 その場合、コンパイル時には公開キーだけが設定され、後で秘密キーが判明したときに署名が実行されます。

Note

レジストリなどの保護されたリソースに書き込むパラメーター (例: -Vr) の場合は、管理者として SN.exe を実行してください。

厳密な名前ツールでは、公開キーと秘密キーの組が AT_SIGNATURE アルゴリズム識別子を使用して生成されると想定されます。 AT_KEYEXCHANGE アルゴリズムを使用して生成された公開キー/秘密キーのペアでは、エラーが生成されます。

使用例

新しいランダム キー ペアを作成し、keyPair.snk に格納するコマンドを次に示します。

sn -k keyPair.snk

厳密な名前 CSP 内のコンテナー keyPair.snk 内の MyContainer にキーを格納するコマンドを次に示します。

sn -i keyPair.snk MyContainer

keyPair.snk から公開キーを抽出し、publicKey.snk に格納するコマンドを次に示します。

sn -p keyPair.snk publicKey.snk

公開キーおよび publicKey.snk に含まれている公開キーのトークンを表示するコマンドを次に示します。

sn -tp publicKey.snk

アセンブリ MyAsm.dll を検査するコマンドを次に示します。

sn -v MyAsm.dll

既定の CSP から MyContainer を削除するコマンドを次に示します。

sn -d MyContainer

関連項目