Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

アセンブリ署名とコードアクセスセキュリティ

厳密名を持つことによるメリットと詳細なアクセス許可の設定

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2006/07/15 00:00

ダウンロード Solution1.zip (46.6 KB)

.NETのアセンブリにはアセンブリ署名という機能が付いています。署名を行うと厳密名を持っている状態になり、さまざまな恩恵を得られます。これは、プログラムによるファイルへのアクセスを制限するコードアクセスセキュリティを利用する上でも役立ちます。本稿では、これらについて解説します。

目次

はじめに

 .NETのアセンブリにはアセンブリ署名という機能が付いています。署名をすることにより厳密名を持っているという状態になり、さまざまな恩恵を得られます。

 本稿では、このアセンブリ署名とコードアクセスセキュリティについて解説していきたいと思います。

対象読者

 .NET(Windows Forms、ASP.NET問わず)での開発をされている方。

必要な環境

 Visual Studio 2005の環境で検証しています。2002/2003では画面などが違いますが、基本的な考え方は同じです。

まずはアセンブリに署名をしてみよう

 署名のやり方は非常に簡単です。まずはプロジェクトのプロパティを見てみましょう。C#とVBでタブが若干違いますが、署名タブの中身は同一です。以降、基本的にC#で解説を行います。

C#の場合
C#の場合
VBの場合
VBの場合

 各プロジェクトのプロパティページにある[アセンブリの署名]をチェックすると、キーファイルを指定するようになっているので、[<新規作成...>]を選択します。

キーファイルを新規作成する
キーファイルを新規作成する

 次に[厳密な名前キーの作成]ダイアログが開きますので、キーファイル名とパスワードを入力します。

厳密な名前キーの作成ダイアログ
厳密な名前キーの作成ダイアログ

 通常キーファイル名には「.pfx」という拡張子を付けるのが一般的となっています。拡張子は自動で付けられますので、拡張子を除いた部分を入力します。

 今回は「codezine」というキーファイル名を付けた上で[OK]を押し、キーファイルを作成しました。

「codezine.pfx」がプロジェクトに追加される
「codezine.pfx」がプロジェクトに追加される

 このようにプロジェクトのアイテムとして「codezine.pfx」が格納されていることが確認できます。

 .NET 1.xの時代にはpfxというパスワードつきの証明書を利用することができませんでした。パスワードの無い証明書ファイルを利用したり、データストアに手動でインストールしたりする必要がありました。

署名をすることによるメリット

 アセンブリ署名を付けることにより、従来のプログラムでは不可能だった、さまざまなメリットを受けることができます。アセンブリ署名のメリットをいくつか見ていきましょう。

メリット1:参照DLLが変わっていないことを証明する

 署名をすることによりどのようなメリットが得られるのでしょうか。

 まず第1に挙げられるのはDLLハイジャックの防止です。DLLを署名している場合に、署名していないDLLに差し替えたりDLLを改変したりしたりすると、次のようなエラーが発生します。

DLLに署名がされていないのでエラーが発生
DLLに署名がされていないのでエラーが発生

 これはDLLなどがハイジャックされないことを示しています。.NETのDLLの場合内部はMSILという中間言語で生成されており、容易に不正なロジックを紛れ込ませることが可能です。

不正なロジックが混入される
不正なロジックが混入される

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 中 博俊(ナカ ヒロトシ)

    大阪でフリーのソフトウェアエンジニア兼テクニカルライターとして日々新技術で楽しんでいる。 MSMVP for C# ブログ:http://blogs.wankuma.com/naka/

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5