以下に図面を参照して、開示のプログラム実行方法および復号装置の実施の形態を詳細に説明する。
(実施の形態1)
図1は、実施の形態1にかかるシステムの動作例を示す説明図である。実施の形態1にかかるシステム100は、第三者によるハッキングおよびクラッキングから保護してアプリケーションを実行するシステムである。システム100は、内部に格納された情報が外部から参照できない構造を有する復号装置101と、復号装置101と通信可能であり、保護対象となる保護対象アプリを実行する情報処理装置102とを含む。アプリケーションプログラムを、以下、「アプリ」と称する。
以下の記載では、ハッキングは、プログラムを解析することとし、クラッキングは、プログラムを改ざんすることとする。次に、第三者によるハッキングおよびクラッキングから保護するための技術について説明する。
第三者によるハッキングおよびクラッキングから保護するため、保護対象アプリを予め、ある鍵を用いて暗号化した状態で配布し、保護対象アプリを実行する際は、鍵を有する復号装置が暗号化されたアプリを復号する技術がある。これにより、保護対象アプリが動作していない状態でのハッキングやクラッキングを防止することができる。
また、保護対象アプリ起動時に、復号装置が保護対象アプリを復号し、さらに起動ごとに、保護対象アプリの並び替えや難読化が変わるようにした上で、情報処理装置の主記憶装置に配置する。これにより、保護対象プログラムが動作中の状態におけるハッキングを困難にすることができる。
さらに、復号装置と通信する認証用プログラムを定期的に異なる内容で生成する技術がある。そして、保護対象アプリには認証用プログラムに認証を要求する処理が埋め込まれてあり、保護対象アプリのうち難読化された箇所は、認証成功時かつ難読化された箇所が実行される瞬間に、復号装置が一時的に難読化を解除し実行可能な状態とする技術がある。これにより、保護対象アプリ動作中に、第三者が情報処理装置の主記憶装置上の内容をダンプしても、ダンプした内容は動作不可能となる。
しかしながら、復号装置が保護対象アプリを復号し、保護対象プログラムの並び替えや難読化が変わるようにするため、暗号された保護対象アプリを記憶する記憶領域と、並び替えた後の保護対象アプリを記憶する記憶領域を確保することになる。また、難読化された箇所を指示するため、保護対象アプリの開発者は、認証を要求する処理を埋め込むことになり、手間がかかる。
そこで、本実施の形態にかかるシステム100は、保護対象アプリを逐次復号して検出したサブルーチンを難読化して復号済の部分に上書きしていき、実行要求されたサブルーチンだけ難読化を解除して、保護対象アプリが記憶された領域とは別の領域に格納する。これにより、システム100は、保護対象アプリ実行時の記憶領域の使用量を低減させることができる。また、本実施の形態にかかるシステム100は、難読化された箇所を明示的に指定しなくてよいため、開発者の手間を削減することができる。
図1の(A)において、復号装置101は、情報処理装置102がアクセス可能な第1の記憶領域に格納された暗号化プログラム111の一部または全部を復号する。そして、復号装置101は、復号して得られる命令群から、一連の命令を検出する。ここで、一連の命令は、意味や内容がまとまった複数の命令である。一連の命令は、たとえば、サブルーチンや、サブルーチンを呼び出すメインルーチンである。また、以下、メインルーチンもサブルーチンの一種であるものとし、一連の命令を、サブルーチンとして説明する。サブルーチンの検出方法については、図8で後述する。
次に、復号装置101は、検出した平文サブルーチン112を難読化する。そして、復号装置101は、第1の記憶領域のうちの、暗号化プログラム111のうちの復号した部分が格納された第2の記憶領域に、難読化されたサブルーチンである難読化サブルーチン113を格納する。
図1の(B)において、復号装置101は、サブルーチン群のうちのいずれかのサブルーチンの実行要求を情報処理装置102から受け付けた場合に、第3の記憶領域を割り当てる。そして、復号装置101は、第3の記憶領域に、実行要求に対応する難読化サブルーチン113の難読化を解除したサブルーチンを格納する。復号装置101は、第3の記憶領域にサブルーチンを格納する際、サブルーチンが第3の記憶領域で実行可能となるように、サブルーチンを加工する。実行可能となるように加工したサブルーチンを、「実行可能サブルーチン」と呼称する。具体的な加工例については、図9で後述する。
第3の記憶領域は、情報処理装置がアクセス可能であって前記第1の記憶領域とは異なり実行要求に対応するサブルーチン分の記憶量を有する。実行可能サブルーチン114を格納後、情報処理装置102は、実行可能サブルーチン114を実行する。情報処理装置102は、暗号化プログラム分の記憶量を有する第1の記憶領域と、サブルーチン1つ分の記憶量を有する第3の記憶領域とを確保すればよい。以下、システム100について説明する。
図2は、情報処理装置のハードウェア構成例を示すブロック図である。情報処理装置102は、プロセッサ201と、ノースブリッジ202と、メモリと、ディスプレイ205と、サウスブリッジ206と、HDD(Hard Disk Drive)207と、通信I/F208と、入力デバイス209と、を有する。各ハードウェアは、バスによってそれぞれ接続される。また、情報処理装置102は、セキュアモジュール210に接続する。セキュアモジュール210は、復号装置101に相当する。
プロセッサ201は、情報処理装置102内の制御や演算処理を行う装置である。ノースブリッジ202は、プロセッサ201とメモリ(RAM(Random Access Memory)203、ROM(Read Only Memory)204)とディスプレイ205とサウスブリッジ206に接続され、これらの橋渡しを行う装置である。RAM203は、プロセッサ201のワークエリアとして使用されるメインメモリである。ROM204は、プログラムやデータが格納される不揮発性メモリである。ディスプレイ205は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。
サウスブリッジ206は、ノースブリッジ202、HDD207、通信I/F208、入力デバイス209、セキュアモジュール210に接続され、これらの橋渡しを行う装置である。HDD207は、プロセッサ201の制御に従って内蔵するハードディスクに対するデータのリード/ライトを制御する駆動装置である。
通信I/F208(インターフェース)は、サウスブリッジ206の制御により、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークに接続可能なインターフェースである。
入力デバイス209は、文字、数字、各種指示などを入力する装置である。たとえば、キーボードやマウス、タッチパネルなどが挙げられる。入力デバイス209からの入力データは、サウスブリッジ206およびノースブリッジ202を経由してプロセッサ201に送られ、プロセッサ201で処理される。
セキュアモジュール210は、内部に格納された情報を外部から参照できない構造を有するLSI(Large Scale Integration)であり、外部からの覗き見を防止するとともに、内部のデータが改ざんされることを防止するハードウェアである。内部に格納された情報を外部から参照できない構造は、たとえば、TRM(Tamper Resistant Module:耐タンパ性)構造が挙げられる。
TRM構造は、半導体チップなどの内部解析や改ざんを物理的および論理的に防衛するための構造をいう。具体的には、セキュアモジュール210においては、内部に強固で粘着力が高いコーティングが施され、コーティングの表面が剥がされると内部の回路が完全に破壊されたり、ダミーの配線が配置されていたりする。
セキュアモジュール210は、サウスブリッジ206内のコントローラとバス211を介して通信可能に接続される。セキュアモジュール210は、情報処理装置102に内蔵されていてもよく、外付けとしてもよい。
図3は、セキュアモジュールのハードウェア構成例を示すブロック図である。セキュアモジュール210は、プロセッサ301、I/F302、暗号化回路303、RAM304、ROM305、フラッシュメモリ306、を有する。
プロセッサ301は、セキュアモジュール210内の制御や演算処理を行う装置である。I/F302は、バス211を介してサウスブリッジ206内のコントローラと接続され、通信を行う装置である。暗号化回路303は、データやプログラムを暗号化したり、暗号化されたデータやプログラムを復号したり、復号したデータやプログラムを難読化したり、難読化されたデータやプログラムの難読化を解除する装置である。
RAM304は、プロセッサ301のワークエリアとして使用されるメインメモリである。ROM305は、プログラムやデータが格納される不揮発性メモリである。フラッシュメモリ306は、保存したデータやプログラムを書き換え可能な不揮発性メモリである。
図4は、実施の形態1にかかるセキュアモジュールの機能構成例を示すブロック図である。セキュアモジュール210は、暗号化回路303と、制御部400とを有する。制御部400は、検出部401と、第1格納部402と、受付部403と、決定部404と、更新部405と、変換部406と、第2格納部407と、解除部408とを有する。制御部400は、記憶装置に記憶されたプログラムをプロセッサ301が実行することにより、制御部400の機能を実現する。記憶装置とは、具体的には、たとえば、図3に示したRAM304、ROM305、である。また、検出部401〜解除部408の出力結果は、セキュアモジュール210の記憶領域に格納される。
また、セキュアモジュール210は、第1の記憶領域411、第2の記憶領域412、第3の記憶領域413にアクセス可能である。第1の記憶領域411、第2の記憶領域412、第3の記憶領域413は、RAM203に確保される。
第1の記憶領域411は、情報処理装置102がアクセス可能であって、暗号化プログラム111を記憶する記憶領域である。
第2の記憶領域412は、第1の記憶領域411のうちの、暗号化プログラム111のうちの復号した部分が格納された記憶領域である。
第3の記憶領域413は、情報処理装置102がアクセス可能であって第1の記憶領域411とは異なり実行要求に対応するサブルーチン分の記憶量を有する。
検出部401は、情報処理装置102がアクセス可能な第1の記憶領域に格納された暗号化プログラム111の一部または全部を暗号化回路303が復号して得られる命令群から、平文サブルーチン112を検出する。
第1格納部402は、第2の記憶領域412に、検出部401が検出したサブルーチンを暗号化回路303が難読化した難読化サブルーチン113を格納する。たとえば、検出部401が、暗号化プログラム111の先頭から復号して得られる命令群から、第1の平文サブルーチンを検出して、続けて、第2の平文サブルーチンを検出したとする。
このとき、第1格納部402は、たとえば、第1の平文サブルーチンに対する難読化サブルーチンを第1の記憶領域411の先頭から始まる記憶領域を第2の記憶領域412として格納し、第2の平文サブルーチンに対する難読化サブルーチンを続けて格納する。また、第1格納部402は、第2の平文サブルーチンに対する難読化サブルーチンを第1の記憶領域411の先頭から始まる記憶領域を第2の記憶領域412として格納し、第1の平文サブルーチンに対する難読化サブルーチンを続けて格納してもよい。
また、第1格納部402は、第2の記憶領域412に、複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、検出したサブルーチンを難読化した難読化命令を格納してもよい。複数の難読化形式は、たとえば、暗号化やビットスワップ、XORなどの演算処理である。さらに、第1格納部402は、難読化形式として暗号化を選択した場合、暗号化で用いる鍵もランダムに選択する。同様に、難読化形式としてビットスワップを選択した場合、第1格納部402は、どのビットとどのビットをスワップするかを示すビットパターンもランダムに選択する。同様に、難読化形式としてXORが選択された場合、第1格納部402は、XORで用いるマスクパターンもランダムに選択する。なお、選択したいずれかの難読化形式は、サブルーチンに対応付けてセキュアモジュール210の記憶領域に格納される。
また、第1格納部402は、受付部403が実行要求を受け付けた場合、第2の記憶領域412に、新たにランダムに選択されたいずれかの難読化形式に従って、実行要求に対応するサブルーチンを再度難読化した難読化サブルーチン113を格納してもよい。
また、第1格納部402は、検出部401が検出したサブルーチンのダイジェスト情報をサブルーチンに関連付けて保持しておいてもよい。
受付部403は、実行要求を情報処理装置102から受け付ける。受け付けた実行要求は、セキュアモジュール210の記憶領域に記憶される。
決定部404は、実行要求を情報処理装置102から受け付けた場合に、所定のアドレス範囲から、第3の記憶領域のアドレスをランダムに決定する。所定のアドレス範囲は、保護対象アプリが起動する際に予め決められたアドレス範囲である。
更新部405は、実行要求に対応する難読化サブルーチンの難読化を暗号化回路303が解除した平文サブルーチン112のうち、決定部404が決定したアドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新する。たとえば、相対アドレスとして、平文サブルーチン112のうち、先頭からのオフセットアドレスが0x100であり、自身が示すアドレスから0x10先にジャンプせよという命令があったとする。そして、決定部404が決定したアドレス0x1000であったとする。このとき、更新部405は、前述の命令を、0x10+0x100+0x1000=0x1110にジャンプせよという絶対アドレスを用いた命令に更新する。
変換部406は、受付部403が実行要求を受け付けた場合に、実行要求に対応する平文サブルーチン112のうち、サブルーチンとは異なる他のサブルーチンを呼び出す命令を、セキュアモジュール210に他のサブルーチンの実行要求を通知する命令に変換する。また、変換部406は、実行要求に対応する平文サブルーチン112のうち、サブルーチンの呼び出し元となるサブルーチンに復帰する命令を、セキュアモジュール210に呼び出し元となるサブルーチンの実行要求を通知する命令に変換する。具体的な変換については、図9、図10で後述する。
第2格納部407は、命令群のうちのいずれかのサブルーチンの実行要求を情報処理装置102から受け付けた場合に、第3の記憶領域413を割り当てる。そして、第2格納部407は、第3の記憶領域413に、第2の記憶領域412に格納された実行要求に対応する実行可能サブルーチン114を格納する。
また、第2格納部407は、実行要求を情報処理装置102から受け付けた場合に、第3の記憶領域413を割り当てる。そして、第2格納部407は、第3の記憶領域413に、実行要求に対応する難読化命令の難読化をいずれかの難読化形式に従って暗号化回路303が解除した実行可能サブルーチン114を格納してもよい。
また、第2格納部407は、割り当てた第3の記憶領域413に、更新部405が更新した実行可能サブルーチン114を格納してもよい。また、第2格納部407は、割り当てた第3の記憶領域に、変換部406が変換した実行可能サブルーチン114を格納してもよい。
また、第2格納部407は、実行要求を情報処理装置102から受け付けた場合に、第2の記憶領域に格納された実行要求に対応する平文サブルーチン112のダイジェスト情報と、第1格納部402が保持したダイジェスト情報とが一致するか否かを判断する。そして、第2格納部407は、2つのダイジェスト情報が一致しないと判断した場合、第3の記憶領域413に実行要求に対応する難読化命令の難読化を解除した実行可能サブルーチン114を格納しない。また、2つのダイジェスト情報が一致しないと判断した場合、第2格納部407は、第3の記憶領域413の割り当てを行わなくてよい。
また、第2格納部407は、サブルーチンの呼び出し元となる呼び出し元命令の実行要求を情報処理装置102から受け付けた時点から、所定の時間間隔が経過するまでにサブルーチンの実行要求を情報処理装置102から受け付けたか否かを判断する。そして、第2格納部407は、所定の時間間隔が経過するまでにサブルーチンの実行要求を情報処理装置102から受け付けなかったと判断した後に、サブルーチンを呼び出す命令の実行要求を情報処理装置102から受け付けたとする。サブルーチンを呼び出す命令の実行要求を受け付けたときに、第2格納部407は、第3の記憶領域413に実行要求に対応する難読化命令の難読化を解除したサブルーチンを格納しない。また、サブルーチンを呼び出す命令の実行要求を受け付けたときに、第2格納部407は、第3の記憶領域413の割り当てを行わなくてよい。
解除部408は、いずれかのサブルーチンから呼び出されたサブルーチンとは異なる他のサブルーチンの実行要求を情報処理装置102から受け付けた場合に、第3の記憶領域413の割り当てを解除する。
図5は、実施の形態1にかかる情報処理装置の機能構成例を示すブロック図である。情報処理装置102は、実行部501を有する。実行部501は、プロセッサ201に相当する。また、情報処理装置102は、第1の記憶領域411、第2の記憶領域412、第3の記憶領域413にアクセス可能である。
実行部501は、第3の記憶領域413に格納された実行可能サブルーチン114を実行する。実行可能サブルーチン114には、セキュアモジュール210に、他のサブルーチンの実行要求を通知する命令が含まれるため、実行部501は、前述の命令を実行した場合、セキュアモジュール210に他のサブルーチンの実行要求を通知する。
以下、本実施の形態にかかるプログラム実行方法について、前処理と、起動処理と、実行処理という、3つのステップに分けて説明する。前処理は、保護対象アプリの開発および配布、保護対象アプリのインストールにおける処理である。起動処理は、保護対象アプリが起動するタイミングにおける処理である。実行処理は、保護対象アプリの動作中における処理である。
図6は、実施の形態1にかかるシステムの動作のシーケンス図である。図6では、起動処理と、実行処理とに関するシーケンス図を示す。図6で示すシーケンス図のうち、ステップS601〜ステップS605は、起動処理に関するステップである。また、図6で示すシーケンス図のうち、ステップS606〜ステップS612は、実行処理に関するステップである。
情報処理装置102は、利用者の指示等により、保護対象アプリの起動要求を受け付けると、保護対象アプリの起動をセキュアモジュール210に通知する(ステップS601)。通知を受けたセキュアモジュール210は、保護対象アプリが暗号化された暗号化プログラム111の一部分を取得する(ステップS602)。続けて、セキュアモジュール210は、取得した一部分を復号して、サブルーチンを検出して、サブルーチン単位で難読化する(ステップS603)。
次に、セキュアモジュール210は、難読化した難読化サブルーチン113を格納する(ステップS604)。セキュアモジュール210は、ステップS602〜ステップS604を、サブルーチンの数だけ繰り返す。そして、セキュアモジュール210は、エントリポイントを含むサブルーチンの送信要求を情報処理装置102に通知する(ステップS605)。具体的に、セキュアモジュール210は、情報処理装置102が実行するサブルーチンの監視プログラムを生成することにより、エントリポイントを含むサブルーチンの送信要求を情報処理装置102に送信する。
続けて、サブルーチンの監視プログラムは、難読化サブルーチン113をセキュアモジュール210に送信する(ステップS606)。難読化サブルーチン113を受け付けたセキュアモジュール210は、難読化を解除し、配置先をランダムに決定する(ステップS607)。次に、セキュアモジュール210は、決定した配置先に難読化を解除したサブルーチンを配置する(ステップS608)。そして、セキュアモジュール210は、情報処理装置102に、配置したサブルーチンの実行を指示する(ステップS609)。
実行の指示を受け付けた情報処理装置102は、サブルーチンを実行中に、サブルーチン内に埋め込まれた命令を実行することによって、他サブルーチンの呼び出しまたは呼び出し元への復帰をセキュアモジュール210に通知する(ステップS610)。通知を受け付けたセキュアモジュール210は、実行中のサブルーチンを削除する(ステップS611)。続けて、セキュアモジュール210は、呼び出し先となる他サブルーチンまたは復帰先のサブルーチンの送信要求を情報処理装置102に通知する(ステップS612)。具体的に、セキュアモジュール210は、情報処理装置102が実行するサブルーチンの監視プログラムを生成することにより、呼び出し先となる他サブルーチンまたは復帰先のサブルーチンの送信要求を情報処理装置102に送信する。
情報処理装置102とセキュアモジュール210とは、ステップS606〜ステップS612の処理を、保護対象アプリが終了するまでに実行したサブルーチンの延べ数分繰り返す。たとえば、情報処理装置102が、保護対象アプリを起動して、サブルーチンAを実行し、サブルーチンAの実行中にサブルーチンBを実行し、サブルーチンBの終了後、サブルーチンAに復帰し、サブルーチンAを終了し、保護対象アプリを終了したとする。このとき、保護対象アプリが終了するまでに実行したサブルーチンの延べ数は3となる。
図7は、実施の形態1にかかる前処理の動作例を示す説明図である。図7の(1)において、保護対象アプリのプログラム開発後、保護対象アプリの提供元となる開発者による操作により、開発者が操作する装置は、保護対象アプリをセキュアモジュールが有する鍵で暗号化する。暗号化した結果が暗号化プログラム111となる。また、開発者による操作により、開発者が操作する装置は、保護対象アプリ動作中に、第三者によりブレークが行われて、保護対象アプリが停止したとみなすまでの所定の時間間隔を設定する。
次に、図7の(2)において、保護対象アプリの配布時に、開発者が操作する装置は、保護対象プログラムを暗号化したまま、アプリストアに登録したり、電子媒体として発信したりすることにより、保護対象アプリを配布する。
続けて、図7の(3)において、保護対象アプリのインストールに関して、利用者が操作する情報処理装置は、保護対象アプリを暗号化したまま、HDD207等の情報処理装置102の補助記憶装置に格納する。このように、情報処理装置102は、暗号化したままとなる暗号化プログラム111を不揮発メモリに格納することにより、保護対象アプリが動作していない状態での補助記憶装置の内容に対してのハッキングやクラッキングを防止する。
図8は、実施の形態1にかかる起動処理の動作例を示す説明図である。図8の(1)において、保護対象アプリを起動する際に、情報処理装置102は、保護対象アプリが暗号化された暗号化プログラム111を、HDD207等の補助記憶装置から、RAM203等の主記憶装置に読み出す。
図8の(2)において、セキュアモジュール210は、暗号化プログラム111を、暗号化プログラム111の先頭から一部分ずつ読み出して、復号する。復号結果は、平文プログラムのうちの一部の命令群となる。次に、図8の(3)において、セキュアモジュール210は、一部の命令群から平文サブルーチン112を検出する。具体的な検出方法として、セキュアモジュール210は、サブルーチン入口で行うレジスタの値をスタックに退避する処理や、サブルーチン出口で行うレジスタの値をスタックから復帰する処理などを検索することにより、平文サブルーチン112を検出する。また、セキュアモジュール210は、平文サブルーチン112を検出する際に、エントリポイントが存在した場合、エントリポイントを記憶しておく。エントリポイントは、たとえば、プログラムヘッダに格納される。
続けて、図8の(4)において、セキュアモジュール210は、平文サブルーチン112のダイジェスト情報を生成する。具体的に、セキュアモジュール210は、SHA(Secure Hash Algorithm)−256等のハッシュ関数に、平文サブルーチン112を入力して、平文サブルーチン112のダイジェスト情報を生成する。
次に、図8の(5)において、セキュアモジュール210は、複数の難読化形式のうちランダムに選択したいずれかの難読化形式を用いて、平文サブルーチン112を難読化する。難読化の結果、難読化サブルーチン113が生成される。
なお、セキュアモジュール210は、図8の(4)により生成した平文サブルーチン112のダイジェスト情報と、図8の(5)で行った難読化のランダムの組合せとを、平文サブルーチン112の識別情報と関連付けて、セキュアモジュール210の記憶領域内に記憶する。平文サブルーチン112の識別情報は、たとえば、平文サブルーチン112の先頭アドレスである。
続けて、図8の(6)において、セキュアモジュール210は、難読化サブルーチン113を、暗号化プログラム111のうちの復号した部分が格納された記憶領域に、上書きする形で主記憶装置に配置する。上書きするため、暗号化時のデータ量と復号時のデータ量は一致することが好ましい。暗号化時にデータ量が増大しない暗号化のアルゴリズムとしては、たとえば、AES(Advanced Encryption Standard)−CBC(Cipher Block Chaining)+OFB(Output FeedBack)等がある。
暗号化プログラム111のうち復号されていない部分が残っている場合、セキュアモジュール210は、図8の(2)より繰り返す。難読化の終了後、図8の(7)において、セキュアモジュール210は、保護対象アプリのエントリポイントを含むサブルーチンを監視するサブルーチンの監視プログラムを生成する。情報処理装置102は、サブルーチンの監視プログラムを実行する。情報処理装置102は、主記憶装置上に難読化された保護対象アプリを配置することにより、保護対象アプリが動作中の状態における主記憶装置上の内容に対してのハッキングを困難にすることができる。
図9は、実施の形態1にかかる実行処理の動作例を示す説明図である。図9の(1)において、情報処理装置102は、サブルーチンの監視プログラムによって、実行対象となる難読化サブルーチン113を参照し、難読化サブルーチン113をセキュアモジュール210に送信する。実行対象となる難読化サブルーチン113は、1回目がエントリポイントを含むサブルーチンであり、2回目以降がサブルーチンから呼び出し要求があったサブルーチンである。
次に、図9の(2)において、セキュアモジュール210は、難読化サブルーチン113の難読化を解除して平文サブルーチン112とし、平文サブルーチン112のダイジェスト情報を生成して、起動処理において記憶したダイジェスト情報と一致するかを比較する。これにより、セキュアモジュール210は、動作中の難読化サブルーチン113の改ざんを検出することができる。一致しない場合、セキュアモジュール210は、難読化サブルーチン113がクラッキングされたとみなし、以降の処理を行わない。
続けて、図9の(3)において、セキュアモジュール210は、複数の難読化形式のうちのランダムに選択したいずれかの難読化形式を用いて、平文サブルーチン112を難読化する。そして、セキュアモジュール210は、主記憶装置上の難読化サブルーチン113を、難読化を変更したサブルーチンで更新する。
また、図9の(4)において、セキュアモジュール210は、平文サブルーチン112内の全ての他のサブルーチン呼び出し処理を、セキュアモジュール210に呼び出しを通知する処理へ変換する。また、セキュアモジュール210は、平文サブルーチン112内の呼び出し元サブルーチンへの復帰処理を、セキュアモジュール210に復帰を通知する処理へ変換する。変換する際に、セキュアモジュール210は、平文サブルーチン112内で呼び出し処理があった際に、どのサブルーチンに対する呼び出し処理なのかを特定するため、他のサブルーチン呼出処理の箇所と呼び出し先サブルーチンの対応表を記憶する。対応表については、図10で後述する。呼び出し処理の変換について、セキュアモジュール210は、コール命令や分岐命令の飛び先アドレスの操作により行う。また、復帰処理の変換について、セキュアモジュール210は、リターンアドレスを保持するレジスタやスタックの操作によって行う。
続けて、図9の(5)において、セキュアモジュール210は、変換した平文サブルーチン112の配置先アドレスを、所定のアドレス範囲からランダムに決定する。次に、図9の(6)において、セキュアモジュール210は、決定したアドレスで動作し、決定したアドレス以外のアドレスでは動作しないよう、変換した平文サブルーチン112を加工する。たとえば、セキュアモジュール210は、相対アドレスまたは絶対アドレスを用いる命令を、決定したアドレスからの絶対アドレスを用いる命令に変更する。以下、アドレスを変更して、実行可能となった平文サブルーチン112が、実行可能サブルーチン114となる。
続けて、図9の(7)において、セキュアモジュール210は、実行可能サブルーチン114を、割り当てた主記憶装置の第3の記憶領域413に配置し、情報処理装置102に実行可能サブルーチン114の実行を指示する。実行の指示として、セキュアモジュール210は、配置したサブルーチン内の次に実行すべき命令のアドレスを、情報処理装置102のプログラムカウンタにセットすることにより行う。
次に、図9の(8)において、情報処理装置102が、実行可能サブルーチン114を実行中に、他のサブルーチンの呼び出しまたは呼び出し元サブルーチンへの復帰において、セキュアモジュール210にサブルーチンの変更を通知する。他のサブルーチン呼び出しの場合、情報処理装置102は、「どの呼び出し処理かを特定するためのID(IDentification)」の情報もセキュアモジュール210に通知する。
サブルーチン変更の通知を受けたセキュアモジュール210は、図9の(9)において、情報処理装置102の主記憶装置にある現在の実行可能サブルーチン114およびサブルーチンの監視プログラムをクリアする。具体的には、セキュアモジュール210は、実行可能サブルーチン114が格納された第3の記憶領域413の割り当てを解除する。そして、セキュアモジュール210は、次に実行されるべきサブルーチンを送信する監視プログラムを生成する。そして、情報処理装置102は図9の(1)から繰り返す。
他のサブルーチン呼び出しの場合、セキュアモジュール210は、図10に示す対応表を参照して、「どの呼び出し処理かを特定するためのID」を用いて、次に実行されるべきサブルーチンを決定する。そして、セキュアモジュール210は、呼び出し元となった現在の実行可能サブルーチン114がどのサブルーチンであったかを、スタック的にセキュアモジュール210の記憶領域に記憶する。一方、呼び出し元サブルーチンへの復帰の場合、セキュアモジュール210は、最後に記憶された呼び出し元サブルーチンを次に実行されるべきサブルーチンとして決定する。そして、セキュアモジュール210は、最後に記憶された呼び出し元サブルーチンをスタック的な記憶領域から取り除く。
なお、プログラム開発時に設定した所定の時間間隔を経過しても、サブルーチン変更の通知がなされない場合、セキュアモジュール210は、第三者によりブレークがなされたとみなし、以降の処理を行わない。
図9の(2)において、セキュアモジュール210は、難読化を解除した平文サブルーチン112について起動時との平文サブルーチン112のダイジェスト情報の比較を行う。これにより、セキュアモジュール210は、情報処理装置102の主記憶装置上の内容に対してクラッキングを検出することができる。
また、図9の(3)において、セキュアモジュール210は、サブルーチンの実行ごとに、情報処理装置102の主記憶装置上の難読化サブルーチン113における難読化の演算および鍵をランダムに更新する。これにより、セキュアモジュール210は、情報処理装置102の主記憶装置上の内容に対してハッキングを困難にすることができる。また、セキュアモジュール210は、主記憶装置上の内容のダンプが動作することを防止する。
また、図9の(5)において、セキュアモジュール210は、情報処理装置102の主記憶装置上に配置されるプログラムの記憶量を同時にサブルーチン1個とし、実行可能サブルーチン114の配置先をランダムにする。これにより、セキュアモジュール210は、情報処理装置102の主記憶装置上の内容のダンプが動作することを防止する。具体的に、第三者があるアドレスに対するダンプを行っても、実行可能サブルーチン114の配置先がランダムであるため、あるアドレスには実行可能サブルーチン114が配置されてなく、実行可能サブルーチン114を取得できない可能性が高い。また、第三者があるアドレスに対するダンプを行って実行可能サブルーチン114の一部が取得できたとしても、実行可能サブルーチン114の配置先がランダムであるため、実行可能サブルーチン114の残り部分を取得することは難しい。
また、セキュアモジュール210は、サブルーチンの呼び出しおよび復帰の時間間隔がプログラム開発時に設定した所定の時間間隔以内であるか監視する。これにより、セキュアモジュール210は、保護対象アプリがブレークされたことを検出できる。
図10は、他のサブルーチン呼び出し処理の箇所と呼び出し先サブルーチンの対応表の記憶内容の一例を示す説明図である。図10に示す対応表1001は、レコード1001−1〜1001−3を有する。対応表1001は、呼び出し処理の箇所と、呼び出し先サブルーチンと、呼び出し処理を特定するためのIDと、いう3つの項目を有する。
呼び出し処理の箇所項目には、図9の(4)の平文サブルーチン112を変換対象サブルーチンとして、変換対象サブルーチンとなる一連の命令の中で、他のサブルーチンを呼び出すコードが、先頭から何バイト目の命令であるかを示す情報が格納される。呼び出し先サブルーチン項目には、呼び出し処理の箇所項目で指定された命令が呼び出す他のサブルーチンの識別情報が格納される。呼び出し処理を特定するためのIDには、呼び出し処理の箇所項目を特定するためのIDが格納される。セキュアモジュール210は、情報処理装置102からセキュアモジュール210に呼び出しを通知する処理に、それぞれ「どの呼び出し処理かを特定するためのID」の情報を付加する。
たとえば、レコード1001−1は、変換対象サブルーチンとなる一連の命令の中で、先頭からXバイト目の命令が、サブルーチンCを呼び出す命令であることを示す。さらに、レコード1001−1は、セキュアモジュール210に呼び出しを通知する処理にID:0000−0000が付与されていれば、サブルーチンCの実行要求を受け付けたものとして、セキュアモジュール210は、図9の(9)の処理を実行することを示す。
図11は、起動処理手順の一例を示すフローチャートである。起動処理は、保護対象アプリを起動する際に行う処理である。起動処理は、情報処理装置102から保護対象アプリの起動を通知された際に実行される。
セキュアモジュール210は、暗号化プログラム111の先頭から所定バイト数のデータを取得する(ステップS1101)。次に、セキュアモジュール210は、所定バイト数のデータを復号する(ステップS1102)。続けて、セキュアモジュール210は、復号した平文データにエントリポイントが存在するか否かを判断する(ステップS1103)。復号した平文データにエントリポイントが存在する場合(ステップS1103:Yes)、セキュアモジュール210は、エントリポイントをセキュアモジュール210の記憶領域に記憶しておく(ステップS1104)。
ステップS1104の処理終了後、または、復号した平文データにエントリポイントが存在しない場合(ステップS1103:No)、セキュアモジュール210は、平文データから、サブルーチンを検出する(ステップS1105)。続けて、セキュアモジュール210は、サブルーチンを検出できたか否かを判断する(ステップS1106)。サブルーチンを検出できた場合(ステップS1106:Yes)、セキュアモジュール210は、検出したサブルーチンのダイジェスト情報を生成する(ステップS1107)。続けて、セキュアモジュール210は、検出したサブルーチンを、複数の難読化形式からランダムに選択したいずれかの難読化形式に従って難読化する(ステップS1108)。続けて、セキュアモジュール210は、暗号化プログラム111が格納された記憶領域のうち、難読化したサブルーチンを、暗号化プログラム111のうちの復号した部分が格納された記憶領域に格納する(ステップS1109)。
ステップS1109の処理終了後、または、サブルーチンを検出できなかった場合(ステップS1106:No)、セキュアモジュール210は、暗号化プログラム111の全てを復号したか否かを判断する(ステップS1110)。暗号化プログラム111のうちまだ復号していない部分がある場合(ステップS1110:No)、セキュアモジュール210は、次の所定バイト数のデータを取得する(ステップS1111)。ステップS1111の処理終了後、セキュアモジュール210は、ステップS1102の処理に移行する。
暗号化プログラム111の全てを復号した場合(ステップS1110:Yes)、セキュアモジュール210は、復号した保護対象アプリのエントリポイントを含むサブルーチンを監視する、サブルーチンの監視プログラムを生成する(ステップS1112)。ステップS1112の処理終了後、セキュアモジュール210は、起動処理を終了する。起動処理を実行することにより、セキュアモジュール210は、保護対象アプリを起動する際に、第三者から情報取得されにくくする準備を行うことができる。
図12は、実行処理手順の一例を示すフローチャート(その1)である。また、図13は、実行処理手順の一例を示すフローチャート(その2)である。実行処理は、情報処理装置102がサブルーチンを実行する際に、第三者にサブルーチンを取得しづらくする処理である。
図12において、セキュアモジュール210は、サブルーチンの監視プログラムから、実行要求に対応する難読化されたサブルーチンを受信する(ステップS1201)。サブルーチンの監視プログラムとは、図11のステップS1112の処理、または、後述する図13のステップS1311の処理によって生成されたサブルーチンの監視プログラムである。
次に、セキュアモジュール210は、難読化形式に従って、難読化されたサブルーチンの難読化を解除する(ステップS1202)。続けて、セキュアモジュール210は、平文サブルーチン112のダイジェスト情報と、起動処理時の平文サブルーチン112のダイジェスト情報とを比較する(ステップS1203)。
次に、セキュアモジュール210は、比較結果が一致したか否かを判断する(ステップS1204)。比較結果が一致していない場合(ステップS1204:No)、セキュアモジュール210は、難読化されたサブルーチンに、意図しない変更が発生したとみなし、実行処理を終了する。比較結果が一致した場合(ステップS1204:Yes)、セキュアモジュール210は、図13に示すステップS1301の処理を実行する。
ステップS1204:Yesの場合、セキュアモジュール210は、難読化解除した平文サブルーチン112を、複数の難読化形式のうちのランダムに選択した難読化形式に従って再度難読化する(ステップS1301)。続けて、セキュアモジュール210は、再度難読化したサブルーチンを、難読化したサブルーチンが格納されていた記憶領域に格納する(ステップS1302)。
次に、セキュアモジュール210は、平文サブルーチン112のうち、他のサブルーチン呼び出し処理をセキュアモジュールに呼び出しを通知する処理に変換する(ステップS1303)。また、セキュアモジュール210は、平文サブルーチン112のうち、呼び出し元サブルーチン復帰処理を、セキュアモジュールに復帰を通知する処理に変換する(ステップS1304)。
続けて、セキュアモジュール210は、所定のアドレス範囲から、変換した平文サブルーチン112を配置するアドレスをランダムに決定する(ステップS1305)。次に、セキュアモジュール210は、変換した平文サブルーチン112のうち、決定したアドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新する(ステップS1306)。続けて、セキュアモジュール210は、決定したアドレスを有する第3の記憶領域413を割り当て、第3の記憶領域413に、実行可能サブルーチン114を格納する(ステップS1307)。次に、セキュアモジュール210は、情報処理装置に、実行可能サブルーチン114の実行を指示する(ステップS1308)。
続けて、セキュアモジュール210は、システム100から、他サブルーチンの呼び出しの通知または呼び出し元のサブルーチンの復帰の通知が通知されたか否かを判断する(ステップS1309)。他サブルーチンの呼び出しの通知または呼び出し元のサブルーチンの復帰の通知が通知されていない場合(ステップS1309:No)、セキュアモジュール210は、前回の通知から、所定の時間間隔が経過したか否かを判断する(ステップS1310)。所定の時間間隔が経過した場合(ステップS1310:Yes)、セキュアモジュール210は、実行可能サブルーチン114において、ブレークにより、意図しない一時停止が発生したとみなし、実行処理を終了する。所定の時間間隔が経過していない場合(ステップS1310:No)、セキュアモジュール210は、ステップS1309の処理に移行する。
他サブルーチンの呼び出しの通知または呼び出し元のサブルーチンの復帰の通知が通知された場合(ステップS1309:Yes)、セキュアモジュール210は、呼び出し先の他のサブルーチンまたは復帰先のサブルーチンを監視するサブルーチンの監視プログラムを生成する(ステップS1311)。ステップS1311の処理終了後、セキュアモジュール210は、ステップS1201の処理に移行する。実行処理を実行することにより、セキュアモジュール210は、情報処理装置102がサブルーチンを実行する際に、第三者にサブルーチンを取得しづらくすることができる。
以上説明したように、セキュアモジュール210によれば、保護対象アプリを逐次復号して検出したサブルーチンを難読化して復号済の部分に上書きしていき、実行要求されたサブルーチンだけ難読化を解除して、第1の記憶領域411とは別の領域に格納する。これにより、システム100は、保護対象アプリ実行時の記憶領域の使用量を低減させることができる。また、保護対象アプリの一部に難読化する箇所を埋め込む方法では、プログラム開発において明示的に難読化する箇所の指定を行うことにある。また、動作中の監視および難読化の解除を行うために、開発者は、プログラム開発において監視プログラムや認証用プログラムを呼び出す処理を保護対象アプリの中に作りこむことになる。よって難読化箇所が多いほどに、プログラムの保護のために発生する開発コストが増大する。本実施の形態にかかるシステム100では、保護対象アプリのサイズが大きくなっても、保護にかかるコストは増大しない。
また、セキュアモジュール210によれば、サブルーチンから呼び出された他のサブルーチンの実行要求を情報処理装置102から受け付けた場合に、第3の記憶領域の割り当てを解除する。これにより、呼び出し元のサブルーチンを記憶していた記憶領域が解放されるため、システム100は、情報処理装置102の記憶領域の使用量を低減することができる。
また、セキュアモジュール210によれば、起動処理時、複数の難読化方式からランダムに選択した難読化方式に従って難読化し、実行処理時に、ランダムに選択した難読化方式に従って難読化の解除を行ってもよい。これにより、セキュアモジュール210がサブルーチンごとに異なる難読化方式を選択することになるため、システム100は、第三者によるハッキングおよびクラッキングを困難にすることができる。
また、セキュアモジュール210によれば、実行要求があった場合、複数の難読化方式からランダムに選択した難読化方式に従って、実行要求に対応するサブルーチンを再度難読化してもよい。これにより、システム100は、実行される度に難読化方式が変更されることになるため、第三者によるハッキングおよびクラッキングを困難にすることができる。
また、セキュアモジュール210によれば、実行可能サブルーチン114の配置先をランダムに決定してもよい。これにより、第三者がどのメモリをダンプすればよいかわからないため、システム100は、第三者によるハッキングを困難にすることができる。また、第三者がサブルーチンのダンプを試みたとしても、実行可能サブルーチンを重複なくダンプし、動作可能なコピーとして結合することは困難である。
また、セキュアモジュール210によれば、他のサブルーチンを呼び出す命令を、セキュアモジュール210に他のサブルーチンの実行要求を通知する命令に変換してもよい。これにより、システム100は、情報処理装置102に変更を加えなくてよい。
また、セキュアモジュール210によれば、サブルーチンに復帰する命令を、セキュアモジュール210に呼び出し元のサブルーチンの実行要求を通知する命令に変換してもよい。これにより、システム100は、情報処理装置102に変更を加えなくてよい。
また、セキュアモジュール210によれば、起動処理時に復号したサブルーチンのダイジェスト情報と、実行処理時のサブルーチンのダイジェスト情報とを比較して、一致しない場合、第3の記憶領域413に実行可能サブルーチン114を格納しなくてよい。これにより、システム100は、第三者によりクラッキングされた場合、保護対象アプリを停止させることができる。
また、セキュアモジュール210によれば、サブルーチンの実行要求を所定の時間間隔までに受け付けないと判断した場合、判断した以降に受け付けた実行要求を破棄し、第3の記憶領域413に実行可能サブルーチン114を格納しなくてよい。これにより、システム100は、第三者によりブレークされた場合、保護対象アプリを停止させることができる。
(実施の形態2)
実施の形態2にかかるシステムでは、実施の形態1にかかるセキュアモジュール210が行っていた処理を、実施の形態2にかかる情報処理装置が行うことにより、実施の形態2にかかるセキュアモジュールのリソースを削減することを図る。なお、実施の形態1において説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
図14は、実施の形態2にかかるセキュアモジュールの機能構成例を示すブロック図である。実施の形態2にかかるシステム1400に含まれる情報処理装置1401に接続するセキュアモジュール1402は、暗号化回路303と、制御部1410とを有する。制御部1410は、検出部401〜決定部404と、解除部408と、指示部1411と、更新指示部1412と、変換指示部1413と、を有する。
指示部1411は、受付部403が実行要求を受け付けた場合、情報処理装置1401に、第2の記憶領域412に格納された難読化サブルーチン113の難読化を解除するように指示する。また、指示内容は、第1格納部402により選択されたいずれかの難読化形式を含む。さらに、指示部1411は、新たにランダムに選択されたいずれかの難読化形式に従って、実行要求に対するサブルーチンを難読化して格納するように指示する。指示内容は、新たにランダムに選択されたいずれかの難読化形式である。
更新指示部1412は、情報処理装置1401に、決定部404が決定したアドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新するよう指示する。
変換指示部1413は、受付部403が実行要求を受け付けた場合に、情報処理装置1401に、実行要求に対応する平文サブルーチン112のうち、次に示す変換元の命令を変換後の命令となるように変換するよう指示する。変換元の命令と変換後の命令は、2組あり、変換指示部1413は、第1の変換元の命令を第1の変換後の命令に変換するよう指示する。また、変換指示部1413は、第2の変換元の命令を第2の変換後の命令に変換するよう指示する。
第1の変換元の命令は、サブルーチンとは異なる他のサブルーチンを呼び出す命令である。第1の変換後の命令は、セキュアモジュール1402に他のサブルーチンの実行要求を通知する命令である。また、第2の変換元の命令は、サブルーチンの呼び出し元となるサブルーチンに復帰する命令である。第2の変換後の命令は、セキュアモジュール1402に呼び出し元となるサブルーチンの実行要求を通知する命令である。
図15は、実施の形態2にかかる情報処理装置の機能構成例を示すブロック図である。情報処理装置1401は、難読化解除部1501と、更新部1502と、変換部1503と、難読化更新部1504とを有する。難読化解除部1501〜難読化更新部1504は、記憶装置に記憶されたプログラムをプロセッサ201が実行することにより、難読化解除部1501〜難読化更新部1504の機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したRAM203である。また、難読化解除部1501〜難読化更新部1504の出力結果は、情報処理装置1401の記憶領域に格納される。
難読化解除部1501は、セキュアモジュール1402の指示内容に基づいて、実行要求に対応する難読化サブルーチン113の難読化を解除する。指示内容には、第1格納部402により選択されたいずれかの難読化形式が含まれるため、難読化解除部1501は、選択されたいずれかの難読化形式に従って、難読化サブルーチン113の難読化を解除する。
更新部1502は、セキュアモジュール1402の更新指示部1412から指示を受け付けた場合、決定部404が決定したアドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新する。
変換部1503は、セキュアモジュール1402の変換指示部1413から指示を受け付けた場合、実行要求に対応する平文サブルーチン112のうち、変換元の命令を変換後の命令となるように変換する。変換元の命令および変換後の命令は、図14で説明した内容と同一である。
難読化更新部1504は、難読化解除部1501が難読化解除した後、セキュアモジュール1402の指示内容に含まれる、新たにランダムに選択されたいずれかの難読化形式に従って、実行要求に対するサブルーチンを難読化して格納するように指示する。
図16は、実施の形態2にかかる起動処理の動作例を示す説明図である。ここで、図16の(1)〜図16の(6)は、それぞれ、図8の(1)〜図8の(6)と同一の処理であるため、説明を省略する。
難読化の終了後、図16の(7)において、セキュアモジュール1402は、サブルーチンの難読化解除プログラム1601、サブルーチンの難読化変更プログラム1602およびサブルーチンの配置プログラム1603を作成する。サブルーチンの難読化解除プログラム1601は、難読化解除部1501に相当する。サブルーチンの難読化変更プログラム1602は、難読化更新部1504に相当する。サブルーチンの配置プログラム1603は、更新部1502と変換部1503とに相当する。サブルーチンの難読化解除プログラム1601、サブルーチンの難読化変更プログラム1602およびサブルーチンの配置プログラム1603の動作については、図17で説明する。
図17は、実施の形態2にかかる実行処理の動作例を示す説明図である。図17の(1)において、セキュアモジュール1402は、実行すべきサブルーチンと、実行すべきサブルーチンに適用された難読化形式における演算の組合せおよび鍵の値を、サブルーチンの難読化解除プログラム1601に通知する。
図17の(2)において、情報処理装置1401は、サブルーチンの難読化解除プログラム1601を実行することにより、セキュアモジュール1402の指示に基づき、難読化サブルーチン113の難読化を解除し、平文サブルーチン112とする。続けて、情報処理装置1401は、サブルーチンの難読化解除プログラム1601を実行することにより、動作中の改ざんを検出するために、平文サブルーチン112のダイジェスト情報を生成し、セキュアモジュール1402に通知する。
図17の(3)において、平文サブルーチン112のダイジェスト情報を受け付けたセキュアモジュール1402は、受け付けたダイジェスト情報と、起動処理において記憶したダイジェスト情報とが一致するかを比較する。一致しない場合、セキュアモジュール1402は、難読化サブルーチン113に対してクラッキングが行われたとみなし、以降の処理を行わない。
図17の(4)において、セキュアモジュール1402は、複数の難読化形式のうちのランダムに選択したいずれかの難読化形式において、難読化演算の組合せと鍵の値とをサブルーチンの難読化変更プログラム1602に通知する。
図17の(5)において、情報処理装置1401は、サブルーチンの難読化変更プログラム1602を実行することにより、セキュアモジュール1402の指示に基づき、新しい難読化サブルーチン113を作成し、主記憶装置上の難読化サブルーチン113を更新する。
図17の(6)において、セキュアモジュール1402は、変換した平文サブルーチン112の配置先アドレスを、所定のアドレス範囲からランダムに決定する。そして、図17の(7)において、セキュアモジュール1402は、呼び出しまたは復帰をセキュアモジュール1402への通知処理へと変換する指示と、決定したアドレスで動作するための加工指示とを、サブルーチンの配置プログラム1603に通知する。
図17の(8)において、情報処理装置1401は、サブルーチンの配置プログラム1603を実行することにより、セキュアモジュール1402の指示に基づき、呼び出しおよび復帰の処理をセキュアハードモジュールへの通知処理へ変換する。さらに、情報処理装置1401は、セキュアモジュール1402の指示に基づき、決定したアドレスで動作するようサブルーチンを加工し、情報処理装置1401の主記憶装置上の指定アドレスに第3の記憶領域413を割り当てる。そして、情報処理装置1401は、実行可能となった実行可能サブルーチン114を配置する。
図17の(9)において、情報処理装置1401は、実行可能サブルーチン114を実行することにより、他のサブルーチンの呼び出しまたは復帰において、セキュアモジュール1402にサブルーチンの変更を通知する。他のサブルーチン呼び出しの場合、情報処理装置1401は、「どの呼び出し処理かを特定するためのID」の情報も通知する。
図17の(10)において、通知を受け付けたセキュアモジュール1402は、情報処理装置1401の主記憶装置にある現在のサブルーチンをクリアする。そして、情報処理装置1401とセキュアモジュール1402とは、図17の(1)から繰り返す。
実施の形態2におけるシステム1400では、サブルーチンの難読化解除プログラム1601〜サブルーチンの配置プログラム1603が悪意のある利用者やマルウェアなどであれば容易にアクセスが可能な主記憶装置上に配置される。そこで、セキュアモジュール1402は、サブルーチンの難読化解除プログラム1601〜サブルーチンの配置プログラム1603に対してのハッキングおよびクラッキングが困難となるように、定期的に異なる配置先および異なる内容に更新してもよい。
図18は、実施の形態1または2の適用例を示す説明図である。図18に示すコンピュータシステム1800は、実施の形態1にかかるシステム100または実施の形態2にかかるシステム1400のいずれかを適用したシステムである。以下では、説明の簡略化のため、コンピュータシステム1800は、実施の形態1にかかるシステム100を適用したシステムであるとして説明を行う。
コンピュータシステム1800は、パーソナルコンピュータ(PC:Personal Computer)1801と、セキュアモジュール1802とを有する。PC1801は、情報処理装置102に相当する。セキュアモジュール1802は、セキュアモジュール210に相当する。
また、PC1801は、プロセッサ1811と、RAM1812と、HDD1813と、I/F1814とを有する。プロセッサ1811は、プロセッサ201に相当する。RAM1812は、RAM203に相当する。HDD1813は、HDD207に相当する。そして、PC1801は、I/F1814を通じて、セキュアモジュール1802と接続する。
図18において、保護対象アプリは、メディアプレイヤーアプリである。メディアプレイヤーアプリは、HDD1813内に、暗号化されたメディアプレイヤーアプリ1821として格納される。
また、メディアプレイヤーアプリは、ライセンス情報に基づいて暗号化コンテンツを復号する処理が実装されたライセンス管理ライブラリを読み込んで動作する。ライセンス管理ライブラリは、HDD1813内に、暗号化されたライセンス管理ライブラリ1822として格納される。
メディアプレイヤーアプリの機能は、HDD1813に格納された、圧縮動画像が暗号化された暗号化コンテンツ1823を復号し、圧縮動画像をデコードすることである。メディアプレイヤーアプリは、暗号化コンテンツ1823を取得し復号するスレッドと、復号した圧縮動画像のビデオをデコードするスレッドと、圧縮動画像のオーディオをデコードするスレッドとの、3つのスレッドの並列動作で機能を実現する。
メディアプレイヤーアプリと、ライセンス管理ライブラリとを保護するため、PC1801は、セキュアモジュール1802を用いる。
セキュアモジュール1802は、メディアプレイヤーアプリ起動時に、暗号化されたメディアプレイヤーアプリ1821と暗号化されたライセンス管理ライブラリ1822とを復号した後難読化する。難読化されたメディアプレイヤーアプリ1831と、難読化されたライセンス管理ライブラリ1832とは、RAM1812に格納される。
メディアプレイヤーアプリ動作中においては、セキュアモジュール1802は、並列に行われるスレッドごとに実行可能サブルーチンを配置する。具体的に、セキュアモジュール1802は、下記3つの実行可能サブルーチンを配置する。1つ目の実行可能サブルーチンは、暗号化コンテンツ1823を復号するスレッドの実行可能サブルーチン1841である。2つ目の実行可能サブルーチンは、ビデオをデコードするスレッドの実行可能サブルーチン1842である。3つ目の実行可能サブルーチンは、オーディオをデコードするスレッドの実行可能サブルーチン1843である。セキュアモジュール1802は、実行可能サブルーチン1841〜実行可能サブルーチン1843を生成する一つの監視プログラムをRAM1812に配置する。
また、本実施の形態で説明したセキュアモジュール210、1402は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGA(Field Programmable Gate Array)などのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述した制御部400、1410をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、セキュアモジュール210、1402を製造することができる。
上述した実施の形態1、2に関し、さらに以下の付記を開示する。
(付記1)内部に格納された情報が外部から参照できない構造を有する復号装置と、前記復号装置と通信可能な情報処理装置と、を含むシステムにおけるプログラム実行方法であって、
前記復号装置は、
前記情報処理装置がアクセス可能な第1の記憶領域に格納された暗号化プログラムの一部または全部を復号して得られる命令群から、一連の命令を検出し、
前記第1の記憶領域のうちの、前記暗号化プログラムのうちの復号した部分が格納された第2の記憶領域に、検出した前記一連の命令を難読化した難読化命令を格納し、
前記命令群のうちのいずれかの一連の命令の実行要求を前記情報処理装置から受け付けた場合に、前記情報処理装置がアクセス可能であって前記第1の記憶領域とは異なり前記実行要求に対応する一連の命令分の記憶量を有する第3の記憶領域を割り当て、前記割り当てられた第3の記憶領域に、前記第2の記憶領域に格納された前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納する、処理を実行し、
前記情報処理装置は、
前記第3の記憶領域に格納された前記一連の命令を実行する、処理を実行する、
ことを特徴とするプログラム実行方法。
(付記2)前記復号装置は、
前記いずれかの一連の命令から呼び出された前記一連の命令とは異なる他の一連の命令の実行要求を前記情報処理装置から受け付けた場合に、前記第3の記憶領域の割り当てを解除する、
処理を実行することを特徴とする付記1に記載のプログラム実行方法。
(付記3)前記難読化命令を格納する処理は、
前記第2の記憶領域に、複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、検出した前記一連の命令を難読化した難読化命令を格納する処理を含み、
前記一連の命令を格納する処理は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記第3の記憶領域に、前記実行要求に対応する難読化命令の難読化を前記いずれかの難読化形式に従って解除した一連の命令を格納する処理を含むことを特徴とする付記1または2に記載のプログラム実行方法。
(付記4)前記復号装置は、
前記第2の記憶領域に、前記複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、前記実行要求に対応する一連の命令を難読化した難読化命令を格納する、
処理を実行することを特徴とする付記3に記載のプログラム実行方法。
(付記5)前記復号装置は、
前記実行要求を前記情報処理装置から受け付けた場合に、所定のアドレス範囲から、前記第3の記憶領域のアドレスをランダムに決定し、
前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、決定した前記アドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新する、処理を実行し、
前記一連の命令を格納する処理は、
前記第3の記憶領域に、更新した前記一連の命令を格納する処理を含むことを特徴とする付記1〜4のいずれか一つに記載のプログラム実行方法。
(付記6)前記復号装置は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、前記一連の命令とは異なる他の一連の命令を呼び出す命令を、前記復号装置に前記他の一連の命令の実行要求を通知する命令に変換する、処理を実行し、
前記一連の命令を格納する処理は、
前記第3の記憶領域に、変換した前記一連の命令を格納する処理を含む、
ことを特徴とする付記1〜5のいずれか一つに記載のプログラム実行方法。
(付記7)前記復号装置は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、前記一連の命令の呼び出し元となる一連の命令に復帰する命令を、前記復号装置に前記呼び出し元となる一連の命令の実行要求を通知する命令に変換する、処理を実行し、
前記一連の命令を格納する処理は、
前記第3の記憶領域に、変換した前記一連の命令を格納する処理を含む、
ことを特徴とする付記1〜6のいずれか一つに記載のプログラム実行方法。
(付記8)前記復号装置は、
検出した前記一連の命令のダイジェスト情報を保持し、
前記実行要求を前記情報処理装置から受け付けた場合に、前記第2の記憶領域に格納された前記実行要求に対応する難読化命令の難読化を解除した一連の命令のダイジェスト情報と、保持した前記一連の命令のダイジェスト情報とが一致するか否かを判断する、処理を実行し、
前記一連の命令を格納する処理は、
前記実行要求に対応する難読化命令の難読化を解除した一連の命令のダイジェスト情報と、保持した前記一連の命令のダイジェスト情報とが一致しないと判断した場合、前記第3の記憶領域に前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納しない処理を含むことを特徴とする付記1〜7のいずれか一つに記載のプログラム実行方法。
(付記9)前記復号装置は、
前記一連の命令の呼び出し元となる呼び出し元命令の実行要求を前記情報処理装置から受け付けた時点から、所定の時間間隔が経過するまでに前記一連の命令の実行要求を前記情報処理装置から受け付けたか否かを判断する、処理を実行し、
前記一連の命令を格納する処理は、
前記所定の時間間隔が経過するまでに前記一連の命令の実行要求を前記情報処理装置から受け付けなかったと判断した後に、前記一連の命令の実行要求を前記情報処理装置から受け付けた場合、前記第3の記憶領域に前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納しない処理を含むことを特徴とする付記1〜8のいずれか一つに記載のプログラム実行方法。
(付記10)情報処理装置と通信可能であって、内部に格納された情報が外部から参照できない構造を有する復号装置において、
前記情報処理装置がアクセス可能な第1の記憶領域に格納された暗号化プログラムの一部または全部を復号して得られる命令群から、一連の命令を検出し、
前記第1の記憶領域のうちの、前記暗号化プログラムのうちの復号した部分が格納された第2の記憶領域に、検出した前記一連の命令を難読化した難読化命令を格納し、
前記命令群のうちのいずれかの一連の命令の実行要求を前記情報処理装置から受け付けた場合に、前記情報処理装置がアクセス可能であって前記第1の記憶領域とは異なり前記実行要求に対応する一連の命令分の記憶量を有する第3の記憶領域を割り当て、前記割り当てられた第3の記憶領域に、前記第2の記憶領域に格納された前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納する、
制御部を有することを特徴とする復号装置。
(付記11)前記制御部は、
前記いずれかの一連の命令から呼び出された前記一連の命令とは異なる他の一連の命令の実行要求を前記情報処理装置から受け付けた場合に、前記第3の記憶領域の割り当てを解除する、
ことを特徴とする付記10に記載の復号装置。
(付記12)前記制御部は、
前記第2の記憶領域に、複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、検出した前記一連の命令を難読化した難読化命令を格納し、
前記実行要求を前記情報処理装置から受け付けた場合に、前記第3の記憶領域に、前記実行要求に対応する難読化命令の難読化を前記いずれかの難読化形式に従って解除した一連の命令を格納することを特徴とする付記10または11に記載の復号装置。
(付記13)前記制御部は、
前記第2の記憶領域に、前記複数の難読化形式からランダムに選択されたいずれかの難読化形式に従って、前記実行要求に対応する一連の命令を難読化した難読化命令を格納する、
ことを特徴とする付記12に記載の復号装置。
(付記14)前記制御部は、
前記実行要求を前記情報処理装置から受け付けた場合に、所定のアドレス範囲から、前記第3の記憶領域のアドレスをランダムに決定し、
前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、決定した前記アドレスに基づいて、相対アドレスまたは絶対アドレスを用いる命令を更新し、
前記第3の記憶領域に、更新した前記一連の命令を格納することを特徴とする付記10〜13のいずれか一つに記載の復号装置。
(付記15)前記制御部は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、前記一連の命令とは異なる他の一連の命令を呼び出す命令を、前記復号装置に前記他の一連の命令の実行要求を通知する命令に変換し、
前記第3の記憶領域に、変換した前記一連の命令を格納する、
ことを特徴とする付記10〜14のいずれか一つに記載の復号装置。
(付記16)前記制御部は、
前記実行要求を前記情報処理装置から受け付けた場合に、前記実行要求に対応する難読化命令の難読化を解除した一連の命令のうち、前記一連の命令の呼び出し元となる一連の命令に復帰する命令を、前記復号装置に前記呼び出し元となる一連の命令の実行要求を通知する命令に変換し、
前記第3の記憶領域に、変換した前記一連の命令を格納する、
ことを特徴とする付記10〜15のいずれか一つに記載の復号装置。
(付記17)前記制御部は、
検出した前記一連の命令のダイジェスト情報を保持し、
前記実行要求を前記情報処理装置から受け付けた場合に、前記第2の記憶領域に格納された前記実行要求に対応する難読化命令の難読化を解除した一連の命令のダイジェスト情報と、保持した前記一連の命令のダイジェスト情報とが一致するか否かを判断し、
前記実行要求に対応する難読化命令の難読化を解除した一連の命令のダイジェスト情報と、保持した前記一連の命令のダイジェスト情報とが一致しないと判断した場合、前記第3の記憶領域に前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納しないことを特徴とする付記10〜16のいずれか一つに記載の復号装置。
(付記18)前記復号装置は、
前記一連の命令の呼び出し元となる呼び出し元命令の実行要求を前記情報処理装置から受け付けた時点から、所定の時間間隔が経過するまでに前記一連の命令の実行要求を前記情報処理装置から受け付けたか否かを判断し、
前記所定の時間間隔が経過するまでに前記一連の命令の実行要求を前記情報処理装置から受け付けなかったと判断した後に、前記一連の命令の実行要求を前記情報処理装置から受け付けた場合、前記第3の記憶領域に前記実行要求に対応する難読化命令の難読化を解除した一連の命令を格納しないことを特徴とする付記10〜17のいずれか一つに記載の復号装置。