(57)【要約】【課題】  データの改竄を検出することができる計算機システム並びにデータ改竄検出方法を提供することを目的としている。【解決手段】  外部から事前に予測困難な値と、同一の文字列が得られるような異なる二つの元データを探すことが不可能である一方向性の関数とを用いて鍵を生成する鍵生成手段と、仮想記憶装置に読み込まれて実行されているソフトウエアの実行コード部分から、鍵を用いて、固定長の文字列からなるソフトウエア実行コード文字列を生成するソフトウエア実行コード文字列生成手段と、正規ソフトウエアの実行コード部分から、鍵を用いて、固定長の文字列からなる検証用文字列を生成する検証用文字列生成手段と、ソフトウエア実行コード文字列と前記検証用文字列とに基づいて、データの改竄の有無を判定する判断手段とを計算機システムに備えることで達成される。【選択図】  図1
2005182509.tif 000002
【特許請求の範囲】
【請求項１】
複数種類の記憶装置から構成される仮想記憶装置を備えた計算機システムにおいて：
外部から事前に予測困難な値と、同一の文字列が得られるような異なる二つの元データを探すことが不可能である一方向性の関数とを用いて鍵を生成する鍵生成手段；
前記仮想記憶装置に読み込まれて実行されているソフトウエアの実行コード部分から、前記鍵を用いて、固定長の文字列からなるソフトウエア実行コード文字列を生成するソフトウエア実行コード文字列生成手段；
正規ソフトウエアの実行コード部分から、前記鍵を用いて、固定長の文字列からなる検証用文字列を生成する検証用文字列生成手段；
前記ソフトウエア実行コード文字列と前記検証用文字列とに基づいて、データの改竄の有無を判定する判断手段；
を備えることを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムにおいて：
前記ソフトウエア実行コード文字列を生成する処理時間を測定する処理時間測定手段；
を備え、
前記判断手段は、前記処理時間に基づいて、データの改竄の有無を判定することを特徴とする計算機システム。
【請求項３】
請求項１又は２に記載の計算機システムにおいて：
前記ソフトウエア実行コード文字列生成手段及び前記検証用文字列生成手段は、前記仮想記憶装置の総記憶容量を使用し演算処理を行うことを特徴とする計算機システム。
【請求項４】
複数種類の記憶装置から構成される仮想記憶装置を備えた検証対象計算機システムのデータ改竄を検出する計算機システムにおいて：
外部から事前に予測困難な値と、同一の文字列が得られるような異なる二つの元データを探すことが不可能である一方向性の関数とを用いて鍵を生成する鍵生成手段；
正規ソフトウエアの実行コード部分から、前記鍵を用いて、固定長の文字列からなる検証用文字列を生成する検証用文字列生成手段；
前記検証対象計算機システムから送信され、前記仮想記憶装置に読み込まれて実行されているソフトウエアの実行コード部分から、前記鍵を用いて生成された固定長の文字列からなるソフトウエア実行コード文字列と前記検証用文字列とに基づいて、データの改竄の有無を判定する判断手段；
を備えることを特徴とする計算機システム。
【請求項５】
複数種類の記憶装置から構成される仮想記憶装置を備えた計算機システムにおけるデータ改竄検出方法において：
外部から事前に予測困難な値と、同一の文字列が得られるような異なる二つの元データを探すことが不可能である一方向性の関数とを用いて鍵を生成するステップ；
前記仮想記憶装置に読み込まれて実行されているソフトウエアの実行コード部分から、前記鍵を用いて、固定長の文字列からなるソフトウエア実行コード文字列を生成するステップ；
正規ソフトウエアの実行コード部分から、前記鍵を用いて、固定長の文字列からなる検証用文字列を生成するステップ；
前記ソフトウエア実行コード文字列と前記検証用文字列とに基づいて、データの改竄の有無を判定するステップ；
を有することを特徴とするデータ改竄検出方法。
【請求項６】
請求項５に記載のデータ改竄方法において：
前記ソフトウエア実行コード文字列を生成する処理時間を測定するステップ；
前記処理時間に基づいて、データの改竄の有無を判定するステップ；
を有することを特徴とするデータ改竄検出方法。
【請求項７】
請求項５又は６に記載のデータ改竄検出方法において：
前記ソフトウエア実行コード文字列を生成するステップ及び前記検証用文字列を生成するステップは、前記仮想記憶装置の総記憶容量を使用し、演算処理を行うステップであることを特徴とするデータ改竄検出方法。
【請求項８】
複数種類の記憶装置から構成される仮想記憶装置を備えた検証対象計算機システムのデータ改竄を検出する検証実施計算機システムにおけるデータ改竄検出方法において：
外部から事前に予測困難な値と、同一の文字列が得られるような異なる二つの元データを探すことが不可能である一方向性の関数とを用いて鍵を生成するステップ；
正規ソフトウエアの実行コード部分から、前記鍵を用いて、固定長の文字列からなる検証用文字列を生成するステップ；
前記検証対象計算機システムから送信され、前記仮想記憶装置に読み込まれて実行されているソフトウエアの実行コード部分から、前記鍵を用いて生成された固定長の文字列からなるソフトウエア実行コード文字列と前記検証用文字列とに基づいて、データの改竄の有無を判定するステップ；
を有することを特徴とするデータ改竄検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機を司るオペレーティングシステムを攻撃者にとって好ましい性質を持ったものに置換することにより、当該計算機を利用するユーザに対して任意の攻撃を仕掛けることを可能にするという、いわゆる“ＯＳ置換攻撃”が行われたことの検出を可能とする計算機システム及びデータ改竄検出方法に関する。
【背景技術】
【０００２】
オペレーティングシステム(Operating System : OS)は、それが動作する計算機に関してあらゆる操作を行うことが可能ないわば全能の支配者と言える。そのため、ＯＳ置換攻撃によりオペレーティングシステムそのものが悪意を持ったものに置換されてしまうと、その計算機及び当該計算機上で稼動するすべてのプログラムに対して任意の行為をなし得ることとなる。そのような攻撃が電子商取引を行うためのサーバー計算機等に仕掛けられた場合は大きな被害に繋がることは明らかである。
【０００３】
近代的なオペレーティングシステムの発明以来、この分野は急速な進歩を遂げて来たという事情もあって、現在利用されているオペレーティングシステムは極度に複雑な存在となっている。このため、そのようなシステムを改造して攻撃者にとって好ましい性質を持つようなシステムを実現することは困難でありＯＳ置換攻撃は現実的な脅成ではあり得ないという議論もある。
【０００４】
しかし、近年、オープンソフトウエア文化の興隆の結果として、Linux等の誰でもソースコードを手に入れることが可能なオペレーティングシステムが普及しつつある現在では、攻撃者にとってもオープンであるソフトウエアに対して、ソースコードレベルでの改造を行うことにより好ましい性質を持つように改造したオペレーティングシステムを作成することは、以前よりも容易になったとも考えられる。このことから、本格的なＯＳ置換攻撃の危険性は逆に高まっていると判断することもできる。
【０００５】
本来のデータが、書き換えられたものではないことを確認するための手段としては、（１）対衝突一致属性を持った一方向ハッシュ関数を用いる手段、（２）公開鍵暗号技術に基づくデジタル署名を用いる手段、等が一般的である。
【０００６】
しかし、ＯＳ置換攻撃に対してそれらの技術を単純に適用しようとしても、一方向ハッシュ関数計算もしくはデジタル署名検証を行う対象が悪意を持ったＯＳであるならば、一貫性を持つように結果を捏造することは容易である。このため、これらの手段は有効ではない。
【０００７】
このようなＯＳ置換攻撃に対抗する従来技術としては、以下の技術が挙げられる。
【０００８】
１．置換することができないように、ROM(Read Only Memory)のように上書きを行うことができないデバイスに実行オブジェクトを置く技術
２．実行オブジェクトが本来のものであり置換されていないことを検出する仕組みを導入する技術
しかし、一般的に数MB(Mega Bit)程度のサイズを持ち、かつ、セキュリティ修正等に基づく更新頻度も小さくはないＯＳカーネルをROMという容量が小さく、書き換えのできない媒体に格納するというのは常に採用できる手法ではない。そのため、１の方法で実現されているシステムは多くはない。
【０００９】
一方、２の方法で問題を解決しようと試みているシステムの代表例は  TCPA (Trusted Computing Platform Alliance)である。TCPAは、TPM  (Trusted Platform Module)と呼ばれる耐タンパー性を備えたハードウェアモジュールを利用することを特徴としている（例えば、非特許文献１参照）。
【００１０】
一般の計算機システムでは、立ち上げ時に（１）BIOS(Basic Input/Output System)ブートブロックの実行→（２）ブートローダーの起動→（３）ＯＳの選択（オプショナルであり、一般には特定のオペレーティングシステムが常に選択される）→（４）ＯＳの起動→（５）システム状態の検査→（６）各種初期サービスプロセス（デーモン）群の起動→（７）ユーザログイン画面の表示、という流れで処理が行われる。
【００１１】
TCPAでは、それぞれの段階でブートローダーやＯＳ等の実行オブジェクトを実際に動作させる前に、それらの実行オブジェクトのファイルイメージが損なわれていないことを検証する。このようにすることにより、前述したようなＯＳ置換攻撃が適用されているか否かを判定する。
【００１２】
具体的には、各実行オブジェクトのファイルイメージに対して一方向ハッシュ関数を適用した結果得られるハッシュ値と、あらかじめ安全に保管されている『期待される値』との比較が行なわれる。
【００１３】
一方向ハッシュ関数は、同一のハッシュ値が得られるような異なる二つの元データを探すことが事実上不可能となるように設計された関数である。従って、異なる内容を持つ二つのファイルから同じハッシュ値を得ることは、同じく事実上あり得ないとみなすことができる。このため、実際に計算したハッシュ値が『期待される値』と等しい場合には非常に高い確率で改竄は行なわれていないということが保証できる。
【００１４】
また、TCPAでは上記の『期待される値』を、耐タンパー性を備えるTPMに格納しておくことで、期待される値そのものを含めて辻褄の合うような形で改竄を施されることを防いでいる。
【００１５】
また、実際に計算で求めたハッシュ値に関しても同じくTPM中の特定領域に格納しておくことで、各時点でのシステムの状態が安全なものであるか否かを判断することが可能なように配慮されている。
【００１６】
以上概要を説明した手法を用いることで、TCPAはＯＳ及びその他の実行オブジェクトが改竄されていないことを当該オブジェクトの動作以前に判定し、改竄行為が検出された場合には利用者に向けて適切な対処を行うよう求めることが可能となっている。
【非特許文献１】Compaq Computer Corporation, Hewlett-Packard Company, IBM Corporation, Intel Corporation, Microsoft Corporation、「Trusted Computing Platform Alliance(TCPA)Main Specification Version 1.1b」、[online]、22  February  2002、インターネット、<URL:http://www. trustedcomputing.org/docs/main%20v1_1b.pdf>
【非特許文献２】「tripwire」、[online] 、インターネット、<URL:http://www.tripwire.org/>
【発明の開示】
【発明が解決しようとする課題】
【００１７】
上述したように、TCPAのような仕組みを用いることにより、確実にＯＳ置換攻撃に対抗できるように見える。
【００１８】
しかし、この仕組みには以下に述べるような問題が存在する。
【００１９】
第一に、ブート処理で最初に実行される実行オブジェクト（一般的なＰＣアーキテクチャの場合にはBIOSブートブロック）の安全性が問題となる。
【００２０】
TCPA型の手続きでは、ある実行オブジェクトの完全性を確かめるのは当該オブジェクトを起動する以前に実行されている実行オブジェクトの役目となる。従って、最初に起動される実行オブジェクトに対しては改竄されていないことの検証が行えない。これは『鶏と卵の問題』の一種とも考えられる。このため、ブート処理で最初に実行される実行オブジェクトそのものを置換するという攻撃を併用することができる場合には、TCPA型の『実行オブジェクトの起動前に当該オブジェクトの完全性を検証する』という戦略は容易に破綻を来たす。
【００２１】
第二に、この手法では、オペレーティングシステムのような実行オブジェクトが損なわれていないことが確認できるのは当該オブジェクトが起動される前の時点のみであり、その内容が正しいと判断されて実行を開始された後に、例えばメモリ上に保持されたコードに対して動的に改変が加えられたとしてもそれを検出することは不可能である問題がある。
【００２２】
これは、TCPA型の完全性検証手法が本質的に静的であるためである。
【００２３】
そこで本発明においては、データの改竄を検出することができる計算機システム並びにデータ改竄検出方法を提供することを目的としている。
【課題を解決するための手段】
【００２４】
上記課題を解決するため、本発明に係る計算機システムは、複数種類の記憶装置から構成される仮想記憶装置を備えた計算機システムにおいて、外部から事前に予測困難な値と、同一の文字列が得られるような異なる二つの元データを探すことが不可能である一方向性の関数とを用いて鍵を生成する鍵生成手段と、仮想記憶装置に読み込まれて実行されているソフトウエアの実行コード部分から、鍵を用いて、固定長の文字列からなるソフトウエア実行コード文字列を生成するソフトウエア実行コード文字列生成手段と、正規ソフトウエアの実行コード部分から、鍵を用いて、固定長の文字列からなる検証用文字列を生成する検証用文字列生成手段と、ソフトウエア実行コード文字列と検証用文字列とに基づいて、データの改竄の有無を判定する判断手段とを備えるものである。
【００２５】
さらに、ソフトウエア実行コード文字列を生成する処理時間を測定する処理時間測定手段を備え、判断手段は、処理時間に基づいて、データの改竄の有無を判定するようにしてもよい。
【００２６】
さらに、ソフトウエア実行コード文字列生成手段及び検証用文字列生成手段は、仮想記憶装置の総記憶容量を使用し演算処理を行うようにしてもよい。
【００２７】
また、本発明に係る他の計算機システムは、複数種類の記憶装置から構成される仮想記憶装置を備えた検証対象計算機システムのデータ改竄を検出する計算機システムであって、外部から事前に予測困難な値と、同一の文字列が得られるような異なる二つの元データを探すことが不可能である一方向性の関数とを用いて鍵を生成する鍵生成手段と、正規ソフトウエアの実行コード部分から、鍵を用いて、固定長の文字列からなる検証用文字列を生成する検証用文字列生成手段と、検証対象計算機システムから送信され、仮想記憶装置に読み込まれて実行されているソフトウエアの実行コード部分から、鍵を用いて生成された固定長の文字列からなるソフトウエア実行コード文字列と検証用文字列とに基づいて、データの改竄の有無を判定する判断手段とを備えるものである。
【００２８】
また、本発明に係るデータ改竄検出方法は、複数種類の記憶装置から構成される仮想記憶装置を備えた計算機システムにおけるデータ改竄検出方法であって、外部から事前に予測困難な値と、同一の文字列が得られるような異なる二つの元データを探すことが不可能である一方向性の関数とを用いて鍵を生成するステップと、仮想記憶装置に読み込まれて実行されているソフトウエアの実行コード部分から、鍵を用いて、固定長の文字列からなるソフトウエア実行コード文字列を生成するステップと、正規ソフトウエアの実行コード部分から、鍵を用いて、固定長の文字列からなる検証用文字列を生成するステップと、ソフトウエア実行コード文字列と検証用文字列とに基づいて、データの改竄の有無を判定するステップとを有する方法である。
【００２９】
さらに、ソフトウエア実行コード文字列を生成する処理時間を測定するステップと、処理時間に基づいて、データの改竄の有無を判定するステップとを有するようにしてもよい。
【００３０】
さらに、ソフトウエア実行コード文字列を生成するステップ及び検証用文字列を生成するステップは、仮想記憶装置の総記憶容量を使用し、演算処理を行うようにしてもよい。
【００３１】
また、本発明に係るデータ改竄検出方法は、複数種類の記憶装置から構成される仮想記憶装置を備えた検証対象計算機システムのデータ改竄を検出する計算機システムにおけるデータ改竄検出方法であって、外部から事前に予測困難な値と、同一の文字列が得られるような異なる二つの元データを探すことが不可能である一方向性の関数とを用いて鍵を生成するステップと、正規ソフトウエアの実行コード部分から、鍵を用いて、固定長の文字列からなる検証用文字列を生成するステップと、検証対象計算機システムから送信され、仮想記憶装置に読み込まれて実行されているソフトウエアの実行コード部分から、鍵を用いて生成された固定長の文字列からなるソフトウエア実行コード文字列と検証用文字列とに基づいて、データの改竄の有無を判定するステップを有する方法である。
【発明の効果】
【００３２】
本発明の実施例によれば、データの改竄を検出することができる計算機システム並びにデータ改竄検出方法を実現することができる。
【発明を実施するための最良の形態】
【００３３】
次に、本発明の実施例について図面を参照して説明する。
【００３４】
なお、実施例を説明するための全図において、同一機能を有するものは同一符号を用い、繰り返しの説明は省略する。
【００３５】
従来技術における問題は、実行オブジェクトが改竄されることそのものを防ごう、もしくは改竄されたことを起動前に判断しようという戦略を採っていたことにあったと考えられる。
【００３６】
そのため、（１）オブジェクトの更新が自由に行えない、（２）改竄検出操作が静的にしか行えないため動的な改竄には対応できない、といった難点が生じたと結論付けられる。
【００３７】
そこで、本発明の実施例にかかる計算機システムにおいては、起動処理が行なわれた後にその起動された実行オブジェクト自身が動的に自らの状態を検証し、静的もしくは動的な改変行為がなされたか否かを確認する、という方式を採る。
【００３８】
当然、その実行オブジェクトがオペレーティングシステムそのものである場合には、当該オペレーティングシステムは当該計算機システム全体に対して全能の立場にある。このため、この方式は一見不可能に見えるかもしれないが、以下に説明するとおり大半の計算機システムに備わる物理的な制限事項を巧妙に利用することにより、そのような処理を可能にする。
【００３９】
さて、現代的な計算機システムは機能の制限された特殊な種類を除けば、随所に階層的な構成を取り入れている点を大きな特徴としている。例えば、データを一時的に記憶しておくための仮想メモリ領域を例に説明する。
【００４０】
仮想メモリ領域には、（１）レジスタ、（２）キャッシュ、（３）RAM (Random Access Memory)、（４）スワップ領域（ハードディスクを利用することが一般的）といったそれぞれ性質の異なるハードウェアが用いられている。これらはCPU(Central Processing Unit)からのアクセス速度が速い順に列挙したものだが、容量という観点から分類したとすればちょうどこの逆順となる。レジスタは非常に高速にアクセスできるが、その代償としてごく小さいサイズのデータしか保管できない。
【００４１】
また、システムによってはこれらの要素をさらに細分化している例もある（たとえば、キャッシュを速度／容量に応じて一次キャッシュ／二次キャッシュ／三次キャッシュ・・・に分割）。
【００４２】
このように性質の異なる複数のハードウェア資源を用いながら、それらを利用するアプリケーションプログラムに対しては一貫して見える仮想メモリ空間を提供するのが、現代的な計算機オペレーティングシステムの持つ重要な役割の一つである。
【００４３】
また、現代的な計算機オペレーティングシステムでは、実装RAM容量を超えるメモリ空間が必要とされる場合があるため、ハードディスクによるスワップ領域までをも含めて統一的な形で全体が仮想メモリ空間として提供される。このため、一般にはある実行中のプログラムが現在利用しているメモリが上述のどの種類に当たるのかを判断することはできない。
【００４４】
しかし、上述した通り、各々のハードウェアデバイスには特有のアクセス速度が備わっているため、あるメモリアドレスにアクセス（読み出し、もしくは書き込み）するのに要する時間を精密に測定できる場合には、現在アクセス中のデータが上記階層的仮想メモリのなかのどの部分に当たるのかということが判断可能である。
【００４５】
本発明は、以上例示して説明したように、大半の計算機システムが本質的に備えるハードウェア的な制限を利用し、現在計算機システム上に存在する実行オブジェクトが本来のものであり他者に改竄されたものではないことを、当該実行オブジェクトがまさに実行されている最中に判定することを可能とする。
【００４６】
次に、その基本的なアイデアについて説明する。
【００４７】
一般に、実行オブジェクトの実行は、コード部分及び初期化済データ部分をメモリに展開した上で、コード部分に記録された命令を一つずつCPUが処理する、という形で実行される。このため、メモリに展開されたコード部分が期待通りの状態にあることを確認できれば十分である。
【００４８】
また、このような確認を行うための一般的な手法として、TCPAで行われているように一方向ハッシュ関数を用いる手法がある。しかし、確認をTCPAのように起動前に静的に行うのではなく、起動後に動的に行うことを考えると、単純にコード部分に対してハッシュ関数を適用しその結果を表示させるというような処理方式では、結果の値そのものを捏造することが容易であるため、所期の目的は達せられない。そのため、時刻データもしくは乱数データ等の外部から事前に予測不可能なデータ（値）をパラメータとして併用する。このようして、あらかじめ結果を予測できないような形でハッシュ関数を用いる必要がある。
【００４９】
また、ハッシュ関数を適用する対象として、実際にメモリ上にある実行コード部分の代わりに真の実行オブジェクトのファイルイメージを利用させる、という形での偽装行為を排除するために、ファイルすなわちハードディスク上にあるデータとメモリ上に置かれたデータとに対するアクセス速度の違い等の物理的な差異を利用する。
【００５０】
例えば、ハッシュ関数等、任意の長さのデータから固定長の文字列（ハッシュ値）を出力する一方向性の関数を適用するのに要する時間を計測することにより、対象がメモリ上にあるのかハードディスク上にあるのかを判定することができる。その結果、期待された時間より有意に長い実行時間がかかったことが判明すれば、上記偽装行為が行われたことを見破ることができる
そのハッシュ関数計算が満足できる時間で行えた場合、その結果を、上記パラメータを併用した上で正規の実行オブジェクトのコード部分から計算したハッシュ値と比較することで、現在メモリ上にあって実行されている実行オブジェクトが正規のものであり攻撃者によって置換されたものではない、ということが判断できる。
【００５１】
以上のような考え方は基本的にはあらゆる実行オブジェクトに対して適用することができるが、本発明をもっとも効率的に適用できる対象は計算機システム全体の運用を司るオペレーティングシステムであり、その下で動作する各種のアプリケーションプログラム等の完全性を確認する手段としては、tripwireのような不正改竄検知システムを併用するというのが適切である（例えば、非特許文献２参照）。
【００５２】
次に、本発明の第１の実施例に係る計算機システムについて図１を参照して説明する。
【００５３】
本実施例に係る計算機システムは、メモリとハードディスクとのアクセスに要する速度差を利用して、データの置換検出等のデータ改竄検出を行うものである。また、本実施例では、置換検出を行う対象はオペレーティングシステムである場合について説明する。
【００５４】
本実施例に係る計算機システムは、マイクロプロセッサ１０１、メモリ１０２、Ｉ／Ｏコントローラ１０３等を備えるマザーボード１００と、ハードディスク３００等の外部記憶装置及びＣＤ−ＲＯＭ(Compact Disk Read Only Memory)４００等の読み出し専用記憶装置からなるハードウェア部分と、仮想メモリ空間２００とから構成される。
【００５５】
マイクロプロセッサ１０１、メモリ１０２及びＩ／Ｏコントローラ１０３は、システムバスにより互いに接続されている。また、Ｉ／Ｏコントローラ１０３、ハードディスク３００及びＣＤ−ＲＯＭ４００は、ＰＣＩ等の外部バスにより互いに接続されている。
【００５６】
ハードディスク３００には、ＯＳ実行ファイル３０１が格納されている。また、ＣＤ−ＲＯＭ４００は、正規のＯＳ実行ファイルを攻撃者によって改竄できない形で保存しておくための媒体として利用しているのみであり、同様に書き込みができない媒体であれば他種のハードウェアであっても良い。
【００５７】
ＣＤ−ＲＯＭ４００上には、複数の暗号化済み正規ＯＳ実行ファイル４０１が格納されている。この理由は、後述するように、正規ＯＳ実行ファイルを単一のファイルとして格納した場合、ファイルの内容が特定できるため、そのファイルの内容をメモリに読み込んだ時点で改竄することができるからである。そのような、オペレーティングシステムに対する改竄行為を防止するために、比較対象となる正規ＯＳ実行ファイルを複数の互いに相異なるファイルとし、システムの所有者のみがファイルの特定ができるようにする。また、ＣＤ−ＲＯＭ４００上には正規ＯＳ実行コード部分を保存したファイル４５０も置かれているが、これは後述する検証用数値計算のところで必要となるファイルである。
【００５８】
仮想メモリ空間２００のうち実際に物理メモリを占有している部分は、ＯＳ実行コード２０１、ＯＳ管理データ２０２、そして実行中の各アプリケーションに帰属するコード及びデータ２０３である。ＯＳ実行コード２０１及びＯＳ管理データ２０２のうちの初期化済データ部には、ハードディスク上のＯＳ実行ファイル３０１から読み込まれたデータが格納されている。これら利用済メモリに未使用のフリーメモリ２０４を合計したものがシステムの実装ハードウェアメモリ量に等しくなる。
【００５９】
また、マイクロプロセッサ１０１は、図１０に示すように暗号ファイル生成部１０１−１と、鍵生成部１０１−２と、暗号ファイル生成部１０１−１及び鍵生成部１０１−２に接続された検証部１０１−３とを備える。
【００６０】
また、暗号ファイル生成部１０１−１は、パスフレーズ生成部１０１−１１と、ファイル数生成部１０１−１２と、パスフレーズ生成部１０１−１１及びファイル数生成部１０１−１２に接続された暗号化部１０１−１３とを備える。また、検証部１０１−３は、演算処理部１０１−３１と、演算処理部１０１−３１に接続された判断部１０１−３２とを備える。
【００６１】
パスフレーズ生成部１０１−１１は、この処理に用いるパスフレーズ（Ｋ）を生成する。ファイル数生成部１０１−１２は、この処理に用いるファイル数（Ｎ）（Ｎは正の整数）を生成する。暗号化部１０１−１３は、生成したパスフレーズに対してｉ（ただし、ｉは1〜Nまで順番に増加させる）回ハッシュ関数を適用し、その結果を暗号化鍵Ｋｉとし、この暗号化鍵ＫｉをもってＯＳ実行コード部分を暗号化した結果をＯｉとし、得られたＯ１〜ＯＮまでのデータを、どれがどの鍵で暗号化されたものか分からないような名前のファイルとしてＣＤ−ＲＯＭ４００、例えばＣＤ−Ｒ(Compact Disk Recordable)等に保存する。
【００６２】
鍵生成部１０１−２は、後述する検証処理に先立って、例えば実行開始時刻等の外部から事前に予測不可能な値を記録し、その値からハッシュ関数によりデータを生成し、生成したデータを鍵付ハッシュ処理での鍵χとする。  演算処理部１０１−３１は、ＯＳ置換攻撃が行われているかどうかを判断するための、検証用数値の演算処理及び現に実行されているＯＳ実行コードを用いた演算処理を行う。判断部１０１−３２は、演算処理部１０１−３１により演算処理された結果に基づいて、ＯＳ置換攻撃が行われているか否かを判断する。
【００６３】
次に、この計算機システムで実行中のオペレーティングシステムが置換されたものではなく正規のものであるか否かを判断するデータ改竄検出方法について説明する。
【００６４】
まず、本実施例に係る計算機システムにおけるデータ改竄検出方法の暗号ファイル生成処理について、図２及び図１０を参照して説明する。
【００６５】
ＯＳのインストール処理時に、以下に示す処理が行われ、その後の検証処理での比較対象とするための複数のファイルが生成される。生成された複数のファイルは、ＣＤ−Ｒ等の上書き不可媒体に保存される。
【００６６】
具体的には、暗号ファイル生成部１０１−１のパスフレーズ生成部１０１−１１及びファイル数生成部１０１−１２は、この処理のためだけに用いるパスフレーズ（Ｋ）（Ｋは文字列）及び生成するファイル数（Ｎ）（Ｎは正の整数）を決定する（ステップＳ２０１）。
【００６７】
次に、暗号化部１０１−１３は、決定されたパスフレーズに対してｉ（ただし、ｉは１〜Ｎまで順番に増加させる）回ハッシュ関数を適用し、その結果を暗号化鍵Ｋｉとし（ステップＳ２０２、ステップＳ２０３、ステップＳ２０４）、その暗号化鍵ＫｉをもってＯＳ実行コード部分を暗号化した結果をＯｉとする（ステップＳ２０５）。次に、結果として得られるＯ１〜ＯＮまでのデータを、どれがどの鍵で暗号化されたものか分からないような名前のファイルとしてＣＤ−Ｒ等に保存する（ステップＳ２０６）。
【００６８】
ここで用いる暗号化アルゴリズムは実用上の安全性に疑問が持たれていない共通鍵暗号アルゴリズムであればどのようなものでもかまわないが、入力データのどの一部分が改変されたとしても事実上すべての出力データが変更されるような利用モードを用いる必要がある。このように、利用モードを制限することにより、正規ＯＳ実行コード部の一部のみをメモリに記憶しておき、後述する検証の段階で、そのデータをユーザから提供される暗号化鍵で暗号化してみることで、Ｏ１〜ＯＮのいずれが求めるものであるかを知る、というタイプの攻撃を未然に防御することができる。ブロック暗号に関してそのようなモードの例としてはCBCモード(Cipher Block Chaining mode)での暗号化処理を、データの最初からと最後からの２回連続して行う、というものがある。
【００６９】
上記Ｎ個のＣＤ−Ｒ上のファイルに関して、どのファイルがどの鍵で暗号化されたものかという対応を示すデータは外部からアクセスができないように記憶される。また、本方式の対象となる計算機システム以外の安全な場所に記録しておくようにしてもよい。この場合、その対応は電子データである必要はない。
【００７０】
また、Ｏ１〜ＯＮとは別にＯＳ実行コード部分そのものも暗号化を行わず、そのままのデータを保存したファイル４５０として同じＣＤ−Ｒ上に保存される。
【００７１】
当該ＣＤ−Ｒは検証処理実行時にはＣＤ−ＲＯＭ４００上に搭載し、ソフトウエアからアクセスできるようにマウントされる。
【００７２】
本実施例では、暗号ファイル生成部１０１−１のパスフレーズ生成部１０１−１１及びファイル数生成部１０１−１２が、パスフレーズ（Ｋ）及び生成するファイル数（Ｎ）を生成する場合について説明したが、ユーザが決定して入力するようにしても良い。
【００７３】
次に、本実施例に係る計算機システムにおけるデータ改竄検出方法の鍵付ハッシュ処理で利用する鍵の生成処理について、図３及び図１０を参照して説明する。
【００７４】
まず、鍵生成部１０１−２は、後述する検証処理に先立って実行開始時刻を記録し（ステップＳ３０１）、その開始時刻の値からハッシュ関数により生成したデータを鍵付ハッシュ処理での鍵χとする（ステップＳ３０２）。実行開始時刻と生成した鍵の値はディスプレイ（図示なし）に表示される（ステップＳ３０３）。
【００７５】
ここで、時刻情報を用いるのは、以降で行われるＯＳ実行コード計測処理の結果を動的に変動させるためである。このようにすることにより、表示される時刻情報と必要であればその値から得られるハッシュ値を、他の計算機で計算した結果と比較することにより、データが不正に捏造されていないことを確認することが可能である。
【００７６】
また、鍵付ハッシュとは、ハッシュ関数への入力としてデータの他に生成者と検証者とが共有する秘密情報（＝鍵）を与えることで、データのみではなく鍵に関しても正しい値を与えない限り同じ結果が得られない、という特性を持ったハッシュ処理のことである。このハッシュ処理において、その鍵として時刻情報や乱数データ等の外部から事前に予測不可能なデータ（値）を用いることにより、結果として得られるハッシュ値が実行時刻に応じて変動する動的な値となる。このため、本実施例においてはハッシュ関数適用結果を前もって計算しておくという種類の攻撃を困難にさせることができる。
【００７７】
次に、本実施例に係る計算機システムにおけるデータ改竄検出方法の検証用数値計算処理について、図４、図５及び図１０を参照して説明する。
【００７８】
検証用数値計算処理では、ＯＳ置換攻撃が行われているかどうかを判断するための比較用数値の計算が実施される。図４に示すように、ここでは簡便化のため実行されているのはＯＳのみとし、ＯＳが使用しているメモリ、すなわち、ＯＳ実行コード２０１及びＯＳ管理データ２０２以外の領域はすべてフリーメモリ２０４である場合について説明する。
【００７９】
計算機システムにとっては、正規ＯＳ実行コード２０１のサイズ及びそれが確保するＯＳ管理データ２０２のサイズは既知であり、かつ、システムの実装メモリ容量も既知であるから、フリーメモリ２０４のサイズがどの程度であるかは予め正確に見積もることが可能である。
【００８０】
ＯＳ以外のプロセスが稼動している場合、それらのプロセスが動的にメモリを確保する可能性があるため正確性は若干低下することになるが、プロセスの生成及び消滅が激しくはなくシステムが安定した状態にあることが保証される場合には、ＯＳ以外に他の既知のプロセスが実行されていたとしてもほぼ同様の結果を得ることができる。
【００８１】
このフリーメモリ２０４を以下のような処理によりほぼ完全に埋め尽くすことで処理が実行される。すなわち、仮想記憶装置の総記憶容量を使用して演算処理が行われる。
【００８２】
前述のとおり、ＣＤ−ＲＯＭ４００には異なる鍵で暗号化された複数の正規ＯＳ実行コードデータＯ１〜ＯＮ４０１が置かれている。検証部１０１−３の演算処理部１０１−３１は、これらＯ１からＯＮに対して順番に以下に示す処理を繰り返し実行し、その結果を表示する。（１）ＯＸをフリーメモリ２０４の先頭部分（領域β）にコピーする（図５（ａ））。（２）鍵生成部１０１−２により生成された鍵χを用いてＣＤ−ＲＯＭ４００上に置かれている正規ＯＳ実行コード４５０のファイル及び領域βの鍵付ハッシュを取った結果（ハッシュ値）をフリーメモリ２０４中の未記録部分の先頭に記録する。（３）新たに記録されたハッシュ値を含むようにβを拡大する（図５（ｂ））。（４）フリーメモリ中に余地がある間（２）と（３）とを繰り返す。（５）（２）〜（４）までの処理によりデータの記録が行われたフリーメモリ２０４全体にハッシュ関数を適用した結果とＯＸのファイル名を表示する（図５（ｃ））。この結果、Ｏ１〜ＯＮに相当するＮ個のデータが得られる。
【００８３】
次に、本実施例に係る計算機システムにおけるデータ改竄検出方法のＯＳ実行コード計測処理について、図６及び図１０を参照して説明する。
【００８４】
ＯＳ実行コードの計測処理では、一旦、検証用数値計算処理で使用されたフリーメモリ２０４の内容を消去した後、現に実行されているＯＳ実行コードに対して、上述した検証用数値計算処理と同様となる処理を行うことにより、再びフリーメモリ２０４をほぼ完全に埋め尽くす処理が行われる。すなわち、仮想記憶装置の総記憶容量を使用して演算処理が行われる。
【００８５】
具体的には、以下に示す処理を繰り返し実行し、その結果を表示する。（１）演算処理部１０１−３１は、暗号ファイル生成部１０１−１のパスフレーズ生成部１０１−１１及びファイル数生成部１０１−１２から、パスフレーズ及び生成するファイル数（Ｎ）を取得する。次に、演算処理部１０１−３１は、暗号化部１０１−１３で用いられたハッシュ関数を用いて、取得したパスフレーズを、生成するファイル数（Ｎ）だけ処理することにより、暗号化鍵ψを生成する。
【００８６】
ここで、ユーザから暗号化鍵ψの入力を受けるようにしてもよい。具体的には暗号化鍵ψはユーザがＯＳインストール処理時に選択するパスフレーズからハッシュ関数等を介して生成されるデータである。ここで、当該パスフレーズの入力及び何回ハッシュ関数を適用するかが求められる。演算処理部１０１−３１では、暗号化部１０１−１３で用いたのと同じハッシュ関数を用いてパスフレーズを指定回数だけ処理し、その結果を暗号鍵ψとする。
【００８７】
（２）生成した暗号化鍵ψを用いてＯＳ実行コード部分２０１（領域α）を暗号化した結果を、フリーメモリの先頭に記録する（領域β）（図６（ａ））。（３）鍵生成部１０１−２により生成された鍵χを用いて領域α及び領域βの鍵付ハッシュを取った結果をフリーメモリ中の未記録部分の先頭に記録する。（４）新たに記録されたハッシュ値を含むように領域βを拡大する（図６（ｂ））。（５）フリーメモリ中に余地がある間（３）と（４）とを繰り返す。（６）（２）〜（５）まででデータの記録が行われた領域β全体にハッシュ関数を適用した結果、及び実行に要した時間という二つの数値を表示する（図６（ｃ））。
【００８８】
上記鍵付ハッシュに用いるχが実行開始時に記録した時刻値を元に生成されていることから、この（６）で得られるハッシュ値は実行開始時刻及びＯＳ実行コードの両方に完全に依存した値となる。このため、攻撃者がこの値を予測して前もって計算しておくことはできない。
【００８９】
また、以上の計算は利用可能なすべてのメモリを用いることで実行される。このため、攻撃者がファイル等に保管しておいた正規のＯＳ実行コード部分を身代わりにして正しい計算結果を得るような手立てを講じたとすれば、メモリ１０２とハードディスク３００それぞれに対するアクセス速度に関する有意な差のため、結果として得られる実行に要した時間がメモリのみを用いたものとは大きく異なることになり、これも容易に発覚する。
【００９０】
従って、攻撃者等によって置換されたオペレーティングシステムが実行中だったとしても、この処理にかかった実行時間から不正が発覚しないようにするためには、正直に自らの実行コード部分を計測した結果を表示するしかない。
【００９１】
次に、本実施例に係る計算機システムにおけるデータ改竄検出方法の検証処理について説明する。
【００９２】
暗号ファイル生成処理において説明したように、Ｎ個のＣＤ−Ｒ上のファイルに関して、どのファイルがどの鍵で暗号化されたものかという対応を示すデータは外部からアクセスができないように記憶される。このため、検証用数値の計算処理で得られるＮ個の数値のうちどれがＯＳ実行コードの計測処理で得られる結果と同値になるか予測することができる。
【００９３】
そこで、判断部１０１−３２では、検証用数値の計算処理で得られるＮ個の数値とＯＳ実行コードの計測処理で得られる結果とが一致するか否かによりＯＳに対する改竄の有無の判定を行う。
【００９４】
判定部１０１−３２において、この検証処理を実行する対象が改変されたＯＳである場合、そのＯＳは検証用数値計算処理の結果のうちどれが正しいものなのかを判断することはできない。このため、検証用数値計算処理で得られた結果のいずれかを記憶しておいてＯＳ実行コードの計測処理の結果と置換することでユーザを騙そうという手段しか残されていない。この手段は１／Ｎという確率でしか成功しないことは明らかである。
【００９５】
さらに、鍵を変更しながら複数回検証処理を実行することで、この確率は指数関数的に小さくすることができるため、Ｎの値が１０程度の場合でも３〜４回の検証処理を実施することで実用的には十分な確実性でＯＳが改竄されたものかどうかの検証が行える。
【００９６】
また、暗号ファイル生成処理において述べたとおり、検証を行うユーザはＣＤ−Ｒ上のどのファイルがどの鍵（＝パスフレーズを１又は複数回ハッシュ関数で処理することにより生成した暗号鍵）で暗号化されたものであるかという対応を知っているため、検証用数値計算処理で得られるＮ個の数値のうちどれがＯＳ実行コードの計測処理で得られる計算結果と同じになるのかを予測することができる。そこで、それらの値が期待通り一致しているかどうかをユーザが見ることで、ＯＳに対する改竄の有無を判定するようにしてもよい。
【００９７】
次に、本発明の第２の実施例に係る計算機システムについて、図７を参照して説明する。
【００９８】
本実施例に係る計算機システムは、ＯＳその他の実行オブジェクトが動作するＣＰＵとは独立したＣＰＵ／ソフトウエアを用いて検証を行う点が第１の実施例に係る計算機システムと異なる。
【００９９】
本実施例に係る計算機システムの全体構成は、第１の実施例に係る計算機システムと同様の構成、すなわち、マイクロプロセッサ１０１、メモリ１０２、Ｉ／Ｏコントローラ１０３等を備えるマザーボード１００と、ハードディスク３００等の外部記憶装置からなるハードウェア部分と、仮想メモリ空間２００とから構成される検証対象システム５００を備える。
【０１００】
マイクロプロセッサ１０１、メモリ１０２及びＩ／Ｏコントローラ１０３は、システムバスにより互いに接続されている。また、Ｉ／Ｏコントローラ１０３とハードディスク３００とは、ＰＣＩ等の外部バスに接続されている。また、マイクロプロセッサ１０１は、演算処理部を備える。
【０１０１】
さらに、本実施例に係る計算機システムは、検証対象システム５００とは独立したマイクロプロセッサ６０１及びメモリ６０２等のソフトウエア実行環境を備えた検証実施システム６００を備える。マイクロプロセッサ６０１は、情報収集部６０１−１と、鍵生成部６０１−２と、情報収集部６０１−１及び鍵生成部６０１−２に接続された検証部６０１−３とを備える。また、検証部６０１−３は、演算処理部６０１−３１と、演算処理部６０１−３に接続された判断部６０１−３２とを備える。
【０１０２】
情報収集部６０１−１は、検証対象システム５００から、システムに関する情報を収集する。鍵生成部６０１−２は、後述する検証処理に先立って、例えば実行開始時刻を記録し、その値からハッシュ関数によりデータを生成し、生成したデータを鍵付ハッシュ処理での鍵χとする。
【０１０３】
演算処理部６０１−３１は、ＯＳ置換攻撃が行われているかどうかを判断するための検証用数値の演算処理を行う。判断部６０１−３２は、演算処理部６０１−３１及び検証対象システム５００の演算処理部により演算処理された結果に基づいて、ＯＳ置換攻撃が行われているか否かを判断する。
【０１０４】
検証実施システム６００は、検証対象システム５００とは独立した計算環境を備えたものでありさえすればよく、その実現方法としては、上述のTCPAにおけるTPMのようにシステムバス等に実装される独立CPU、スマートカードのような周辺機器、インターネット等のネットワークを介して検証対象システム５００と通信が可能な独立計算機等、多様な形態が考えられる。
【０１０５】
本実施例では、このような構成をとることにより、検証対象システム５００で実行中のＯＳが正規のものであるか否かを検証することができる。
【０１０６】
次に、本実施例に係る計算機システムにおけるデータ改竄検出方法の暗号ファイル生成処理について、図１１を参照して説明する。
【０１０７】
検証実施システム６００の情報収集部６０１−１は、例えば、検証対象システム５００のＯＳのインストール時に、インストールされた正規ＯＳの実行コード部分を保存したファイル、検証対象システム５００に実装されたメモリ容量、検証処理実施時に稼動しているＯＳその他のプロセスが占有するメモリサイズの見積値、検証対象システム５００が、ＯＳ実行コードの計測処理をメモリ上のみで実施するために必要な処理時間の見積値の情報を収集する。
【０１０８】
ここで、ユーザが、上述した情報を収集して、検証実施システム６００に保管するようにしてもよい。
【０１０９】
次に、本実施例に係る計算機システムにおけるデータ改竄検出方法の鍵付ハッシュ処理で利用する鍵の生成処理について、図８を参照して説明する。
【０１１０】
検証実施システム６００の鍵生成部６０１−２は実行開始時刻を記録し（ステップＳ８０１）、その値からハッシュ関数により生成したデータを以下で用いる鍵付ハッシュ処理での鍵χとする（ステップＳ８０２）。鍵χを検証実施システム６００から対象システム５００に送付する（ステップＳ８０３）。鍵χを検証実施システム６００から対象システム５００に送付ことにより、検証対象計算機システム５００にＯＳ実行コードの計測処理を開始させる。
【０１１１】
次に、本実施例に係る計算機システムにおけるデータ改竄検出方法のＯＳ実行コードの計算処理について、図９を参照して説明する。
【０１１２】
鍵χを受信した検証対象システム５００の演算処理部は、以下の処理を行い得られた結果ωを検証実施システム６００に返却する。
【０１１３】
具体的に説明する。（１）鍵χを用いてＯＳ実行コード部分（領域α）の鍵付ハッシュを取った結果をフリーメモリ２０４の先頭部分に記録する。フリーメモリ２０４中のデータを記録された部分を領域βとする（図９（ａ））。（２）鍵χを用いて領域α及び領域βの鍵付ハッシュを取った結果をフリーメモリ２０４中の未記録部分の先頭に記録する（図９（ｂ））。（３）新たに記録されたハッシュ値を含むようにβを拡大する。（４）フリーメモリ中に余地がある間（２）と（３）とを繰り返す。（５）（１）〜（５）まででデータの記録が行われた領域β全体にハッシュ関数を適用した結果をωとする。ωを検証実施システム６００へ送信する（図９（ｃ））。
【０１１４】
次に、本実施例に係る計算機システムにおけるデータ改竄検出方法の実行時間計測処理について説明する。
【０１１５】
検証実施システム６００の演算処理部６０１−３２では鍵χを送付後ωが戻ってくるまでの時間を計測し、それがネットワーク通信等に要する遅延を勘案した上で満足する範囲内、すなわち、ＯＳ実行コードの計測処理がすべてメモリ上のみで実施された場合に要すると見積もられる時間に通信遅延を加えた時間に収まっていることを検証する。これが満たされない場合には検証失敗とする。
【０１１６】
次に、本実施例に係る計算機システムにおけるデータ改竄検出方法のＯＳ実行コードの計測処理について説明する。
【０１１７】
対象システム５００での実行時間が満足する範囲内だった場合、検証実施システム６００の演算処理部６０１−３２は、独自にＯＳ実行コードに対する計測を行う。第１の実施例の場合とは異なり、ここで行うべき処理はで検証対象システム５００の演算処理部により行われるＯＳ実行コードの計測処理と、情報収集部６０１−１が収集した正規ＯＳの実行コード部分を保存したファイルを使用する点を除いて同様の処理であるため、説明は省略する。
【０１１８】
その結果検証実施システム６００で計測された値をω´とする
次に、本実施例に係る計算機システムにおけるデータ改竄検出方法の検証処理について説明する。
【０１１９】
判断部６０１−３２は、二つの結果ωとω´とを比較し、両者が一致すればＯＳに対する改変行為がなされていないと判断し、一致しない場合にはＯＳに対する改変行為がなされたと判断する。
【０１２０】
上述したように、本実施例によればＯＳないしアプリケーションプログラムの改竄という脅威に対抗することが可能となる。
【０１２１】
また、本発明は改竄されたかもしれないコードが実際に実行されている状態での健全性の検証を可能とするため、従来の同種システムのようにファイル等として保管されている実行コードに対して静的に健全性の検証する方式と比較すると、より広い範囲の攻撃にまで対応することが可能である。すなわち、メモリに読み込まれてすでに実行中である状態のコードに対する動的な改変攻撃へも対抗できる。
【０１２２】
また、第２の実施例で説明したように、遠隔地にある計算機システムに対するデータの改竄を検出できる。このため、遠隔地にある計算機システム同士で相互の健全性を検証した上で通信を実現する手段としても応用でき、インターネットのような危険の入り込みやすい通信媒体を用いる際の信頼性向上という形で利用することも可能である。
【０１２３】
また、上述した実施例においては、ＯＳに対するデータの改竄を検出する場合について説明したが、その他のソフトウエアについても同様の方法により、データの改竄の検出ができる。
【産業上の利用可能性】
【０１２４】
本発明に係る計算機システム及びデータ改竄検出方法は、オペレーティングシステムを攻撃者にとって好ましい性質を持ったものに置換する攻撃が行われたことを検出する技術に適用できる。
【図面の簡単な説明】
【０１２５】
【図１】本発明の第１の実施例に係る計算機システムを説明するための構成図である。
【図２】本発明の第１の実施例に係る計算機システムにおける事前準備処理であり、ＯＳ実行コード部を異なる鍵で暗号化したファイルを生成する処理を説明するためのフローチャートである。
【図３】本発明の第１の実施例に係る計算機システムにおける鍵付ハッシュ処理用の鍵を生成する処理を説明するためのフローチャートである。
【図４】ＯＳのみが実行されている場合のメモリ利用状況を説明するための概念図である。
【図５】本発明の第１の実施例に係る計算機システムにおける検証用数値計算処理を説明するための概念図である。
【図６】本発明の第１の実施例に係る計算機システムにおけるＯＳ実行コード計測処理の内容を説明するための概念図である。
【図７】本発明の第２の実施例に係る計算機システムを説明するための構成図である。
【図８】本発明の第２の実施例に係る計算機システムにおける鍵付ハッシュ処理用の鍵を生成する処理を説明するためのフローチャートである。
【図９】本発明の第２の実施例に係る計算機システムにおけるＯＳ実行コード計測処理の内容を説明するための概念図である。
【図１０】本発明の第１の実施例に係る計算機システムを構成するマイクロプロセッサの構成を説明するためのブロック図である。
【図１１】本発明の第２の実施例に係る計算機システムを構成するマイクロプロセッサの構成を説明するためのブロック図である。
【符号の説明】
【０１２６】
１００  マザーボード
５００  検証対象計算機システム
６００  検証実施計算機システム
【図１】
2005182509.tif 000003
【図２】
2005182509.tif 000004
【図３】
2005182509.tif 000005
【図４】
2005182509.tif 000006
【図５】
2005182509.tif 000007
【図６】
2005182509.tif 000008
【図７】
2005182509.tif 000009
【図８】
2005182509.tif 000010
【図９】
2005182509.tif 000011
【図１０】
2005182509.tif 000012
【図１１】
2005182509.tif 000013