(57)【要約】【課題】暗号化プログラムの実行時における情報処理装置の記憶領域の使用量の低減化を図ること。【解決手段】復号装置１０１は、情報処理装置１０２がアクセス可能な第１の記憶領域に格納された暗号化プログラム１１１の一部または全部を復号する。そして、復号装置１０１は、復号して得られる命令群から、サブルーチンを検出する。次に、復号装置１０１は、検出した平文サブルーチン１１２を難読化する。そして、復号装置１０１は、第１の記憶領域のうちの暗号化プログラム１１１のうちの復号した部分が格納された第２の記憶領域に、難読化されたサブルーチンである難読化サブルーチン１１３を格納する。復号装置１０１は、サブルーチン群のうちのいずれかのサブルーチンの実行要求を情報処理装置１０２から受け付けた場合に、第３の記憶領域に、実行要求に対応する難読化サブルーチン１１３の難読化を解除したサブルーチンを格納する。【選択図】図１
2015032009.tif 000002
【特許請求の範囲】
【請求項１】
内部に格納された情報が外部から参照できない構造を有する復号装置と、前記復号装置と通信可能な情報処理装置と、を含むシステムにおけるプログラム実行方法であって、
前記復号装置は、
前記情報処理装置がアクセス可能な第１の記憶領域に格納された暗号化プログラムの一部または全部を復号して得られる命令群から、一連の命令を検出し、
前記第１の記憶領域のうちの、前記暗号化プログラムのうちの復号した部分が格納された第２の記憶領域に、検出した前記一連の命令を難読化した難読化命令を格納し、
前記命令群のうちのいずれかの一連の命令の実行要求を前記情報処理装置から受け付けた場合に、前記情報処理装置がアクセス可能であって前記第１の記憶領域とは異なり前記実行要求に対応する一連の命令分の記憶量を有する第３の記憶領域を割り当て、前記割り当てられた第３の記憶領域に、前記第２の記憶領域に格納された前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納する、処理を実行し、
前記情報処理装置は、
前記第３の記憶領域に格納された前記一連の命令を実行する、処理を実行する、
ことを特徴とするプログラム実行方法。
【請求項２】
前記復号装置は、
前記いずれかの一連の命令から呼び出された前記一連の命令とは異なる他の一連の命令の実行要求を前記情報処理装置から受け付けた場合に、前記第３の記憶領域の割り当てを解除する、
処理を実行することを特徴とする請求項１に記載のプログラム実行方法。
【請求項３】
前記難読化命令を格納する処理は、
前記第２の記憶領域に、複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、検出した前記一連の命令を難読化した難読化命令を格納する処理を含み、
前記一連の命令を格納する処理は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記第３の記憶領域に、前記実行要求に対応する難読化命令の難読化を前記いずれかの難読化形式に従って解除した一連の命令を格納する処理を含むことを特徴とする請求項１または２に記載のプログラム実行方法。
【請求項４】
前記復号装置は、
前記第２の記憶領域に、前記複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、前記実行要求に対応する一連の命令を難読化した難読化命令を格納する、
処理を実行することを特徴とする請求項３に記載のプログラム実行方法。
【請求項５】
前記復号装置は、
前記実行要求を前記情報処理装置から受け付けた場合に、所定のアドレス範囲から、前記第３の記憶領域のアドレスをランダムに決定し、
前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、決定した前記アドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新する、処理を実行し、
前記一連の命令を格納する処理は、
前記第３の記憶領域に、更新した前記一連の命令を格納する処理を含むことを特徴とする請求項１〜４のいずれか一つに記載のプログラム実行方法。
【請求項６】
前記復号装置は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、前記一連の命令とは異なる他の一連の命令を呼び出す命令を、前記復号装置に前記他の一連の命令の実行要求を通知する命令に変換する、処理を実行し、
前記一連の命令を格納する処理は、
前記第３の記憶領域に、変換した前記一連の命令を格納する処理を含む、
ことを特徴とする請求項１〜５のいずれか一つに記載のプログラム実行方法。
【請求項７】
前記復号装置は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、前記一連の命令の呼び出し元となる一連の命令に復帰する命令を、前記復号装置に前記呼び出し元となる一連の命令の実行要求を通知する命令に変換する、処理を実行し、
前記一連の命令を格納する処理は、
前記第３の記憶領域に、変換した前記一連の命令を格納する処理を含む、
ことを特徴とする請求項１〜６のいずれか一つに記載のプログラム実行方法。
【請求項８】
前記復号装置は、
検出した前記一連の命令のダイジェスト情報を保持し、
前記実行要求を前記情報処理装置から受け付けた場合に、前記第２の記憶領域に格納された前記実行要求に対応する難読化命令の難読化を解除した一連の命令のダイジェスト情報と、保持した前記一連の命令のダイジェスト情報とが一致するか否かを判断する、処理を実行し、
前記一連の命令を格納する処理は、
前記実行要求に対応する難読化命令の難読化を解除した一連の命令のダイジェスト情報と、保持した前記一連の命令のダイジェスト情報とが一致しないと判断した場合、前記第３の記憶領域に前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納しない処理を含むことを特徴とする請求項１〜７のいずれか一つに記載のプログラム実行方法。
【請求項９】
前記復号装置は、
前記一連の命令の呼び出し元となる呼び出し元命令の実行要求を前記情報処理装置から受け付けた時点から、所定の時間間隔が経過するまでに前記一連の命令の実行要求を前記情報処理装置から受け付けたか否かを判断する、処理を実行し、
前記一連の命令を格納する処理は、
前記所定の時間間隔が経過するまでに前記一連の命令の実行要求を前記情報処理装置から受け付けなかったと判断した後に、前記一連の命令の実行要求を前記情報処理装置から受け付けた場合、前記第３の記憶領域に前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納しない処理を含むことを特徴とする請求項１〜８のいずれか一つに記載のプログラム実行方法。
【請求項１０】
情報処理装置と通信可能であって、内部に格納された情報が外部から参照できない構造を有する復号装置において、
前記情報処理装置がアクセス可能な第１の記憶領域に格納された暗号化プログラムの一部または全部を復号して得られる命令群から、一連の命令を検出し、
前記第１の記憶領域のうちの、前記暗号化プログラムのうちの復号した部分が格納された第２の記憶領域に、検出した前記一連の命令を難読化した難読化命令を格納し、
前記命令群のうちのいずれかの一連の命令の実行要求を前記情報処理装置から受け付けた場合に、前記情報処理装置がアクセス可能であって前記第１の記憶領域とは異なり前記実行要求に対応する一連の命令分の記憶量を有する第３の記憶領域を割り当て、前記割り当てられた第３の記憶領域に、前記第２の記憶領域に格納された前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納する、
制御部を有することを特徴とする復号装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム実行方法および復号装置に関する。
【背景技術】
【０００２】
従来、情報処理装置に接続され、情報処理装置が記憶する暗号化プログラムを実行開始時に復号して、情報処理装置の記憶領域に復号した命令群を格納し、命令群のうち難読化された命令の実行時に、難読化を解除するセキュアモジュールと呼ばれる装置がある。関連する先行技術として、たとえば、実行中のアプリケーションがセキュアな状態かをスキャンするスキャンプログラムの一部をランダムに変更して、スキャンプログラムを生成する生成プログラムを実行するものがある（たとえば、下記特許文献１を参照。）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−０３８２２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術によれば、暗号化プログラムの実行時には、暗号化プログラムと暗号化プログラムを復号した命令群とを情報処理装置が記憶することになり、暗号化されていないプログラムの実行時と比較して、情報処理装置の記憶領域の使用量が増大する。
【０００５】
１つの側面では、本発明は、暗号化プログラムの実行時における情報処理装置の記憶領域の使用量の低減化を図るプログラム実行方法および復号装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、内部に格納された情報が外部から参照できない構造を有する復号装置と、復号装置と通信可能な情報処理装置と、を含むシステムにおいて、復号装置は、情報処理装置がアクセス可能な第１の記憶領域に格納された暗号化プログラムの一部または全部を復号して得られる命令群から、一連の命令を検出し、第１の記憶領域のうちの、暗号化プログラムのうちの復号した部分が格納された第２の記憶領域に、検出した一連の命令を難読化した難読化命令を格納し、命令群のうちのいずれかの一連の命令の実行要求を情報処理装置から受け付けた場合に、情報処理装置がアクセス可能であって第１の記憶領域とは異なり実行要求に対応する一連の命令分の記憶量を有する第３の記憶領域を割り当て、割り当てられた第３の記憶領域に、第２の記憶領域に格納された実行要求に対応する難読化命令の難読化を解除した一連の命令を格納する、処理を実行し、情報処理装置は、第３の記憶領域に格納された一連の命令を実行する、処理を実行するプログラム実行方法が提案される。
【０００７】
また、本発明の他の側面によれば、情報処理装置と通信可能であって、内部に格納された情報が外部から参照できない構造を有する復号装置において、情報処理装置がアクセス可能な第１の記憶領域に格納された暗号化プログラムの一部または全部を復号して得られる命令群から、一連の命令を検出し、第１の記憶領域のうちの、暗号化プログラムのうちの復号した部分が格納された第２の記憶領域に、検出した一連の命令を難読化した難読化命令を格納し、命令群のうちのいずれかの一連の命令の実行要求を情報処理装置から受け付けた場合に、情報処理装置がアクセス可能であって第１の記憶領域とは異なり実行要求に対応する一連の命令分の記憶量を有する第３の記憶領域を割り当て、割り当てられた第３の記憶領域に、第２の記憶領域に格納された実行要求に対応する難読化命令の難読化を解除した一連の命令を格納する復号装置が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、暗号化プログラムの実行時における情報処理装置の記憶領域の使用量の低減化を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態１にかかるシステムの動作例を示す説明図である。
【図２】図２は、情報処理装置のハードウェア構成例を示すブロック図である。
【図３】図３は、セキュアモジュールのハードウェア構成例を示すブロック図である。
【図４】図４は、実施の形態１にかかるセキュアモジュールの機能構成例を示すブロック図である。
【図５】図５は、実施の形態１にかかる情報処理装置の機能構成例を示すブロック図である。
【図６】図６は、実施の形態１にかかるシステムの動作のシーケンス図である。
【図７】図７は、実施の形態１にかかる前処理の動作例を示す説明図である。
【図８】図８は、実施の形態１にかかる起動処理の動作例を示す説明図である。
【図９】図９は、実施の形態１にかかる実行処理の動作例を示す説明図である。
【図１０】図１０は、他のサブルーチン呼び出し処理の箇所と呼び出し先サブルーチンの対応表の記憶内容の一例を示す説明図である。
【図１１】図１１は、起動処理手順の一例を示すフローチャートである。
【図１２】図１２は、実行処理手順の一例を示すフローチャート（その１）である。
【図１３】図１３は、実行処理手順の一例を示すフローチャート（その２）である。
【図１４】図１４は、実施の形態２にかかるセキュアモジュールの機能構成例を示すブロック図である。
【図１５】図１５は、実施の形態２にかかる情報処理装置の機能構成例を示すブロック図である。
【図１６】図１６は、実施の形態２にかかる起動処理の動作例を示す説明図である。
【図１７】図１７は、実施の形態２にかかる実行処理の動作例を示す説明図である。
【図１８】図１８は、実施の形態１または２の適用例を示す説明図である。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、開示のプログラム実行方法および復号装置の実施の形態を詳細に説明する。
【００１１】
（実施の形態１）
図１は、実施の形態１にかかるシステムの動作例を示す説明図である。実施の形態１にかかるシステム１００は、第三者によるハッキングおよびクラッキングから保護してアプリケーションを実行するシステムである。システム１００は、内部に格納された情報が外部から参照できない構造を有する復号装置１０１と、復号装置１０１と通信可能であり、保護対象となる保護対象アプリを実行する情報処理装置１０２とを含む。アプリケーションプログラムを、以下、「アプリ」と称する。
【００１２】
以下の記載では、ハッキングは、プログラムを解析することとし、クラッキングは、プログラムを改ざんすることとする。次に、第三者によるハッキングおよびクラッキングから保護するための技術について説明する。
【００１３】
第三者によるハッキングおよびクラッキングから保護するため、保護対象アプリを予め、ある鍵を用いて暗号化した状態で配布し、保護対象アプリを実行する際は、鍵を有する復号装置が暗号化されたアプリを復号する技術がある。これにより、保護対象アプリが動作していない状態でのハッキングやクラッキングを防止することができる。
【００１４】
また、保護対象アプリ起動時に、復号装置が保護対象アプリを復号し、さらに起動ごとに、保護対象アプリの並び替えや難読化が変わるようにした上で、情報処理装置の主記憶装置に配置する。これにより、保護対象プログラムが動作中の状態におけるハッキングを困難にすることができる。
【００１５】
さらに、復号装置と通信する認証用プログラムを定期的に異なる内容で生成する技術がある。そして、保護対象アプリには認証用プログラムに認証を要求する処理が埋め込まれてあり、保護対象アプリのうち難読化された箇所は、認証成功時かつ難読化された箇所が実行される瞬間に、復号装置が一時的に難読化を解除し実行可能な状態とする技術がある。これにより、保護対象アプリ動作中に、第三者が情報処理装置の主記憶装置上の内容をダンプしても、ダンプした内容は動作不可能となる。
【００１６】
しかしながら、復号装置が保護対象アプリを復号し、保護対象プログラムの並び替えや難読化が変わるようにするため、暗号された保護対象アプリを記憶する記憶領域と、並び替えた後の保護対象アプリを記憶する記憶領域を確保することになる。また、難読化された箇所を指示するため、保護対象アプリの開発者は、認証を要求する処理を埋め込むことになり、手間がかかる。
【００１７】
そこで、本実施の形態にかかるシステム１００は、保護対象アプリを逐次復号して検出したサブルーチンを難読化して復号済の部分に上書きしていき、実行要求されたサブルーチンだけ難読化を解除して、保護対象アプリが記憶された領域とは別の領域に格納する。これにより、システム１００は、保護対象アプリ実行時の記憶領域の使用量を低減させることができる。また、本実施の形態にかかるシステム１００は、難読化された箇所を明示的に指定しなくてよいため、開発者の手間を削減することができる。
【００１８】
図１の（Ａ）において、復号装置１０１は、情報処理装置１０２がアクセス可能な第１の記憶領域に格納された暗号化プログラム１１１の一部または全部を復号する。そして、復号装置１０１は、復号して得られる命令群から、一連の命令を検出する。ここで、一連の命令は、意味や内容がまとまった複数の命令である。一連の命令は、たとえば、サブルーチンや、サブルーチンを呼び出すメインルーチンである。また、以下、メインルーチンもサブルーチンの一種であるものとし、一連の命令を、サブルーチンとして説明する。サブルーチンの検出方法については、図８で後述する。
【００１９】
次に、復号装置１０１は、検出した平文サブルーチン１１２を難読化する。そして、復号装置１０１は、第１の記憶領域のうちの、暗号化プログラム１１１のうちの復号した部分が格納された第２の記憶領域に、難読化されたサブルーチンである難読化サブルーチン１１３を格納する。
【００２０】
図１の（Ｂ）において、復号装置１０１は、サブルーチン群のうちのいずれかのサブルーチンの実行要求を情報処理装置１０２から受け付けた場合に、第３の記憶領域を割り当てる。そして、復号装置１０１は、第３の記憶領域に、実行要求に対応する難読化サブルーチン１１３の難読化を解除したサブルーチンを格納する。復号装置１０１は、第３の記憶領域にサブルーチンを格納する際、サブルーチンが第３の記憶領域で実行可能となるように、サブルーチンを加工する。実行可能となるように加工したサブルーチンを、「実行可能サブルーチン」と呼称する。具体的な加工例については、図９で後述する。
【００２１】
第３の記憶領域は、情報処理装置がアクセス可能であって前記第１の記憶領域とは異なり実行要求に対応するサブルーチン分の記憶量を有する。実行可能サブルーチン１１４を格納後、情報処理装置１０２は、実行可能サブルーチン１１４を実行する。情報処理装置１０２は、暗号化プログラム分の記憶量を有する第１の記憶領域と、サブルーチン１つ分の記憶量を有する第３の記憶領域とを確保すればよい。以下、システム１００について説明する。
【００２２】
図２は、情報処理装置のハードウェア構成例を示すブロック図である。情報処理装置１０２は、プロセッサ２０１と、ノースブリッジ２０２と、メモリと、ディスプレイ２０５と、サウスブリッジ２０６と、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）２０７と、通信Ｉ／Ｆ２０８と、入力デバイス２０９と、を有する。各ハードウェアは、バスによってそれぞれ接続される。また、情報処理装置１０２は、セキュアモジュール２１０に接続する。セキュアモジュール２１０は、復号装置１０１に相当する。
【００２３】
プロセッサ２０１は、情報処理装置１０２内の制御や演算処理を行う装置である。ノースブリッジ２０２は、プロセッサ２０１とメモリ（ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０４）とディスプレイ２０５とサウスブリッジ２０６に接続され、これらの橋渡しを行う装置である。ＲＡＭ２０３は、プロセッサ２０１のワークエリアとして使用されるメインメモリである。ＲＯＭ２０４は、プログラムやデータが格納される不揮発性メモリである。ディスプレイ２０５は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。
【００２４】
サウスブリッジ２０６は、ノースブリッジ２０２、ＨＤＤ２０７、通信Ｉ／Ｆ２０８、入力デバイス２０９、セキュアモジュール２１０に接続され、これらの橋渡しを行う装置である。ＨＤＤ２０７は、プロセッサ２０１の制御に従って内蔵するハードディスクに対するデータのリード／ライトを制御する駆動装置である。
【００２５】
通信Ｉ／Ｆ２０８（インターフェース）は、サウスブリッジ２０６の制御により、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続可能なインターフェースである。
【００２６】
入力デバイス２０９は、文字、数字、各種指示などを入力する装置である。たとえば、キーボードやマウス、タッチパネルなどが挙げられる。入力デバイス２０９からの入力データは、サウスブリッジ２０６およびノースブリッジ２０２を経由してプロセッサ２０１に送られ、プロセッサ２０１で処理される。
【００２７】
セキュアモジュール２１０は、内部に格納された情報を外部から参照できない構造を有するＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）であり、外部からの覗き見を防止するとともに、内部のデータが改ざんされることを防止するハードウェアである。内部に格納された情報を外部から参照できない構造は、たとえば、ＴＲＭ（Ｔａｍｐｅｒ  Ｒｅｓｉｓｔａｎｔ  Ｍｏｄｕｌｅ：耐タンパ性）構造が挙げられる。
【００２８】
ＴＲＭ構造は、半導体チップなどの内部解析や改ざんを物理的および論理的に防衛するための構造をいう。具体的には、セキュアモジュール２１０においては、内部に強固で粘着力が高いコーティングが施され、コーティングの表面が剥がされると内部の回路が完全に破壊されたり、ダミーの配線が配置されていたりする。
【００２９】
セキュアモジュール２１０は、サウスブリッジ２０６内のコントローラとバス２１１を介して通信可能に接続される。セキュアモジュール２１０は、情報処理装置１０２に内蔵されていてもよく、外付けとしてもよい。
【００３０】
図３は、セキュアモジュールのハードウェア構成例を示すブロック図である。セキュアモジュール２１０は、プロセッサ３０１、Ｉ／Ｆ３０２、暗号化回路３０３、ＲＡＭ３０４、ＲＯＭ３０５、フラッシュメモリ３０６、を有する。
【００３１】
プロセッサ３０１は、セキュアモジュール２１０内の制御や演算処理を行う装置である。Ｉ／Ｆ３０２は、バス２１１を介してサウスブリッジ２０６内のコントローラと接続され、通信を行う装置である。暗号化回路３０３は、データやプログラムを暗号化したり、暗号化されたデータやプログラムを復号したり、復号したデータやプログラムを難読化したり、難読化されたデータやプログラムの難読化を解除する装置である。
【００３２】
ＲＡＭ３０４は、プロセッサ３０１のワークエリアとして使用されるメインメモリである。ＲＯＭ３０５は、プログラムやデータが格納される不揮発性メモリである。フラッシュメモリ３０６は、保存したデータやプログラムを書き換え可能な不揮発性メモリである。
【００３３】
図４は、実施の形態１にかかるセキュアモジュールの機能構成例を示すブロック図である。セキュアモジュール２１０は、暗号化回路３０３と、制御部４００とを有する。制御部４００は、検出部４０１と、第１格納部４０２と、受付部４０３と、決定部４０４と、更新部４０５と、変換部４０６と、第２格納部４０７と、解除部４０８とを有する。制御部４００は、記憶装置に記憶されたプログラムをプロセッサ３０１が実行することにより、制御部４００の機能を実現する。記憶装置とは、具体的には、たとえば、図３に示したＲＡＭ３０４、ＲＯＭ３０５、である。また、検出部４０１〜解除部４０８の出力結果は、セキュアモジュール２１０の記憶領域に格納される。
【００３４】
また、セキュアモジュール２１０は、第１の記憶領域４１１、第２の記憶領域４１２、第３の記憶領域４１３にアクセス可能である。第１の記憶領域４１１、第２の記憶領域４１２、第３の記憶領域４１３は、ＲＡＭ２０３に確保される。
【００３５】
第１の記憶領域４１１は、情報処理装置１０２がアクセス可能であって、暗号化プログラム１１１を記憶する記憶領域である。
【００３６】
第２の記憶領域４１２は、第１の記憶領域４１１のうちの、暗号化プログラム１１１のうちの復号した部分が格納された記憶領域である。
【００３７】
第３の記憶領域４１３は、情報処理装置１０２がアクセス可能であって第１の記憶領域４１１とは異なり実行要求に対応するサブルーチン分の記憶量を有する。
【００３８】
検出部４０１は、情報処理装置１０２がアクセス可能な第１の記憶領域に格納された暗号化プログラム１１１の一部または全部を暗号化回路３０３が復号して得られる命令群から、平文サブルーチン１１２を検出する。
【００３９】
第１格納部４０２は、第２の記憶領域４１２に、検出部４０１が検出したサブルーチンを暗号化回路３０３が難読化した難読化サブルーチン１１３を格納する。たとえば、検出部４０１が、暗号化プログラム１１１の先頭から復号して得られる命令群から、第１の平文サブルーチンを検出して、続けて、第２の平文サブルーチンを検出したとする。
【００４０】
このとき、第１格納部４０２は、たとえば、第１の平文サブルーチンに対する難読化サブルーチンを第１の記憶領域４１１の先頭から始まる記憶領域を第２の記憶領域４１２として格納し、第２の平文サブルーチンに対する難読化サブルーチンを続けて格納する。また、第１格納部４０２は、第２の平文サブルーチンに対する難読化サブルーチンを第１の記憶領域４１１の先頭から始まる記憶領域を第２の記憶領域４１２として格納し、第１の平文サブルーチンに対する難読化サブルーチンを続けて格納してもよい。
【００４１】
また、第１格納部４０２は、第２の記憶領域４１２に、複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、検出したサブルーチンを難読化した難読化命令を格納してもよい。複数の難読化形式は、たとえば、暗号化やビットスワップ、ＸＯＲなどの演算処理である。さらに、第１格納部４０２は、難読化形式として暗号化を選択した場合、暗号化で用いる鍵もランダムに選択する。同様に、難読化形式としてビットスワップを選択した場合、第１格納部４０２は、どのビットとどのビットをスワップするかを示すビットパターンもランダムに選択する。同様に、難読化形式としてＸＯＲが選択された場合、第１格納部４０２は、ＸＯＲで用いるマスクパターンもランダムに選択する。なお、選択したいずれかの難読化形式は、サブルーチンに対応付けてセキュアモジュール２１０の記憶領域に格納される。
【００４２】
また、第１格納部４０２は、受付部４０３が実行要求を受け付けた場合、第２の記憶領域４１２に、新たにランダムに選択されたいずれかの難読化形式に従って、実行要求に対応するサブルーチンを再度難読化した難読化サブルーチン１１３を格納してもよい。
【００４３】
また、第１格納部４０２は、検出部４０１が検出したサブルーチンのダイジェスト情報をサブルーチンに関連付けて保持しておいてもよい。
【００４４】
受付部４０３は、実行要求を情報処理装置１０２から受け付ける。受け付けた実行要求は、セキュアモジュール２１０の記憶領域に記憶される。
【００４５】
決定部４０４は、実行要求を情報処理装置１０２から受け付けた場合に、所定のアドレス範囲から、第３の記憶領域のアドレスをランダムに決定する。所定のアドレス範囲は、保護対象アプリが起動する際に予め決められたアドレス範囲である。
【００４６】
更新部４０５は、実行要求に対応する難読化サブルーチンの難読化を暗号化回路３０３が解除した平文サブルーチン１１２のうち、決定部４０４が決定したアドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新する。たとえば、相対アドレスとして、平文サブルーチン１１２のうち、先頭からのオフセットアドレスが０ｘ１００であり、自身が示すアドレスから０ｘ１０先にジャンプせよという命令があったとする。そして、決定部４０４が決定したアドレス０ｘ１０００であったとする。このとき、更新部４０５は、前述の命令を、０ｘ１０＋０ｘ１００＋０ｘ１０００＝０ｘ１１１０にジャンプせよという絶対アドレスを用いた命令に更新する。
【００４７】
変換部４０６は、受付部４０３が実行要求を受け付けた場合に、実行要求に対応する平文サブルーチン１１２のうち、サブルーチンとは異なる他のサブルーチンを呼び出す命令を、セキュアモジュール２１０に他のサブルーチンの実行要求を通知する命令に変換する。また、変換部４０６は、実行要求に対応する平文サブルーチン１１２のうち、サブルーチンの呼び出し元となるサブルーチンに復帰する命令を、セキュアモジュール２１０に呼び出し元となるサブルーチンの実行要求を通知する命令に変換する。具体的な変換については、図９、図１０で後述する。
【００４８】
第２格納部４０７は、命令群のうちのいずれかのサブルーチンの実行要求を情報処理装置１０２から受け付けた場合に、第３の記憶領域４１３を割り当てる。そして、第２格納部４０７は、第３の記憶領域４１３に、第２の記憶領域４１２に格納された実行要求に対応する実行可能サブルーチン１１４を格納する。
【００４９】
また、第２格納部４０７は、実行要求を情報処理装置１０２から受け付けた場合に、第３の記憶領域４１３を割り当てる。そして、第２格納部４０７は、第３の記憶領域４１３に、実行要求に対応する難読化命令の難読化をいずれかの難読化形式に従って暗号化回路３０３が解除した実行可能サブルーチン１１４を格納してもよい。
【００５０】
また、第２格納部４０７は、割り当てた第３の記憶領域４１３に、更新部４０５が更新した実行可能サブルーチン１１４を格納してもよい。また、第２格納部４０７は、割り当てた第３の記憶領域に、変換部４０６が変換した実行可能サブルーチン１１４を格納してもよい。
【００５１】
また、第２格納部４０７は、実行要求を情報処理装置１０２から受け付けた場合に、第２の記憶領域に格納された実行要求に対応する平文サブルーチン１１２のダイジェスト情報と、第１格納部４０２が保持したダイジェスト情報とが一致するか否かを判断する。そして、第２格納部４０７は、２つのダイジェスト情報が一致しないと判断した場合、第３の記憶領域４１３に実行要求に対応する難読化命令の難読化を解除した実行可能サブルーチン１１４を格納しない。また、２つのダイジェスト情報が一致しないと判断した場合、第２格納部４０７は、第３の記憶領域４１３の割り当てを行わなくてよい。
【００５２】
また、第２格納部４０７は、サブルーチンの呼び出し元となる呼び出し元命令の実行要求を情報処理装置１０２から受け付けた時点から、所定の時間間隔が経過するまでにサブルーチンの実行要求を情報処理装置１０２から受け付けたか否かを判断する。そして、第２格納部４０７は、所定の時間間隔が経過するまでにサブルーチンの実行要求を情報処理装置１０２から受け付けなかったと判断した後に、サブルーチンを呼び出す命令の実行要求を情報処理装置１０２から受け付けたとする。サブルーチンを呼び出す命令の実行要求を受け付けたときに、第２格納部４０７は、第３の記憶領域４１３に実行要求に対応する難読化命令の難読化を解除したサブルーチンを格納しない。また、サブルーチンを呼び出す命令の実行要求を受け付けたときに、第２格納部４０７は、第３の記憶領域４１３の割り当てを行わなくてよい。
【００５３】
解除部４０８は、いずれかのサブルーチンから呼び出されたサブルーチンとは異なる他のサブルーチンの実行要求を情報処理装置１０２から受け付けた場合に、第３の記憶領域４１３の割り当てを解除する。
【００５４】
図５は、実施の形態１にかかる情報処理装置の機能構成例を示すブロック図である。情報処理装置１０２は、実行部５０１を有する。実行部５０１は、プロセッサ２０１に相当する。また、情報処理装置１０２は、第１の記憶領域４１１、第２の記憶領域４１２、第３の記憶領域４１３にアクセス可能である。
【００５５】
実行部５０１は、第３の記憶領域４１３に格納された実行可能サブルーチン１１４を実行する。実行可能サブルーチン１１４には、セキュアモジュール２１０に、他のサブルーチンの実行要求を通知する命令が含まれるため、実行部５０１は、前述の命令を実行した場合、セキュアモジュール２１０に他のサブルーチンの実行要求を通知する。
【００５６】
以下、本実施の形態にかかるプログラム実行方法について、前処理と、起動処理と、実行処理という、３つのステップに分けて説明する。前処理は、保護対象アプリの開発および配布、保護対象アプリのインストールにおける処理である。起動処理は、保護対象アプリが起動するタイミングにおける処理である。実行処理は、保護対象アプリの動作中における処理である。
【００５７】
図６は、実施の形態１にかかるシステムの動作のシーケンス図である。図６では、起動処理と、実行処理とに関するシーケンス図を示す。図６で示すシーケンス図のうち、ステップＳ６０１〜ステップＳ６０５は、起動処理に関するステップである。また、図６で示すシーケンス図のうち、ステップＳ６０６〜ステップＳ６１２は、実行処理に関するステップである。
【００５８】
情報処理装置１０２は、利用者の指示等により、保護対象アプリの起動要求を受け付けると、保護対象アプリの起動をセキュアモジュール２１０に通知する（ステップＳ６０１）。通知を受けたセキュアモジュール２１０は、保護対象アプリが暗号化された暗号化プログラム１１１の一部分を取得する（ステップＳ６０２）。続けて、セキュアモジュール２１０は、取得した一部分を復号して、サブルーチンを検出して、サブルーチン単位で難読化する（ステップＳ６０３）。
【００５９】
次に、セキュアモジュール２１０は、難読化した難読化サブルーチン１１３を格納する（ステップＳ６０４）。セキュアモジュール２１０は、ステップＳ６０２〜ステップＳ６０４を、サブルーチンの数だけ繰り返す。そして、セキュアモジュール２１０は、エントリポイントを含むサブルーチンの送信要求を情報処理装置１０２に通知する（ステップＳ６０５）。具体的に、セキュアモジュール２１０は、情報処理装置１０２が実行するサブルーチンの監視プログラムを生成することにより、エントリポイントを含むサブルーチンの送信要求を情報処理装置１０２に送信する。
【００６０】
続けて、サブルーチンの監視プログラムは、難読化サブルーチン１１３をセキュアモジュール２１０に送信する（ステップＳ６０６）。難読化サブルーチン１１３を受け付けたセキュアモジュール２１０は、難読化を解除し、配置先をランダムに決定する（ステップＳ６０７）。次に、セキュアモジュール２１０は、決定した配置先に難読化を解除したサブルーチンを配置する（ステップＳ６０８）。そして、セキュアモジュール２１０は、情報処理装置１０２に、配置したサブルーチンの実行を指示する（ステップＳ６０９）。
【００６１】
実行の指示を受け付けた情報処理装置１０２は、サブルーチンを実行中に、サブルーチン内に埋め込まれた命令を実行することによって、他サブルーチンの呼び出しまたは呼び出し元への復帰をセキュアモジュール２１０に通知する（ステップＳ６１０）。通知を受け付けたセキュアモジュール２１０は、実行中のサブルーチンを削除する（ステップＳ６１１）。続けて、セキュアモジュール２１０は、呼び出し先となる他サブルーチンまたは復帰先のサブルーチンの送信要求を情報処理装置１０２に通知する（ステップＳ６１２）。具体的に、セキュアモジュール２１０は、情報処理装置１０２が実行するサブルーチンの監視プログラムを生成することにより、呼び出し先となる他サブルーチンまたは復帰先のサブルーチンの送信要求を情報処理装置１０２に送信する。
【００６２】
情報処理装置１０２とセキュアモジュール２１０とは、ステップＳ６０６〜ステップＳ６１２の処理を、保護対象アプリが終了するまでに実行したサブルーチンの延べ数分繰り返す。たとえば、情報処理装置１０２が、保護対象アプリを起動して、サブルーチンＡを実行し、サブルーチンＡの実行中にサブルーチンＢを実行し、サブルーチンＢの終了後、サブルーチンＡに復帰し、サブルーチンＡを終了し、保護対象アプリを終了したとする。このとき、保護対象アプリが終了するまでに実行したサブルーチンの延べ数は３となる。
【００６３】
図７は、実施の形態１にかかる前処理の動作例を示す説明図である。図７の（１）において、保護対象アプリのプログラム開発後、保護対象アプリの提供元となる開発者による操作により、開発者が操作する装置は、保護対象アプリをセキュアモジュールが有する鍵で暗号化する。暗号化した結果が暗号化プログラム１１１となる。また、開発者による操作により、開発者が操作する装置は、保護対象アプリ動作中に、第三者によりブレークが行われて、保護対象アプリが停止したとみなすまでの所定の時間間隔を設定する。
【００６４】
次に、図７の（２）において、保護対象アプリの配布時に、開発者が操作する装置は、保護対象プログラムを暗号化したまま、アプリストアに登録したり、電子媒体として発信したりすることにより、保護対象アプリを配布する。
【００６５】
続けて、図７の（３）において、保護対象アプリのインストールに関して、利用者が操作する情報処理装置は、保護対象アプリを暗号化したまま、ＨＤＤ２０７等の情報処理装置１０２の補助記憶装置に格納する。このように、情報処理装置１０２は、暗号化したままとなる暗号化プログラム１１１を不揮発メモリに格納することにより、保護対象アプリが動作していない状態での補助記憶装置の内容に対してのハッキングやクラッキングを防止する。
【００６６】
図８は、実施の形態１にかかる起動処理の動作例を示す説明図である。図８の（１）において、保護対象アプリを起動する際に、情報処理装置１０２は、保護対象アプリが暗号化された暗号化プログラム１１１を、ＨＤＤ２０７等の補助記憶装置から、ＲＡＭ２０３等の主記憶装置に読み出す。
【００６７】
図８の（２）において、セキュアモジュール２１０は、暗号化プログラム１１１を、暗号化プログラム１１１の先頭から一部分ずつ読み出して、復号する。復号結果は、平文プログラムのうちの一部の命令群となる。次に、図８の（３）において、セキュアモジュール２１０は、一部の命令群から平文サブルーチン１１２を検出する。具体的な検出方法として、セキュアモジュール２１０は、サブルーチン入口で行うレジスタの値をスタックに退避する処理や、サブルーチン出口で行うレジスタの値をスタックから復帰する処理などを検索することにより、平文サブルーチン１１２を検出する。また、セキュアモジュール２１０は、平文サブルーチン１１２を検出する際に、エントリポイントが存在した場合、エントリポイントを記憶しておく。エントリポイントは、たとえば、プログラムヘッダに格納される。
【００６８】
続けて、図８の（４）において、セキュアモジュール２１０は、平文サブルーチン１１２のダイジェスト情報を生成する。具体的に、セキュアモジュール２１０は、ＳＨＡ（Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ）−２５６等のハッシュ関数に、平文サブルーチン１１２を入力して、平文サブルーチン１１２のダイジェスト情報を生成する。
【００６９】
次に、図８の（５）において、セキュアモジュール２１０は、複数の難読化形式のうちランダムに選択したいずれかの難読化形式を用いて、平文サブルーチン１１２を難読化する。難読化の結果、難読化サブルーチン１１３が生成される。
【００７０】
なお、セキュアモジュール２１０は、図８の（４）により生成した平文サブルーチン１１２のダイジェスト情報と、図８の（５）で行った難読化のランダムの組合せとを、平文サブルーチン１１２の識別情報と関連付けて、セキュアモジュール２１０の記憶領域内に記憶する。平文サブルーチン１１２の識別情報は、たとえば、平文サブルーチン１１２の先頭アドレスである。
【００７１】
続けて、図８の（６）において、セキュアモジュール２１０は、難読化サブルーチン１１３を、暗号化プログラム１１１のうちの復号した部分が格納された記憶領域に、上書きする形で主記憶装置に配置する。上書きするため、暗号化時のデータ量と復号時のデータ量は一致することが好ましい。暗号化時にデータ量が増大しない暗号化のアルゴリズムとしては、たとえば、ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）−ＣＢＣ（Ｃｉｐｈｅｒ  Ｂｌｏｃｋ  Ｃｈａｉｎｉｎｇ）＋ＯＦＢ（Ｏｕｔｐｕｔ  ＦｅｅｄＢａｃｋ）等がある。
【００７２】
暗号化プログラム１１１のうち復号されていない部分が残っている場合、セキュアモジュール２１０は、図８の（２）より繰り返す。難読化の終了後、図８の（７）において、セキュアモジュール２１０は、保護対象アプリのエントリポイントを含むサブルーチンを監視するサブルーチンの監視プログラムを生成する。情報処理装置１０２は、サブルーチンの監視プログラムを実行する。情報処理装置１０２は、主記憶装置上に難読化された保護対象アプリを配置することにより、保護対象アプリが動作中の状態における主記憶装置上の内容に対してのハッキングを困難にすることができる。
【００７３】
図９は、実施の形態１にかかる実行処理の動作例を示す説明図である。図９の（１）において、情報処理装置１０２は、サブルーチンの監視プログラムによって、実行対象となる難読化サブルーチン１１３を参照し、難読化サブルーチン１１３をセキュアモジュール２１０に送信する。実行対象となる難読化サブルーチン１１３は、１回目がエントリポイントを含むサブルーチンであり、２回目以降がサブルーチンから呼び出し要求があったサブルーチンである。
【００７４】
次に、図９の（２）において、セキュアモジュール２１０は、難読化サブルーチン１１３の難読化を解除して平文サブルーチン１１２とし、平文サブルーチン１１２のダイジェスト情報を生成して、起動処理において記憶したダイジェスト情報と一致するかを比較する。これにより、セキュアモジュール２１０は、動作中の難読化サブルーチン１１３の改ざんを検出することができる。一致しない場合、セキュアモジュール２１０は、難読化サブルーチン１１３がクラッキングされたとみなし、以降の処理を行わない。
【００７５】
続けて、図９の（３）において、セキュアモジュール２１０は、複数の難読化形式のうちのランダムに選択したいずれかの難読化形式を用いて、平文サブルーチン１１２を難読化する。そして、セキュアモジュール２１０は、主記憶装置上の難読化サブルーチン１１３を、難読化を変更したサブルーチンで更新する。
【００７６】
また、図９の（４）において、セキュアモジュール２１０は、平文サブルーチン１１２内の全ての他のサブルーチン呼び出し処理を、セキュアモジュール２１０に呼び出しを通知する処理へ変換する。また、セキュアモジュール２１０は、平文サブルーチン１１２内の呼び出し元サブルーチンへの復帰処理を、セキュアモジュール２１０に復帰を通知する処理へ変換する。変換する際に、セキュアモジュール２１０は、平文サブルーチン１１２内で呼び出し処理があった際に、どのサブルーチンに対する呼び出し処理なのかを特定するため、他のサブルーチン呼出処理の箇所と呼び出し先サブルーチンの対応表を記憶する。対応表については、図１０で後述する。呼び出し処理の変換について、セキュアモジュール２１０は、コール命令や分岐命令の飛び先アドレスの操作により行う。また、復帰処理の変換について、セキュアモジュール２１０は、リターンアドレスを保持するレジスタやスタックの操作によって行う。
【００７７】
続けて、図９の（５）において、セキュアモジュール２１０は、変換した平文サブルーチン１１２の配置先アドレスを、所定のアドレス範囲からランダムに決定する。次に、図９の（６）において、セキュアモジュール２１０は、決定したアドレスで動作し、決定したアドレス以外のアドレスでは動作しないよう、変換した平文サブルーチン１１２を加工する。たとえば、セキュアモジュール２１０は、相対アドレスまたは絶対アドレスを用いる命令を、決定したアドレスからの絶対アドレスを用いる命令に変更する。以下、アドレスを変更して、実行可能となった平文サブルーチン１１２が、実行可能サブルーチン１１４となる。
【００７８】
続けて、図９の（７）において、セキュアモジュール２１０は、実行可能サブルーチン１１４を、割り当てた主記憶装置の第３の記憶領域４１３に配置し、情報処理装置１０２に実行可能サブルーチン１１４の実行を指示する。実行の指示として、セキュアモジュール２１０は、配置したサブルーチン内の次に実行すべき命令のアドレスを、情報処理装置１０２のプログラムカウンタにセットすることにより行う。
【００７９】
次に、図９の（８）において、情報処理装置１０２が、実行可能サブルーチン１１４を実行中に、他のサブルーチンの呼び出しまたは呼び出し元サブルーチンへの復帰において、セキュアモジュール２１０にサブルーチンの変更を通知する。他のサブルーチン呼び出しの場合、情報処理装置１０２は、「どの呼び出し処理かを特定するためのＩＤ（ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）」の情報もセキュアモジュール２１０に通知する。
【００８０】
サブルーチン変更の通知を受けたセキュアモジュール２１０は、図９の（９）において、情報処理装置１０２の主記憶装置にある現在の実行可能サブルーチン１１４およびサブルーチンの監視プログラムをクリアする。具体的には、セキュアモジュール２１０は、実行可能サブルーチン１１４が格納された第３の記憶領域４１３の割り当てを解除する。そして、セキュアモジュール２１０は、次に実行されるべきサブルーチンを送信する監視プログラムを生成する。そして、情報処理装置１０２は図９の（１）から繰り返す。
【００８１】
他のサブルーチン呼び出しの場合、セキュアモジュール２１０は、図１０に示す対応表を参照して、「どの呼び出し処理かを特定するためのＩＤ」を用いて、次に実行されるべきサブルーチンを決定する。そして、セキュアモジュール２１０は、呼び出し元となった現在の実行可能サブルーチン１１４がどのサブルーチンであったかを、スタック的にセキュアモジュール２１０の記憶領域に記憶する。一方、呼び出し元サブルーチンへの復帰の場合、セキュアモジュール２１０は、最後に記憶された呼び出し元サブルーチンを次に実行されるべきサブルーチンとして決定する。そして、セキュアモジュール２１０は、最後に記憶された呼び出し元サブルーチンをスタック的な記憶領域から取り除く。
【００８２】
なお、プログラム開発時に設定した所定の時間間隔を経過しても、サブルーチン変更の通知がなされない場合、セキュアモジュール２１０は、第三者によりブレークがなされたとみなし、以降の処理を行わない。
【００８３】
図９の（２）において、セキュアモジュール２１０は、難読化を解除した平文サブルーチン１１２について起動時との平文サブルーチン１１２のダイジェスト情報の比較を行う。これにより、セキュアモジュール２１０は、情報処理装置１０２の主記憶装置上の内容に対してクラッキングを検出することができる。
【００８４】
また、図９の（３）において、セキュアモジュール２１０は、サブルーチンの実行ごとに、情報処理装置１０２の主記憶装置上の難読化サブルーチン１１３における難読化の演算および鍵をランダムに更新する。これにより、セキュアモジュール２１０は、情報処理装置１０２の主記憶装置上の内容に対してハッキングを困難にすることができる。また、セキュアモジュール２１０は、主記憶装置上の内容のダンプが動作することを防止する。
【００８５】
また、図９の（５）において、セキュアモジュール２１０は、情報処理装置１０２の主記憶装置上に配置されるプログラムの記憶量を同時にサブルーチン１個とし、実行可能サブルーチン１１４の配置先をランダムにする。これにより、セキュアモジュール２１０は、情報処理装置１０２の主記憶装置上の内容のダンプが動作することを防止する。具体的に、第三者があるアドレスに対するダンプを行っても、実行可能サブルーチン１１４の配置先がランダムであるため、あるアドレスには実行可能サブルーチン１１４が配置されてなく、実行可能サブルーチン１１４を取得できない可能性が高い。また、第三者があるアドレスに対するダンプを行って実行可能サブルーチン１１４の一部が取得できたとしても、実行可能サブルーチン１１４の配置先がランダムであるため、実行可能サブルーチン１１４の残り部分を取得することは難しい。
【００８６】
また、セキュアモジュール２１０は、サブルーチンの呼び出しおよび復帰の時間間隔がプログラム開発時に設定した所定の時間間隔以内であるか監視する。これにより、セキュアモジュール２１０は、保護対象アプリがブレークされたことを検出できる。
【００８７】
図１０は、他のサブルーチン呼び出し処理の箇所と呼び出し先サブルーチンの対応表の記憶内容の一例を示す説明図である。図１０に示す対応表１００１は、レコード１００１−１〜１００１−３を有する。対応表１００１は、呼び出し処理の箇所と、呼び出し先サブルーチンと、呼び出し処理を特定するためのＩＤと、いう３つの項目を有する。
【００８８】
呼び出し処理の箇所項目には、図９の（４）の平文サブルーチン１１２を変換対象サブルーチンとして、変換対象サブルーチンとなる一連の命令の中で、他のサブルーチンを呼び出すコードが、先頭から何バイト目の命令であるかを示す情報が格納される。呼び出し先サブルーチン項目には、呼び出し処理の箇所項目で指定された命令が呼び出す他のサブルーチンの識別情報が格納される。呼び出し処理を特定するためのＩＤには、呼び出し処理の箇所項目を特定するためのＩＤが格納される。セキュアモジュール２１０は、情報処理装置１０２からセキュアモジュール２１０に呼び出しを通知する処理に、それぞれ「どの呼び出し処理かを特定するためのＩＤ」の情報を付加する。
【００８９】
たとえば、レコード１００１−１は、変換対象サブルーチンとなる一連の命令の中で、先頭からＸバイト目の命令が、サブルーチンＣを呼び出す命令であることを示す。さらに、レコード１００１−１は、セキュアモジュール２１０に呼び出しを通知する処理にＩＤ：００００−００００が付与されていれば、サブルーチンＣの実行要求を受け付けたものとして、セキュアモジュール２１０は、図９の（９）の処理を実行することを示す。
【００９０】
図１１は、起動処理手順の一例を示すフローチャートである。起動処理は、保護対象アプリを起動する際に行う処理である。起動処理は、情報処理装置１０２から保護対象アプリの起動を通知された際に実行される。
【００９１】
セキュアモジュール２１０は、暗号化プログラム１１１の先頭から所定バイト数のデータを取得する（ステップＳ１１０１）。次に、セキュアモジュール２１０は、所定バイト数のデータを復号する（ステップＳ１１０２）。続けて、セキュアモジュール２１０は、復号した平文データにエントリポイントが存在するか否かを判断する（ステップＳ１１０３）。復号した平文データにエントリポイントが存在する場合（ステップＳ１１０３：Ｙｅｓ）、セキュアモジュール２１０は、エントリポイントをセキュアモジュール２１０の記憶領域に記憶しておく（ステップＳ１１０４）。
【００９２】
ステップＳ１１０４の処理終了後、または、復号した平文データにエントリポイントが存在しない場合（ステップＳ１１０３：Ｎｏ）、セキュアモジュール２１０は、平文データから、サブルーチンを検出する（ステップＳ１１０５）。続けて、セキュアモジュール２１０は、サブルーチンを検出できたか否かを判断する（ステップＳ１１０６）。サブルーチンを検出できた場合（ステップＳ１１０６：Ｙｅｓ）、セキュアモジュール２１０は、検出したサブルーチンのダイジェスト情報を生成する（ステップＳ１１０７）。続けて、セキュアモジュール２１０は、検出したサブルーチンを、複数の難読化形式からランダムに選択したいずれかの難読化形式に従って難読化する（ステップＳ１１０８）。続けて、セキュアモジュール２１０は、暗号化プログラム１１１が格納された記憶領域のうち、難読化したサブルーチンを、暗号化プログラム１１１のうちの復号した部分が格納された記憶領域に格納する（ステップＳ１１０９）。
【００９３】
ステップＳ１１０９の処理終了後、または、サブルーチンを検出できなかった場合（ステップＳ１１０６：Ｎｏ）、セキュアモジュール２１０は、暗号化プログラム１１１の全てを復号したか否かを判断する（ステップＳ１１１０）。暗号化プログラム１１１のうちまだ復号していない部分がある場合（ステップＳ１１１０：Ｎｏ）、セキュアモジュール２１０は、次の所定バイト数のデータを取得する（ステップＳ１１１１）。ステップＳ１１１１の処理終了後、セキュアモジュール２１０は、ステップＳ１１０２の処理に移行する。
【００９４】
暗号化プログラム１１１の全てを復号した場合（ステップＳ１１１０：Ｙｅｓ）、セキュアモジュール２１０は、復号した保護対象アプリのエントリポイントを含むサブルーチンを監視する、サブルーチンの監視プログラムを生成する（ステップＳ１１１２）。ステップＳ１１１２の処理終了後、セキュアモジュール２１０は、起動処理を終了する。起動処理を実行することにより、セキュアモジュール２１０は、保護対象アプリを起動する際に、第三者から情報取得されにくくする準備を行うことができる。
【００９５】
図１２は、実行処理手順の一例を示すフローチャート（その１）である。また、図１３は、実行処理手順の一例を示すフローチャート（その２）である。実行処理は、情報処理装置１０２がサブルーチンを実行する際に、第三者にサブルーチンを取得しづらくする処理である。
【００９６】
図１２において、セキュアモジュール２１０は、サブルーチンの監視プログラムから、実行要求に対応する難読化されたサブルーチンを受信する（ステップＳ１２０１）。サブルーチンの監視プログラムとは、図１１のステップＳ１１１２の処理、または、後述する図１３のステップＳ１３１１の処理によって生成されたサブルーチンの監視プログラムである。
【００９７】
次に、セキュアモジュール２１０は、難読化形式に従って、難読化されたサブルーチンの難読化を解除する（ステップＳ１２０２）。続けて、セキュアモジュール２１０は、平文サブルーチン１１２のダイジェスト情報と、起動処理時の平文サブルーチン１１２のダイジェスト情報とを比較する（ステップＳ１２０３）。
【００９８】
次に、セキュアモジュール２１０は、比較結果が一致したか否かを判断する（ステップＳ１２０４）。比較結果が一致していない場合（ステップＳ１２０４：Ｎｏ）、セキュアモジュール２１０は、難読化されたサブルーチンに、意図しない変更が発生したとみなし、実行処理を終了する。比較結果が一致した場合（ステップＳ１２０４：Ｙｅｓ）、セキュアモジュール２１０は、図１３に示すステップＳ１３０１の処理を実行する。
【００９９】
ステップＳ１２０４：Ｙｅｓの場合、セキュアモジュール２１０は、難読化解除した平文サブルーチン１１２を、複数の難読化形式のうちのランダムに選択した難読化形式に従って再度難読化する（ステップＳ１３０１）。続けて、セキュアモジュール２１０は、再度難読化したサブルーチンを、難読化したサブルーチンが格納されていた記憶領域に格納する（ステップＳ１３０２）。
【０１００】
次に、セキュアモジュール２１０は、平文サブルーチン１１２のうち、他のサブルーチン呼び出し処理をセキュアモジュールに呼び出しを通知する処理に変換する（ステップＳ１３０３）。また、セキュアモジュール２１０は、平文サブルーチン１１２のうち、呼び出し元サブルーチン復帰処理を、セキュアモジュールに復帰を通知する処理に変換する（ステップＳ１３０４）。
【０１０１】
続けて、セキュアモジュール２１０は、所定のアドレス範囲から、変換した平文サブルーチン１１２を配置するアドレスをランダムに決定する（ステップＳ１３０５）。次に、セキュアモジュール２１０は、変換した平文サブルーチン１１２のうち、決定したアドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新する（ステップＳ１３０６）。続けて、セキュアモジュール２１０は、決定したアドレスを有する第３の記憶領域４１３を割り当て、第３の記憶領域４１３に、実行可能サブルーチン１１４を格納する（ステップＳ１３０７）。次に、セキュアモジュール２１０は、情報処理装置に、実行可能サブルーチン１１４の実行を指示する（ステップＳ１３０８）。
【０１０２】
続けて、セキュアモジュール２１０は、システム１００から、他サブルーチンの呼び出しの通知または呼び出し元のサブルーチンの復帰の通知が通知されたか否かを判断する（ステップＳ１３０９）。他サブルーチンの呼び出しの通知または呼び出し元のサブルーチンの復帰の通知が通知されていない場合（ステップＳ１３０９：Ｎｏ）、セキュアモジュール２１０は、前回の通知から、所定の時間間隔が経過したか否かを判断する（ステップＳ１３１０）。所定の時間間隔が経過した場合（ステップＳ１３１０：Ｙｅｓ）、セキュアモジュール２１０は、実行可能サブルーチン１１４において、ブレークにより、意図しない一時停止が発生したとみなし、実行処理を終了する。所定の時間間隔が経過していない場合（ステップＳ１３１０：Ｎｏ）、セキュアモジュール２１０は、ステップＳ１３０９の処理に移行する。
【０１０３】
他サブルーチンの呼び出しの通知または呼び出し元のサブルーチンの復帰の通知が通知された場合（ステップＳ１３０９：Ｙｅｓ）、セキュアモジュール２１０は、呼び出し先の他のサブルーチンまたは復帰先のサブルーチンを監視するサブルーチンの監視プログラムを生成する（ステップＳ１３１１）。ステップＳ１３１１の処理終了後、セキュアモジュール２１０は、ステップＳ１２０１の処理に移行する。実行処理を実行することにより、セキュアモジュール２１０は、情報処理装置１０２がサブルーチンを実行する際に、第三者にサブルーチンを取得しづらくすることができる。
【０１０４】
以上説明したように、セキュアモジュール２１０によれば、保護対象アプリを逐次復号して検出したサブルーチンを難読化して復号済の部分に上書きしていき、実行要求されたサブルーチンだけ難読化を解除して、第１の記憶領域４１１とは別の領域に格納する。これにより、システム１００は、保護対象アプリ実行時の記憶領域の使用量を低減させることができる。また、保護対象アプリの一部に難読化する箇所を埋め込む方法では、プログラム開発において明示的に難読化する箇所の指定を行うことにある。また、動作中の監視および難読化の解除を行うために、開発者は、プログラム開発において監視プログラムや認証用プログラムを呼び出す処理を保護対象アプリの中に作りこむことになる。よって難読化箇所が多いほどに、プログラムの保護のために発生する開発コストが増大する。本実施の形態にかかるシステム１００では、保護対象アプリのサイズが大きくなっても、保護にかかるコストは増大しない。
【０１０５】
また、セキュアモジュール２１０によれば、サブルーチンから呼び出された他のサブルーチンの実行要求を情報処理装置１０２から受け付けた場合に、第３の記憶領域の割り当てを解除する。これにより、呼び出し元のサブルーチンを記憶していた記憶領域が解放されるため、システム１００は、情報処理装置１０２の記憶領域の使用量を低減することができる。
【０１０６】
また、セキュアモジュール２１０によれば、起動処理時、複数の難読化方式からランダムに選択した難読化方式に従って難読化し、実行処理時に、ランダムに選択した難読化方式に従って難読化の解除を行ってもよい。これにより、セキュアモジュール２１０がサブルーチンごとに異なる難読化方式を選択することになるため、システム１００は、第三者によるハッキングおよびクラッキングを困難にすることができる。
【０１０７】
また、セキュアモジュール２１０によれば、実行要求があった場合、複数の難読化方式からランダムに選択した難読化方式に従って、実行要求に対応するサブルーチンを再度難読化してもよい。これにより、システム１００は、実行される度に難読化方式が変更されることになるため、第三者によるハッキングおよびクラッキングを困難にすることができる。
【０１０８】
また、セキュアモジュール２１０によれば、実行可能サブルーチン１１４の配置先をランダムに決定してもよい。これにより、第三者がどのメモリをダンプすればよいかわからないため、システム１００は、第三者によるハッキングを困難にすることができる。また、第三者がサブルーチンのダンプを試みたとしても、実行可能サブルーチンを重複なくダンプし、動作可能なコピーとして結合することは困難である。
【０１０９】
また、セキュアモジュール２１０によれば、他のサブルーチンを呼び出す命令を、セキュアモジュール２１０に他のサブルーチンの実行要求を通知する命令に変換してもよい。これにより、システム１００は、情報処理装置１０２に変更を加えなくてよい。
【０１１０】
また、セキュアモジュール２１０によれば、サブルーチンに復帰する命令を、セキュアモジュール２１０に呼び出し元のサブルーチンの実行要求を通知する命令に変換してもよい。これにより、システム１００は、情報処理装置１０２に変更を加えなくてよい。
【０１１１】
また、セキュアモジュール２１０によれば、起動処理時に復号したサブルーチンのダイジェスト情報と、実行処理時のサブルーチンのダイジェスト情報とを比較して、一致しない場合、第３の記憶領域４１３に実行可能サブルーチン１１４を格納しなくてよい。これにより、システム１００は、第三者によりクラッキングされた場合、保護対象アプリを停止させることができる。
【０１１２】
また、セキュアモジュール２１０によれば、サブルーチンの実行要求を所定の時間間隔までに受け付けないと判断した場合、判断した以降に受け付けた実行要求を破棄し、第３の記憶領域４１３に実行可能サブルーチン１１４を格納しなくてよい。これにより、システム１００は、第三者によりブレークされた場合、保護対象アプリを停止させることができる。
【０１１３】
（実施の形態２）
実施の形態２にかかるシステムでは、実施の形態１にかかるセキュアモジュール２１０が行っていた処理を、実施の形態２にかかる情報処理装置が行うことにより、実施の形態２にかかるセキュアモジュールのリソースを削減することを図る。なお、実施の形態１において説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
【０１１４】
図１４は、実施の形態２にかかるセキュアモジュールの機能構成例を示すブロック図である。実施の形態２にかかるシステム１４００に含まれる情報処理装置１４０１に接続するセキュアモジュール１４０２は、暗号化回路３０３と、制御部１４１０とを有する。制御部１４１０は、検出部４０１〜決定部４０４と、解除部４０８と、指示部１４１１と、更新指示部１４１２と、変換指示部１４１３と、を有する。
【０１１５】
指示部１４１１は、受付部４０３が実行要求を受け付けた場合、情報処理装置１４０１に、第２の記憶領域４１２に格納された難読化サブルーチン１１３の難読化を解除するように指示する。また、指示内容は、第１格納部４０２により選択されたいずれかの難読化形式を含む。さらに、指示部１４１１は、新たにランダムに選択されたいずれかの難読化形式に従って、実行要求に対するサブルーチンを難読化して格納するように指示する。指示内容は、新たにランダムに選択されたいずれかの難読化形式である。
【０１１６】
更新指示部１４１２は、情報処理装置１４０１に、決定部４０４が決定したアドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新するよう指示する。
【０１１７】
変換指示部１４１３は、受付部４０３が実行要求を受け付けた場合に、情報処理装置１４０１に、実行要求に対応する平文サブルーチン１１２のうち、次に示す変換元の命令を変換後の命令となるように変換するよう指示する。変換元の命令と変換後の命令は、２組あり、変換指示部１４１３は、第１の変換元の命令を第１の変換後の命令に変換するよう指示する。また、変換指示部１４１３は、第２の変換元の命令を第２の変換後の命令に変換するよう指示する。
【０１１８】
第１の変換元の命令は、サブルーチンとは異なる他のサブルーチンを呼び出す命令である。第１の変換後の命令は、セキュアモジュール１４０２に他のサブルーチンの実行要求を通知する命令である。また、第２の変換元の命令は、サブルーチンの呼び出し元となるサブルーチンに復帰する命令である。第２の変換後の命令は、セキュアモジュール１４０２に呼び出し元となるサブルーチンの実行要求を通知する命令である。
【０１１９】
図１５は、実施の形態２にかかる情報処理装置の機能構成例を示すブロック図である。情報処理装置１４０１は、難読化解除部１５０１と、更新部１５０２と、変換部１５０３と、難読化更新部１５０４とを有する。難読化解除部１５０１〜難読化更新部１５０４は、記憶装置に記憶されたプログラムをプロセッサ２０１が実行することにより、難読化解除部１５０１〜難読化更新部１５０４の機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＡＭ２０３である。また、難読化解除部１５０１〜難読化更新部１５０４の出力結果は、情報処理装置１４０１の記憶領域に格納される。
【０１２０】
難読化解除部１５０１は、セキュアモジュール１４０２の指示内容に基づいて、実行要求に対応する難読化サブルーチン１１３の難読化を解除する。指示内容には、第１格納部４０２により選択されたいずれかの難読化形式が含まれるため、難読化解除部１５０１は、選択されたいずれかの難読化形式に従って、難読化サブルーチン１１３の難読化を解除する。
【０１２１】
更新部１５０２は、セキュアモジュール１４０２の更新指示部１４１２から指示を受け付けた場合、決定部４０４が決定したアドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新する。
【０１２２】
変換部１５０３は、セキュアモジュール１４０２の変換指示部１４１３から指示を受け付けた場合、実行要求に対応する平文サブルーチン１１２のうち、変換元の命令を変換後の命令となるように変換する。変換元の命令および変換後の命令は、図１４で説明した内容と同一である。
【０１２３】
難読化更新部１５０４は、難読化解除部１５０１が難読化解除した後、セキュアモジュール１４０２の指示内容に含まれる、新たにランダムに選択されたいずれかの難読化形式に従って、実行要求に対するサブルーチンを難読化して格納するように指示する。
【０１２４】
図１６は、実施の形態２にかかる起動処理の動作例を示す説明図である。ここで、図１６の（１）〜図１６の（６）は、それぞれ、図８の（１）〜図８の（６）と同一の処理であるため、説明を省略する。
【０１２５】
難読化の終了後、図１６の（７）において、セキュアモジュール１４０２は、サブルーチンの難読化解除プログラム１６０１、サブルーチンの難読化変更プログラム１６０２およびサブルーチンの配置プログラム１６０３を作成する。サブルーチンの難読化解除プログラム１６０１は、難読化解除部１５０１に相当する。サブルーチンの難読化変更プログラム１６０２は、難読化更新部１５０４に相当する。サブルーチンの配置プログラム１６０３は、更新部１５０２と変換部１５０３とに相当する。サブルーチンの難読化解除プログラム１６０１、サブルーチンの難読化変更プログラム１６０２およびサブルーチンの配置プログラム１６０３の動作については、図１７で説明する。
【０１２６】
図１７は、実施の形態２にかかる実行処理の動作例を示す説明図である。図１７の（１）において、セキュアモジュール１４０２は、実行すべきサブルーチンと、実行すべきサブルーチンに適用された難読化形式における演算の組合せおよび鍵の値を、サブルーチンの難読化解除プログラム１６０１に通知する。
【０１２７】
図１７の（２）において、情報処理装置１４０１は、サブルーチンの難読化解除プログラム１６０１を実行することにより、セキュアモジュール１４０２の指示に基づき、難読化サブルーチン１１３の難読化を解除し、平文サブルーチン１１２とする。続けて、情報処理装置１４０１は、サブルーチンの難読化解除プログラム１６０１を実行することにより、動作中の改ざんを検出するために、平文サブルーチン１１２のダイジェスト情報を生成し、セキュアモジュール１４０２に通知する。
【０１２８】
図１７の（３）において、平文サブルーチン１１２のダイジェスト情報を受け付けたセキュアモジュール１４０２は、受け付けたダイジェスト情報と、起動処理において記憶したダイジェスト情報とが一致するかを比較する。一致しない場合、セキュアモジュール１４０２は、難読化サブルーチン１１３に対してクラッキングが行われたとみなし、以降の処理を行わない。
【０１２９】
図１７の（４）において、セキュアモジュール１４０２は、複数の難読化形式のうちのランダムに選択したいずれかの難読化形式において、難読化演算の組合せと鍵の値とをサブルーチンの難読化変更プログラム１６０２に通知する。
【０１３０】
図１７の（５）において、情報処理装置１４０１は、サブルーチンの難読化変更プログラム１６０２を実行することにより、セキュアモジュール１４０２の指示に基づき、新しい難読化サブルーチン１１３を作成し、主記憶装置上の難読化サブルーチン１１３を更新する。
【０１３１】
図１７の（６）において、セキュアモジュール１４０２は、変換した平文サブルーチン１１２の配置先アドレスを、所定のアドレス範囲からランダムに決定する。そして、図１７の（７）において、セキュアモジュール１４０２は、呼び出しまたは復帰をセキュアモジュール１４０２への通知処理へと変換する指示と、決定したアドレスで動作するための加工指示とを、サブルーチンの配置プログラム１６０３に通知する。
【０１３２】
図１７の（８）において、情報処理装置１４０１は、サブルーチンの配置プログラム１６０３を実行することにより、セキュアモジュール１４０２の指示に基づき、呼び出しおよび復帰の処理をセキュアハードモジュールへの通知処理へ変換する。さらに、情報処理装置１４０１は、セキュアモジュール１４０２の指示に基づき、決定したアドレスで動作するようサブルーチンを加工し、情報処理装置１４０１の主記憶装置上の指定アドレスに第３の記憶領域４１３を割り当てる。そして、情報処理装置１４０１は、実行可能となった実行可能サブルーチン１１４を配置する。
【０１３３】
図１７の（９）において、情報処理装置１４０１は、実行可能サブルーチン１１４を実行することにより、他のサブルーチンの呼び出しまたは復帰において、セキュアモジュール１４０２にサブルーチンの変更を通知する。他のサブルーチン呼び出しの場合、情報処理装置１４０１は、「どの呼び出し処理かを特定するためのＩＤ」の情報も通知する。
【０１３４】
図１７の（１０）において、通知を受け付けたセキュアモジュール１４０２は、情報処理装置１４０１の主記憶装置にある現在のサブルーチンをクリアする。そして、情報処理装置１４０１とセキュアモジュール１４０２とは、図１７の（１）から繰り返す。
【０１３５】
実施の形態２におけるシステム１４００では、サブルーチンの難読化解除プログラム１６０１〜サブルーチンの配置プログラム１６０３が悪意のある利用者やマルウェアなどであれば容易にアクセスが可能な主記憶装置上に配置される。そこで、セキュアモジュール１４０２は、サブルーチンの難読化解除プログラム１６０１〜サブルーチンの配置プログラム１６０３に対してのハッキングおよびクラッキングが困難となるように、定期的に異なる配置先および異なる内容に更新してもよい。
【０１３６】
図１８は、実施の形態１または２の適用例を示す説明図である。図１８に示すコンピュータシステム１８００は、実施の形態１にかかるシステム１００または実施の形態２にかかるシステム１４００のいずれかを適用したシステムである。以下では、説明の簡略化のため、コンピュータシステム１８００は、実施の形態１にかかるシステム１００を適用したシステムであるとして説明を行う。
【０１３７】
コンピュータシステム１８００は、パーソナルコンピュータ（ＰＣ：Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）１８０１と、セキュアモジュール１８０２とを有する。ＰＣ１８０１は、情報処理装置１０２に相当する。セキュアモジュール１８０２は、セキュアモジュール２１０に相当する。
【０１３８】
また、ＰＣ１８０１は、プロセッサ１８１１と、ＲＡＭ１８１２と、ＨＤＤ１８１３と、Ｉ／Ｆ１８１４とを有する。プロセッサ１８１１は、プロセッサ２０１に相当する。ＲＡＭ１８１２は、ＲＡＭ２０３に相当する。ＨＤＤ１８１３は、ＨＤＤ２０７に相当する。そして、ＰＣ１８０１は、Ｉ／Ｆ１８１４を通じて、セキュアモジュール１８０２と接続する。
【０１３９】
図１８において、保護対象アプリは、メディアプレイヤーアプリである。メディアプレイヤーアプリは、ＨＤＤ１８１３内に、暗号化されたメディアプレイヤーアプリ１８２１として格納される。
【０１４０】
また、メディアプレイヤーアプリは、ライセンス情報に基づいて暗号化コンテンツを復号する処理が実装されたライセンス管理ライブラリを読み込んで動作する。ライセンス管理ライブラリは、ＨＤＤ１８１３内に、暗号化されたライセンス管理ライブラリ１８２２として格納される。
【０１４１】
メディアプレイヤーアプリの機能は、ＨＤＤ１８１３に格納された、圧縮動画像が暗号化された暗号化コンテンツ１８２３を復号し、圧縮動画像をデコードすることである。メディアプレイヤーアプリは、暗号化コンテンツ１８２３を取得し復号するスレッドと、復号した圧縮動画像のビデオをデコードするスレッドと、圧縮動画像のオーディオをデコードするスレッドとの、３つのスレッドの並列動作で機能を実現する。
【０１４２】
メディアプレイヤーアプリと、ライセンス管理ライブラリとを保護するため、ＰＣ１８０１は、セキュアモジュール１８０２を用いる。
【０１４３】
セキュアモジュール１８０２は、メディアプレイヤーアプリ起動時に、暗号化されたメディアプレイヤーアプリ１８２１と暗号化されたライセンス管理ライブラリ１８２２とを復号した後難読化する。難読化されたメディアプレイヤーアプリ１８３１と、難読化されたライセンス管理ライブラリ１８３２とは、ＲＡＭ１８１２に格納される。
【０１４４】
メディアプレイヤーアプリ動作中においては、セキュアモジュール１８０２は、並列に行われるスレッドごとに実行可能サブルーチンを配置する。具体的に、セキュアモジュール１８０２は、下記３つの実行可能サブルーチンを配置する。１つ目の実行可能サブルーチンは、暗号化コンテンツ１８２３を復号するスレッドの実行可能サブルーチン１８４１である。２つ目の実行可能サブルーチンは、ビデオをデコードするスレッドの実行可能サブルーチン１８４２である。３つ目の実行可能サブルーチンは、オーディオをデコードするスレッドの実行可能サブルーチン１８４３である。セキュアモジュール１８０２は、実行可能サブルーチン１８４１〜実行可能サブルーチン１８４３を生成する一つの監視プログラムをＲＡＭ１８１２に配置する。
【０１４５】
また、本実施の形態で説明したセキュアモジュール２１０、１４０２は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）などのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述した制御部４００、１４１０をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、セキュアモジュール２１０、１４０２を製造することができる。
【０１４６】
上述した実施の形態１、２に関し、さらに以下の付記を開示する。
【０１４７】
（付記１）内部に格納された情報が外部から参照できない構造を有する復号装置と、前記復号装置と通信可能な情報処理装置と、を含むシステムにおけるプログラム実行方法であって、
前記復号装置は、
前記情報処理装置がアクセス可能な第１の記憶領域に格納された暗号化プログラムの一部または全部を復号して得られる命令群から、一連の命令を検出し、
前記第１の記憶領域のうちの、前記暗号化プログラムのうちの復号した部分が格納された第２の記憶領域に、検出した前記一連の命令を難読化した難読化命令を格納し、
前記命令群のうちのいずれかの一連の命令の実行要求を前記情報処理装置から受け付けた場合に、前記情報処理装置がアクセス可能であって前記第１の記憶領域とは異なり前記実行要求に対応する一連の命令分の記憶量を有する第３の記憶領域を割り当て、前記割り当てられた第３の記憶領域に、前記第２の記憶領域に格納された前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納する、処理を実行し、
前記情報処理装置は、
前記第３の記憶領域に格納された前記一連の命令を実行する、処理を実行する、
ことを特徴とするプログラム実行方法。
【０１４８】
（付記２）前記復号装置は、
前記いずれかの一連の命令から呼び出された前記一連の命令とは異なる他の一連の命令の実行要求を前記情報処理装置から受け付けた場合に、前記第３の記憶領域の割り当てを解除する、
処理を実行することを特徴とする付記１に記載のプログラム実行方法。
【０１４９】
（付記３）前記難読化命令を格納する処理は、
前記第２の記憶領域に、複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、検出した前記一連の命令を難読化した難読化命令を格納する処理を含み、
前記一連の命令を格納する処理は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記第３の記憶領域に、前記実行要求に対応する難読化命令の難読化を前記いずれかの難読化形式に従って解除した一連の命令を格納する処理を含むことを特徴とする付記１または２に記載のプログラム実行方法。
【０１５０】
（付記４）前記復号装置は、
前記第２の記憶領域に、前記複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、前記実行要求に対応する一連の命令を難読化した難読化命令を格納する、
処理を実行することを特徴とする付記３に記載のプログラム実行方法。
【０１５１】
（付記５）前記復号装置は、
前記実行要求を前記情報処理装置から受け付けた場合に、所定のアドレス範囲から、前記第３の記憶領域のアドレスをランダムに決定し、
前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、決定した前記アドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新する、処理を実行し、
前記一連の命令を格納する処理は、
前記第３の記憶領域に、更新した前記一連の命令を格納する処理を含むことを特徴とする付記１〜４のいずれか一つに記載のプログラム実行方法。
【０１５２】
（付記６）前記復号装置は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、前記一連の命令とは異なる他の一連の命令を呼び出す命令を、前記復号装置に前記他の一連の命令の実行要求を通知する命令に変換する、処理を実行し、
前記一連の命令を格納する処理は、
前記第３の記憶領域に、変換した前記一連の命令を格納する処理を含む、
ことを特徴とする付記１〜５のいずれか一つに記載のプログラム実行方法。
【０１５３】
（付記７）前記復号装置は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、前記一連の命令の呼び出し元となる一連の命令に復帰する命令を、前記復号装置に前記呼び出し元となる一連の命令の実行要求を通知する命令に変換する、処理を実行し、
前記一連の命令を格納する処理は、
前記第３の記憶領域に、変換した前記一連の命令を格納する処理を含む、
ことを特徴とする付記１〜６のいずれか一つに記載のプログラム実行方法。
【０１５４】
（付記８）前記復号装置は、
検出した前記一連の命令のダイジェスト情報を保持し、
前記実行要求を前記情報処理装置から受け付けた場合に、前記第２の記憶領域に格納された前記実行要求に対応する難読化命令の難読化を解除した一連の命令のダイジェスト情報と、保持した前記一連の命令のダイジェスト情報とが一致するか否かを判断する、処理を実行し、
前記一連の命令を格納する処理は、
前記実行要求に対応する難読化命令の難読化を解除した一連の命令のダイジェスト情報と、保持した前記一連の命令のダイジェスト情報とが一致しないと判断した場合、前記第３の記憶領域に前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納しない処理を含むことを特徴とする付記１〜７のいずれか一つに記載のプログラム実行方法。
【０１５５】
（付記９）前記復号装置は、
前記一連の命令の呼び出し元となる呼び出し元命令の実行要求を前記情報処理装置から受け付けた時点から、所定の時間間隔が経過するまでに前記一連の命令の実行要求を前記情報処理装置から受け付けたか否かを判断する、処理を実行し、
前記一連の命令を格納する処理は、
前記所定の時間間隔が経過するまでに前記一連の命令の実行要求を前記情報処理装置から受け付けなかったと判断した後に、前記一連の命令の実行要求を前記情報処理装置から受け付けた場合、前記第３の記憶領域に前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納しない処理を含むことを特徴とする付記１〜８のいずれか一つに記載のプログラム実行方法。
【０１５６】
（付記１０）情報処理装置と通信可能であって、内部に格納された情報が外部から参照できない構造を有する復号装置において、
前記情報処理装置がアクセス可能な第１の記憶領域に格納された暗号化プログラムの一部または全部を復号して得られる命令群から、一連の命令を検出し、
前記第１の記憶領域のうちの、前記暗号化プログラムのうちの復号した部分が格納された第２の記憶領域に、検出した前記一連の命令を難読化した難読化命令を格納し、
前記命令群のうちのいずれかの一連の命令の実行要求を前記情報処理装置から受け付けた場合に、前記情報処理装置がアクセス可能であって前記第１の記憶領域とは異なり前記実行要求に対応する一連の命令分の記憶量を有する第３の記憶領域を割り当て、前記割り当てられた第３の記憶領域に、前記第２の記憶領域に格納された前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納する、
制御部を有することを特徴とする復号装置。
【０１５７】
（付記１１）前記制御部は、
前記いずれかの一連の命令から呼び出された前記一連の命令とは異なる他の一連の命令の実行要求を前記情報処理装置から受け付けた場合に、前記第３の記憶領域の割り当てを解除する、
ことを特徴とする付記１０に記載の復号装置。
【０１５８】
（付記１２）前記制御部は、
前記第２の記憶領域に、複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、検出した前記一連の命令を難読化した難読化命令を格納し、
前記実行要求を前記情報処理装置から受け付けた場合に、前記第３の記憶領域に、前記実行要求に対応する難読化命令の難読化を前記いずれかの難読化形式に従って解除した一連の命令を格納することを特徴とする付記１０または１１に記載の復号装置。
【０１５９】
（付記１３）前記制御部は、
前記第２の記憶領域に、前記複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、前記実行要求に対応する一連の命令を難読化した難読化命令を格納する、
ことを特徴とする付記１２に記載の復号装置。
【０１６０】
（付記１４）前記制御部は、
前記実行要求を前記情報処理装置から受け付けた場合に、所定のアドレス範囲から、前記第３の記憶領域のアドレスをランダムに決定し、
前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、決定した前記アドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新し、
前記第３の記憶領域に、更新した前記一連の命令を格納することを特徴とする付記１０〜１３のいずれか一つに記載の復号装置。
【０１６１】
（付記１５）前記制御部は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、前記一連の命令とは異なる他の一連の命令を呼び出す命令を、前記復号装置に前記他の一連の命令の実行要求を通知する命令に変換し、
前記第３の記憶領域に、変換した前記一連の命令を格納する、
ことを特徴とする付記１０〜１４のいずれか一つに記載の復号装置。
【０１６２】
（付記１６）前記制御部は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、前記一連の命令の呼び出し元となる一連の命令に復帰する命令を、前記復号装置に前記呼び出し元となる一連の命令の実行要求を通知する命令に変換し、
前記第３の記憶領域に、変換した前記一連の命令を格納する、
ことを特徴とする付記１０〜１５のいずれか一つに記載の復号装置。
【０１６３】
（付記１７）前記制御部は、
検出した前記一連の命令のダイジェスト情報を保持し、
前記実行要求を前記情報処理装置から受け付けた場合に、前記第２の記憶領域に格納された前記実行要求に対応する難読化命令の難読化を解除した一連の命令のダイジェスト情報と、保持した前記一連の命令のダイジェスト情報とが一致するか否かを判断し、
前記実行要求に対応する難読化命令の難読化を解除した一連の命令のダイジェスト情報と、保持した前記一連の命令のダイジェスト情報とが一致しないと判断した場合、前記第３の記憶領域に前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納しないことを特徴とする付記１０〜１６のいずれか一つに記載の復号装置。
【０１６４】
（付記１８）前記復号装置は、
前記一連の命令の呼び出し元となる呼び出し元命令の実行要求を前記情報処理装置から受け付けた時点から、所定の時間間隔が経過するまでに前記一連の命令の実行要求を前記情報処理装置から受け付けたか否かを判断し、
前記所定の時間間隔が経過するまでに前記一連の命令の実行要求を前記情報処理装置から受け付けなかったと判断した後に、前記一連の命令の実行要求を前記情報処理装置から受け付けた場合、前記第３の記憶領域に前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納しないことを特徴とする付記１０〜１７のいずれか一つに記載の復号装置。
【符号の説明】
【０１６５】
１００  システム
１０１  復号装置
１０２  情報処理装置
１１１  暗号化プログラム
２１０  セキュアモジュール
４００  制御部
４０１  検出部
４０２  第１格納部
４０３  受付部
４０４  決定部
４０５  更新部
４０６  変換部
４０７  第２格納部
４０８  解除部
【図１】
2015032009.tif 000003
【図２】
2015032009.tif 000004
【図３】
2015032009.tif 000005
【図４】
2015032009.tif 000006
【図５】
2015032009.tif 000007
【図６】
2015032009.tif 000008
【図７】
2015032009.tif 000009
【図８】
2015032009.tif 000010
【図９】
2015032009.tif 000011
【図１０】
2015032009.tif 000012
【図１１】
2015032009.tif 000013
【図１２】
2015032009.tif 000014
【図１３】
2015032009.tif 000015
【図１４】
2015032009.tif 000016
【図１５】
2015032009.tif 000017
【図１６】
2015032009.tif 000018
【図１７】
2015032009.tif 000019
【図１８】
2015032009.tif 000020