動的共有ライブラリを使用するアプリケーションが、汎用OS上で動作するコンピュータシステムであって、上記アプリケーションと共通の秘密鍵を有し、上記動的共有ライブラリのCRCと上記秘密鍵からハッシュ計算により算出したKEYを上記動的共有ライブラリに埋め込むKEY生成手段を備え、上記アプリケーションは、上記秘密鍵を用いて、上記KEYが埋め込まれた上記動的共有ライブラリファイルの改ざんを検出する第1の検出手段と、メモリ空間上にロードされた上記KEYが埋め込まれた上記動的共有ライブラリのイメージと、上記メモリ空間上の上記KEYが埋め込まれる前の元の動的共有ライブラリのイメージとを比較することにより、上記KEYが埋め込まれた上記動的共有ライブラリのイメージに対する改ざんを検出する第2の検出手段とを有することを特徴とするコンピュータシステム。上記アプリケーションにより使用される動的共有ライブラリが、上記KEYを埋め込めない場合に、この動的共有ライブラリのCRCと上記秘密鍵からハッシュ計算により算出したKEYを外部ファイルに格納する外部KEYファイル生成手段を備え、上記アプリケーションは、上記秘密鍵を用いて、上記KEYが格納された外部ファイルを参照して、上記KEYを埋め込めない場合の上記動的共有ライブラリファイルの改ざんを検出する第3の検出手段を有することを特徴とする請求項1記載のコンピュータシステム。上記アプリケーションの上記第2の検出手段は、使用する動的共有ライブラリが、さらに別の動的共有ライブラリを使用する場合に、この別の動的共有ライブラリの上記メモリ空間上のイメージについても、上記改ざんを検出することを特徴とする請求項1または請求項2記載のコンピュータシステム。上記KEY生成手段は、上記アプリケーションのCRCと上記秘密鍵からハッシュ計算により算出したKEYを上記アプリケーションに埋め込み、上記アプリケーションの上記第1の検出手段は、上記秘密鍵を用いて、上記KEYが埋め込まれた自アプリケーションの改ざんを検出し、上記アプリケーションの上記第2の検出手段は、メモリ空間上にロードされた上記KEYが埋め込まれた自アプリケーションのイメージと、上記メモリ空間上の上記KEYが埋め込まれる前の元の自アプリケーションのイメージとを比較することにより、上記KEYが埋め込まれた自アプリケーションのイメージに対する改ざんを検出することを特徴とする請求項1~請求項3のいずれかに記載のコンピュータシステム。上記アプリケーションの上記第2の検出手段は、元の動的共有ライブラリのベースアドレスを基準として、改ざん検出対象の上記動的共有ライブラリを全てメモリ空間上に擬似ロードして、上記メモリ空間上の元の上記動的共有ライブラリのイメージと比較することにより、上記改ざんを検出することを特徴とする請求項1~請求項4のいずれかに記載のコンピュータシステム。上記アプリケーションの上記第2の検出手段は、改ざん検出対象の上記動的共有ライブラリをメモリ空間上に逐次的に一部分ずつ確保し、この確保した部分と、上記メモリ空間上の上記KEYが埋め込まれる前の上記動的共有ライブラリのイメージとを比較することにより、上記改ざんを検出することを特徴とする請求項1~請求項4のいずれかに記載のコンピュータシステム。従来のコンピュータシステムでは、動的共有ライブラリをメモリ空間上にロードする際に、すでにそのライブラリのファイルが、悪意のある第三者によって改ざんされてしまっている恐れがあった。また、動的共有ライブラリをメモリ空間上にロードした後においても、実際にアプリケーションがそのライブラリを使用するまでの間に、そのメモリ空間上のイメージが改ざんされる恐れがあった。特許文献1、2では、この課題の解決のために、ハードウェアの構成やOS自身の改良が必要であり、一般的に普及している汎用PCや汎用OSを対象としていない。この発明は、上述のような課題を解決するためになされたものであり、悪意のある第三者による動的共有ライブラリの改ざんを防止するための機能を、汎用OS上で実現するコンピュータシステムを得ることを目的とする。この発明に係わるコンピュータシステムにおいては、動的共有ライブラリを使用するアプリケーションが、汎用OS上で動作するコンピュータシステムであって、アプリケーションと共通の秘密鍵を有し、動的共有ライブラリのCRCと秘密鍵からハッシュ計算により算出したKEYを動的共有ライブラリに埋め込むKEY生成手段を備え、アプリケーションは、秘密鍵を用いて、KEYが埋め込まれた動的共有ライブラリファイルの改ざんを検出する第1の検出手段と、メモリ空間上にロードされたKEYが埋め込まれた動的共有ライブラリのイメージと、メモリ空間上のKEYが埋め込まれる前の元の動的共有ライブラリのイメージとを比較することにより、KEYが埋め込まれた動的共有ライブラリのイメージに対する改ざんを検出する第2の検出手段とを有するものである。この発明は、以上説明したように、動的共有ライブラリを使用するアプリケーションが、汎用OS上で動作するコンピュータシステムであって、アプリケーションと共通の秘密鍵を有し、動的共有ライブラリのCRCと秘密鍵からハッシュ計算により算出したKEYを動的共有ライブラリに埋め込むKEY生成手段を備え、アプリケーションは、秘密鍵を用いて、KEYが埋め込まれた動的共有ライブラリファイルの改ざんを検出する第1の検出手段と、メモリ空間上にロードされたKEYが埋め込まれた動的共有ライブラリのイメージと、メモリ空間上のKEYが埋め込まれる前の元の動的共有ライブラリのイメージとを比較することにより、KEYが埋め込まれた動的共有ライブラリのイメージに対する改ざんを検出する第2の検出手段とを有するので、悪意のある第三者による動的共有ライブラリの改ざんを、汎用OS上で防止することができる。実施の形態1.以下、この発明の実施の形態1を図に基づいて説明する。図1は、この発明の実施の形態1によるコンピュータシステムで用いられるファイル構成を示す説明図である。図1において、ソールファイル14と静的共有ライブラリ12をコンパイル/リンクを行ってアプリケーション11が形成される。静的共有ライブラリ12は、アプリケーション11の作成時に、アプリケーション11にリンクされ、アプリケーションの一部となって配布される。動的共有ライブラリ13は、アプリケーション11とは別ファイルとして配布される。動的共有ライブラリ13と、アプリケーション11とのリンクは、ユーザがアプリケーション11を実行する際、もしくは、アプリケーション11内で、その動的共有ライブラリ13の機能が必要となった際に初めて行われる。アプリケーション11と動的共有ライブラリ13は、同じファイル構造であり、ヘッダ領域101と、ネイティブコード領域102と、定数データ領域103と、データ領域104と、エクスポート関数領域105と、インポート関数領域106と、リソース情報領域107と、再配置情報領域108とを有している。図2は、この発明の実施の形態1によるコンピュータシステムで用いられる動的共有ライブラリのロード処理を示すイメージである。図2において、アプリケーション11と動的共有ライブラリ13とのリンクを示すものであり、このリンク動作は、アプリケーション11のファイルに対して行われるのではなく、アプリケーション11のメモリ空間にロードされたアプリケーションイメージ21上にて行われる。すなわち、まず動的共有ライブラリ13がロードされたのちに、アプリケーションイメージ21によりリンクが行われる。図2は、この動的共有ライブラリ13のロード処理を示すもので、アプリケーション11のロード処理と、ほぼ同一である。このとき、動的共有ライブラリ13がロードされる位置ベースアドレスが、アプリケーション11によって動的に変更されるため、以下の2つの処理を行う必要がある。1ネイティブコード領域102に対して、再配置情報領域108を参考に、ベースアドレスの再配置処理を実行する。2次いで、インポート関数領域106に対して、インポート関数の紐付けバインディング処理を実行する。この処理により、アプリケーション11と動的共有ライブラリ13との間でリンクが行われると、動的共有ライブラリ13は、静的共有ライブラリ12と同様に、アプリケーション11から自由に呼び出して使用されるようになる。図3は、この発明の実施の形態1によるコンピュータシステムのファイル構成を示す説明図である。図3において、13は図1におけるものと同一のものである。本発明におけるアプリケーション31は、そのネイティブコード領域102の中に、本来のアプリケーションの機能に加えて、ファイル本体の改ざん検出機能301第1の検出手段と、メモリ空間上イメージの改ざん検出機能302第2の検出手段を持つ。また、定数データ領域103の中に、秘密鍵312を持つ。この秘密鍵312は、ファイルの中をバイナリエディタ等で調べても判らないよう、暗号化した状態で保持する。KEY生成プログラム32KEY生成手段は、動的共有ライブラリ13を読み込み、KEY311が埋め込まれた動的共有ライブラリ33を生成する。KEY生成プログラム32は、その定数データ領域103の中に、アプリケーション31と同じ秘密鍵312と呼ぶハッシュ文字列を持つ。KEY311は、ファイル全体を表すハッシュ文字列であり、動的共有ライブラリ13のファイルCRCを計算し、それに未公開の秘密鍵312を追加して、再度、ハッシュ計算を行った文字列である。そのために、このKEY311は、動的共有ライブラリごとに値が異なることはもちろんのこと、動的共有ライブラリに変更が加わったときには、このKEY311の値も全く異なる値に変更される。また、未公開の秘密鍵312を用いているため、悪意のある第三者が、このKEY311を算出することも不可能である。図4は、この発明の実施の形態1によるコンピュータシステムの改ざん検出のイメージを示す図である。図4において、31、33、311、312は図3におけるものと同一のものである。図4では、リンクの手順をa、bで示すとともに、改ざん検出の手順を1.2.3.で示している。改ざん検出の手順については、図6により詳述する。図5は、この発明の実施の形態1によるコンピュータシステムの動的共有ライブラリのKEY生成の手順を示すフローチャートである。図6は、この発明の実施の形態1によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。図7は、通常のロード処理におけるベースアドレス不一致のイメージである。図7において、アプリケーションイメージ21のアプリケーションが、動的共有ライブラリ13をメモリ空間上にロードする場合、通常のロード処理では、動的共通ライブラリ13がロードされる位置ベースアドレスが、アプリケーションによって動的に変更され、ずれてしまうため、メモリ空間の動的共有ライブラリイメージ23は、図のように一致しない。図8は、この発明の実施の形態1によるコンピュータシステムの擬似ロードの手順を示すフローチャートである。次に、動作について説明する。まず、図5を用いて、実施の形態1による動的共有ライブラリ34のKEY生成について説明する。まず、本発明におけるKEY生成プログラム32は、対象となる動的共有ライブラリ13のファイルCRCを計算するS1000。このとき、CRCを計算する対象の領域は、動的共有ライブラリ13全体であるが、KEY領域だけは除く。また、このCRCは、いわゆるCRCの性質を持つアルゴリズムであれば、CRC32やMD5等、特にアルゴリズムの指定はないただし、以降、使用アルゴリズムの種類は統一させる必要がある。次に、KEY生成プログラム32は、計算したCRCと、自身が隠し持つ秘密鍵312から、ハッシュであるKEY311を計算するS1010。このハッシュ化についても、いわゆるハッシュの性質を持つアルゴリズムであれば、特にアルゴリズムの指定はない。最後に、KEY生成プログラム32は、計算したKEY311を、元の動的共有ライブラリ13に埋め込むことによって、本発明における動的共有ライブラリ33が完成するS1020。次に、実施の形態1による改ざん検出の手順について、図6を用いて説明する。なお、改ざん検出のイメージは図4に示している。以下の手順は、本発明におけるアプリケーション31が、動的共有ライブラリ33をロードリンクし、実際にそのライブラリの機能を呼び出す直前に行う。図6において、まず、アプリケーション31は、KEY生成プログラム32と同様に、動的共有ライブラリ33のファイルCRCを計算するS1100。このとき、CRCを計算する対象の領域は、動的共有ライブラリ33全体であるが、KEY領域だけは除く。続いて、アプリケーション31は、計算したCRCと、自身が隠し持つ秘密鍵312から、ハッシュであるKEY311を計算するS1101。次いで、アプリケーション31は、動的共有ライブラリ33から、KEY311を抽出するS1102。そして、抽出したKEY311と計算したKEY311を比較するS1103。この比較で、KEY311が一致しない場合は、動的共有ライブラリ33の本体ファイルが、改ざんを受けているということなので、ファイル改ざん検知で異常終了となるS1130。S1103の比較で、KEY311が一致したときは、アプリケーション31は、動的共有ライブラリ33をメモリ空間上に擬似ロードするS1110。ここで、擬似ロードとは、OSが提供するロードのシステムコールではなく、そのシステムコールの動作を擬似的に再現して行うものである。これは、通常のロード処理では、動的共通ライブラリがロードされる位置ベースアドレスが、アプリケーションによって動的に変更され、ずれてしまうためである図7参照。この擬似ロードの処理については、図8を用いて後述する。次いで、アプリケーション31は、元の動的共有ライブラリのイメージ23と、メモリ空間上に擬似ロードした動的共有ライブラリのイメージ28図4参照を比較するS1120。ただし、データ領域104は、プロセスの状態に応じて、値大域変数や静的局所変数が不定であるため、比較の対象外とする。比較結果、イメージが一致しない場合はS1121、動的共有ライブラリ33のメモリ空間上のイメージが、改ざんを受けているということなので、メモリ改ざん検知で異常終了となるS1130。最後に、比較結果のイメージが一致した場合は、アプリケーション31は、動的共有ライブラリ33に対して、ファイル/メモリの両方で改ざんを受けていないということで、正常終了となる。その後、アプリケーション31が、動的共有ライブラリ33の機能を実際に呼び出すこととなる。次に、擬似ロードの処理について図8を用いて説明する。図8において、まず、動的共有ライブラリ33のファイルの内容をそのまま、新たに確保したメモリ空間上にコピーするS1200。そして、再配置情報領域108を参考に、ネイティブコード領域102に対して、ベースアドレスの再配置を、自身のベースアドレスを基準にするのではなく、元の動的共有ライブラリ13のベースアドレスを基準に、実行するS1210。ここが、通常のロード処理と異なる点である。最後に、インポート関数領域106に対して、元の動的共有ライブラリ13と同様に、インポート関数の紐付けバインディング処理を実行するS1220。実施の形態1によれば、このようにすることによって、動的共有ライブラリのメモリ空間へのロード前及びロード後の改ざんを検出することができるので、動的共有ライブラリが改ざんを受けていないことを保証できるようになる。実施の形態2.実施の形態2は、実施の形態1において、動的共有ライブラリが、OS等既存の動的共有ライブラリで、内部にKEYを保持していない場合についてのものである。実施の形態1のように、自身で製作した動的共有ライブラリの場合は、KEY生成プログラムを用いて、自由にKEYを埋め込むことができるが、動的共有ライブラリが、OS等既存の動的共有ライブラリの場合は、そのファイルを自身で変更することができないため、自由にKEYを埋め込むことができない。実施の形態2は、このような場合に対応したものである。図9は、この発明の実施の形態2によるコンピュータシステムの改ざん検出のイメージを示す図である。図9において、25、26、28、31、311は図4におけるものと同一のものである。動的共有ライブラリ16は、OS等既存の動的共有ライブラリで、KEYを保持していない。この場合には、外部KEYファイル17のKEYを用いてファイル改ざんチェックが行われる。図10は、この発明の実施の形態2によるコンピュータシステムのファイル構成を示す説明図である。図10において、動的共有ファイル16のKEY311を管理するために、新たに外部KEYファイル17を用意する。外部KEYファイル17の中には、ファイル名とそれに対応するKEY311を予めリストに保存しておく。また、外部KEYファイル17は、秘密鍵312を用いて暗号化することによって、悪意のある第三者に中身がわからないようにする。外部KEYファイル17の作成には、専用かつ非公開の外部KEYファイル生成プログラム34外部KEYファイル生成手段を使用する。外部KEYファイル作成プログラム34は、定数データ領域103の中に、秘密鍵312を保持している。この秘密鍵312は、ファイルの中をバイナリエディタ等で調べても判らないよう、暗号化した状態となっている。外部KEYファイル作成プログラム34は、図3のKEY生成プログラム32と同様にしてKEYを生成する。図11は、この発明の実施の形態2によるコンピュータシステムの外部KEYファイル生成プログラムの動作手順を示すフローチャートである。図12は、この発明の実施の形態2によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。次に、動作について説明する。まず、図11を用いて、外部KEYファイル生成プログラム34の動作手順について説明する。外部KEYファイル生成プログラム34は、外部KEYファイル17を対象に、KEY311の追加/変更/削除に応じた処理を行う。外部KEYファイル17は、暗号化されているため、外部KEYファイル生成プログラム34は、自身の秘密鍵312を用いて、復号化/暗号化しながら、外部KEYファイル17に対して、KEY311の追加/変更/削除の編集を行うようになっている。図11で、KEY追加の場合は、対象となるOS等既存の動的共有ライブラリ16のCRCを計算するS1300。そして、自身の持つ秘密鍵312と合わせてハッシュであるKEY311を計算するS1310。そして、そのKEY311を外部KEYファイル17の中に、新規に埋め込むS1320。次に、KEY変更の場合は、KEY追加の場合と同様に、KEY311の計算を行うS1300、S1310。そして、外部KEYファイル17から対応する動的共有ライブラリファイルのKEY311を検索し、取得するS1330。そして、取得したKEY311を、新しく計算したKEY311に置き換えるS1340。最後に、KEY削除の場合は、KEY変更の場合と同様に、外部KEYファイル17から対応する動的共有ライブラリファイルのKEY311を検索し、取得するS1330。そして、外部KEYファイル17から、そのKEY311の削除を行うS1350。次に、実施の形態2における改ざんの検出手順を図12に基づき、説明する。図12のS1100、S1101、S1103、S1110、S1120、S1121、S1130は、実施の形態1の図6における処理と同じ処理である。図12では、図6の処理S1102に代えて、S1360の処理を実行する。S1360では、外部KEYファイル17から対応する動的共有ライブラリファイルのKEY311を検索し、取得する。なお、図12のS1100、S1101、S1360及びS1103は、第3の検出手段を構成する。実施の形態2によれば、このようにすることによって、OS等既存の動的共有ライブラリなど、内部にKEYを持たせることができないような動的共有ライブラリファイルに対しても、改ざんのチェックを行うことができる。実施の形態3.図13は、複数のライブラリが連鎖的にロードされた場合の、悪意を持った第三者によるメモリ空間上のイメージ差し替えを示すイメージ図である。図13において、25、26、28、31、33、311、312は図4におけるものと同一のものである。図13では、複数の動的共有ライブラリ13が同時にロードされ、一方の動的共有ライブラリ13が、内部でさらに別の動的共有ライブラリ13の機能を使用していた場合に、悪意を持った第三者1が、別の動的共有ライブラリ13を改ざんするイメージを示している。改ざんされた動的共有ライブラリイメージ24が示されている。図13のように、複数の動的共有ライブラリ13が同時にロードされた場合、ある動的共有ライブラリ13に対して、実施の形態1、2にような改ざんチェックを行って、問題がなかったとしても、その動的共有ライブラリ13Aが、内部でさらに別の動的共有ライブラリ13Bの機能を使用しており、その別の動的共有ライブラリ13Bに対して、悪意のある第三者1がファイル/メモリ空間上の改ざんを行っていると、改ざんを検出できず、結果として、改ざんされたコードが実行されてしまう恐れがある。そこで、実施の形態3は、実施の形態1、2において、動的共有ライブラリ13を複数ロードした時のために、連鎖的に改ざんチェックを行う機能を有するようにしたものである。図14は、この発明の実施の形態3によるコンピュータシステムの改ざん検出のイメージを示す図である。図14において、25、26、28、31、33、311、312は図13におけるものと同一のものである。図14では、改ざんチェックを行う動的共有ライブラリ13のインポートテーブルを確認し、その動的共有ライブラリ13Aが、内部でさらに別の動的共有ライブラリ13Bを使用している場合は、その動的共有ライブラリ13に対して、連鎖的に改ざんチェックを行うようにする。アプリケーション31や各動的共有ライブラリのインポートテーブルには、呼び出す動的共有ライブラリが示されている。図15は、この発明の実施の形態3によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。次に、動作について説明する。実施の形態3における改ざんの検出手順を図15に基づき、説明する。図15において、S1100、S1101、S1103、S1110、S1120、S1121、S1130は図12におけるものと、S1102は図6におけるものとそれぞれ同一の処理である。図15では、S1121でYESの場合に、すなわち、改ざんチェックの最後に、その動的共有ライブラリ13のインポートテーブルを確認し、内部でさらに別の動的共有ライブラリ13を使用している場合S1400は、その動的共有ライブラリ13に対して、再帰的に改ざんチェックを行うために、S1100へ戻るようになっているS1410。実施の形態3によれば、このようにすることによって、改ざんチェック対象の動的共有ライブラリが、さらに、内部で別の動的共有ライブラリを使用しているような場合に対しても、改ざんのチェックが行うことができる。実施の形態4.例え、動的共有ライブラリの改ざんチェックを行ったとしても、アプリケーションが動的共有ライブラリを呼び出す直前、アプリケーションの中で、すでに改ざんを受けている可能性がある。そこで、実施の形態4は、実施の形態1~実施の形態3において、アプリケーション31は、アプリケーション31自身に対しても、改ざんのチェックを行う場合についてのものである。図16は、この発明の実施の形態4によるコンピュータシステムの改ざん検出のイメージを示す図である。図16において、25、31、311、312は図4におけるものと同一のものである。図16では、アプリケーション31が擬似ロードされたアプリケーションイメージ29が示されている。アプリケーション31の中に、秘密鍵312実施の形態1~実施の形態3と同様のものと、KEY311を保持している。このKEY311は、KEY生成プログラム32によって生成され、埋め込まれている。図17は、この発明の実施の形態4によるコンピュータシステムの改ざん検出の手順を示すフローチャートである。次に、動作について説明する。実施の形態4では、アプリケーション31の中に、秘密鍵312とKEY311を保持している。このKEY311は、KEY生成プログラム32によって埋め込まれたものである。次に、実施の形態4による改ざん検出の手順について、図17に基づき説明する。アプリケーション31は、自身に対し、改ざんチェックを実施するS1500。このチェックは、図6、図12、図15と同様にして実施する。改ざんを検出したらS1510、ファイル改ざん検知で異常終了するS1520。改ざんを検出しない場合にはS1510、アプリケーション31が呼び出す動的共有ライブラリに対して、改ざんチェックを実施するS1530。このチェックは、図6、図12、図15と同様にして実施する。次いで、改ざん検出したかどうかによりS1540、改ざん検出した場合には、ファイル改ざん検知で異常終了しS1520、改ざん検出しない場合は正常終了する。実施の形態4によれば、このようにすることによって、自身であるアプリケーションに対する改ざんに対しても、改ざんを検出することが可能になる。実施の形態5.実施の形態5は、実施の形態1~実施の形態4において、擬似ロードを行うことなく、逐次的に一部分をロードすることによって、改ざんのチェックを行う場合についてのものである。図18は、この発明の実施の形態5によるコンピュータシステムの改ざん検出のイメージを示す図である。図18において、25、26、28、31、33、311、312は図4におけるものと同一のものである。図18では、改ざんチェックの対象ファイルである動的共有ライブラリ33を、メモリ空間上に擬似ロードそのイメージの領域を全て確保し、そのイメージと比較チェックを行うのではなく、動的共有ライブラリ33またはアプリケーションを、逐次的に一部分ずつメモリ空間上に確保し、それと少しずつ比較チェックを行っていくようにする。このようにすることによって、アルゴリズムは複雑になるものの、メモリ空間上にチェック対象の擬似ロードを一括して行う必要がなくなり、改ざんチェックの際のメモリ空間の大幅な節約が可能となる。実施の形態5によれば、メモリ空間上にチェック対象の擬似ロードを一括して行う必要がなくなり、改ざんチェックの際のメモリ空間の大幅な節約が可能となる。