(57)【要約】  ハッシュを利用した多重バイナリファイルの無欠性検証方法を開示する。第1乃至第N（Nは2以上の自然数）のバイナリの無欠性を検証する方法において、前記第1乃至前記第Nのバイナリを実行するためにメインメモリにロードする過程と、前記メインメモリにロードされた前記第Kのバイナリ（K=1、・・・、N-1）がハッシュ（hash）を利用して自分の無欠性を検証する自己（self）ハッシュ検証過程と、前記第1乃至前記第Kのバイナリのいずれかのバイナリを検証バイナリと設定し、前記メインメモリにロードされる前記第（K + 1）のバイナリを被検証バイナリと設定して、前記検証バイナリがハッシュを利用して前記被検証バイナリの無欠性を検証する連動ハッシュ検証過程とを含むことを特徴とするハッシュを利用したプログラムの無欠性検証方法を提供する。【選択図】図６
2016538609.tif 000002
【特許請求の範囲】
【請求項１】
第1乃至第N（Nは2以上の自然数）のバイナリの無欠性を検証する方法において、
前記第1乃至前記第Nのバイナリを実行するためにメインメモリにロードする過程と、
前記メインメモリにロードされた第Kのバイナリ（K=1、・・・、N-1）がハッシュ（hash）を利用して自分の無欠性を検証する自己（self）ハッシュ検証過程と、
前記第1乃至前記第Kのバイナリのいずれかのバイナリを検証バイナリと設定し、前記メインメモリにロードされる前記第（K + 1）のバイナリを被検証バイナリと設定して、前記検証バイナリがハッシュを利用して前記被検証バイナリの無欠性を検証する連動（link）ハッシュ検証過程とを含むことを特徴とするハッシュを利用したプログラムの無欠性検証方法。
【請求項２】
前記第Nのバイナリが前記メインメモリにロードされた後、前記第Nのバイナリが前記自己ハッシュ検証過程を行い、第2乃至前記第Nのバイナリのいずれかのバイナリを前記検証バイナリとし、第1のバイナリを前記被検証バイナリと設定して、前記連動ハッシュ検証過程を行う過程をさらに含むことを特徴とする請求項１項に記載のハッシュを利用したプログラムの無欠性検証方法。
【請求項３】
前記連動ハッシュ検証過程において、
前記被検証バイナリが前記第（K + 1）のバイナリである場合、前記第Kのバイナリが検証バイナリであることを特徴とする請求項１項に記載のハッシュを利用したプログラムの無欠性検証方法。
【請求項４】
前記自己ハッシュ検証過程は、前記メインメモリにロードされたバイナリが前記メインメモリにロードされた直後に行うことを特徴とする請求項１項に記載のハッシュを利用したプログラムの無欠性検証方法。
【請求項５】
前記連動ハッシュ検証過程は、前記検証バイナリで、前記被検証バイナリが前記メインメモリにロードされる直前に行うことを特徴とする請求項１項に記載のハッシュを利用したプログラムの無欠性検証方法。
【請求項６】
前記第1乃至前記第Nのバイナリの無欠性検証のために原本バイナリに対するハッシュレジストリを読み取る過程を含むことを特徴とする請求項１項に記載のハッシュを利用したプログラムの無欠性検証方法。
【請求項７】
前記自己ハッシュ検証過程は、
前記メインメモリにロードされたバイナリをハッシュ関数に入力して、自己ファイルハッシュコードを抽出する自己ファイルハッシュ抽出過程と、
前記自己ファイルハッシュ抽出過程で抽出された自己ファイルハッシュコードが前記ハッシュレジストリに含まれているハッシュコードのいずれかと一致するか否かを判断するファイル変形判断過程と、
前記ファイル変形判断過程でファイルが変形されたものと判断された場合は、プログラムの実行を中断する過程とを含むことを特徴とする請求項６項に記載のハッシュを利用したプログラムの無欠性検証方法。
【請求項８】
前記連動ハッシュ検証過程は、
前記被検証バイナリをハッシュ関数に入力して、前記被検証バイナリの連動ファイルハッシュコードを抽出する連動ファイルハッシュ抽出過程と、
前記連動ファイルハッシュ抽出過程で抽出された連動ファイルハッシュコードが前記ハッシュレジストリに含まれているハッシュコードのいずれかと一致するか否かを判断するファイル変形判断過程と、
前記ファイル変形判断過程でファイルが変形されたものと判断された場合は、プログラムの実行を中断する過程とを含むことを特徴とする請求項６項に記載のハッシュを利用したプログラムの無欠性検証方法。
【請求項９】
前記連動ファイルハッシュ抽出過程は、
前記検証バイナリは、前記検証バイナリを除いた前記第1乃至前記第Nのバイナリのいずれかが前記被検証バイナリになるのかに関する情報を獲得する過程を含むことを特徴とする請求項１項に記載のハッシュを利用したプログラムの無欠性検証方法。
【請求項１０】
前記連動ハッシュ検証過程は、
前記第1のバイナリ以外は、前記検証バイナリが前記メインメモリにロードされず、前記被検証バイナリを前記メインメモリにロードした場合、プログラムの実行を中断する過程を含むことを特徴とする請求項１項に記載のハッシュを利用したプログラムの無欠性検証方法。
【請求項１１】
第1乃至第N（Nは2以上の自然数）のスクリプトファイルの無欠性を検証する方法において、
前記第1乃至前記第Nのスクリプトを実行するために順次呼び出す過程と、
呼び出された第Kのスクリプト（K=1、・・・、N-1）がハッシュ（hash）を利用して自分の無欠性を検証する自己（self）ハッシュ検証過程と、
前記第1乃至前記第Kのスクリプトのいずれかのスクリプトを検証スクリプトと設定し、呼び出される第（K + 1）のスクリプトを被検証スクリプトと設定して、前記検証スクリプトがハッシュを利用して前記被検証スクリプトの無欠性を検証する連動（link）ハッシュ検証過程とを含むことを特徴とするハッシュを利用したプログラムの無欠性検証方法。
【請求項１２】
第1乃至第N（Nは2以上の自然数）のバイナリの無欠性を検証する装置において、
前記第1乃至前記第Nのバイナリを保存するための補助記憶装置と、
前記補助記憶装置から前記第1乃至前記第Nのバイナリを実行するためにロードするためのメインメモリと、
前記メインメモリにロードされた第Kのバイナリ（K = 1、・・・、N-1）がハッシュ（hash）を利用して自分の無欠性を検証する自己（self）ハッシュ検証部と、
前記メインメモリにロードされた第1乃至第Kのバイナリのいずれかのバイナリを検証バイナリと設定し、前記メインメモリにロードされる前記第（K + 1）のバイナリを被検証バイナリと設定して、前記検証バイナリがハッシュを利用して前記被検証バイナリの無欠性を検証する連動ハッシュ検証部とを含むことを特徴とするハッシュを利用したプログラムの無欠性検証装置。
【請求項１３】
前記連動ハッシュ検証部は、
前記第Nのバイナリが前記メインメモリにロードされた後、前記第Nのバイナリによって前記自己ハッシュ検証過程を行い、第2乃至前記第Nのバイナリのいずれかのバイナリを前記検証バイナリとし、第1のバイナリを前記被検証バイナリとして、前記連動ハッシュ検証を行うことを特徴とする請求項１２項に記載のハッシュを利用したプログラムの無欠性検証装置。
【請求項１４】
前記第1乃至前記第Nのバイナリの無欠性検証のために原本バイナリに対するハッシュレジストリを保存するハッシュレジストリ保存部を含むことを特徴とする請求項１２項に記載のハッシュを利用したプログラムの無欠性検証装置。
【請求項１５】
前記自己ハッシュ検証部は、
前記メインメモリにロードされたバイナリをハッシュ関数に入力して、自己ファイルハッシュコードを抽出する自己ファイルハッシュ抽出部と、
前記自己ファイルハッシュ抽出部で抽出されたハッシュコードが前記ハッシュレジストリに含まれているハッシュコードのいずれかと一致するか否かを判断して、ファイルが変形されたものと判断された場合は、プログラムの実行を中断するファイル変形判断部とを含むことを特徴とする請求項１４項に記載のハッシュを利用したプログラムの無欠性検証装置。
【請求項１６】
前記連動ハッシュ検証部は、
前記検証バイナリで前記被検証バイナリをハッシュ関数の入力にして、連動ファイルハッシュコードを抽出する連動ファイルハッシュ抽出部と、
前記連動ファイルハッシュ抽出部で抽出されたハッシュコードが前記ハッシュレジストリに含まれているハッシュコードのいずれかと一致するか否かを判断して、ファイルが変形されたものと判断された場合は、プログラムの実行を中断するファイル変形判断部とを含むことを特徴とする請求項１４項に記載のハッシュを利用したプログラムの無欠性検証装置。
【請求項１７】
第1乃至第N（Nは2以上の自然数）のバイナリの無欠性を検証する方法において、
前記第1乃至前記第Nのバイナリのうち第Kのバイナリ（K=1、・・・、N）を実行するためにメインメモリにロードする過程と、
前記メインメモリにロードされた前記第Kのバイナリがハッシュ（hash）を利用して自分の無欠性を検証する自己（self）ハッシュ検証過程と、
前記ロードされたバイナリの動作中に無欠性が検証されていない無検証バイナリが呼び出されると、呼び出すバイナリを検証バイナリと設定し、また、前記メインメモリにロードされる前記無検証バイナリを被検証バイナリと設定して、前記検証バイナリがハッシュを利用して前記被検証バイナリの無欠性を検証し、無欠性が検証されたら、前記ロードする過程にリターンする連動（link）ハッシュ検証過程とを含むことを特徴とするハッシュを利用したプログラムの無欠性検証方法。
【請求項１８】
前記第1乃至前記第Nのバイナリの無欠性検証のために原本バイナリに対するハッシュレジストリを読み取る過程を含むことを特徴とする請求項１７項に記載のハッシュを利用したプログラムの無欠性検証方法。
【請求項１９】
前記自己ハッシュ検証過程は、
前記メインメモリにロードされたバイナリをハッシュ関数に入力して、自己ファイルハッシュコードを抽出する自己ファイルハッシュ抽出過程と、
前記自己ファイルハッシュ抽出過程で抽出された自己ファイルハッシュコードが前記ハッシュレジストリに含まれているハッシュコードのいずれかと一致するか否かを判断するファイル変形判断過程と、
前記ファイル変形判断過程でファイルが変形されたものと判断された場合は、プログラムの実行を中断する過程とを含むことを特徴とする請求項１８項に記載のハッシュを利用したプログラムの無欠性検証方法。
【請求項２０】
前記連動ハッシュ検証過程は、
前記被検証バイナリをハッシュ関数に入力して、前記被検証バイナリの連動ファイルハッシュコードを抽出する連動ファイルハッシュ抽出過程と、
前記連動ファイルハッシュ抽出過程で抽出された連動ファイルハッシュコードが前記ハッシュレジストリに含まれているハッシュコードのいずれかと一致するか否かを判断するファイル変形判断過程と、
前記ファイル変形判断過程でファイルが変形されたものと判断された場合は、プログラムの実行を中断する過程とを含むことを特徴とする請求項１８項に記載のハッシュを利用したプログラムの無欠性検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハッシュを利用したプログラムの無欠性を検証する方法に関するものである。
【背景技術】
【０００２】
以下に記述する内容は、単に本実施例に関連する背景情報のみを提供するだけで、従来技術を構成するものではないということを明らかにして置く。
【０００３】
ハッシュコード（Hash Code）は、ハッシュ関数（Hash Function）の出力ビット文字列である。ハッシュ関数の入力値に基づいて固有のハッシュコードが抽出されるので、バイナリファイルをハッシュ関数に入力すると、バイナリファイルごとに固有のハッシュコードを抽出することができる。したがって、ハッシュをバイナリファイルに適用した場合、ハッシュコードは、ハッシュ関数の入力値であるバイナリファイルに対するデジタル指紋（digital fingerprint）であると言える。
【０００４】
比較しようとする二つのバイナリファイルの内容が1ビットでも差がある場合は、それぞれ別のハッシュコードが出力される。これを利用すると、原本ファイルと比較対象ファイルの全体を比較してみなくても、原本ファイルのハッシュコードと比較対象ファイルのハッシュコードとを比較すれば、ファイルが変形されたか否かを確認することができる。さらに、ファイルが変形されたか否かを検証するために、原本ファイルの内容を保管する必要がなく、原本ファイルのハッシュコードのみを保管すれば良いので、検証が簡単な上に、ハッシュコードの保管も簡単であるから、プログラムを攻撃しようとする者には簡単に露出されない。
【０００５】
しかし、ファイルハッシュ方法は、ファイルの無欠性検証をするために一般的に使用される技術ではあるものの、検証するプログラムのバイナリファイルが複数である場合には、複数のバイナリファイルを検証する方法に応じて、効率性と保安性が違ってくる。プログラムは、一つのバイナリで構成されている場合もあるが、動的ライブラリ（Dynamic Library）を使用する場合は、複数のバイナリファイルで1つのプログラムを構成する場合もある。また、複数の応用プログラムの間でも相互に無欠性の検証が必要な場合もある。
【０００６】
プログラムが複数のバイナリファイルを含む場合には、ハッシュを利用した無欠性保障のための様々な検証方法があるが、検証されるハッシュ検証の時点まで考慮していなかった。簡便に使用されている多重バイナリファイルの無欠性を検証する方法としては、プログラムを構成する複数のバイナリファイルのいずれかのバイナリファイルで残りのバイナリファイルのファイルハッシュを検証する方法がある。他の方法としては、プログラムを構成する複数のバイナリを循環する形で配置し、各バイナリで両側に隣接するバイナリのファイルハッシュを検証する方法がある。
【０００７】
複数のバイナリを含むプログラムファイルのいずれかのバイナリファイルで残りのバイナリファイルのファイルハッシュを検証する方法は、1つのバイナリから別のバイナリファイルの無欠性を検証する単純な構造を持っており、開発が容易であるという利点があるが、ハッシュを検証するためのコードが露出されたら、簡単なコード変更だけですべてのファイルのハッシュ検証が無力化されることができるという点で、セキュリティが多少脆弱である。
【０００８】
プログラムを構成する複数のバイナリを循環する形で配置し、各バイナリで両側に隣接するバイナリのファイルハッシュを検証する方法は、両方のバイナリ同士が相手を検証しなければならないため、ファイルハッシュを検証するコードの位置を把握することが難しく、そして、いくつかのバイナリファイルのハッシュ検証コードが露出されて無力化されても、残りの他のファイルに対する無欠性の検証が可能であるという点で、最初の方法よりはセキュリティ性が改善されたと言える。しかし、プログラムファイルをロードする前の時点で検証するよりは、ロードされた瞬間に他のファイルを検証するため、他のファイルのロード時点に依存する。よって、順序による時間差ホール（hole）が発生するという点で根本的な解決方法とは言えない。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本実施例は、プログラムに含まれている多重のバイナリファイルまたは複数のプログラムの相互間の無欠性を検証する方法を提供することを主な目的とする。
【課題を解決するための手段】
【００１０】
本実施例の一側面によれば、第1乃至第N（Nは2以上の自然数）のバイナリの無欠性を検証する方法において、前記第1乃至前記第Nのバイナリを実行するためにメインメモリにロードする過程と、前記メインメモリにロードされた前記第Kのバイナリ（K=1、・・・、N-1）がハッシュ（hash）を利用して自分の無欠性を検証する自己（self）ハッシュ検証過程と、前記第1乃至前記第Kのバイナリのいずれかのバイナリを検証バイナリと設定し、前記メインメモリにロードされる前記第（K + 1）のバイナリを被検証バイナリと設定して、前記検証バイナリがハッシュを利用して前記被検証バイナリの無欠性を検証する連動（link）ハッシュ検証過程とを含むことを特徴とするハッシュを利用したプログラムの無欠性検証方法を提供する。
【００１１】
本実施例の他の側面によれば、第1乃至第N（Nは2以上の自然数）のスクリプトファイルの無欠性を検証する方法において、前記第1乃至前記第Nのスクリプトを実行するために順次呼び出す過程と、呼び出された前記第Kのスクリプト（K=1、・・・、N-1）がハッシュ（hash）を利用して自分の無欠性を検証する自己（self）ハッシュ検証過程と、前記第1乃至前記第Kのスクリプトのいずれかのスクリプトを検証スクリプトと設定し、呼び出される前記第（K + 1）のスクリプトを被検証スクリプトと設定して、前記検証スクリプトがハッシュを利用して前記被検証スクリプトの無欠性を検証する連動（link）ハッシュ検証過程とを含むことを特徴とするハッシュを利用したプログラムの無欠性検証方法を提供する。
【００１２】
また、本実施例の他の側面によれば、第1乃至第N（Nは2以上の自然数）のバイナリの無欠性を検証する装置において、前記第1乃至前記第Nのバイナリを保存するための補助記憶装置と、前記第1乃至前記第Nのバイナリを実行するために順次ロードするためのメインメモリと、前記補助記憶装置と前記メインメモリに接続され、前記メインメモリにロードされた第Kのバイナリ（K = 1、・・・、N-1）がハッシュ（hash）を利用して自分の無欠性を検証する自己（self）ハッシュ検証部と、前記補助記憶装置と前記メインメモリに接続され、前記メインメモリにロードされた第1乃至第Kのバイナリのいずれかのバイナリを検証バイナリと設定し、前記メインメモリにロードされる前記第（K + 1）のバイナリを被検証バイナリと設定して、前記検証バイナリがハッシュを利用して前記被検証バイナリの無欠性を検証する連動ハッシュ検証部とを含むことを特徴とするハッシュを利用したプログラムの無欠性検証装置を提供する。
【００１３】
また、本実施例の他の側面によれば、第1乃至第N（Nは2以上の自然数）のバイナリの無欠性を検証する方法において、前記第1乃至第Nのバイナリのうち、第Kのバイナリ（K = 1、・・・、N）を実行するためにメインメモリにロードする過程と、前記メインメモリにロードされた前記第Kのバイナリがハッシュ（hash）を利用して自分の無欠性を検証する自己（self）ハッシュ検証過程と、前記ロードされたバイナリの動作中に無欠性が検証されていない無検証バイナリが呼び出されると、呼び出すバイナリを検証バイナリと設定し、また、前記メインメモリにロードされる前記無検証バイナリを被検証バイナリと設定して、前記検証バイナリがハッシュを利用して前記被検証バイナリの無欠性を検証し、無欠性が検証されたら、前記ロードする過程にリターンする連動（link）ハッシュ検証過程とを含むことを特徴とするハッシュを利用したプログラムの無欠性検証方法を提供する。
【発明の効果】
【００１４】
本実施例によれば、プログラムを構成する多重バイナリファイル、または複数のプログラムの相互間の無欠性を検証することにおいて、バイナリファイルを実行するためにメインメモリにロードする順序に応じて、メインメモリに先にロードされたバイナリでメインメモリにロードされる直前のバイナリの無欠性を検証する連動ハッシュ（link hash）検証方法と、バイナリが実行されるためにメインメモリにロードされた直後に自分のファイルの無欠性の検証を行う自己ハッシュ（self hash）検証方法を混合して使用すれば、バイナリがロードされる時点を前後にして無欠性を検証し、バイナリのロードと検証との間の時間差（gap）を最小限に抑えることができ、無欠性検証の有効性を高めることができる。また、連動ハッシュ検証方法の場合、自分のファイルで無欠性の検証を行わないため、どの位置で無欠性を検証するのか分かりにくく、静的解析ツールにより自己ハッシュ検証コードが露出され無力化されても、隣接する他のバイナリで重複して検証を行うことができ、ファイルの無欠性が保障される。
【００１５】
また、本発明の実施例によれば、プログラムを構成する多重のバイナリまたは複数のプログラムのいずれかがメインメモリにロードされる順序を違反してロードされた場合、ファイルが変形されたものと判断して、プログラムを終了する。そしてセキュリティ検証を実行するバイナリがまずメインメモリにロードされて被検証バイナリのセキュリティ検証を終えて、すぐに被検証バイナリがメインメモリにロードされるようにして、時間によるホール（hole）を最小化し、無欠性検証の有効性を高める。多重のバイナリのいずれかを変形してメインメモリにロードしようとする場合、補助記憶装置に保存されたファイルが変形されたなら、メインメモリにロードされる直前の連動ハッシュ検証でファイルが変形されたことを発見することができ、もしプログラムを攻撃しようとする者がプログラムを操作するか、または他の方法でプログラムを変形して連動ハッシュ検証が本来の機能を実行できなくなっても、バイナリがメインメモリにロードされた直後に実行する自己ハッシュ検証によってファイルが変形されたことを発見することができる。このような本発明の技術的思想は、バイナリ形式のプログラムだけでなく、スクリプトの形で作成されたプログラムでも同じように適用される。
【発明を実施するための最良の形態】
【００１６】
以下、本実施例を添付した図面を参照して詳細に説明する。
【００１７】
本発明の実施例は、応用プログラムが動的ライブラリを含んでおり、複数のバイナリである場合、応用プログラムから呼び出される動的ライブラリに、本来意図された機能を実行できないようにするか、またはユーザーが意図していない機能（例えば、ゲームプログラムで自動的にゲームを実行して、ゲームアイテムを獲得したり、または支払いの過程で信用情報を許可されていない者に送信するなど）を実行するか、またはウイルスのような害悪を与える新しいコードを添付して、応用プログラムを変形することができる。しかし、複数の動的ライブラリを使用する場合、従来の技術では、ファイルが変形されたか検証しただけで、ハッシュ検証の時点まで考慮しなかった。以下、本発明の実施例では、複数の動的ライブラリを使用する場合でも、応用プログラムと動的ライブラリに対するファイルの無欠性を保障する方法について説明する。ここで、動的ライブラリは、動的リンクライブラリ（Dynamic Link Library）、共有ライブラリ（Shared Library）、ランタイムライブラリ（Run Time Library）、ActiveXコントロールなど、様々な名称で呼称することができる。
【００１８】
しかし、本発明の技術的思想は、動的ライブラリを含む複数のバイナリである場合に限定されない。複数の応用プログラム相互間にも、本発明の技術的思想を適用することができ、第1の応用プログラムと第2の応用プログラムに含まれているバイナリの中で一番最初にメインメモリにロードされる第1のバイナリが自己ハッシュ検証を実行し、次にロードされる第2のバイナリの連動ハッシュ検証を実行し、第2のバイナリはメインメモリにロードされた直後に自己ハッシュ検証を行うことができる。また、本発明の技術的思想は、バイナリ形式に変換されたプログラムに限定されない。Java（登録商標）スクリプト（JavaScript（登録商標））、VBスクリプトなどのスクリプト言語で作成されたプログラムでも同じように適用可能である。複数のJavaScriptを含むプログラムが実行される場合、最初に実行されるjscript1.jsが自分に対する自己ハッシュ検証を実行し、次に実行されるjscript2.jsの連動ハッシュ検証を行う。jscript2.jsはまた、自己ハッシュ検証過程を行う。したがって、請求の範囲に記載されたバイナリは、プログラムなどを含むように解釈されるべきである。以下では、応用プログラムが動的ライブラリを含んでいる場合を中心に説明する。
【００１９】
図1は、多重のバイナリを含むプログラムを実行するコンピュータ装置の例示図である。
【００２０】
補助記憶装置130に保管された応用プログラムと動的ライブラリをメインメモリ120にロードし、中央処理装置110で応用プログラムを実行する。応用プログラムは、実行に必要なデータを入力装置150から受け、実行の結果をディスプレイ装置140に出力する。メインメモリ120にロードされた応用プログラムは、自分が必要な動的ライブラリを補助記憶装置130からロードして使用する。応用プログラムを実行すると、応用プログラムの開始点を含むバイナリファイルがメインメモリ120に最初にロードされて実行される。応用プログラムが実行されている間に、動的ライブラリ内の特定のモジュールを呼び出す必要がある場合、動的ライブラリを補助記憶装置130からメインメモリ120にロードする。
【００２１】
図2は、ファイルハッシュを利用してファイルの無欠性を検証する方法の概略図である。
【００２２】
ファイルハッシュを利用してファイルの無欠性を検証するためには、まず、原本ファイル210をハッシュ関数（MD5、SHA、Checksumなど）に入力して原本ファイルのハッシュコード212を抽出する。原本ファイルのハッシュコード212は、後で比較ファイル220から抽出した比較ファイルのハッシュコード222と比較するために、予め保管して置かなければならない。原本ファイルのハッシュコード212がプログラムを攻撃する者に露出されないようにし、原本ファイルのハッシュコード212と比較ファイル220が配布され、ユーザーシステムで比較ファイル230が実行されると、比較ファイルのハッシュコード222を抽出し、原本ファイルのハッシュコード212と比較して比較ファイル220が変形されたか否かを判断することができる。
【００２３】
図2は、原本ファイル210の内容を「0110000」と示している。この原本ファイル210と同じ内容の比較ファイル220が、原本ファイルのハッシュコード212とともにユーザーに配布される。このとき、二つのファイルのハッシュコードは、両方のファイルの内容が同じなので、「3FA23DF」と同一である。
【００２４】
しかし、配布された後に比較ファイル230が変形され、内容が「0110001」に変更され、変更された比較ファイル230が実行されると、変更された比較ファイル230から抽出されたハッシュコード232は、「C23FEB77」になる。原本ファイルのハッシュコード212と変更された比較ファイルのハッシュコード232とが互いに一致しないため、比較ファイル230が変形されたことを発見することができる。
【００２５】
図3は、複数のバイナリのいずれかで、残りのバイナリの無欠性を検証する従来技術の例示図である。
【００２６】
図3には、プログラムに含まれている複数のバイナリのいずれかで、ファイルハッシュを利用して残りのバイナリファイルが変形されたか否かを検証する方法の例が示されている。メインプログラム310でプログラムに含まれている複数のバイナリのうち、プログラムファイルA（320）、プログラムファイルB（330）、プログラムファイルC（340）を検証対象として無欠性を検証している。プログラムファイルAのハッシュコード322は「3FA234DF」、プログラムファイルBのハッシュコード332は「2FEE3CC1」、プログラムファイルCのハッシュコード342は「F33CA431」である。メインプログラム310は、実行中にプログラムファイルA（320）、プログラムファイルB（330）、またはプログラムファイルC（340）をメインメモリ120にロードして、バイナリファイルをロードしながら、変形されたか否かを検証するためにロードされるファイルのハッシュコードを抽出し、予め保存されたハッシュコードを含むハッシュレジストリで一致するハッシュコードがあるかを検証する。もし、一致するハッシュコードがなければ、ファイルが変形されたものなので、プログラムの実行を中断するなどの措置をとることができる。
【００２７】
しかし、このような方法は、検証を行うメインプログラム310に含まれている検証を行うコードを無力化させれば、すべてのバイナリに対する検証が無力化されるため、セキュリティに脆弱であるという問題点を有している。
【００２８】
図4は、プログラムを構成する複数のバイナリを循環する形で配置し、各バイナリでは、両側に隣接するバイナリのファイルハッシュを検証する方法の例示図である。
【００２９】
図4は、応用プログラムを構成するバイナリファイルで、プログラムファイルA（410）、プログラムファイルB（420）、およびプログラムファイルC（430）を循環する形で配置し、各バイナリで隣接する2つのバイナリのファイルハッシュを検証する従来の連動ハッシュ検証技術の例である。応用プログラムを実行すると、プログラムファイルA（410）が最初にメインメモリ120にロードされる。プログラムファイルA（410）は、メインメモリ120にロードされた後、プログラムファイルBに対するハッシュ検証412と、プログラムファイルCに対するハッシュ検証414を実行する。プログラムファイルB（420）もメインメモリ120にロードされた後、同様の方法で、プログラムファイルAに対するハッシュ検証421と、プログラムファイルCに対するハッシュ検証422を実行する。プログラムファイルC（430）も同じように、プログラムファイルAに対するハッシュ検証431、プログラムファイルBに対するハッシュ検証432を実行する。
【００３０】
図4のようなファイルの相互間を循環しながら相手を検証する方法は、いくつかのバイナリで検証を実行するコードが無力化されても、他に対する検証は有効なので、図3の従来技術の例よりは向上したセキュリティを提供することができる。しかし、この方法も、セキュリティ性は良いが、プログラムファイルをロードする前の時点で検証するよりは、ロードされた瞬間に他のファイルを検証するため、他のファイルのロード時点に依存する。よって、順序による時間差ホール（hole）が発生する。例えば、最後にロードされるプログラムファイルC（430）の場合、ロードされる時間が遅れて、もしプログラムファイルA（410）とプログラムファイルB（420）とがロードされた5秒後にロードされると仮定した場合、プログラムファイルC（430）がハッシュ検証を受けた後からプログラムファイルC（430）がメインメモリ120にロードされるまでの5秒間、攻撃される可能性のあるホール（hole）が発生する。したがって、プログラムファイルC（430）の場合、無欠性検証の有効性が低いと言える。
【００３１】
図5は、本実施例に係る連動ハッシュ検証と自己ハッシュ検証を利用した多重バイナリを検証する方法の例示図である。
【００３２】
図5は、プログラムに含まれている複数のバイナリファイルの無欠性を検証することにおいて、連動ハッシュ検証方法と自己ハッシュ検証方法を組み合わせることにより、従来技術の問題点であるセキュリティホール（hole）を克服する方法の例である。図5において、応用プログラムに含まれているプログラムファイルA（510）、プログラムファイルB（520）、およびプログラムファイルC（530）の中でプログラムファイルA（510）が最初にメインメモリ120にロードされる。
【００３３】
以下、自己ハッシュ検証と連動ハッシュ検証について説明する。プログラムファイルA（510）がメインメモリ120にロードされた直後に自分（self）のバイナリファイルに対するハッシュ検証を行う。これを自己ハッシュ検証過程という。プログラムファイルA（510）は自分のファイルのハッシュコード516を抽出して、ハッシュレジストリに保管されたハッシュコードのいずれかと一致するか否かを判断する自分自身に対するハッシュ検証512を実行する。もし、一致する値がない場合は、プログラムファイルA（510）が変形されたものと判断して、プログラムを終了する。
【００３４】
プログラムファイルA（510）が実行される途中でプログラムファイルB（520）にある特定のモジュールを呼び出す。このとき、プログラムファイルB（520）がロードされる直前に、プログラムファイルA（510）でプログラムファイルBに対するハッシュ検証514を行い、これを連動（link）ハッシュ検証という。まず、プログラムファイルA（510）でプログラムファイルBのハッシュコード526を抽出し、ハッシュレジストリに含まれたハッシュコードのいずれかと一致するか否かを判断する。プログラムファイルA（510）は検証バイナリとなり、プログラムファイルB（520）は被検証バイナリとなって、検証バイナリで被検証バイナリのハッシュ検証を行う。もし、プログラムファイルBのハッシュコード526と一致するハッシュコードがハッシュレジストリにない場合は、プログラムファイルB（520）が変形されたものと判断して、プログラムを終了させる。プログラムファイルB（520）は、メインメモリ120にロードされた直後に、プログラムファイルBに対するハッシュ検証524である自分に対する自己ハッシュ検証を行う。
【００３５】
プログラムファイルA（510）またはプログラムファイルB（520）でプログラムファイルC（530）に含まれている特定のモジュールを呼び出す場合、プログラムファイルB（520）は、プログラムファイルCのハッシュコード536を抽出して、プログラムファイルCに対するハッシュ検証522である連動ハッシュ検証を実行し、プログラムファイルC（530）は、メインメモリ120にロードされた直後に自分に対するファイルハッシュ536を抽出して、プログラムファイルCに対するハッシュ検証534である自己ハッシュ検証を行う。ここで、プログラムファイルB（520）だけでなく、プログラムファイルA（510）もメインメモリ120にロードされて動作中であるので、プログラムファイルA（510）でプログラムファイルC（530）に含まれている特定のモジュールを呼び出すことができる。この方法によれば、プログラムのロードによる無欠性検証の時点も考慮しているため、無欠性検証の有効性を高めることができる。一般的に、ファイルハッシュ検証は、ファイルをロードする直前と直後に実行するのが最も効果的である。ロード時点を基準に検証時点が前後に長くなるほど攻撃可能な時間もそれだけ長くなるからである。例えば、ロードされた数秒後にファイルハッシュを検証することになると、ハッカーがロード前にファイルを変形し、ロードされてから数秒の時間内に原本に交換する場合は、ファイルの無欠性を保障するのが難しいからである。したがって、プログラムロードの直前と直後に無欠性の検証を行う。
【００３６】
応用プログラムの実行中に、最後にメインメモリ120にロードされたバイナリであるプログラムファイルC（530）を検証バイナリと設定し、応用プログラムの実行で最初にメインメモリ120にロードされたプログラムファイルAを被検証バイナリと設定して、プログラムファイルAのハッシュコード516を抽出して、プログラムファイルAに対するハッシュ検証532である連動ハッシュ検証を実行すると、すべてのバイナリに対する連動ハッシュ検証と自己ハッシュ検証とが完了される。
【００３７】
図5には、連動ハッシュ検証が循環するものと示されているが、この図示は、本発明の思想を理解するためのもので、プログラムファイルの設計によっては、すべてのプログラムに対して連動ハッシュ検証を行わないこともある。
【００３８】
図6は、本実施例に係る応用プログラムの無欠性を検証する過程のフローチャートである。
【００３９】
N個のバイナリを含む応用プログラムの無欠性を検証することにおいて、第1のバイナリ乃至第Nのバイナリを実行するために順次メインメモリ120にロードする。第Kのバイナリをメインメモリ120にロードして（S610）、第Kのバイナリに対する自己ハッシュ検証をする（S620）。ここで、Kは1から始まる。自己ハッシュ検証でファイルが変形されていない場合は、第Kのバイナリで第（K + 1）のバイナリをメインメモリ120にロードする直前に、第（K + 1）のバイナリの連動ハッシュを検証して（S630）、ファイルが変形されていない場合は、第（K + 1）のバイナリをメインメモリ120にロードする（S640）。第（K + 1）のバイナリは、メインメモリ120にロードされた直後に自分に対する自己ハッシュを検証する（S650）。そして、（K + 1）とNを比較して（S660）、（K + 1）がNよりも小さい場合、Kの値を1増加させ（S670）、次にロードするバイナリに対する連動ハッシュ検証過程（S630）に移動する。
【００４０】
そして、次にメインメモリ120にロードされるバイナリに対する連動ハッシュ検証と、バイナリがメインメモリ120にロードされた後の自己ハッシュ検証とを繰り返すことにより（K + 1）がNと等しくなると、最後にメインメモリ120にロードされた第Nのバイナリが最初にメインメモリ120にロードされた第1のバイナリの連動ハッシュを検証する（S680）。もし自己ハッシュ検証と連動ハッシュ検証でファイルが変形されたものと判断された場合は、プログラムを終了する（S690）。
【００４１】
スクリプトで作成されたプログラムの場合も同じ方法で無欠性を検証することができる。N個のスクリプトで作成されたプログラムの無欠性を検証することにおいて、第1のスクリプト乃至第Nのスクリプトを実行するために順次呼び出す。第Kのスクリプトを呼び出すと、第Kのスクリプトは、まず自分のハッシュを検証する（Kは1から始まる）。第Kのスクリプトは、次に呼び出される第（K + 1）のスクリプトの連動ハッシュを検証する。第（K + 1）のスクリプトが実行されると、最初に自己ハッシュ検証を行う。このような過程をK +1がNよりも小さい間繰り返して実行し、K +1がNと等しくなると、第Nのスクリプトは、自分の自己ハッシュ検証を実行し、第1のスクリプトの連動ハッシュ検証を行う。
【００４２】
図7は、本実施例に係る応用プログラムの無欠性を検証する装置の構成図である。
【００４３】
複数のバイナリを含む応用プログラムの無欠性を検証する装置は、メインメモリ120、補助記憶装置130、自己ハッシュ検証部710、連動ハッシュ検証部720、無欠性検証部730、無欠性検証部730内のファイルハッシュ抽出部732、ハッシュレジストリ保存部734、ファイル変形判断部730を含む。
【００４４】
複数のバイナリを含む応用プログラムは補助記憶装置130に保存されており、応用プログラムを実行すると、メインメモリ120にロードされる。メインメモリにロードされたバイナリは、自己ハッシュ検証部710と、自己ハッシュ検証部と連結された無欠性検証部730によって自分のファイルハッシュを検証する。無欠性検証部730のファイルハッシュ抽出部732は、自己ハッシュ検証部710から伝達されたバイナリのハッシュコードを抽出して、ハッシュコードをファイル変形判断部736に伝達する。ファイル変形判断部736は、伝達されたハッシュコードとハッシュレジストリ保存部734に保管されたハッシュコードのいずれかと一致するか否かを判断して、ファイルが変形されたか否かを判断する。
【００４５】
メインメモリ120にロードされたバイナリは、連動ハッシュ検証部720を用いて次にロードされるバイナリに対する連動ハッシュを検証する。連動ハッシュ検証部720は、自分と連結された無欠性検証部730に被検証バイナリファイルを送信して、ファイルハッシュを検証する。
【００４６】
自己ハッシュ検証と連動ハッシュ検証の過程で、ファイル変形判断部736でファイルが変形されたと判断した場合は、応用プログラムを終了する。
【００４７】
本発明は、プログラムを始める場合、プログラムファイルをロードしながら実行されるのが好ましいが、プログラムに設計によっては、プログラムの動作中にも適用することができる。
【００４８】
本発明の実施例に係る応用プログラムの無欠性を検証する装置700は、パーソナルコンピュータ（PC：Personal Computer）、ノートブックコンピュータ、タブレット（Tablet）、個人携帯端末（PDA：Personal Digital Assistant）、ゲームコンソール、携帯型マルチメディアプレーヤー（PMP：Portable Multimedia Player）、プレイステーションポータブル（PSP：PlayStation Portable）、無線通信端末（Wireless Communication Terminal）、スマートフォン（Smart Phone）、TV、メディアプレーヤーなどのユーザー端末などである。
【００４９】
本発明の実施例に係る応用プログラムの無欠性を検証する装置700は、応用サーバーとサービスサーバーなどのサーバー端末である。本発明の実施例に係る応用プログラムの無欠性を検証する装置700は、それぞれ、（i）各種機器や有線・無線通信網との通信を行うための通信モデムなどの通信装置、（ii）プログラムを実行するためのデータを保存するためのメモリ、（iii）プログラムを実行して演算および制御するためのマイクロプロセッサなどを備える様々な装置を意味することができる。少なくとも一実施例によれば、メモリはラム（Random Access Memory：RAM）、ロム（Read Only Memory：ROM）、フラッシュメモリ、光ディスク、磁気ディスク、ソリッドステートディスク（Solid State Disk：SSD）などのコンピュータで読み取り可能な記録/保存媒体である。少なくとも一実施例によれば、マイクロプロセッサは、明細書に記載された動作と機能を1つ以上選択的に実行するようにプログラムすることができる。少なくとも一実施例によれば、マイクロプロセッサは、全体または部分的に特定の構成の特定用途向け半導体（application specific integrated circuit：ASIC）などのハードウェアで具現される。
【００５０】
以上の説明は、本実施例の技術思想を例示的に説明したにすぎないものであって、本実施例の属する技術分野で通常の知識を有する者であれば、本実施例の本質的な特性から逸脱しない範囲で様々な修正および変形が可能である。したがって、本実施例は、本実施例の技術思想を限定するためのものではなく説明するためのものであり、これらの実施例により、本実施例の技術思想の範囲が限定されるものではない。本実施例の保護範囲は、特許請求の範囲によって解釈されるべきであり、それと同等の範囲内にあるすべての技術思想は、本実施例の権利範囲に含まれるものと解釈されるべきである。
【図面の簡単な説明】
【００５１】
【図１】図1は、多重のバイナリを含むプログラムを実行するコンピュータ装置の例示図である。
【図２】図2は、ファイルハッシュを利用してファイルの無欠性を検証する方法の概略図である。
【図３】図3は、複数のバイナリのいずれかで、残りのバイナリの無欠性を検証する方法の例示図である。
【図４】図4は、プログラムを構成する複数のバイナリを循環する形で配置し、各バイナリで、両側に隣接するバイナリのファイルハッシュを検証する方法の例示図である。
【図５】図5は、本実施例に係る連動ハッシュ検証と自己ハッシュ検証を利用した多重バイナリを検証する方法の例示図である。
【図６】図6は、本実施例に係る応用プログラムの無欠性を検証する過程のフローチャートである。
【図７】図7は、本実施例に係る応用プログラムの無欠性を検証する装置の構成図である。
【図１】
2016538609.tif 000003
【図２】
2016538609.tif 000004
【図３】
2016538609.tif 000005
【図４】
2016538609.tif 000006
【図５】
2016538609.tif 000007
【図６】
2016538609.tif 000008
【図７】
2016538609.tif 000009
【国際調査報告】
2016538609.tif 000010
2016538609.tif 000011
2016538609.tif 000012
2016538609.tif 000013