(57)【要約】  ハッシュを用いた動的コードの無欠性を検証する方法およびその検証のためのハッシュレジストリ生成方法を開示する。プログラムの一部である特定の関数（セキュリティが必要な関数）にのみセキュリティタグを設定する過程と、セキュリティタグが適用された関数を少なくとも一つ以上含むソースコードをコンパイルしてバイナリを生成するバイナリ生成過程と、前記バイナリを検索して前記セキュリティタグが発見されたら、前記セキュリティタグを含む前記特定の関数のコードブロックに対するハッシュコードを抽出するハッシュコード抽出過程と、前記ハッシュコード抽出過程で生成された少なくとも一つ以上の関数のハッシュコードを含むハッシュレジストリを生成するハッシュレジストリ生成過程とを含むことを特徴とするハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法を提供する。【選択図】図３
2016528635.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの一部である特定の関数（セキュリティが必要な関数）にのみセキュリティタグを設定する過程と、
前記セキュリティタグが適用された関数を少なくとも一つ以上含むソースコードをコンパイルしてバイナリを生成するバイナリ生成過程と、
前記バイナリを検索して前記セキュリティタグが発見されたら、前記特定の関数のコードブロックに対するハッシュコードを抽出するハッシュコード抽出過程と、
前記ハッシュコード抽出過程で生成された少なくとも一つ以上の関数のハッシュコードを含むハッシュレジストリを生成するハッシュレジストリ生成過程とを含むことを特徴とするハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法。
【請求項２】
前記セキュリティタグは、前記特定の関数のコードブロック内で無欠性検査の開始地点を表示する開始タグと終了地点を表示する終了タグとを含むことを特徴とする請求項1に記載のハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法。
【請求項３】
前記ハッシュコード抽出過程は、
前記特定の関数のコードブロック内で前記開始タグから前記終了タグまでのコードに対するハッシュコードを抽出する過程を含むことを特徴とする請求項2に記載のハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法。
【請求項４】
前記ハッシュレジストリ生成過程は、
前記ハッシュコード抽出過程で抽出された少なくとも一つ以上の関数のハッシュコードを含むハッシュコードテーブルを保存する過程と、
前記ハッシュコードテーブルに対するテーブルハッシュコードを生成し、暗号化してシグネチャー（signature）を生成する過程と、
前記シグネチャーを保存する過程とを含むことを特徴とする請求項1に記載のハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法。
【請求項５】
前記特定の関数は、パスワードの入力、決済関連、アカウント認証、暗号化・復号化、認証書の検証、商品購入・販売、演算結果の判定と、初期化関数のうちいずれかであることを特徴とする請求項1に記載のハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法。
【請求項６】
セキュリティタグが適用された関数を少なくとも一つ以上含むバイナリをメインメモリにロードする過程と、
前記バイナリが前記メインメモリで実行される過程で、前記セキュリティタグを含む特定の関数が呼び出されて、前記セキュリティタグが発見されたら、前記関数のコードブロックに対するハッシュコードを抽出するハッシュコード抽出過程と、
前記抽出されたハッシュコードとハッシュレジストリに保存されている少なくとも一つ以上の関数のハッシュコードを含むハッシュコードテーブルのハッシュコードのうちのいずれかと一致するか否かを確認し、前記特定の関数が変形されたか否かを判断する関数変形判断過程と、
前記関数変形判断過程の結果、前記特定の関数が変形されたと判断された場合には、前記バイナリの実行を中止する過程とを含むことを特徴とするハッシュを用いた動的コードの無欠性検証方法。
【請求項７】
前記ハッシュコード抽出過程は、
前記特定の関数のコードブロック内で無欠性検査の開始地点を表示する開始タグから終了地点を表示する終了タグまでのコードに対するハッシュコードを抽出する過程を含むことを特徴とする請求項6に記載のハッシュを用いた動的コードの無欠性検証方法。
【請求項８】
前記ハッシュコード抽出過程は、
前記特定の関数に対する無欠性検査の後、再び前記特定の関数が呼び出された場合、既に設定された時間間隔内では、前記特定の関数に対する無欠性検査を省略するようにする過程を含むことを特徴とする請求項6に記載のハッシュを用いた動的コードの無欠性検証方法。
【請求項９】
前記ハッシュコード抽出過程は、
前記ハッシュレジストリが変形されたか否かを検証するために、前記ハッシュレジストリに貯蔵された前記ハッシュコードテーブルに対するテーブルハッシュコードを抽出する過程と、
前記抽出されたテーブルハッシュコードと、前記ハッシュレジストリまたは別の場所に保管されたシグネチャーから復号化されたテーブルハッシュコードが一致しない場合、前記バイナリの実行を停止する過程とを含むことを特徴とする請求項6に記載のハッシュを用いた動的コードの無欠性検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハッシュを用いた動的コードの無欠性を検証する方法に関するものである。
【背景技術】
【０００２】
以下に記述される内容は、単に本実施例に係る背景情報のみを提供するだけで、従来の技術を構成するものではないことを明らかにしておく。
【０００３】
最近になって、他人のコンピュータに侵入して情報を流出したり、逆分析（reverse engineering）技術を利用して、コンピュータプログラムが本来意図された機能とは違う機能を実行するようにコンピュータプログラムのバイナリコードを変形したり、デバッガなどのツールを使用して、コンピュータプログラムが実行されている途中でバイナリコードを変形し、これを悪用する事例が頻繁に起こっている。たとえば、プログラムを変形する者は、オンラインゲームのユーザーPCで動作するクライアントプログラムを逆分析して、クライアントプログラムが自動的に実行されるように変形すれば、非正常的な方法でゲームアイテムを獲得することもできる。コンピュータプログラムが変形されたか否かは、コンピュータプログラムが実行されるまでは把握しにくく、発見したとしても対処することが困難なので、コンピュータプログラムが実行されている途中で、コンピュータプログラムが変形されたか否かを検査し、措置をとる必要がある。
【０００４】
コンピュータプログラムは、バイナリ形態で補助記憶装置に貯蔵されており、実行されるためにメインメモリにロードされる。メインメモリにロードされたバイナリは、元の状態を常に維持することができなければならない。しかし、逆分析を介してバイナリを変形して実行したり、デバッガなどのツールを使用して、コンピュータプログラムが実行されている途中で変形すれば、元の状態を維持することができない。
【０００５】
上記のような問題を解決するために、従来は、コンピュータプログラムのバイナリが補助記憶装置にファイルの形で貯蔵されているときに、ファイル全体に対するハッシュを求めてファイルが変形されたか否かを検証するか、あるいはメインメモリにロードされたバイナリの全部または一部に対してハッシュを求めて、変形されたか否かを周期的にチェックして、バイナリの無欠性を検証した。前者をファイルハッシュによる検査方法といい、後者をメモリハッシュによる検査方法という。メモリハッシュによる検査方法は、一定の時間間隔で繰り返して実行することによって希望の目的が達成される方法である。このため、メモリハッシュによる検査方法は、プログラムの実行性能とハッシュを実行するシステムの性能を低下させる要因として作用する。
【０００６】
したがって、従来のメモリハッシュをバイナリコードの無欠性検証方法として使用する場合、コンピュータプログラムの実行性能やシステムの性能に敏感な場合には、適用しにくいという問題がある。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本実施例は、バイナリの全体または一部を周期的にまたは反復的に無欠性の検証をするのではなく、セキュリティタグが適用された関数が呼び出された場合にのみ、関数単位で無欠性の検証をするようにして、無欠性検証によるプログラム実行の性能低下を防止する方法を提供することに主な目的がある。
【課題を解決するための手段】
【０００８】
本実施例の一側面によれば、プログラムの一部である特定の関数（セキュリティが必要な関数）にのみセキュリティタグを設定する過程と、セキュリティタグが適用された関数を少なくとも一つ以上含むソースコードをコンパイルしてバイナリを生成するバイナリ生成過程と、前記バイナリを検索して前記セキュリティタグが発見されたら、前記セキュリティタグを含む前記特定の関数のコードブロックに対するハッシュコードを抽出するハッシュコード抽出過程と、前記ハッシュコード抽出過程で生成された少なくとも一つ以上の関数のハッシュコードを含むハッシュレジストリを生成するハッシュレジストリ生成過程とを含むことを特徴とするハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法を提供する。
【０００９】
また、本実施例の他の側面によれば、セキュリティタグが適用された関数を少なくとも一つ以上含むバイナリをメインメモリにロードする過程と、前記バイナリが前記メインメモリで実行される過程で、前記セキュリティタグを含む特定の関数が呼び出されて、前記セキュリティタグが発見されたら、前記関数のコードブロックに対するハッシュコードを抽出するハッシュコード抽出過程と、前記抽出されたハッシュコードとハッシュレジストリに貯蔵されている少なくとも一つ以上の関数のハッシュコードを含むハッシュコードテーブルのハッシュコードのうちのいずれかと一致するか否かを確認し、前記特定の関数が変形されたか否かを判断する関数変形判断過程と、前記関数変形判断過程の結果、前記特定の関数が変形されたと判断された場合には、前記バイナリの実行を中止する過程とを含むことを特徴とするハッシュを用いた動的コードの無欠性検証方法を提供する。
【発明の効果】
【００１０】
本実施例によれば、メインメモリにロードされたコンピュータプログラムのバイナリが変形されたか否かを検査するために、周期的または反復的にバイナリの全体または一部に対してハッシュコードを求める場合、ハッシュ計算の負担によりコンピュータプログラムの実行性能とシステム性能が低下する。さらに実行速度が敏感なコンピュータプログラムの場合は、上記のような方式は、適用するのが困難である。
【００１１】
プログラムの実行性能に敏感ながらバイナリ変形に対するセキュリティが必要なコンピュータプログラムの実行において、メモリハッシュを利用した無欠性検証のために保護が必要な重要な関数にセキュリティタグを適用し、セキュリティタグが適用された関数が呼び出された場合に、関数にのみメモリハッシュを利用してバイナリが変形したか否かを検査すれば、上記のような問題を解決することができる。つまり、周期的または反復的にメモリハッシュを利用して無欠性を検査する方法よりは、セキュリティタグが適用された関数が実行される場合に限って関数の無欠性を検証すれば、検証の有効性が高まり、プログラムの実行性能の低下も最小限に抑えることができる。
【００１２】
たとえセキュリティタグが適用された関数が繰り返して呼び出されても、関数の無欠性検証が行われた後に再び同じ関数が呼び出された場合、一定の時間間隔内では無欠性検査が省略されるようにして、繰り返して関数が呼び出される場合の問題は解決することができる。
【００１３】
しかも、従来のメモリハッシュを用いた無欠性検証方法とは異なり、関数単位のセキュリティタグが適用されたバイナリとハッシュコードで構成されたハッシュレジストリがともに配布されるので、変形したか否かを判断するための別途原本を取得するための過程が必要ではなく、関数が呼び出された場合に関数内で無欠性検査が実行されるので、無欠性検査を実行する別のプログラムが必要ではない。無欠性検証のための別のプログラムが必要な場合、無欠性検証プログラムを無力化させると、変形されたプログラムが実行されることを防止する手段がなくなる。これに比べてセキュリティタグが適用された関数単位で無欠性の検証を行う場合、関数が呼び出されるとともに無欠性の検証も行われるので、上記のような問題が発生しない。
【００１４】
一方、セキュリティタグは、短い時間間隔で繰り返して呼び出される関数よりは、アカウント認証、パスワードの入力、決済関連、セキュリティ関連（ハッシュチェック、アンチデバッギングなど）、暗号化・復号化、認証書の検証、商品購入・販売、初期化、サーバー通信、設定ファイル（セーフファイル）読み書き、演算結果の判定と、プログラムの実行において保護が必要な重要な関数に適している。上記のような関数は、一定の周期で繰り返して呼び出されることはないという特性があり、繰り返して呼び出されても、関数に対する無欠性検証の後、再び同じ関数が呼び出された場合、一定の時間間隔内では検証が省略されるようにすることができる。
【発明を実施するための最良の形態】
【００１５】
以下、本実施例を添付された図面を参照して詳細に説明する。
【００１６】
本実施例に係るハッシュを用いたバイナリの無欠性を検証する方法は、C/C++のようにネイティブコード（native code）を生成することができるプログラム言語であれば、PC、サーバー、スマートフォンなどのハードウェアまたはWindows（登録商標）、UNIX（登録商標）、Linux（登録商標）、OS Xなどの応用ソフトウェアが実行されるオペレーティングシステムに関係なく、同じように適用することができる。つまり、ハードウェアやオペレーティングシステムとは独立して、セキュリティが必要な重要な関数単位で無欠性を検証するので、汎用性があり、有効性が高く、プログラムの実行性能への影響も最小限に抑えることができる無欠性検証方法を提供する。
【００１７】
図1は、本実施例に係る関数単位のメモリハッシュを用いた動的コード無欠性を検証する概念の概要図である。
【００１８】
本実施例に係る関数単位のメモリハッシュを用いたバイナリの無欠性検証方法は、開発用端末100でセキュリティタグが適用された関数を含むバイナリを生成する過程と、バイナリでハッシュレジストリを生成する過程を含む。ただし、バイナリで関数単位のハッシュコードとハッシュレジストリの生成は、単一の装置によって行われる必要はない。セキュリティタグが適用されたバイナリとハッシュレジストリはネットワークやストレージメディアなどの流通手段を介してユーザーに配布され、ユーザー端末200に貯蔵される。ユーザー端末200は、セキュリティタグが適用された関数を少なくとも一つ以上含むバイナリをメインメモリにロードして実行する。この時、セキュリティタグが発見されたら、セキュリティタグを含む関数の無欠性を検証する過程を実行する。
【００１９】
図2は、本実施例に係る関数単位の動的コード無欠性検証を行うことができるプログラムの開発構成図である。
【００２０】
以下、図3の関数単位のセキュリティタグの適用過程を参照して、図2の構成要素を説明する。図2において、コンパイラ110、セキュリティ適用手段120、貯蔵部130は、開発用端末100の内部構成である。セキュリティ適用サーバー400は、セキュリティ適用手段120で実行するハッシュコード抽出過程(S340)と、ハッシュレジストリ生成過程(S360)を開発用端末100に代わって行うことができる。
【００２１】
コンパイラ110は、セキュリティタグが適用された関数を少なくとも一つ以上含むソースコードをコンパイルしてバイナリを生成する。セキュリティ適用手段120は、コンパイラ110が生成したバイナリでセキュリティタグを検索し、セキュリティタグが発見されたら、無欠性検証の開始点を表示する開始タグから終了地点を表示する終了タグまでに対するハッシュコードを生成するハッシュコード抽出過程(S340)を実行し、ハッシュコード抽出過程で抽出された少なくとも一つ以上のハッシュコードを含むハッシュレジストリを生成する(S360)。セキュリティ適用手段120が実行するハッシュコード抽出過程(S340)とハッシュレジストリ生成過程(S360)は、開発用端末100で実行することもできるが、バイナリ全体をセキュリティ適用サーバー400に送信すればセキュリティ適用サーバー400で実行することもできる。だけでなく、セキュリティ適用手段120は、セキュリティタグを発見し(S330)、開始タグから終了タグまでのコードをセキュリティ適用サーバー400に送信して、セキュリティ適用サーバー400にとってハッシュコード抽出過程(S340)とハッシュレジストリ生成過程(S360)を実行するようにすることもできる。セキュリティ適用手段120によって生成されたハッシュレジストリは、バイナリとともにファイルの形で貯蔵部130に貯蔵される(S360)。
【００２２】
図3は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリでハッシュコードを抽出してハッシュレジストリを生成する過程のフローチャートである。
【００２３】
複数の関数を含むコンピュータプログラムのソースコードでアカウントの認証、パスワードの入力、決済関連、セキュリティ関連（ハッシュチェック、アンチデバッギングなど）、暗号化・復号化、認証書の検証、商品購入、販売、初期化、サーバー通信、設定ファイル（セーフファイル）読み書き、演算結果の判定と、プログラムの実行において保護が必要な重要な関数など、少なくとも一つ以上の関数にセキュリティタグを設定する(S300)。上記のような関数は、通常、周期的に繰り返して呼び出されない特性を持っていながらも、コンピュータプログラムを変形しようとする者には主な関心の対象である。したがって、上記のような関数に対してのみ無欠性を検証しても有効性が非常に高く、無欠性の検証によるプログラムの実行性能の低下も最小限に抑えることができる。セキュリティタグが適用された関数を含むソースコードは、コンパイラ110によってコンパイルされ、バイナリ形式になる(S310)。つまり、コンパイラ110によってバイナリファイルが生成される(S310)。
【００２４】
以下、セキュリティ適用手段120で実行される過程と、貯蔵部130で実行される過程について説明する。セキュリティ適用手段120は、バイナリでセキュリティタグを検索する(S320)。セキュリティタグが発見されていない場合は、バイナリの最後に到達したかを確認して(S350)、到達していない場合は、段階S320に戻り、検索を続ける。セキュリティタグが発見されたら、セキュリティタグを含む関数のコードブロック内で無欠性検査の開始を表示する開始タグと終了を表示する終了タグとの間のコードをハッシュ関数（MD5、SHA、Checksumなど）の入力にしてハッシュコードを抽出する(S340)。これをハッシュコード抽出過程という。前記バイナリの最後まで検索を完了したら(S350)、前で抽出した少なくとも一つ以上の関数のハッシュコードから構成されたハッシュコードテーブルを含むハッシュレジストリが生成される(S360)。ハッシュレジストリはバイナリファイルとは別のファイルに保存されることもでき、バイナリファイルの末尾に添付されて保存されることも可能である。
【００２５】
図4は、本実施例に係るハッシュレジストリの無欠性を検証するためのシグネチャーを生成する過程のフローチャートである。
【００２６】
ハッシュレジストリを生成する過程(S360)は、少なくとも一つ以上の関数単位で抽出されたハッシュコードを含むハッシュコードテーブルをハッシュレジストリに保存する（S362）。しかし、ハッシュレジストリに保存されたハッシュコードは、プログラムを変形しようとする者に露出されて変形される可能性がある。つまり、ハッシュレジストリの無欠性の検証をするためにハッシュレジストリに保存された少なくとも一つ以上の関数のハッシュコードで構成されたハッシュコードテーブルをハッシュ関数（MD5、SHA、Checksumなど）の入力にしてテーブルハッシュコードを抽出する（S364）。抽出されたテーブルハッシュコードを暗号化してシグネチャー（signature）を生成する（S366）。シグネチャーは、ハッシュレジストリの無欠性を検証する非常に重要な部分であるため、暗号化アルゴリズム（AES、DES、RSAなど）で暗号化して（S366）、保護されるようにする。シグネチャーは、ハッシュレジストリにハッシュコードテーブルとともに保存することもあるが、これとは別の場所に保存することもできる（S368）。
【００２７】
図5は、本実施例に係るセキュリティタグが設定された関数でハッシュコードを抽出して、ハッシュレジストリを生成する過程の例示図である。
【００２８】
セキュリティタグは、無欠性の検証を開始する地点を表示する開始タグと終了地点を表示する終了タグで構成される。セキュリティタグが適用された関数のコードブロック内で開始タグから終了タグまでのコードをハッシュ関数（MD5、SHA、Checksumなど）の入力にしてハッシュコードを抽出することになる(S340)。図5の例示図でfunction_1関数は開始タグと終了タグで構成されるセキュリティタグを含んでいる。function_1関数の開始タグから終了タグまでのコードをハッシュ関数であるMD5、SHA、Checksumなどの入力にすると、hash1というハッシュコードが抽出される(S340)。
【００２９】
少なくとも一つ以上の関数にセキュリティタグが適用されるため、ハッシュレジストリは少なくとも一つ以上のハッシュコードを含む。図5の例示図では、セキュリティタグが適用されたn個の関数に抽出されたhash1、hash2、…、hash nハッシュコードを含むハッシュコードテーブルをハッシュレジストリに保存して（S362）、ハッシュコードテーブルをハッシュ関数であるMD5、SHA、Checksumなどの入力にして、テーブルハッシュコードを抽出し（S364）、抽出されたテーブルハッシュコードをAES、DES、RSAなどの暗号化アルゴリズムで暗号化してシグネチャーを生成し（S366）、生成されたシグネチャーをハッシュレジストリまたは別の場所に保存する（S368）過程である。
【００３０】
図6は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリを実行するユーザー端末の構成図である。
【００３１】
関数単位のセキュリティタグが適用されたバイナリは配布過程を経てユーザー端末200の補助記憶装置240に保存される。バイナリがユーザー端末200で実行されるときには、まずバイナリがメインメモリ220にロードされ、CPU210によってバイナリの命令が実行され、その結果がディスプレイ装置230に表示される。
【００３２】
本発明の実施例に係るユーザー端末200は、パーソナルコンピュータ（PC：Personal Computer）、ノートブックコンピュータ、タブレット、個人携帯端末（PDA：Personal Digital Assistant）、ゲームコンソール、携帯型マルチメディアプレーヤー（PMP：Portable Multimedia Player）、プレイステーションポータブル（PSP：PlayStation Portable）、無線通信端末（Wireless Communication Terminal）、スマートフォン（Smart Phone）、TV、メディアプレーヤーなどのユーザー端末である。本明細書の実施例に係るユーザー端末200は、応用サーバーとサービスサーバーなどのサーバー端末である。本発明の実施例に係るユーザー端末は、それぞれ、（i）各種機械や有無線通信網との通信を行うための通信モデムなどの通信装置、（ii）ハッシュを用いた動的コード検証方法の実行のためにインターまたはイントラ予測するための各種プログラムやデータを保存するためのメモリ、（iii）プログラムを実行して演算および制御するためのマイクロプロセッサなどを備えるさまざまなデバイスを意味することができる。少なくとも一実施例によれば、メモリはラム（Random Access Memory：RAM）、ロム（Read Only Memory：ROM）、フラッシュメモリ、光ディスク、磁気ディスク、ソリッドステートディスク（Solid State Disk：SSD）などのコンピュータで読み取り可能な記録/保存媒体である。少なくとも一実施例によれば、マイクロプロセッサは、明細書に記載された動作と機能を1つ以上選択的に実行するようにプログラムされる。少なくとも一実施例によれば、マイクロプロセッサは、全体または部分的に特定の構成の特定用途向け半導体（application specific integrated circuit：ASIC）などのハードウェアである。
【００３３】
図7は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリに対する関数単位の無欠性の検証を実行する過程のフローチャートである。
【００３４】
関数単位でセキュリティタグが適用されたバイナリが実行されるためにメインメモリ200にロードされる（S710）。バイナリが実行され、セキュリティタグが適用された関数が呼び出されてセキュリティタグが発見されたら（S720）、関数の無欠性を検証する。
【００３５】
以下、セキュリティタグが発見され、関数単位の無欠性の検証が行われる過程を説明する。セキュリティタグが適用された関数が呼び出され、セキュリティタグが発見されたら、関数に対する無欠性検証をするか否かを判断する（S730）。セキュリティタグが適用される関数は、アカウントの認証、パスワードの入力、決済関連、セキュリティ関連（ハッシュチェック、アンチデバッギングなど）、暗号化・復号化、認証書の検証、商品購入、販売、初期化、サーバー通信、設定ファイル（セーフファイル）読み書き、計算結果の判定と、プログラムの実行において保護が必要な重要な関数にセキュリティタグが適用され、繰り返し呼び出されない特性があるが、場合によっては繰り返し呼び出されて無欠性の検証が行われる懸念がある。上記のような場合に備えるため、関数の無欠性検証が行われた後、一定の時間間隔内では再度関数の無欠性検証を繰り返さないようにする必要がある。したがって、関数に対する無欠性検証が行われた後、一定の時間間隔内で再度関数が呼び出されたら、無欠性の検証を省略して、次の過程を実行するようにする（S730）。
【００３６】
また、ハッシュレジストリの無欠性を検証する必要がある（S740）。ハッシュレジストリを検証する（S740）には、ハッシュレジストリの生成過程(S340)でのハッシュコードテーブルに対するテーブルハッシュコードを抽出する（S364）過程と同じ過程で、ハッシュレジストリに保存されている少なくとも一つ以上の関数単位のハッシュコードを含むハッシュコードテーブルに対するテーブルハッシュコードを抽出する（S364）。そして抽出されたテーブルハッシュコードとハッシュレジストリまたは別の場所で提供されるハッシュコードテーブルに対するテーブルハッシュコードが等しいか否かを確認する（S740）。この場合、ハッシュレジストリまたは別の場所に保存されたシグネチャーは、復号化された後に提供することができる。もし一致しない場合は、ハッシュレジストリが変形されたので、プログラムが実行を終了する過程に転移される（S770）。
【００３７】
関数の無欠性検査過程は(S750）、関数のコードブロック内で無欠性の検証の開始地点を表示する開始タグから終了地点を表示する終了タグまでのコードに対してハッシュ関数（MD5、SHA、Checksumなど）を使用してハッシュコードを抽出するハッシュコード抽出過程を含み、ハッシュコード抽出過程で抽出されたハッシュコードとハッシュレジストリに貯蔵されたハッシュコードテーブルのいずれかのハッシュコードと一致しているか否かを確認して、関数が変形されているか否かを判断し（S750）、関数が変形された場合は、プログラムの終了過程に転移する（S770）。関数の無欠性検査過程（S750）で関数が変形されていないと確認されたら、正常に関数を実行し、これらの過程は、プログラムが終了するまで繰り返す（S760）。プログラムの終了過程（S770）でバイナリが変形されて、もはや実行されなくなった場合、バイナリで使用しているリソースをシステムに返還し、警告メッセージの表示、実行停止、及び実行終了のいずれかを行うことができる。
【００３８】
図8は、本実施例に係る関数単位の無欠性の検証を実行する過程の例示図である。
【００３９】
図8の例示図は、関数単位のセキュリティタグが適用されたバイナリが実行されて（S710）、セキュリティタグが含まれている関数であるfunction_1が呼び出され、function_1でセキュリティタグが発見されて（S720）、開始タグから終了タグまでのコードからハッシュ関数であるMD5、SHA、Checksumなどを利用してハッシュコードのhash1を抽出し、hash1とハッシュレジストリに保存されているhash1、hash2、…、hash nを含むハッシュコードテーブルのハッシュコードのいずれかと一致するか否かを確認してfunction_1が変形されているかを検証する（S750）。この時、ハッシュレジストリを検証するためにhash1、hash2、…、hash nを含むハッシュコードテーブルに対するテーブルハッシュコードを抽出し、抽出されたテーブルハッシュコードがシグネチャーから復号化されたテーブルハッシュコードと一致するか否かを確認して、ハッシュレジストリが変形されているかを検証することができる（S740）。
【００４０】
以上の説明は、本実施例の技術思想を例示的に説明したにすぎないものであって、本実施例の属する技術分野で通常の知識を有する者であれば、本実施例の本質的な特性から逸脱しない範囲で様々な修正および変形が可能である。したがって、本実施例は、本実施例の技術思想を限定するためのものではなく説明するためのものであり、これらの実施例により、本実施例の技術思想の範囲が限定されるものではない。本実施例の保護範囲は特許請求の範囲によって解釈されるべきであり、それと同等の範囲内にあるすべての技術思想は、本実施例の権利範囲に含まれるものと解釈されるべきである。
【図面の簡単な説明】
【００４１】
【図１】図1は、本実施例に係る関数単位のメモリハッシュを用いた動的コード無欠性を検証する概念の概要図である。
【図２】図2は、本実施例に係る関数単位の動的コード無欠性の検証を行うことができるプログラム開発構成図である。
【図３】図3は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリからハッシュコードを抽出し、ハッシュレジストリを生成する過程のフローチャートである。
【図４】図4は、本実施例に係るハッシュレジストリの無欠性を検証するためのシグネチャーを生成する過程のフローチャートである。
【図５】図5は、本実施例に係るセキュリティタグが設定された関数からハッシュコードを抽出してハッシュレジストリを生成する過程の例示図である。
【図６】図6は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリを実行するユーザー端末の構成図である。
【図７】図7は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリに対する関数単位の無欠性の検証を実行する過程のフローチャートである。
【図８】図8は、本実施例に係る関数単位の無欠性の検証を実行する過程の例示図である。
【図１】
2016528635.tif 000003
【図２】
2016528635.tif 000004
【図３】
2016528635.tif 000005
【図４】
2016528635.tif 000006
【図５】
2016528635.tif 000007
【図６】
2016528635.tif 000008
【図７】
2016528635.tif 000009
【図８】
2016528635.tif 000010
【国際調査報告】
2016528635.tif 000011
2016528635.tif 000012
2016528635.tif 000013
2016528635.tif 000014