ユーザ用ツール

サイト用ツール


サイドバー

C++/CLI

CLR

実用編

その他

clr:strong_name

Strong Name

Strong Name(SN)はアセンブリの一意性と信頼性を保証する仕組みです。

Win32のライブラリabc.dllを配布する場合に、このファイルをそのまま配布したとすると、使う側はLoadLibraryなどを使って実行します。この場合abc.dllが本物のdllである保証はありません。他の人が作った物である可能性もあります。

COMを使ってabc.dllを配布する場合、インストールプロセスに於いて、abc.dllのRegsterServerを実行し、 abc.dllがもつGUIDをレジストリに登録します。使う側はCoCreateInstanceなどを使ってそのGUIDを指定し利用します。しかしそのGUIDはオープンであって他の人が同じGUIDを使ってそのライブラリに偽装することを防ぐことはできません。

SNは上記の問題を解決するためのしくみです。abc.dllのハッシュを秘密鍵で暗号化し、abc.dllの内部に公開鍵と電子署名(暗号化したハッシュ)を持たせます。そしてabc.dllを使うアプリapp.exeをビルドする際、abc.dllから公開鍵と得てその情報を app.exeに埋め込みます。実行時にabc.dllのハッシュを計算したものと電子署名を公開鍵で復号したものが一致するか確認します。

VC2005でアセンブリにStrong Nameを施す

Strong Nameを施すためにはまずキーファイルを作成しなければなりません。このファイルに秘密鍵と公開鍵が格納されています。キーファイルの作成は以下の方法で行います。

  1. スタートメニューから「Visual Studio 2005 コマンド プロンプト」を開く
  2. コマンドプロンプトで“sn -k MyKey.key”を入力するとMyKey.keyが作成されます。このファイルをプロジェクトフォルダに置きます。
  3. VC2005を開き、プロジェクトのプロパティを開きます。その中のリンクノード下の詳細ノードを開きます。その中の「キーファイル」に先ほど作成したファイルを指定します。

これでリンクすると、Strong Nameのついたアセンブリができます。

その他

  • Strong NameのついたアセンブリはStrong Nameのついたアセンブリしか参照できません。
  • Strong NameのついたアセンブリはGACとよばれるシステム共通アセンブリにすることができます。
  • GACにはside-by-side技術を使って異なるヴァージョンのアセンブリを置くことができます。



/var/www/html/virtual/cppcli/data/pages/clr/strong_name.txt · 最終更新: 2014/11/30 17:32 by admin