情報処理装置、セキュアモジュール、情報処理方法、および情報処理プログラム
【課題】不正プログラムの開発防止を図ること。
【解決手段】情報処理装置101は、安全性が担保されていないメインメモリ103に書き出されるプログラム(例えば、サブルーチンSR)を、信頼性が担保されたセキュアモジュール102で暗号化してから、メインメモリ103に書き出す。これにより、情報処理装置101は、メインメモリ103でのプログラムの安全性を担保し、クラッカー105によるプログラムの解析および改ざんを防止して、不正プログラムの開発を防止する。また、情報処理装置101は、暗号化されたプログラムを、プログラムの実行時にだけ復号して、プログラムの実行終了時に削除する。これにより、情報処理装置101は、暗号化されていない状態のプログラムがメインメモリ103に存在する時間を少なくして、クラッカー105によるプログラムの解析および改ざんを防止して、不正プログラムの開発を防止する。
【解決手段】情報処理装置101は、安全性が担保されていないメインメモリ103に書き出されるプログラム(例えば、サブルーチンSR)を、信頼性が担保されたセキュアモジュール102で暗号化してから、メインメモリ103に書き出す。これにより、情報処理装置101は、メインメモリ103でのプログラムの安全性を担保し、クラッカー105によるプログラムの解析および改ざんを防止して、不正プログラムの開発を防止する。また、情報処理装置101は、暗号化されたプログラムを、プログラムの実行時にだけ復号して、プログラムの実行終了時に削除する。これにより、情報処理装置101は、暗号化されていない状態のプログラムがメインメモリ103に存在する時間を少なくして、クラッカー105によるプログラムの解析および改ざんを防止して、不正プログラムの開発を防止する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報を処理する情報処理装置、セキュアモジュール、情報処理方法、および情報処理プログラムに関する。
【背景技術】
【0002】
従来、モバイル端末(以下、単に「端末」という)は、第3者によるソフトウェア開発を想定していなかったため、端末の仕様およびソフトウェア構造は一般に知られておらず、端末内部は秘匿性が保たれ相当に安全であった。また、安全性の保証されたセキュアモジュール(耐タンパモジュール、例えばSIMカード(Subscriber Identity Module Card))を信頼性拠点として、特に秘匿すべき情報(例えば、正規の暗号鍵やユーザ識別情報)の安全性を担保していた(例えば、下記特許文献1および2参照)。
【0003】
即ち、秘匿すべき情報は、端末内部の正規のソフトウェアしか利用できない。そのため、外部装置は、端末から受信した通信内容が、安全性の担保された正規の暗号鍵により暗号化されていたり、安全性の担保されたユーザ識別情報を含んでいたりするか否かに基づいて、正規の通信内容か偽の通信内容かを判別して通信の安全性を担保できた。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−129227号公報
【特許文献2】特許第4408601号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、近年では、スマートフォンで見られるように、端末の仕様およびソフトウェア構造を公開し、第3者によるソフトウェア開発を促す傾向にある。このため、クラッカーによって、端末内のソフトウェアが読み出され、解析され、改ざんされ、不正ソフトウェアが開発される可能性が増大している。また、セキュアモジュールは、外から覗き見や改ざんは不可能であるが、ソフトウェアから利用するためのインターフェースが公開されているため、セキュアモジュール内の秘匿すべき情報は不正ソフトウェアによって容易に読み出されてしまう。
【0006】
したがって、不正ソフトウェアは、偽の通信内容を正規の暗号鍵を用いて暗号化した上で、または、偽の通信内容にユーザ情報を含ませた上で、外部の装置に送信することができる。そのため、外部の装置では偽の通信内容か否かを判別できず、通信の安全性を担保できないという問題があった。
【0007】
本発明は、かかる問題点に鑑み、不正ソフトウェアの開発を防止する情報処理装置、セキュアモジュール、情報処理方法および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、1または複数のプログラムからなるプログラム群をセキュアに記憶し、プログラム群のいずれかのプログラムの実行待ち状態を検出し、内部に格納された情報を外部から参照ができない構造であって、実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、プログラム群とは異なる記憶領域に書き出すセキュアモジュールを有し、いずれかのプログラムの実行要求を検出し、いずれかのプログラムの実行要求が検出された場合、セキュアモジュールによって暗号化されたいずれかのプログラムを復号して記憶領域に書き出し、復号されたいずれかのプログラムを実行する情報処理装置、情報処理方法および情報処理プログラムが提案される。
【0009】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第1の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号して第1の記憶領域に書き出すセキュアモジュール。
【0010】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第1の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号して第1の記憶領域に書き出す情報処理方法および情報処理プログラム。
【0011】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第1の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号する鍵を情報処理装置に送信するセキュアモジュール。
【0012】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第1の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号する鍵を情報処理装置に送信する情報処理方法および情報処理プログラム。
【発明の効果】
【0013】
本発明の一側面によれば、不正ソフトウェアの開発の防止を図ることができるという効果を奏する。
【図面の簡単な説明】
【0014】
【図1】図1は、情報処理装置によるプログラムの改ざん防止の内容を示す説明図である。
【図2】図2は、実施の形態にかかる情報処理装置101のハードウェア構成例1を示すブロック図である。
【図3】図3は、図2のセキュアモジュール102のハードウェア構成例を示すブロック図である。
【図4】図4は、実施の形態にかかる情報処理装置101のハードウェア構成例2を示すブロック図である。
【図5】図5は、図4のセキュアモジュール102のハードウェア構成例を示すブロック図である。
【図6】図6は、情報処理装置101の機能的構成例1を示すブロック図である。
【図7】図7は、情報処理装置101の機能的構成例2を示すブロック図である。
【図8】図8は、情報処理装置101の動作概要例を示す説明図である。
【図9】図9は、サブルーチンSRの加工の概要を示す説明図である。
【図10】図10は、加工プログラムPPによるサブルーチンSRの加工例を示す説明図(その1)である。
【図11】図11は、加工プログラムPPによるサブルーチンSRの加工例を示す説明図(その2)である。
【図12】図12は、加工プログラムPPによるサブルーチンSRの加工例を示す説明図(その3)である。
【図13】図13は、加工プログラムPPによるサブルーチンSRの加工例を示す説明図(その4)である。
【図14】図14は、サブルーチンSR加工処理の処理手順例を示すフローチャートである。
【図15】図15は、図14に示したシャッフリング処理(ステップS1412)の詳細な処理手順例を示すフローチャートである。
【図16】図16は、サブルーチンSRの加工例を示す説明図である。
【図17】図17は、スクランブル処理の詳細を示すフローチャートである。
【図18】図18は、図8に示した暗号化サブルーチンS−SRの具体例1を示す説明図である。
【図19】図19は、図8に示した暗号化サブルーチンS−SRの具体例2を示す説明図である。
【図20】図20は、デスクランブル処理の詳細を示すフローチャートである。
【図21】図21は、デスクランブル処理を実行するプログラム例を示す説明図である。
【図22】図22は、サブルーチンSRの認証の概要を示す説明図である。
【図23】図23は、セキュアモジュール102による認証処理の詳細を示すフローチャートである。
【図24】図24は、セキュアモジュール102による暗号化許可処理の詳細を示すフローチャートである。
【発明を実施するための形態】
【0015】
以下に添付図面を参照して、この発明にかかる情報処理装置、セキュアモジュール、情報処理方法、および情報処理プログラムの実施の形態を詳細に説明する。暗号化されていないプログラムが安全性が担保されていないメインメモリ上に存在する期間をできる限り短くするため、本実施の形態では、情報処理装置は、安全性が担保されていないメインメモリに書き出されるプログラムを、信頼性が担保されたセキュアモジュールで暗号化してから、メインメモリに書き出しておく。これにより、実行前は、メインメモリ上で暗号化されているため、メインメモリでのプログラムの安全性が担保され、クラッカーによるプログラムの解析および改ざんを防止することができる。
【0016】
また、情報処理装置は、メインメモリ上に書き出された、暗号化されたプログラムを、当該プログラムの実行時にだけ復号して、プログラムの実行終了時に削除する。これにより、情報処理装置は、暗号化されていない状態のプログラムがメインメモリに存在する時間を少なくして、クラッカーによるプログラムの解析および改ざんを防止する。
【0017】
(情報処理装置によるプログラムの改ざん防止の内容)
図1は、情報処理装置によるプログラムの改ざん防止の内容を示す説明図である。図1において、情報処理装置101は、セキュアモジュール102と、メインメモリ103と、HDD(Hard Disk Drive)104と、を有する。
【0018】
HDD104は、情報処理装置101によって実行されるプログラム群が保持される記憶装置である。図1では、HDD104には、サブルーチンSR(図1では、例として2個のサブルーチンSR1,SR2)を暗号強度の高い暗号化方式により暗号化して生成された暗号化サブルーチンC−SRが保持されている。なお、暗号強度の高い暗号化方式とは、例えば、暗号規格であるAES(Advanced Encryption Standard)やNESSIE(New European Schemes for Signature, Integrity, and Encryption)として規格化された暗号方式である。
【0019】
メインメモリ103は、情報処理装置101がプログラムを実行する際の作業領域となる記憶装置であり、図1では、サブルーチンSRを呼び出して実行するメインプログラムMPが書き出されている。ただし、メインメモリ103は、クラッカー105であってもデータを読み出すことが可能な記憶装置であり、信頼性は担保されていない。
【0020】
セキュアモジュール102は、TRM(Tamper Resistant Module)構造など内部に格納された情報を外部から参照できない構造を有するLSI(Large Scale Integration)である。これにより、セキュアモジュール102は、外部からの覗き見を防止するとともに、内部のデータの改ざんを防止する。
【0021】
セキュアモジュール102は、暗号化回路を有する。暗号化回路は、HDD104内の暗号化サブルーチンC−SRの暗号化に用いられている暗号強度の高い暗号化方式による復号が可能である。また、暗号化回路は、暗号化および復号の速度が速い暗号化方式による暗号化および復号が可能である。暗号化および復号の速度が速い暗号化方式とは、例えば、暗号化されるデータと暗号鍵となるデータとの排他的論理和(XOR:eXclusive OR)により暗号化(スクランブル)をおこなう方式(以下、「XOR暗号」という)である。
【0022】
ここで、メインプログラムMPが起動された場合を例に挙げて、情報処理装置101が、クラッカー105によるサブルーチンSRの解析および改ざんを防止しつつ、メインプログラムMPに呼び出されたサブルーチンSRを実行する場合について説明する。
【0023】
例えば、図1の(A)に示すように、まず、情報処理装置101は、メインプログラムMPに呼び出されるサブルーチンSRを、作業領域となるメインメモリ103に書き出す。ここで、メインメモリ103は信頼性が担保されていないため、暗号化されていない状態でサブルーチンSRが書き出された場合、サブルーチンSRがクラッカー105により解析されるおそれがある。
【0024】
(1)そのため、情報処理装置101は、サブルーチンSRを暗号化した状態で、メインメモリ103に書き出し、サブルーチンSRの実行時に復号して実行する。この際、サブルーチンSRの復号を高速化するために、信頼性の担保されたセキュアモジュール102が、暗号化サブルーチンC−SRを一旦復号し、復号したサブルーチンSRを、XOR暗号によりスクランブルした暗号化サブルーチンS−SRにして書き出しておく。
【0025】
図1の(A)に示すように、メインメモリ103に書き出されたサブルーチンSRは、暗号化サブルーチンS−SRの状態であるため、クラッカー105による解析を防止できる。また、サブルーチンSRの暗号化および復号が信頼性の担保されたセキュアモジュール102内でおこなわれるため、クラッカー105は、復号された状態のサブルーチンSRを覗き見することもできない。同様に、クラッカー105は、サブルーチンSRに使用されている暗号化方式および暗号鍵を覗き見することもできない。
【0026】
ここで、メインプログラムMPが実行開始され、メインプログラムMPからサブルーチンSR1の実行要求が発生した場合を想定する。
【0027】
サブルーチンSR1の実行要求があると、図1の(B)に示すように、(2)信頼性の担保されたセキュアモジュール102が、暗号化サブルーチンS−SR1から、サブルーチンSR1を復号(デスクランブル)する。
【0028】
(3)そして、情報処理装置101は、デスクランブルされたサブルーチンSR1を実行して、(4)サブルーチンSR1の実行の終了時に、サブルーチンSR1を削除する。また、サブルーチンSR2の実行要求があった場合も、情報処理装置101は、(2)〜(4)と同様にして、サブルーチンSR2を実行し、削除する。
【0029】
図1の(B)に示すように、実行のために復号されたサブルーチンSRが、メインメモリ103に存在する時間は、サブルーチンSRの実行開始時の復号から、サブルーチンSRの実行終了時の削除までの時間のみである。そのため、クラッカー105がサブルーチンSRを解析できる時間はサブルーチンSRの復号から削除までの短い時間しかなく、クラッカー105はサブルーチンSRを解析することができない。
【0030】
以上のように、情報処理装置101は、サブルーチンSRのクラッカー105による改ざんおよび解析を防止し、不正ソフトウェアの開発を防止することができる。また、情報処理装置101は、XOR暗号を使用することにより、実行直前までサブルーチンSRを暗号化しておいても、サブルーチンSRの復号によりメインプログラムMPの実行が遅延しないようにすることができる。さらに、XOR暗号では暗号化および復号が同一の処理により実現されるため、XOR暗号を採用した場合には、セキュアモジュール102を簡素化でき安価に作成できるようになる。
【0031】
また、結果として、セキュアモジュール102内の秘匿すべき情報(暗号鍵やユーザ識別情報)が、不正ソフトウェアに利用されることがなくなり、情報処理装置101のユーザの不正ソフトウェアによる被害をなくすことができる。例えば、通信販売の商品購入用ソフトウェアが、解析および改ざんされ、ユーザが入力した注文内容を書き換えてしまう不正ソフトウェアが開発されることを防止できる。そして、不正ソフトウェアにより、セキュアモジュール102内の暗号鍵やユーザ識別情報が利用され、偽の注文内容が送信されてしまうといった被害をなくすことができる。
【0032】
(情報処理装置101のハードウェア構成)
次に、情報処理装置101のハードウェア構成について説明する。図1に示したように、情報処理装置101は、セキュアモジュール102を有しているが、セキュアモジュール102は、ワンチップで作成されていてもよいし、複数チップで作成されていてもよい。まず、図2および図3を用いて、セキュアモジュール102がワンチップで作成されている場合の情報処理装置101のハードウェア構成例について説明する。
【0033】
(情報処理装置101のハードウェア構成例1)
図2は、実施の形態にかかる情報処理装置101のハードウェア構成例1を示すブロック図である。図2において、情報処理装置101は、プロセッサ201と、ROM(Read‐Only Memory)202と、セキュアモジュール102と、メインメモリ103と、HDD104と、を備えている。また、情報処理装置101は、I/F(Interface)203と、ディスプレイ204と、を備えている。また、各構成部はバス200によってそれぞれ接続されている。
【0034】
ここで、プロセッサ201は、情報処理装置101の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶している。メインメモリ103は、プロセッサ201のワークエリアとして使用される。HDD104は、プロセッサ201の制御にしたがって内蔵するハードディスクに対するデータのリード/ライトを制御する駆動装置である。
【0035】
インターフェース(以下、「I/F」と略する。)203は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク210に接続され、このネットワーク210を介して他の装置に接続される。そして、I/F203は、ネットワーク210と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F203には、例えばモデムやLANアダプタなどを採用することができる。
【0036】
ディスプレイ204は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ204は、例えば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0037】
セキュアモジュール102は、HDD104から暗号化サブルーチンC−SRを読み出す機能を備えている。また、セキュアモジュール102は、サブルーチンSRをメインメモリ103に書き出す機能、暗号化機能、復号機能、乱数生成機能等を備えている。セキュアモジュール102は、暗号化サブルーチンC−SRを復号する暗号鍵と、XOR暗号の暗号鍵と、をセキュアに保持している。
【0038】
ただし、セキュアモジュール102は、暗号鍵のみを保持し、暗号化機能、復号機能、乱数生成機能等は、情報処理装置101が備えることとしてもよい。この場合、セキュアモジュール102は、情報処理装置101の要求にしたがって、暗号鍵を出力する。セキュアモジュール102は、情報処理装置101に内蔵されていてもよく、外付けとしてもよい。
【0039】
(セキュアモジュール102のハードウェア構成例1)
図3は、図2のセキュアモジュール102のハードウェア構成例を示すブロック図である。セキュアモジュール102は、プロセッサ301と、I/F302と、暗号化回路303と、RAM304と、ROM305と、フラッシュメモリ306と、乱数生成回路307と、を備えている。また、各構成部はバス300によってそれぞれ接続されている。
【0040】
プロセッサ301は、セキュアモジュール102内の制御や演算処理をおこなう。I/F302は、バス200を介して情報処理装置101内の各構成部と接続され、通信をおこなう。暗号化回路303は、データやプログラムを暗号化したり、暗号化されたデータやプログラムを復号したりする。暗号化および復号をソフトウェア的に実行する場合は、暗号化回路303に相当するプログラムをROM305に記憶させておくことで、暗号化回路303は不要となる。
【0041】
RAM304は、プロセッサ301のワークエリアとして使用されるメインメモリである。ROM305は、プログラムやデータが格納される不揮発性メモリである。ROM305には、暗号化サブルーチンC−SRを復号する暗号鍵と、XOR暗号の暗号鍵と、が格納されている。フラッシュメモリ306は、保存したデータやプログラムが書き換え可能な不揮発性メモリである。乱数生成回路307は、乱数を生成する。
【0042】
セキュアモジュール102は、外部から覗き見や改ざんができないのが前提であるため、できる限り、図3の構成のようにワンチップのLSIにして実装するべきである。例えば、セキュアモジュール102はTRM構造である。TRM構造は、半導体チップ(この場合、セキュアモジュール102)の内部解析や改ざんを物理的および論理的に防衛するための構造をいう。具体的には、セキュアモジュール102においては、内部に強固で粘着力が高いコーティングが施され、その表面が剥がされると内部の回路が完全に破壊されたり、ダミーの配線が配されていたりする。
【0043】
(情報処理装置101のハードウェア構成例2)
次に、図4および図5を用いて、セキュアモジュール102が複数のチップで作成されている場合の情報処理装置101のハードウェア構成について説明する。
【0044】
図4は、実施の形態にかかる情報処理装置101のハードウェア構成例2を示すブロック図である。図4において、情報処理装置101は、プロセッサ201と、ROM202と、メインメモリ103と、HDD104と、I/F203と、ディスプレイ204と、セキュアモジュール102と、を備えている。図4において、図2と同様の構成部には同一の符号を付し、その説明を省略する。
【0045】
図4では、セキュアモジュール102は、暗号化機能、復号機能、乱数生成機能等を備えるLSI401と、暗号化サブルーチンC−SRを復号する暗号鍵をセキュアに保持する既存のSIMカード402とを接合して作成される。そして、LSI401は、必要に応じて暗号鍵をSIMカード402から読み出して暗号化機能、復号機能を使用する。
【0046】
(セキュアモジュール102のハードウェア構成例2)
図5は、図4のセキュアモジュール102のハードウェア構成例を示すブロック図である。図5において、セキュアモジュール102は、LSI401とSIMカード402とで構成される。LSI401は、プロセッサ301と、I/F302と、暗号化回路303と、RAM304と、ROM305と、フラッシュメモリ306と、乱数生成回路307と、を備えている。SIMカード402は、暗号鍵をセキュアに保持している。セキュアモジュール102内で、LSI401と、SIMカード402とはI/F302によって接続され、通信をおこなう。図5において、図3と同様の構成部には同一の符号を付し、その説明を省略する。
【0047】
セキュアモジュール102は、外部から覗き見や改ざんができないのが前提であるため、図5の構成のように複数チップで実現した場合は、全体を一つのモジュールとし、全体を樹脂で固めて第3者が覗き見や改ざんが困難なように実装すべきである。
【0048】
(情報処理装置101の機能的構成例1)
次に、情報処理装置101の機能的構成例1について説明する。図6は、情報処理装置101の機能的構成例1を示すブロック図である。情報処理装置101は、第1の検出部601と、暗号化部602と、第2の検出部603と、復号部604と、実行部605と、挿入部606と、判定部607と、出力部608と、設定部609と、削除部610と、記憶部611と、加工部612と、送信部613と、を含む構成である。
【0049】
この制御部となる機能(第1の検出部601〜削除部610)は、具体的には、例えば、図2に示したROM202、メインメモリ103、HDD104、などの記憶装置に記憶されたプログラムをプロセッサ201に実行させることにより、または、I/F203により、その機能を実現する。もしくは、この制御部となる機能(第1の検出部601〜削除部610)は、具体的には、例えば、図3に示したROM305、RAM304、フラッシュメモリ306、などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、または、I/F302により、その機能を実現する。
【0050】
第1の検出部601は、プログラム群のいずれかのプログラムの実行待ち状態を検出する機能を有する。ここで、いずれかのプログラムとは、他のプログラムから呼び出されるプログラムであり、例えば、OS(Operating System)に呼び出されるメインプログラムMP、または、メインプログラムMPに呼び出されるサブルーチンSRが挙げられる。実行待ち状態とは、プログラムを呼び出す他のプログラムが起動されたときに、他のプログラムからの呼び出しを待っている状態である。
【0051】
具体的には、例えば、第1の検出部601は、メインプログラムMPが起動され、メインプログラムMPによりサブルーチンSRが呼び出される状態になったことを検出する。これにより、他のプログラムに呼び出されるプログラムを、作業領域となるメインメモリ103に書き出すトリガを検出できる。
【0052】
暗号化部602は、セキュアモジュール102内に備えられ、第1の検出部601によって実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、プログラム群とは異なる記憶領域に書き出す機能を有する。ここで、プログラム群とは異なる記憶領域とは、プログラムの作業領域であり、例えば、上述したメインメモリ103である。
【0053】
具体的には、例えば、暗号化部602は、サブルーチンSRを暗号化して、メインメモリ103に書き出す。これにより、誰もが参照可能であり安全性が担保されていないメインメモリ103に書き出されるプログラムを暗号化することにより、安全性を担保する。また、信頼性の担保されたセキュアモジュール102で暗号化をおこなうため、暗号化に使用した暗号化方式や暗号化前のプログラムは秘匿され、プログラムの安全性を担保できる。
【0054】
また、具体的には、例えば、暗号化部602は、暗号化をおこなうごとに異なる暗号化方法を使用する。異なる暗号化方法とは、例えば、暗号化ごとに異なるデータを暗号鍵に用いる暗号化方式である。ここで、異なるデータとは、例えば、乱数生成回路307により生成された乱数列である。ただし、この場合、暗号化の際に暗号化対象のプログラムと暗号鍵とを対応付けてテーブルに記憶しておき、復号の際にテーブルを参照して復号に使用する暗号鍵を特定する。これにより、暗号化するごとに、暗号鍵が変更され、クラッカーによるプログラムの解析を困難にすることができる。
【0055】
また、具体的には、例えば、暗号化部602は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する暗号化方式を使用する。即ち、上述したXOR暗号により暗号化をおこなう。XOR暗号は暗号化および復号にかかる処理量が少なく所要時間が短い暗号であるから、暗号化されたプログラムの実行時に、暗号化されたプログラムの復号にかかる時間を短くすることができる。また、XOR暗号では暗号化および復号が同一の処理により実現されるため、XOR暗号を採用した場合には、セキュアモジュール102を簡素化して安価に作成できるようになる。
【0056】
また、暗号化部602は、プログラム群を呼び出すプログラムが起動された場合、第1の暗号化プログラム群を復号する機能を有する。そして、暗号化部602は、暗号化プログラム群の暗号化に使用されている第1の暗号化方法とは異なる第2の暗号化方法により、復号されたプログラム群を暗号化して記憶領域に書き出す機能を有する。
【0057】
ここで、プログラム群を呼び出すプログラムとは、例えば、メインプログラムMPである。暗号化プログラム群とは、例えば、HDD104に保持された暗号化サブルーチンC−SRである。第1の暗号化方法とは、暗号強度の高い暗号化方式である。第2の暗号化方法とは、XOR暗号のうちで、暗号強度の高い暗号化方式であり、例えば、暗号鍵のデータ長が長いXOR暗号である。
【0058】
具体的には、例えば、暗号化部602は、HDD104に保持された暗号化サブルーチンC−SRを、一旦、暗号強度の高いXOR暗号により暗号化して、メインメモリ103に書き出しておく。これにより、メインメモリ103に書き出したプログラムが長時間実行されない場合でも、プログラムの安全性を担保できる。長時間実行されない場合とは、例えば、メインプログラムMPが起動されているが、情報処理装置101のユーザから実行の指示が入力されていない状態が続いている場合をいう。
【0059】
第2の検出部603は、プログラム群のいずれかのプログラムの実行要求を検出する機能を有する。具体的には、例えば、第2の検出部603は、メインプログラムMPによりサブルーチンSRの実行が要求されたことを検出する。これにより、第2の検出部603は、暗号化サブルーチンS−SRの復号のトリガを検出することができる。
【0060】
復号部604は、第2の検出部603によっていずれかのプログラムの実行要求が検出された場合、セキュアモジュール102によって暗号化されたいずれかのプログラムを復号して記憶領域に書き出す機能を有する。
【0061】
具体的には、例えば、復号部604は、セキュアモジュール102外に存在し、セキュアモジュール102から提供されるセキュアモジュール102がいずれかのプログラムの暗号化に使用した暗号鍵を用いて、いずれかのプログラムを復号する。セキュアモジュール102から提供される暗号鍵は、後述する送信部613によって送信される。
【0062】
より具体的には、例えば、復号部604は、セキュアモジュール102から提供されるXOR暗号の暗号鍵を用いて、暗号化サブルーチンS−SRを復号する。これにより、サブルーチンSRを実行可能な状態にして、メインメモリ103に書き出すことができる。
【0063】
また、復号時まで暗号鍵をセキュアモジュール102が秘匿しておくため、クラッカー105によるプログラムの解析を防止することができる。また、セキュアモジュール102が暗号化ごとに異なる暗号鍵を使用する場合、次回以降の暗号化には同一の暗号鍵は使用しない。そのため、情報処理装置101に提供することにより暗号鍵がクラッカー105に知られても、次回以降に生成された暗号化サブルーチンS−SRの復号にクラッカー105が今回の暗号鍵を流用することはできないため、安全性を担保できる。
【0064】
さらに、復号部604はセキュアモジュールに内蔵することも可能だが、セキュアモジュール102外に存在するようにして、セキュアモジュール102の機能を省き、セキュアモジュール102を安価に作成することができる。
【0065】
実行部605は、復号部604によって復号されたいずれかのプログラムを実行する機能を有する。具体的には、例えば、実行部605は、サブルーチンSRを実行する。これにより、メインプログラムMPの処理を正常におこなうことができる。
【0066】
挿入部606は、セキュアモジュール102内に備えられ、暗号化に先だって、所定の演算をおこない演算結果を記憶領域の特定の領域に書き出す演算プログラムを、いずれかのプログラムに挿入する機能を有する。ここで、演算プログラムとは、所定の演算をおこない演算結果をメインメモリ103の所定の領域に格納するプログラムであり、後述する認証サブプログラムである。具体的には、例えば、挿入部606は、後述する加工プログラムを実行して、サブルーチンSRに認証サブプログラムを挿入する。
【0067】
判定部607は、セキュアモジュール102内に備えられ、実行部605によるいずれかのプログラムの実行に伴って、演算プログラムにより書き出される演算結果を取得する機能を有する。そして、判定部607は、取得した演算結果と、セキュアモジュール102で所定の演算をおこない得られた演算結果と、が一致しない場合、いずれかのプログラムに改ざんがあると判定する機能を有する。
【0068】
具体的には、例えば、判定部607は、サブルーチンSRの実行に伴って実行される認証サブプログラムによって、メインメモリ103に書き出された演算結果を取得する。次に、セキュアモジュール102で、認証サブプログラムと同様の演算をおこない、正規の演算結果を算出し、認証サブプログラムが書き出した演算結果が正規の演算結果でなければ、プログラムは改ざんされていると判定する。
【0069】
そして、挿入される認証サブプログラムがおこなう所定の演算を、毎回異なる演算にすることで、クラッカー105による正規の認証サブプログラムを挿入した不正プログラムの開発を困難にすることができる。
【0070】
出力部608は、セキュアモジュール102内に備えられ、判定部607によって改ざんがあると判定された場合、判定結果を出力する機能を有する。具体的には、例えば、出力部608は、改ざんがある場合には、ディスプレイ204に出力して、情報処理装置101のユーザに不正プログラムが実行されるおそれがあることを通知する。これにより、不正プログラムによる被害を防止する。
【0071】
設定部609は、判定部607によって改ざんがあると判定された場合、復号部604を復号不能な状態に設定する機能を有する。具体的には、例えば、設定部609は、判定部607によってプログラムの改ざんがあると判定された場合、復号部604、暗号化部602、または全機能を使用不能に設定する。これにより、設定部609は、セキュアモジュール102を、改ざんが検出されたプログラムからの復号依頼に対応しないようにできる。または、設定部609は、不正プログラムの続行を不可能にすることができる。
【0072】
削除部610は、実行部605による実行が終了したいずれかのプログラムを記憶領域から削除する機能を有する。具体的には、例えば、削除部610は、メインメモリ103に書き出されたサブルーチンSRを削除する。これにより、暗号化されていない状態のプログラムが、安全性が担保されていないメインメモリ103に存在する時間を短くして、クラッカー105によりプログラムが解析および改ざんされることを防止することができる。
【0073】
記憶部611は、プログラム群を暗号化した第1の暗号化プログラム群を保持する機能を有する。具体的には、例えば、記憶部611は、HDD104であり、暗号化サブルーチンC−SRを保持する。これにより、プログラムをセキュアに保持する。
【0074】
加工部612は、プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工する機能を有する。具体的には、例えば、加工部612は、サブルーチンSRを、後述する「難読化」、「暗号化」、「シャッフリング」により加工する。これにより、クラッカー105がサブルーチンSRを解読するのを困難にし、サブルーチンSRが解析され、改ざんされることを防止することができる。
【0075】
送信部613は、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号する鍵を情報処理装置に送信する機能を有する。具体的には、例えば、送信部613は、RAM304に保持されているXOR暗号の暗号鍵を情報処理装置101に送信する。
【0076】
また、セキュアモジュール102が暗号化ごとに異なる暗号鍵を使用している場合では、送信部613は、暗号鍵と暗号化サブルーチンS−SRとを対応付けて記憶するテーブルを参照して実行要求されている暗号化サブルーチンS−SRに対応する暗号鍵を特定する。そして、送信部613は、特定された暗号鍵を情報処理装置101に送信する。
【0077】
これにより、情報処理装置101は、復号部604によって暗号化サブルーチンS−SRを復号する際に使用する暗号鍵を得ることができるようになる。
【0078】
(情報処理装置101の機能的構成例2)
また、図7に示すように、復号部604はセキュアモジュール102に備えられていてもよい。図7は、情報処理装置101の機能的構成例2を示すブロック図である。
【0079】
具体的には、例えば、復号部604は、セキュアモジュール102に備えられ、暗号化サブルーチンS−SRを復号して、メインメモリ103に書き出す。これにより、サブルーチンSRを実行可能な状態にして、メインメモリ103に書き出すことができる。また、信頼性の担保されたセキュアモジュール102が復号部604を備えるため、暗号化方法や暗号鍵を秘匿することができ、クラッカー105によるプログラムの解析を防止しやすくなる。
【0080】
(情報処理装置101での動作概要例)
次に、図8を用いて、情報処理装置101の動作概要例について説明する。
【0081】
図8は、情報処理装置101の動作概要例を示す説明図である。(1)まず、情報処理装置101は、暗号化メインプログラムC−MPと暗号化サブルーチンC−SR群とを含む暗号化ソフトウェアを実行するために、HDD104の暗号化ソフトウェアをセキュアモジュール102に入力する。
【0082】
(2)セキュアモジュール102は、入力された暗号化ソフトウェアの暗号化メインプログラムC−MPを復号してメインメモリ103に書き出す。また、セキュアモジュール102は、入力された暗号化ソフトウェアの暗号化サブルーチンC−SR群を復号する。
【0083】
(3)次に、セキュアモジュール102は、復号したサブルーチンSR群の各サブルーチンSRを、加工プログラムPPを用いて加工する。加工プログラムPPの内容としては、「認証サブプログラムや命令の挿入」や「サブルーチンSRの難読化、暗号化、またはシャッフリング」が挙げられる。これにより、セキュアモジュール102は、サブルーチンSR群の各サブルーチンSRを、クラッカー105による解析および改ざんが困難なように加工する。
【0084】
(4)そして、セキュアモジュール102は、加工済みサブルーチンP−SR群の各加工済みサブルーチンP−SRを、XOR暗号によりスクランブルして、暗号化サブルーチンS−SR群を生成する。次に、セキュアモジュール102は、生成した暗号化サブルーチンS−SR群を、メインメモリ103に書き出す。
【0085】
(5)ここで、情報処理装置101は、メインプログラムMPを実行する。実行されたメインプログラムMPは、サブルーチンSR群のうちのいずれかのサブルーチンSRの実行要求を発生させる。
【0086】
(6)情報処理装置101は、サブルーチンSRの実行要求の発生を検出すると、検出した実行要求に基づいて、暗号化サブルーチンS−SR群のいずれかの暗号化サブルーチンS−SRをデスクランブルして、実行要求がなされたサブルーチンSRを得る。
【0087】
デスクランブルは、例えば、(3)においてサブルーチンSRに、(4)による暗号化の対象としない命令として「自身をデスクランブルする依頼をセキュアモジュール102に出力する命令」を挿入しておくことにより実現できる。なお、復号により、復号前の暗号化サブルーチンS−SRはメインメモリ103からなくなる。
【0088】
具体的には、情報処理装置101は、セキュアモジュール102に暗号化サブルーチンS−SRのデスクランブル依頼をする。または、情報処理装置101は、セキュアモジュール102に暗号化サブルーチンS−SRのデスクランブルに使用する暗号鍵の提供を依頼し、セキュアモジュール102から提供された暗号鍵により、暗号化サブルーチンS−SRをデスクランブルする。
【0089】
(7)そして、情報処理装置101は、デスクランブルされたサブルーチンSRを実行する。ここで、サブルーチンSRが実行されると、サブルーチンSRに挿入された認証サブプログラムもともに実行される。実行された認証サブプログラムは、所定の演算をおこない演算結果をメインメモリ103の所定の領域に格納する。
【0090】
一方、セキュアモジュール102は、認証プログラムを実行している。実行された認証プログラムは、認証サブプログラムと同一内容の所定の演算をおこない、正規の演算結果を算出する。そして、実行された認証プログラムは、認証サブプログラムが格納した演算結果を取得し、正規の演算結果と一致判定をおこない、サブルーチンSRに改ざんがあるか否か判定する。
【0091】
これにより、サブルーチンSR内の認証サブプログラムが、クラッカー105による改ざんの影響を受けている場合には、一致判定により演算結果が一致しないと判定されることになり、セキュアモジュール102は、改ざんがあると判定できる。
【0092】
そして、改ざんがある場合、改ざんを情報処理装置101のユーザに出力したり、実行中のサブルーチンSRを中断させたり、セキュアモジュール102の復号機能を不能に設定したりすることにより、クラッカー105による改ざんの被害を防ぐことができる。
【0093】
(8)そして、情報処理装置101は、サブルーチンSRの実行が終了すると、サブルーチンSRを削除する。例えば、サブルーチンSRの削除は、(3)において、サブルーチンSRに「自身を削除する命令」を挿入しておくことで実現できる。
【0094】
これにより、暗号化されていない状態のサブルーチンSRが、メインメモリ103に存在する時間は、上述した(6)〜(8)の間だけになり、クラッカー105がサブルーチンSRを解析および改ざんする時間をなくすことができる。そのため、クラッカー105による不正ソフトウェアの開発を防止することができる。
【0095】
また、情報処理装置101は、削除されたサブルーチンSRが、メインプログラムMPにより複数回実行されるサブルーチンSRである場合に対応するために、新たに暗号化サブルーチンS−SRを生成してメインメモリ103に書き出しておく。これにより、メインプログラムMPにより2度目以降にサブルーチンSRが呼び出される際に、呼び出されるべきサブルーチンSRが既に削除されメインメモリ103に存在しない状態になってしまうことを防止できる。
【0096】
以下では、図9〜図24を用いて、図8に示した情報処理装置101の各動作の内容について詳細に説明する。まず、図9〜図16を用いて、図8の(3)に示したサブルーチンSRの加工について具体的に説明する。
【0097】
なお、図9〜図13では、簡単のため、メインメモリ103およびHDD104でのサブルーチンSRを暗号化されていない状態で表しているが、実際にはメインメモリ103およびHDD104ではサブルーチンSRは暗号化された状態である。
【0098】
(サブルーチンSRの加工)
図9は、サブルーチンSRの加工の概要を示す説明図である。サブルーチンSRは、セキュアモジュール102のプロセッサ301が実行する加工プログラムPPによって、加工される。
【0099】
サブルーチンSR(プログラム)は、アドレス単位の命令の集合体である。ここでは、わかりやすさを考慮して、サブルーチンSRが5つのアドレス単位の命令で成り立っているものとする。具体的には、分割プログラムP1〜P5で構成されており、アドレスadr1〜adr5の順に分割プログラムP1〜P5が実行されるものとする。したがって、HDD104では、論理アドレスとして、実行順序となるアドレスadr1〜adr5の並びで記憶されている。
【0100】
サブルーチンSR(分割プログラムP1〜P5)は、加工プログラムPPにより配置順、即ち、アドレスを入れ替えられる。図9では、アドレスadr1が分割プログラムP1、アドレスadr2が分割プログラムP4、アドレスadr3が分割プログラムP2、アドレスadr4が分割プログラムP3、アドレスadr5が分割プログラムP5に加工されている。
【0101】
この場合、分割プログラムP1,P4,P3の後続に、セキュアモジュール102へのRead命令を追記しておく。セキュアモジュール102内には、アドレス変更後の対応関係を示すプログラム片を保持しておく。例えば、プログラム片paは、分割プログラムP1の実行後に参照されるGoto文であり、アドレスadr3にジャンプするものとする。
【0102】
また、プログラム片pbは、分割プログラムP3の実行後に参照されるGoto文であり、アドレスadr2にジャンプするものとする。プログラム片pcは、分割プログラムP4の実行後に参照されるGoto文であり、アドレスadr5にジャンプするものとする。プログラム片pa〜pcは加工の際に生成される。
【0103】
図10〜図13は、加工プログラムPPによるサブルーチンSRの加工例を示す説明図である。まず、図10では、HDD104内のサブルーチンSRのアドレス3〜5の命令群を、アドレス7〜9に移動させている。また、サブルーチンSRのアドレス6,7の命令群を、アドレス15,16に移動させている。アドレス1,2の命令群はそのままである。
【0104】
加工前では、アドレス2の命令「Y=X+8」の次は、アドレス3の命令「Z=X+Y」が実行される。アドレス3の命令「Z=X+Y」は、アドレス7に移動したため、アドレス3の内容を、「Goto7」というプログラム片(ジャンプ命令)に書き換える。そして、セキュアモジュール102は、テーブルにアドレス3とプログラム片「Goto7」との組み合わせを保持する。
【0105】
同様に、加工前では、アドレス5の命令「Z=Z+1」の次は、アドレス6の命令「Z=5+Z」が実行される。アドレス5の命令「Z=Z+1」はアドレス9に移動し、アドレス6の命令は、アドレス15に移動したため、アドレス9の次であるアドレス10の内容を、「Goto15」というプログラム片(ジャンプ命令)に書き換える。そして、セキュアモジュール102は、テーブルにアドレス10とプログラム片「Goto15」との組み合わせを保持する。
【0106】
そして、セキュアモジュール102は、サブルーチンSRをメインメモリ103に書き出す前に、プログラム片をセキュアモジュール102へのRead命令に書き換える。これにより、メインメモリ103に実装された加工後のサブルーチンSRが実行される場合、アドレス3のREAD命令により、セキュアモジュール102内のテーブルを参照して、アドレス3に対応するプログラム片「Goto7」を特定する。セキュアモジュール102は、プロセッサ201に対し、「Goto7」を通知することで、プロセッサ201は加工後のサブルーチンSRのアドレス7の命令を実行することとなる。
【0107】
このように、サブルーチンSRを構成する命令群を、対応関係を保持しておきながらシャッフリングする。したがって、サブルーチンSRを解読しにくい状態とすることで、セキュリティの向上を図ることができる。
【0108】
図11は、図10よりも加工を複雑化した例である。具体的には、図10では、プログラム片を単なるジャンプ命令としたが、図11では、単なるジャンプ命令ではなく、プログラム片にサブルーチンSRを構成する命令も挿入している。
【0109】
まず、図11では、HDD104内のサブルーチンSRのアドレス4,5の命令群を、アドレス8,9に移動させている。また、サブルーチンSRのアドレス6,7の命令群を、アドレス15,16に移動させている。アドレス1〜3の命令群はそのままである。
【0110】
加工前では、アドレス2の命令「Y=X+8」の次は、アドレス3の命令「Z=X+Y」が実行される。アドレス3の次であるアドレス4の命令は、アドレス8に移動したため、Goto文「Goto8」を生成する。そして、セキュアモジュール102は、アドレス3と、アドレス3の命令「Z=X+Y」および生成されたGoto文「Goto8」との組み合わせを保持する。このように、プログラム片を単なるジャンプ命令ではなく、複雑化することで、セキュリティの向上を図ることができる。
【0111】
図12は、サブルーチンSRを構成する命令群を暗号化する例である。図12では、セキュアモジュール102は、サブルーチンSR(加工前)のアドレス4〜7の命令群を暗号鍵K1〜K4で暗号化する。次に、暗号化された命令の前に、セキュアモジュール102へのREAD命令と復号命令を挿入する。これにより、挿入された命令分だけ、アドレスが繰り下がる。
【0112】
例えば、アドレス4の命令「Y=Y+1」を暗号鍵K1で暗号化して、アドレス6に書き込む。そして、空いているアドレス4にセキュアモジュール102へのREAD命令を挿入し、アドレス5に復号命令を挿入する。
【0113】
このあと、セキュアモジュール102では、サブルーチンSR(加工後)における暗号化命令を暗号化した鍵とその暗号化命令のために挿入されたREAD命令のアドレスとの組み合わせをテーブルに保持する。例えば、アドレス6に書き込まれた暗号化命令E1(Y=Y+1)を暗号化した暗号鍵K1と、暗号化命令E1(Y=Y+1)の生成により挿入されたREAD命令のアドレス4との組み合わせをテーブルに保持する。
【0114】
このあと、セキュアモジュール102は、テーブルをRAM304またはフラッシュメモリ306に保持しておき、加工したサブルーチンSRをメインメモリ103に書き込む。サブルーチンSR(加工後)を実行するときは、挿入されたREAD命令により暗号鍵を読み出して、次の復号命令で、暗号化命令を復号する。これにより、復号された命令を実行することが可能となる。例えば、アドレス4のREAD命令があると、セキュアモジュール102は、テーブルを参照して暗号鍵K1をプロセッサ201に渡す。
【0115】
プロセッサ201は、暗号鍵K1とアドレス5の復号命令により、暗号化命令E1(Y=Y+1)を復号して、アドレス6に命令「Y=Y+1」を書き込む。そして、アドレス6で、命令「Y=Y+1」を実行することとなる。このように、サブルーチンSRが一部暗号化されていても、復号鍵をセキュアモジュール102から取得することで処理の続行が可能になる。
【0116】
図13は、サブルーチンSRを構成する命令群を暗号化する例である。図13では、セキュアモジュール102は、サブルーチンSR(加工前)のアドレス4〜7の命令群をセキュアモジュール102へのREAD命令に置換する。例えば、アドレス4の命令「Y=Y+1」をREAD命令に置換する。そして、次のアドレス5に、「アドレス4でセキュアモジュール102から読み出した命令「Y=Y+1」を書き込む」命令を挿入する。
【0117】
このあと、セキュアモジュール102は、置換対象の命令とそのアドレスとの組み合わせをテーブルに保持する。例えば、セキュアモジュール102は、置換対象となったアドレス4とその命令「Y=Y+1」の組み合わせをテーブルに保持する。
【0118】
このあと、セキュアモジュール102は、テーブルをRAM304またはフラッシュメモリ306に保持しておき、加工したサブルーチンSRをメインメモリ103に書き込む。サブルーチンSR(加工後)を実行するときは、プロセッサ201は、置換されたREAD命令により置換元の命令を読み出して実行する。例えば、プロセッサ201は、アドレス4のREAD命令でセキュアモジュール102から命令「Y=Y+1」を読み出して実行することとなる。
【0119】
(サブルーチンSR加工処理)
図14は、サブルーチンSR加工処理の処理手順例を示すフローチャートである。まず、セキュアモジュール102が、暗号化サブルーチンC−SRをHDD104から読み出し(ステップS1401)、暗号化サブルーチンC−SRを復号する(ステップS1402)。
【0120】
ここで、セキュアモジュール102は、サブルーチンSRに認証サブプログラムや命令を挿入しておく(ステップS1403)。命令の内容については、図18および図19を用いて後述する。認証サブプログラムの内容については、図22を用いて後述する。
【0121】
次に、セキュアモジュール102は、サブルーチンSRの加工方法をランダムに決定する(ステップS1404)。具体的には、セキュアモジュール102は、「難読化」、「暗号化」(図12,図13を参照)、「シャッフリング」(図11,図12,図13を参照)、「何もしない」の中から決定する。
【0122】
そして、セキュアモジュール102は、加工方法が「難読化」であるか否かを判断する(ステップS1405)。加工方法が「難読化」である場合(ステップS1405:Yes)、セキュアモジュール102は、サブルーチンSRから難読化の対象範囲を指定し(ステップS1406)、対象範囲の命令を難読化する(ステップS1407)。そして、ステップS1404に戻る。
【0123】
また、ステップS1405において、加工方法が「難読化」でない場合(ステップS1405:No)、セキュアモジュール102は、加工方法が「暗号化」であるか否かを判断する(ステップS1408)。加工方法が「暗号化」である場合(ステップS1408:Yes)、セキュアモジュール102は、サブルーチンSRから暗号化の対象範囲を指定し(ステップS1409)、対象範囲の命令を暗号化する(ステップS1410)。このとき、図12に示したように、セキュアモジュール102は、暗号化対象のアドレスとそのアドレスの暗号化命令を復号する復号鍵の組み合わせをテーブルに保存する。そして、ステップS1404に戻る。
【0124】
また、ステップS1408において、加工方法が「暗号化」でない場合(ステップS1408:No)、セキュアモジュール102は、加工方法が「シャッフリング」であるか否かを判断する(ステップS1411)。加工方法が「シャッフリング」である場合(ステップS1411:Yes)、セキュアモジュール102は、シャッフリング処理(図15)を実行する(ステップS1412)。そして、シャッフリング処理の後、ステップS1404に戻る。
【0125】
また、ステップS1411において、加工方法が「シャッフリング」でない場合(ステップS1411:No)、セキュアモジュール102は、加工終了であるか否かを判断する(ステップS1413)。具体的には、例えば、このケースでは、加工方法が「何もしない」にランダム決定されているため、一度も加工していない場合は、加工を終了しない(ステップS1413:No)。この場合は、ステップS1404に戻る。
【0126】
少なくとも一度、または、予め設定しておいた所定回数加工がおこなわれた場合、ランダムに加工を終了する(ステップS1413:Yes)。これにより、加工処理を終了する。
【0127】
図15は、図14に示したシャッフリング処理(ステップS1412)の詳細な処理手順例を示すフローチャートである。ここでは、例として、図10に示したようなシャッフリングをする場合を例に挙げる。まず、セキュアモジュール102は、セキュアモジュール102内で加工先の領域を確保し(ステップS1501)、サブルーチンSRを複数の命令群に分割する(ステップS1502)。
【0128】
次に、セキュアモジュール102は、先頭の命令群を対象命令群に設定する(ステップS1503)。そして、セキュアモジュール102は、対象命令群の後続命令群があるか否かを判断する(ステップS1504)。後続命令群がある場合(ステップS1504:Yes)、セキュアモジュール102は、プログラム片(例えば、Goto文)をランダムに生成する(ステップS1505)。具体的には、セキュアモジュール102は、ランダムかつ対象命令群が入る領域が確保できるように生成する。
【0129】
このあと、セキュアモジュール102は、生成されたプログラム片のアドレスを、対象命令群の末尾アドレスの次のアドレスに設定する(ステップS1506)。そして、セキュアモジュール102は、プログラム片とその書込先アドレスとの組み合わせをテーブルに追加する(ステップS1507)。
【0130】
そして、セキュアモジュール102は、サブルーチンSRのプログラム片に割り当てられたアドレスに、プログラム片のRead命令を書き込む(ステップS1508)。このあと、セキュアモジュール102は、プログラム片で指定されたアドレス(プログラム片が「Goto8」なら「8」)に、後続命令群を対象命令群として設定して(ステップS1509)、ステップS1504に戻る。
【0131】
ステップS1504において、対象命令群の後続命令群がない場合(ステップS1504:No)、シャッフリング処理を終了して、ステップS1404に戻る。
【0132】
このように、サブルーチンSRを加工することでサブルーチンSRのクラッキングに対してセキュリティ強度を高めることができる。なお、上述した加工処理は、暗号化サブルーチンSRを読み込む都度実行されるため、その都度、サブルーチンSRの加工方法が変更されることとなる。したがって、クラッカーから見るとさらにサブルーチンSRの解析を困難にすることができる。
【0133】
図16は、サブルーチンSRの加工例を示す説明図である。(A)では、サブルーチンSRのアドレス1〜4の命令が難読化され、アドレス5〜7にNOPを追加した例である。(B)では、アドレス1〜4の命令はそのままで、アドレス5〜7に命令が追加されているが、結果は同一となる例である。(C)では、アドレス1〜4の命令はそのままで、アドレス5〜7に無意味な命令が追加されているため、結果は同一となる例である。
【0134】
このように、図16の左側のサブルーチンSRを、図16の右側のように加工する。これにより、サブルーチンSRのクラッキングに対してセキュリティ強度を高めることができる。
【0135】
(スクランブル処理の内容)
次に、図17を用いて、暗号化対象のプログラムをスクランブルするスクランブル処理の内容について説明する。具体的には、図8の(4)に示した加工済みサブルーチンP−SR(図9〜図16に示した加工プログラムPPにより加工された加工済みサブルーチンP−SR)をスクランブルするスクランブル処理である。
【0136】
図17は、スクランブル処理の詳細を示すフローチャートである。まず、プロセッサ301は、スクランブル依頼を情報処理装置101から受信したか否か判定する(ステップS1701)。ここで、スクランブル依頼を受信していない場合(ステップS1701:No)、プロセッサ301は、ステップS1701に戻り、スクランブル依頼の受信を待つ。
【0137】
一方、スクランブル依頼を受信した場合(ステップS1701:Yes)、プロセッサ301は、暗号鍵をランダムに生成し(ステップS1702)、生成した暗号鍵を用いて、暗号化対象のプログラムにスクランブルをかける(ステップS1703)。
【0138】
そして、プロセッサ201は、スクランブルしたプログラムをメインメモリ103に書き出して(ステップS1704)、スクランブル処理を終了する。これにより、スクランブルごとに異なる暗号鍵によりスクランブルして、クラッカー105によるプログラムの解析を困難にし、不正プログラムの開発を防止する。
【0139】
(暗号化サブルーチンS−SRの内容)
次に、図18および図19を用いて、図8に示した暗号化サブルーチンS−SRの内容について説明する。図8に示した暗号化サブルーチンS−SRとは、即ち、図17のスクランブル処理によりスクランブルされた暗号化サブルーチンS−SRである。
【0140】
ここで、図18では、セキュアモジュール102が暗号化サブルーチンS−SRを復号する場合の暗号化サブルーチンS−SRの内容について説明する。一方、図19では、セキュアモジュール102から復号に使用する暗号鍵を提供された情報処理装置101が、暗号化サブルーチンS−SRを復号する場合の暗号化サブルーチンS−SRの内容について説明する。
【0141】
図18は、図8に示した暗号化サブルーチンS−SRの具体例1を示す説明図である。暗号化サブルーチンS−SRの先頭には、スクランブルされていない領域が存在し、自身のデスクランブルをセキュアモジュール102に依頼する命令である「デスクランブル依頼」が含まれている。「デスクランブル依頼」は、セキュアモジュール102が加工プログラムPPにより挿入した命令である。
【0142】
セキュアモジュール102が暗号化ごとに異なる暗号鍵を使用する場合、加工プログラムPPにより挿入される「デスクランブル依頼」には、暗号化に使用した暗号鍵に対応する識別情報を含めておいても良い。そして、セキュアモジュール102は、識別情報を参照して暗号鍵を特定し、デスクランブルをおこなう。
【0143】
暗号化サブルーチンS−SRには、「デスクランブル依頼」の次に、スクランブルされた領域が存在し、暗号化ソフトウェアの通常処理をおこなう命令である「通常処理」が含まれている。また、「通常処理」と「通常処理」との間には、セキュアモジュール102が加工プログラムPPにより挿入した「認証サブプログラム」が含まれている。
【0144】
「通常処理」の次に、自身の実行終了時に自身を削除するように情報処理装置101に依頼する命令である「削除処理」が含まれている。「削除処理」は、セキュアモジュール102が加工プログラムPPにより挿入した命令である。
【0145】
また、暗号化サブルーチンS−SRには、「削除処理」の次に、スクランブルされていない領域が存在する。このスクランブルされていない領域には、削除された自身の代わりに新たに暗号化サブルーチンS−SRを生成するように情報処理装置101に依頼する命令である「新ルーチン置き換え」が含まれている。「新ルーチン置き換え」は、セキュアモジュール102が加工プログラムPPにより挿入した命令である。
【0146】
また、「新ルーチン置き換え」の次に、メインプログラムへ復帰する命令である「メインプログラム復帰」が含まれている。ただし、上述したセキュアモジュール102により挿入された各命令は、サブルーチンSRに初めから(サブルーチンSRの開発時点で)含まれていてもよい。
【0147】
図19は、図8に示した暗号化サブルーチンS−SRの具体例2を示す説明図である。なお、「通常処理」、「認証サブプログラム」、「削除処理」、「新ルーチン置き換え」、「メインプログラム復帰」の内容は、図18で説明した内容と同一のため、ここでは説明を省略する。
【0148】
図19では、図18に示した「デスクランブル依頼」の代わりに、「デスクランブル用の暗号鍵の出力依頼」と「デスクランブル」とが先頭のスクランブルされていない領域に含まれている。「デスクランブル用の暗号鍵の出力依頼」と「デスクランブル」は、セキュアモジュール102が加工プログラムPPにより挿入した命令である。
【0149】
「デスクランブル用の暗号鍵の出力依頼」は、セキュアモジュール102に暗号鍵の提供を依頼する命令である。セキュアモジュール102が暗号化ごとに異なる暗号鍵を使用する場合、加工プログラムPPにより挿入される「デスクランブル用の暗号鍵の出力依頼」には、暗号化に使用した暗号鍵に対応する識別情報を含めておいても良い。そして、セキュアモジュール102に識別情報を通知して、暗号鍵の提供を依頼する。
【0150】
「デスクランブル」は、提供された暗号鍵を使用して暗号化サブルーチンS−SRのデスクランブルを情報処理装置101におこなわせる命令である。ただし、上述したセキュアモジュール102により挿入された各命令は、サブルーチンSRに初めから(サブルーチンSRの開発時点で)含まれていてもよい。
【0151】
(デスクランブル処理の内容)
ここで、図20を用いて、図8の(6)に示した暗号化サブルーチンS−SRをデスクランブルするデスクランブル処理の内容について説明する。具体的には、デスクランブル処理は、図18に示した「デスクランブル依頼」の命令により情報処理装置101から送信されたデスクランブル依頼を受信したセキュアモジュール102によりおこなわれる。もしくは、図19に示した「デスクランブル」の命令を実行する情報処理装置101によりおこなわれる。
【0152】
ここでは、図19に示すように、デスクランブル処理を情報処理装置101がおこなう場合の処理について説明する。
【0153】
図20は、デスクランブル処理の詳細を示すフローチャートである。まず、プロセッサ201は、暗号鍵を読み込む(ステップS2001)。暗号鍵は、例えば、セキュアモジュール102から提供され、メインメモリ103に記憶されている。
【0154】
次に、プロセッサ201は、メインメモリ103にある復号対象となる暗号化されたプログラムに含まれる暗号化されたすべての命令を復号したか否かを判定する(ステップS2002)。
【0155】
ここで、すべての命令を復号していない場合(ステップS2002:No)、プロセッサ201は、まだ復号されていない命令が格納されたメインメモリ103の番地を指定する(ステップS2003)。そして、プロセッサ201は、指定された番地に格納された暗号化された命令と、暗号鍵とのXOR演算をおこない、暗号化された命令を復号された命令に書き換える(ステップS2004)。その後、プロセッサ201は、ステップS2002に戻る。
【0156】
一方、すべての命令を復号した場合(ステップS2002:Yes)、プロセッサ201は、復号された命令群を実行して(ステップS2005)、デスクランブル処理を終了する。これにより、暗号化されたプログラムを実行可能な状態にする。
【0157】
(デスクランブル処理を実行するプログラム例)
次に、図20に示したデスクランブル処理を実行するプログラムの一例について説明する。
【0158】
図21は、デスクランブル処理を実行するプログラム例を示す説明図である。サブルーチンSR(プログラム)は、アドレス単位の命令の集合体である。ここでは、メインメモリ103のx5番地〜x100番地に暗号化サブルーチンS−SRのスクランブルされた部分が存在すると想定する。
【0159】
ここで、デスクランブルをセキュアモジュール102がおこなう場合、デスクランブルのプログラムは、セキュアモジュール102のRAM304に存在する。デスクランブルを情報処理装置101がおこなう場合、デスクランブルのプログラムは、メインメモリ103に存在する。
【0160】
図21では、情報処理装置101が、セキュアモジュール102から提供された暗号鍵を使用してデスクランブルをおこなう場合を例に挙げ、デスクランブルのプログラムはメインメモリ103の1番地〜8番地に存在すると想定する。
【0161】
また、以下では、xx番地は、復号の作業領域である。xx番地には、まず、暗号化された命令が格納される。そして、xx番地の命令は、デスクランブルされ、復号された命令に変換される。yy番地には、作業対象となっている番地の番地番号が格納される。zz番地には、セキュアモジュール102から提供された暗号鍵が格納される。
【0162】
具体的には、1番地の命令は、情報処理装置101に、セキュアモジュール102から提供された暗号鍵が格納されているzz番地から、暗号鍵を読み込ませる命令である。そして、2番地の命令は、情報処理装置101に、yy番地に番地番号「x4」を格納させる命令である。1番地および2番地の命令は、図20のステップS2001に対応している。
【0163】
そして、3番地の命令は、情報処理装置101に、yy番地に格納された番地番号に1を加算させる命令である。ここで、4番地の命令は、情報処理装置101に、yy番地の番地番号が「x100」を越えたら、x5番地にジャンプし、x5番地の命令を実行させる命令である。即ち、x100番地までの復号が終了したら、x5番地にジャンプして、x5番地〜x100番地までの復号された命令を実行する。3番地および4番地の命令は、図20のステップS2002の分岐に対応している。
【0164】
また、5番地の命令は、情報処理装置101に、暗号化された命令が格納されているyy番地の命令をxx番地に格納させる命令である。5番地の命令は、図20のステップS2003に対応している。
【0165】
そして、6番地の命令は、情報処理装置101に、xx番地に格納された暗号化された命令に、zz番地に格納された暗号鍵を用いてXOR演算を施し、xx番地に格納された暗号化された命令を復号された命令に変換させる命令である。
【0166】
また、7番地の命令は、情報処理装置101に、yy番地の番地番号が示す番地に格納されている暗号化された命令に、xx番地に格納された復号された命令を上書きさせる命令である。6番地および7番地の命令は、図20のステップS2005に対応している。
【0167】
そして、8番地の命令は、情報処理装置101に、実行する番地を3番地に戻し、x100番地の復号が終了するまで、3番地〜8番地の命令を繰り返し実行させる命令である。以上に示したプログラムが、図20に示したデスクランブル処理を実行するプログラムの一例である。
【0168】
(サブルーチンSRの認証)
次に、図22〜図24を用いて、図8の(7)に示したサブルーチンSRの認証について説明する。まず、図22を用いて、サブルーチンSRの認証の概要について説明する。
【0169】
(サブルーチンSRの認証の概要)
図22は、サブルーチンSRの認証の概要を示す説明図である。認証サブプログラムは、サブルーチンSRに挿入され、所定の演算による演算結果を算出するプログラムである。また、セキュアモジュール102は、認証サブプログラムと同様の所定の演算をおこない正規の演算結果を算出する認証プログラムを有し、認証サブプログラムの演算結果が正規の演算結果であるか否かによってサブルーチンSRの正当性を判断する。
【0170】
例えば、認証サブプログラムは、1番地の値に第1の秘密番号「yyy」を乗算した値を2番地に格納し、2番地の値に第2の秘密番号「zzz」を乗算した値を3番地に格納するプログラムであるとする。
【0171】
ここで、セキュアモジュール102は、ランダムに生成した値「X」を1番地に格納する。次に、セキュアモジュール102は、認証プログラムを実行して、「X」から認証サブプログラムによって算出されるべき正規の値「Xans」を算出しておく。
【0172】
一方、サブルーチンSRは、1番地の「X」を読み出し、「X」に第1の秘密番号「yyy」を乗算した値「Y」を2番地に格納し、2番地の値「Y」に第2の秘密番号「zzz」を乗算した値「Xcul」を3番地に格納する。
【0173】
セキュアモジュール102は、定期的に3番地の値を参照し、3番地の値「Xcul」を読み出し、正規の値「Xans」と比較する。セキュアモジュール102は、1番地に「X」を格納してから所定時間以内に「Xcul」と「Xans」が一致した場合は、サブルーチンSRが正規プログラムであると判断する。セキュアモジュール102は、所定時間以内に「Xcul」と「Xans」が一致しなかった場合は、サブルーチンSRが不正プログラムであると判断する。
【0174】
これにより、サブルーチンSRが、クラッカー105により改ざんされた不正プログラムであるか否かを判断することができる。そして、不正プログラムである場合は、セキュアモジュール102は、不正プログラムの実行を中断させたり、セキュアモジュール102の暗号化機能や復号機能を不能に設定したりすることにより、不正プログラムの被害を防ぐことができる。
【0175】
(セキュアモジュール102による認証処理)
次に、図23を用いて、図22に示したセキュアモジュール102が認証プログラムを用いておこなう認証処理について説明する。
【0176】
図23は、セキュアモジュール102による認証処理の詳細を示すフローチャートである。まず、セキュアモジュール102は、時間計測を開始する(ステップS2301)。次に、セキュアモジュール102は、ランダムに生成した値「X」を所定の第1のメモリ番地に格納する(ステップS2302)。そして、セキュアモジュール102は、「X」から認証サブプログラムによって算出されるべき正規の値「Xans」を算出する(ステップS2303)。
【0177】
次に、セキュアモジュール102は、所定の第2のメモリ番地を読み出す(ステップS2304)。セキュアモジュール102は、読み出した値が「Xans」と一致するか判定する(ステップS2305)。「Xans」と一致する場合(ステップS2305:Yes)、セキュアモジュール102は、サブルーチンSRを正規プログラムと判断して(ステップS2306)、認証処理を終了する。
【0178】
一方、「Xans」と一致しない場合(ステップS2305:No)、セキュアモジュール102は、ステップS2301の時間計測の開始から一定時間が経過したか判定する(ステップS2307)。一定時間が経過していない場合(ステップS2307:No)、ステップS2304に戻る。
【0179】
一方、一定時間が経過した場合(ステップS2307:Yes)、セキュアモジュール102は、サブルーチンSRを不正プログラムと判断して(ステップS2308)、認証処理を終了する。なお、この認証処理(認証サブプログラム)の内容は、毎回違う内容になるように加工してもよい。この加工処理を暗号化サブルーチンSRを読み込む都度実行すれば、その都度、サブルーチンSRの中の認証サブプログラムが変更されることとなる。したがって、クラッカーから見ると認証処理(認証サブプログラム)の解析と成りすましを困難にすることができる。
【0180】
(セキュアモジュール102の暗号化許可処理)
次に、図24を用いて、図23に示した認証処理において、サブルーチンSRが不正プログラムと判断された場合に不正プログラムの被害を防ぐために、セキュアモジュール102の機能を不能に設定する処理の一例について説明する。
【0181】
図24は、セキュアモジュール102による暗号化許可処理の詳細を示すフローチャートである。まず、セキュアモジュール102は、サブルーチンSRが改ざんされているか否かを判断する(ステップS2401)。
【0182】
改ざんされていない場合(ステップS2401:No)、セキュアモジュール102は、サブルーチンSRから処理要求を受信したか否か判断する(ステップS2402)。
【0183】
処理要求を受信した場合(ステップS2402:Yes)、セキュアモジュール102は、サブルーチンSRからの処理要求にしたがって処理をおこない(ステップS2403)、ステップS2401に戻る。また、処理要求を受信していない場合(ステップS2402:No)、ステップS2401に戻る。
【0184】
一方、改ざんされている場合(ステップS2401:Yes)、セキュアモジュール102は、「エラーモード」に移行して(ステップS2404)、暗号化許可処理を終了する。「エラーモード」では、セキュアモジュール102は、サブルーチンSRを再起動しない限り、サブルーチンSRからの操作(暗号化依頼や復号依頼など)を受け付けない状態となる。
【0185】
これにより、不正プログラムが、セキュアモジュール102内の秘匿情報(暗号鍵)を要求したり、セキュアモジュール102の機能を利用したりすることを防止する。そのため、不正プログラムによる情報処理装置101のユーザへの被害を防止できる。
【0186】
以上説明したように、情報処理装置101は、安全性が担保されていないメインメモリ103に書き出されるプログラムを、信頼性が担保されたセキュアモジュール102で暗号化してから、メインメモリ103に書き出す。そして、情報処理装置101は、暗号化されたプログラムを、プログラムの実行時に復号して実行する。これにより、情報処理装置101は、暗号化されていない状態のプログラムがメインメモリ103に存在する時間を少なくして、クラッカー105によるプログラムの解析および改ざんを防止する。
【0187】
また、情報処理装置101は、暗号化をおこなうごとに異なる暗号化方法を使用することにより、クラッカー105によるプログラムの解析を困難にして、不正プログラムの開発を防止することができる。
【0188】
また、情報処理装置101は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する。これにより、暗号化されたプログラムの実行時に、暗号化されたプログラムの復号にかかる時間を短くすることができる。そのため、復号によるプログラムの実行の遅延を少なくすることができる。
【0189】
また、情報処理装置101は、暗号化の際に、プログラムに認証サブプログラムを挿入しておく。これにより、認証サブプログラムの演算結果の正当性から、プログラムの改ざんを検出できる。
【0190】
そして、情報処理装置101は、改ざんがあった場合に、暗号化されたプログラムの復号が不可能な状態にセキュアモジュール102を設定したり、情報処理装置101のユーザに判定結果を通知したりする。これにより、不正プログラムによる被害を防止することができる。
【0191】
また、復号手段をセキュアモジュール102が備えるようにすれば、暗号鍵や、暗号化方法が秘匿され、プログラムの安全性を高めることができる。一方、セキュアモジュール102が暗号鍵をセキュアに管理し、復号手段は情報処理装置101が備えるようにすれば、セキュアモジュール102の機能を削減することができ、セキュアモジュール102が安価に作成できるようになる。
【0192】
また、情報処理装置101は、プログラムが実行待ち状態になるまでは、HDD104に暗号強度の高い暗号化方式により暗号化して保持しておくため、プログラムの安全性を担保できる。
【0193】
また、情報処理装置101は、プログラムを、上述した「難読化」、「暗号化」、「シャッフリング」により加工することで、クラッカー105によるプログラムの解析を困難にし、不正プログラムの開発を防止できる。
【0194】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0195】
(付記1)1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置であって、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出する第1の検出手段と、
内部に格納された情報を外部から参照ができない構造であって、前記第1の検出手段によって実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出すセキュアモジュールと、
前記いずれかのプログラムの実行要求を検出する第2の検出手段と、
前記第2の検出手段によって前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出す復号手段と、
前記復号手段によって復号された前記いずれかのプログラムを実行する実行手段と、
を備えることを特徴とする情報処理装置。
【0196】
(付記2)前記セキュアモジュールは、
暗号化をおこなうごとに異なる暗号化方法を使用することを特徴とする付記1に記載の情報処理装置。
【0197】
(付記3)前記セキュアモジュールは、
暗号化をおこなうごとに異なるデータを暗号鍵に用いて暗号化することを特徴とする付記2に記載の情報処理装置。
【0198】
(付記4)前記セキュアモジュールが使用する暗号化方法は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する方法であることを特徴とする付記1〜3のいずれか一つに記載の情報処理装置。
【0199】
(付記5)前記セキュアモジュールは、
暗号化に先だって、所定の演算をおこない演算結果を前記記憶領域の特定の領域に書き出す演算プログラムを、前記いずれかのプログラムに挿入する挿入手段と、
前記実行手段による前記いずれかのプログラムの実行に伴って、前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定する判定手段と、
前記判定手段によって改ざんがあると判定された場合、判定結果を出力する出力手段と、
を備えることを特徴とする付記1〜4のいずれか一つに記載の情報処理装置。
【0200】
(付記6)前記判定手段によって改ざんがあると判定された場合、前記復号手段を復号不能な状態に設定する設定手段を備えることを特徴とする付記5に記載の情報処理装置。
【0201】
(付記7)前記実行手段による実行が終了した前記いずれかのプログラムを前記記憶領域から削除する削除手段を備えることを特徴とする付記1〜6のいずれか一つに記載の情報処理装置。
【0202】
(付記8)前記復号手段は、
前記セキュアモジュール外に存在し、前記セキュアモジュールから提供される前記セキュアモジュールが前記いずれかのプログラムの暗号化に使用した暗号鍵を用いて、前記いずれかのプログラムを復号することを特徴とする付記1〜7のいずれか一つに記載の情報処理装置。
【0203】
(付記9)前記復号手段は、
前記セキュアモジュール内に存在することを特徴とする付記1〜7のいずれか一つに記載の情報処理装置。
【0204】
(付記10)前記プログラム群を暗号化した暗号化プログラム群を保持する記憶手段を備え、
前記セキュアモジュールは、
前記プログラム群を呼び出すプログラムが起動された場合、前記暗号化プログラム群を復号し、前記暗号化プログラム群の暗号化に使用されている第1の暗号化方法とは異なる第2の暗号化方法により、復号された前記プログラム群を暗号化して前記記憶領域に書き出すことを特徴とする付記1〜9のいずれか一つに記載の情報処理装置。
【0205】
(付記11)前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの命令を難読化することを特徴とする付記1〜10のいずれか一つに記載の情報処理装置。
【0206】
(付記12)前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令と当該ジャンプ命令のアドレスとの組み合わせを特定するテーブルを記憶し、シャッフリング後の前記プログラム群のプログラムにおける前記ジャンプ命令の内容を前記テーブルのリード命令に変更することを特徴とする付記1〜10のいずれか一つに記載の情報処理装置。
【0207】
(付記13)前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令およびジャンプ元命令と当該ジャンプ元命令のアドレスとの組み合わせを特定するテーブルを記憶し、シャッフリング後の前記プログラム群のプログラムにおける前記ジャンプ元命令の内容を前記テーブルのリード命令に変更することを特徴とする付記1〜10のいずれか一つに記載の情報処理装置。
【0208】
(付記14)前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの任意の命令を、当該命令を暗号化した暗号化命令と、前記セキュアモジュールに対するリード命令と、前記暗号化命令を復号する復号命令とに置換し、前記リード命令のアドレスと前記暗号化命令を復号する復号鍵との組み合わせを特定するテーブルを記憶することを特徴とする付記1〜10のいずれか一つに記載の情報処理装置。
【0209】
(付記15)前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの任意の命令を前記セキュアモジュールに対するリード命令に置換し、当該リード命令のアドレスと置換元の命令との組み合わせを特定するテーブルを記憶することを特徴とする付記1〜10のいずれか一つに記載の情報処理装置。
【0210】
(付記16)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す復号手段と、
を備えることを特徴とするセキュアモジュール。
【0211】
(付記17)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する送信手段と、
を備えることを特徴とするセキュアモジュール。
【0212】
(付記18)内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置が、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行する、
ことを特徴とする情報処理方法。
【0213】
(付記19)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す、
ことを特徴とする情報処理方法。
【0214】
(付記20)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する、
ことを特徴とする情報処理方法。
【0215】
(付記21)内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置に、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行する、
処理を実行させることを特徴とする情報処理プログラム。
【0216】
(付記22)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す、
処理を実行させることを特徴とする情報処理プログラム。
【0217】
(付記23)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する、
処理を実行させることを特徴とする情報処理プログラム。
【符号の説明】
【0218】
101 情報処理装置
102 セキュアモジュール
103 メインメモリ
104 HDD
MP メインプログラム
SR サブルーチン
C−SR,S−SR 暗号化サブルーチン
PP 加工プログラム
【技術分野】
【0001】
本発明は、情報を処理する情報処理装置、セキュアモジュール、情報処理方法、および情報処理プログラムに関する。
【背景技術】
【0002】
従来、モバイル端末(以下、単に「端末」という)は、第3者によるソフトウェア開発を想定していなかったため、端末の仕様およびソフトウェア構造は一般に知られておらず、端末内部は秘匿性が保たれ相当に安全であった。また、安全性の保証されたセキュアモジュール(耐タンパモジュール、例えばSIMカード(Subscriber Identity Module Card))を信頼性拠点として、特に秘匿すべき情報(例えば、正規の暗号鍵やユーザ識別情報)の安全性を担保していた(例えば、下記特許文献1および2参照)。
【0003】
即ち、秘匿すべき情報は、端末内部の正規のソフトウェアしか利用できない。そのため、外部装置は、端末から受信した通信内容が、安全性の担保された正規の暗号鍵により暗号化されていたり、安全性の担保されたユーザ識別情報を含んでいたりするか否かに基づいて、正規の通信内容か偽の通信内容かを判別して通信の安全性を担保できた。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−129227号公報
【特許文献2】特許第4408601号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、近年では、スマートフォンで見られるように、端末の仕様およびソフトウェア構造を公開し、第3者によるソフトウェア開発を促す傾向にある。このため、クラッカーによって、端末内のソフトウェアが読み出され、解析され、改ざんされ、不正ソフトウェアが開発される可能性が増大している。また、セキュアモジュールは、外から覗き見や改ざんは不可能であるが、ソフトウェアから利用するためのインターフェースが公開されているため、セキュアモジュール内の秘匿すべき情報は不正ソフトウェアによって容易に読み出されてしまう。
【0006】
したがって、不正ソフトウェアは、偽の通信内容を正規の暗号鍵を用いて暗号化した上で、または、偽の通信内容にユーザ情報を含ませた上で、外部の装置に送信することができる。そのため、外部の装置では偽の通信内容か否かを判別できず、通信の安全性を担保できないという問題があった。
【0007】
本発明は、かかる問題点に鑑み、不正ソフトウェアの開発を防止する情報処理装置、セキュアモジュール、情報処理方法および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、1または複数のプログラムからなるプログラム群をセキュアに記憶し、プログラム群のいずれかのプログラムの実行待ち状態を検出し、内部に格納された情報を外部から参照ができない構造であって、実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、プログラム群とは異なる記憶領域に書き出すセキュアモジュールを有し、いずれかのプログラムの実行要求を検出し、いずれかのプログラムの実行要求が検出された場合、セキュアモジュールによって暗号化されたいずれかのプログラムを復号して記憶領域に書き出し、復号されたいずれかのプログラムを実行する情報処理装置、情報処理方法および情報処理プログラムが提案される。
【0009】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第1の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号して第1の記憶領域に書き出すセキュアモジュール。
【0010】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第1の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号して第1の記憶領域に書き出す情報処理方法および情報処理プログラム。
【0011】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第1の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号する鍵を情報処理装置に送信するセキュアモジュール。
【0012】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第1の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号する鍵を情報処理装置に送信する情報処理方法および情報処理プログラム。
【発明の効果】
【0013】
本発明の一側面によれば、不正ソフトウェアの開発の防止を図ることができるという効果を奏する。
【図面の簡単な説明】
【0014】
【図1】図1は、情報処理装置によるプログラムの改ざん防止の内容を示す説明図である。
【図2】図2は、実施の形態にかかる情報処理装置101のハードウェア構成例1を示すブロック図である。
【図3】図3は、図2のセキュアモジュール102のハードウェア構成例を示すブロック図である。
【図4】図4は、実施の形態にかかる情報処理装置101のハードウェア構成例2を示すブロック図である。
【図5】図5は、図4のセキュアモジュール102のハードウェア構成例を示すブロック図である。
【図6】図6は、情報処理装置101の機能的構成例1を示すブロック図である。
【図7】図7は、情報処理装置101の機能的構成例2を示すブロック図である。
【図8】図8は、情報処理装置101の動作概要例を示す説明図である。
【図9】図9は、サブルーチンSRの加工の概要を示す説明図である。
【図10】図10は、加工プログラムPPによるサブルーチンSRの加工例を示す説明図(その1)である。
【図11】図11は、加工プログラムPPによるサブルーチンSRの加工例を示す説明図(その2)である。
【図12】図12は、加工プログラムPPによるサブルーチンSRの加工例を示す説明図(その3)である。
【図13】図13は、加工プログラムPPによるサブルーチンSRの加工例を示す説明図(その4)である。
【図14】図14は、サブルーチンSR加工処理の処理手順例を示すフローチャートである。
【図15】図15は、図14に示したシャッフリング処理(ステップS1412)の詳細な処理手順例を示すフローチャートである。
【図16】図16は、サブルーチンSRの加工例を示す説明図である。
【図17】図17は、スクランブル処理の詳細を示すフローチャートである。
【図18】図18は、図8に示した暗号化サブルーチンS−SRの具体例1を示す説明図である。
【図19】図19は、図8に示した暗号化サブルーチンS−SRの具体例2を示す説明図である。
【図20】図20は、デスクランブル処理の詳細を示すフローチャートである。
【図21】図21は、デスクランブル処理を実行するプログラム例を示す説明図である。
【図22】図22は、サブルーチンSRの認証の概要を示す説明図である。
【図23】図23は、セキュアモジュール102による認証処理の詳細を示すフローチャートである。
【図24】図24は、セキュアモジュール102による暗号化許可処理の詳細を示すフローチャートである。
【発明を実施するための形態】
【0015】
以下に添付図面を参照して、この発明にかかる情報処理装置、セキュアモジュール、情報処理方法、および情報処理プログラムの実施の形態を詳細に説明する。暗号化されていないプログラムが安全性が担保されていないメインメモリ上に存在する期間をできる限り短くするため、本実施の形態では、情報処理装置は、安全性が担保されていないメインメモリに書き出されるプログラムを、信頼性が担保されたセキュアモジュールで暗号化してから、メインメモリに書き出しておく。これにより、実行前は、メインメモリ上で暗号化されているため、メインメモリでのプログラムの安全性が担保され、クラッカーによるプログラムの解析および改ざんを防止することができる。
【0016】
また、情報処理装置は、メインメモリ上に書き出された、暗号化されたプログラムを、当該プログラムの実行時にだけ復号して、プログラムの実行終了時に削除する。これにより、情報処理装置は、暗号化されていない状態のプログラムがメインメモリに存在する時間を少なくして、クラッカーによるプログラムの解析および改ざんを防止する。
【0017】
(情報処理装置によるプログラムの改ざん防止の内容)
図1は、情報処理装置によるプログラムの改ざん防止の内容を示す説明図である。図1において、情報処理装置101は、セキュアモジュール102と、メインメモリ103と、HDD(Hard Disk Drive)104と、を有する。
【0018】
HDD104は、情報処理装置101によって実行されるプログラム群が保持される記憶装置である。図1では、HDD104には、サブルーチンSR(図1では、例として2個のサブルーチンSR1,SR2)を暗号強度の高い暗号化方式により暗号化して生成された暗号化サブルーチンC−SRが保持されている。なお、暗号強度の高い暗号化方式とは、例えば、暗号規格であるAES(Advanced Encryption Standard)やNESSIE(New European Schemes for Signature, Integrity, and Encryption)として規格化された暗号方式である。
【0019】
メインメモリ103は、情報処理装置101がプログラムを実行する際の作業領域となる記憶装置であり、図1では、サブルーチンSRを呼び出して実行するメインプログラムMPが書き出されている。ただし、メインメモリ103は、クラッカー105であってもデータを読み出すことが可能な記憶装置であり、信頼性は担保されていない。
【0020】
セキュアモジュール102は、TRM(Tamper Resistant Module)構造など内部に格納された情報を外部から参照できない構造を有するLSI(Large Scale Integration)である。これにより、セキュアモジュール102は、外部からの覗き見を防止するとともに、内部のデータの改ざんを防止する。
【0021】
セキュアモジュール102は、暗号化回路を有する。暗号化回路は、HDD104内の暗号化サブルーチンC−SRの暗号化に用いられている暗号強度の高い暗号化方式による復号が可能である。また、暗号化回路は、暗号化および復号の速度が速い暗号化方式による暗号化および復号が可能である。暗号化および復号の速度が速い暗号化方式とは、例えば、暗号化されるデータと暗号鍵となるデータとの排他的論理和(XOR:eXclusive OR)により暗号化(スクランブル)をおこなう方式(以下、「XOR暗号」という)である。
【0022】
ここで、メインプログラムMPが起動された場合を例に挙げて、情報処理装置101が、クラッカー105によるサブルーチンSRの解析および改ざんを防止しつつ、メインプログラムMPに呼び出されたサブルーチンSRを実行する場合について説明する。
【0023】
例えば、図1の(A)に示すように、まず、情報処理装置101は、メインプログラムMPに呼び出されるサブルーチンSRを、作業領域となるメインメモリ103に書き出す。ここで、メインメモリ103は信頼性が担保されていないため、暗号化されていない状態でサブルーチンSRが書き出された場合、サブルーチンSRがクラッカー105により解析されるおそれがある。
【0024】
(1)そのため、情報処理装置101は、サブルーチンSRを暗号化した状態で、メインメモリ103に書き出し、サブルーチンSRの実行時に復号して実行する。この際、サブルーチンSRの復号を高速化するために、信頼性の担保されたセキュアモジュール102が、暗号化サブルーチンC−SRを一旦復号し、復号したサブルーチンSRを、XOR暗号によりスクランブルした暗号化サブルーチンS−SRにして書き出しておく。
【0025】
図1の(A)に示すように、メインメモリ103に書き出されたサブルーチンSRは、暗号化サブルーチンS−SRの状態であるため、クラッカー105による解析を防止できる。また、サブルーチンSRの暗号化および復号が信頼性の担保されたセキュアモジュール102内でおこなわれるため、クラッカー105は、復号された状態のサブルーチンSRを覗き見することもできない。同様に、クラッカー105は、サブルーチンSRに使用されている暗号化方式および暗号鍵を覗き見することもできない。
【0026】
ここで、メインプログラムMPが実行開始され、メインプログラムMPからサブルーチンSR1の実行要求が発生した場合を想定する。
【0027】
サブルーチンSR1の実行要求があると、図1の(B)に示すように、(2)信頼性の担保されたセキュアモジュール102が、暗号化サブルーチンS−SR1から、サブルーチンSR1を復号(デスクランブル)する。
【0028】
(3)そして、情報処理装置101は、デスクランブルされたサブルーチンSR1を実行して、(4)サブルーチンSR1の実行の終了時に、サブルーチンSR1を削除する。また、サブルーチンSR2の実行要求があった場合も、情報処理装置101は、(2)〜(4)と同様にして、サブルーチンSR2を実行し、削除する。
【0029】
図1の(B)に示すように、実行のために復号されたサブルーチンSRが、メインメモリ103に存在する時間は、サブルーチンSRの実行開始時の復号から、サブルーチンSRの実行終了時の削除までの時間のみである。そのため、クラッカー105がサブルーチンSRを解析できる時間はサブルーチンSRの復号から削除までの短い時間しかなく、クラッカー105はサブルーチンSRを解析することができない。
【0030】
以上のように、情報処理装置101は、サブルーチンSRのクラッカー105による改ざんおよび解析を防止し、不正ソフトウェアの開発を防止することができる。また、情報処理装置101は、XOR暗号を使用することにより、実行直前までサブルーチンSRを暗号化しておいても、サブルーチンSRの復号によりメインプログラムMPの実行が遅延しないようにすることができる。さらに、XOR暗号では暗号化および復号が同一の処理により実現されるため、XOR暗号を採用した場合には、セキュアモジュール102を簡素化でき安価に作成できるようになる。
【0031】
また、結果として、セキュアモジュール102内の秘匿すべき情報(暗号鍵やユーザ識別情報)が、不正ソフトウェアに利用されることがなくなり、情報処理装置101のユーザの不正ソフトウェアによる被害をなくすことができる。例えば、通信販売の商品購入用ソフトウェアが、解析および改ざんされ、ユーザが入力した注文内容を書き換えてしまう不正ソフトウェアが開発されることを防止できる。そして、不正ソフトウェアにより、セキュアモジュール102内の暗号鍵やユーザ識別情報が利用され、偽の注文内容が送信されてしまうといった被害をなくすことができる。
【0032】
(情報処理装置101のハードウェア構成)
次に、情報処理装置101のハードウェア構成について説明する。図1に示したように、情報処理装置101は、セキュアモジュール102を有しているが、セキュアモジュール102は、ワンチップで作成されていてもよいし、複数チップで作成されていてもよい。まず、図2および図3を用いて、セキュアモジュール102がワンチップで作成されている場合の情報処理装置101のハードウェア構成例について説明する。
【0033】
(情報処理装置101のハードウェア構成例1)
図2は、実施の形態にかかる情報処理装置101のハードウェア構成例1を示すブロック図である。図2において、情報処理装置101は、プロセッサ201と、ROM(Read‐Only Memory)202と、セキュアモジュール102と、メインメモリ103と、HDD104と、を備えている。また、情報処理装置101は、I/F(Interface)203と、ディスプレイ204と、を備えている。また、各構成部はバス200によってそれぞれ接続されている。
【0034】
ここで、プロセッサ201は、情報処理装置101の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶している。メインメモリ103は、プロセッサ201のワークエリアとして使用される。HDD104は、プロセッサ201の制御にしたがって内蔵するハードディスクに対するデータのリード/ライトを制御する駆動装置である。
【0035】
インターフェース(以下、「I/F」と略する。)203は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク210に接続され、このネットワーク210を介して他の装置に接続される。そして、I/F203は、ネットワーク210と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F203には、例えばモデムやLANアダプタなどを採用することができる。
【0036】
ディスプレイ204は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ204は、例えば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0037】
セキュアモジュール102は、HDD104から暗号化サブルーチンC−SRを読み出す機能を備えている。また、セキュアモジュール102は、サブルーチンSRをメインメモリ103に書き出す機能、暗号化機能、復号機能、乱数生成機能等を備えている。セキュアモジュール102は、暗号化サブルーチンC−SRを復号する暗号鍵と、XOR暗号の暗号鍵と、をセキュアに保持している。
【0038】
ただし、セキュアモジュール102は、暗号鍵のみを保持し、暗号化機能、復号機能、乱数生成機能等は、情報処理装置101が備えることとしてもよい。この場合、セキュアモジュール102は、情報処理装置101の要求にしたがって、暗号鍵を出力する。セキュアモジュール102は、情報処理装置101に内蔵されていてもよく、外付けとしてもよい。
【0039】
(セキュアモジュール102のハードウェア構成例1)
図3は、図2のセキュアモジュール102のハードウェア構成例を示すブロック図である。セキュアモジュール102は、プロセッサ301と、I/F302と、暗号化回路303と、RAM304と、ROM305と、フラッシュメモリ306と、乱数生成回路307と、を備えている。また、各構成部はバス300によってそれぞれ接続されている。
【0040】
プロセッサ301は、セキュアモジュール102内の制御や演算処理をおこなう。I/F302は、バス200を介して情報処理装置101内の各構成部と接続され、通信をおこなう。暗号化回路303は、データやプログラムを暗号化したり、暗号化されたデータやプログラムを復号したりする。暗号化および復号をソフトウェア的に実行する場合は、暗号化回路303に相当するプログラムをROM305に記憶させておくことで、暗号化回路303は不要となる。
【0041】
RAM304は、プロセッサ301のワークエリアとして使用されるメインメモリである。ROM305は、プログラムやデータが格納される不揮発性メモリである。ROM305には、暗号化サブルーチンC−SRを復号する暗号鍵と、XOR暗号の暗号鍵と、が格納されている。フラッシュメモリ306は、保存したデータやプログラムが書き換え可能な不揮発性メモリである。乱数生成回路307は、乱数を生成する。
【0042】
セキュアモジュール102は、外部から覗き見や改ざんができないのが前提であるため、できる限り、図3の構成のようにワンチップのLSIにして実装するべきである。例えば、セキュアモジュール102はTRM構造である。TRM構造は、半導体チップ(この場合、セキュアモジュール102)の内部解析や改ざんを物理的および論理的に防衛するための構造をいう。具体的には、セキュアモジュール102においては、内部に強固で粘着力が高いコーティングが施され、その表面が剥がされると内部の回路が完全に破壊されたり、ダミーの配線が配されていたりする。
【0043】
(情報処理装置101のハードウェア構成例2)
次に、図4および図5を用いて、セキュアモジュール102が複数のチップで作成されている場合の情報処理装置101のハードウェア構成について説明する。
【0044】
図4は、実施の形態にかかる情報処理装置101のハードウェア構成例2を示すブロック図である。図4において、情報処理装置101は、プロセッサ201と、ROM202と、メインメモリ103と、HDD104と、I/F203と、ディスプレイ204と、セキュアモジュール102と、を備えている。図4において、図2と同様の構成部には同一の符号を付し、その説明を省略する。
【0045】
図4では、セキュアモジュール102は、暗号化機能、復号機能、乱数生成機能等を備えるLSI401と、暗号化サブルーチンC−SRを復号する暗号鍵をセキュアに保持する既存のSIMカード402とを接合して作成される。そして、LSI401は、必要に応じて暗号鍵をSIMカード402から読み出して暗号化機能、復号機能を使用する。
【0046】
(セキュアモジュール102のハードウェア構成例2)
図5は、図4のセキュアモジュール102のハードウェア構成例を示すブロック図である。図5において、セキュアモジュール102は、LSI401とSIMカード402とで構成される。LSI401は、プロセッサ301と、I/F302と、暗号化回路303と、RAM304と、ROM305と、フラッシュメモリ306と、乱数生成回路307と、を備えている。SIMカード402は、暗号鍵をセキュアに保持している。セキュアモジュール102内で、LSI401と、SIMカード402とはI/F302によって接続され、通信をおこなう。図5において、図3と同様の構成部には同一の符号を付し、その説明を省略する。
【0047】
セキュアモジュール102は、外部から覗き見や改ざんができないのが前提であるため、図5の構成のように複数チップで実現した場合は、全体を一つのモジュールとし、全体を樹脂で固めて第3者が覗き見や改ざんが困難なように実装すべきである。
【0048】
(情報処理装置101の機能的構成例1)
次に、情報処理装置101の機能的構成例1について説明する。図6は、情報処理装置101の機能的構成例1を示すブロック図である。情報処理装置101は、第1の検出部601と、暗号化部602と、第2の検出部603と、復号部604と、実行部605と、挿入部606と、判定部607と、出力部608と、設定部609と、削除部610と、記憶部611と、加工部612と、送信部613と、を含む構成である。
【0049】
この制御部となる機能(第1の検出部601〜削除部610)は、具体的には、例えば、図2に示したROM202、メインメモリ103、HDD104、などの記憶装置に記憶されたプログラムをプロセッサ201に実行させることにより、または、I/F203により、その機能を実現する。もしくは、この制御部となる機能(第1の検出部601〜削除部610)は、具体的には、例えば、図3に示したROM305、RAM304、フラッシュメモリ306、などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、または、I/F302により、その機能を実現する。
【0050】
第1の検出部601は、プログラム群のいずれかのプログラムの実行待ち状態を検出する機能を有する。ここで、いずれかのプログラムとは、他のプログラムから呼び出されるプログラムであり、例えば、OS(Operating System)に呼び出されるメインプログラムMP、または、メインプログラムMPに呼び出されるサブルーチンSRが挙げられる。実行待ち状態とは、プログラムを呼び出す他のプログラムが起動されたときに、他のプログラムからの呼び出しを待っている状態である。
【0051】
具体的には、例えば、第1の検出部601は、メインプログラムMPが起動され、メインプログラムMPによりサブルーチンSRが呼び出される状態になったことを検出する。これにより、他のプログラムに呼び出されるプログラムを、作業領域となるメインメモリ103に書き出すトリガを検出できる。
【0052】
暗号化部602は、セキュアモジュール102内に備えられ、第1の検出部601によって実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、プログラム群とは異なる記憶領域に書き出す機能を有する。ここで、プログラム群とは異なる記憶領域とは、プログラムの作業領域であり、例えば、上述したメインメモリ103である。
【0053】
具体的には、例えば、暗号化部602は、サブルーチンSRを暗号化して、メインメモリ103に書き出す。これにより、誰もが参照可能であり安全性が担保されていないメインメモリ103に書き出されるプログラムを暗号化することにより、安全性を担保する。また、信頼性の担保されたセキュアモジュール102で暗号化をおこなうため、暗号化に使用した暗号化方式や暗号化前のプログラムは秘匿され、プログラムの安全性を担保できる。
【0054】
また、具体的には、例えば、暗号化部602は、暗号化をおこなうごとに異なる暗号化方法を使用する。異なる暗号化方法とは、例えば、暗号化ごとに異なるデータを暗号鍵に用いる暗号化方式である。ここで、異なるデータとは、例えば、乱数生成回路307により生成された乱数列である。ただし、この場合、暗号化の際に暗号化対象のプログラムと暗号鍵とを対応付けてテーブルに記憶しておき、復号の際にテーブルを参照して復号に使用する暗号鍵を特定する。これにより、暗号化するごとに、暗号鍵が変更され、クラッカーによるプログラムの解析を困難にすることができる。
【0055】
また、具体的には、例えば、暗号化部602は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する暗号化方式を使用する。即ち、上述したXOR暗号により暗号化をおこなう。XOR暗号は暗号化および復号にかかる処理量が少なく所要時間が短い暗号であるから、暗号化されたプログラムの実行時に、暗号化されたプログラムの復号にかかる時間を短くすることができる。また、XOR暗号では暗号化および復号が同一の処理により実現されるため、XOR暗号を採用した場合には、セキュアモジュール102を簡素化して安価に作成できるようになる。
【0056】
また、暗号化部602は、プログラム群を呼び出すプログラムが起動された場合、第1の暗号化プログラム群を復号する機能を有する。そして、暗号化部602は、暗号化プログラム群の暗号化に使用されている第1の暗号化方法とは異なる第2の暗号化方法により、復号されたプログラム群を暗号化して記憶領域に書き出す機能を有する。
【0057】
ここで、プログラム群を呼び出すプログラムとは、例えば、メインプログラムMPである。暗号化プログラム群とは、例えば、HDD104に保持された暗号化サブルーチンC−SRである。第1の暗号化方法とは、暗号強度の高い暗号化方式である。第2の暗号化方法とは、XOR暗号のうちで、暗号強度の高い暗号化方式であり、例えば、暗号鍵のデータ長が長いXOR暗号である。
【0058】
具体的には、例えば、暗号化部602は、HDD104に保持された暗号化サブルーチンC−SRを、一旦、暗号強度の高いXOR暗号により暗号化して、メインメモリ103に書き出しておく。これにより、メインメモリ103に書き出したプログラムが長時間実行されない場合でも、プログラムの安全性を担保できる。長時間実行されない場合とは、例えば、メインプログラムMPが起動されているが、情報処理装置101のユーザから実行の指示が入力されていない状態が続いている場合をいう。
【0059】
第2の検出部603は、プログラム群のいずれかのプログラムの実行要求を検出する機能を有する。具体的には、例えば、第2の検出部603は、メインプログラムMPによりサブルーチンSRの実行が要求されたことを検出する。これにより、第2の検出部603は、暗号化サブルーチンS−SRの復号のトリガを検出することができる。
【0060】
復号部604は、第2の検出部603によっていずれかのプログラムの実行要求が検出された場合、セキュアモジュール102によって暗号化されたいずれかのプログラムを復号して記憶領域に書き出す機能を有する。
【0061】
具体的には、例えば、復号部604は、セキュアモジュール102外に存在し、セキュアモジュール102から提供されるセキュアモジュール102がいずれかのプログラムの暗号化に使用した暗号鍵を用いて、いずれかのプログラムを復号する。セキュアモジュール102から提供される暗号鍵は、後述する送信部613によって送信される。
【0062】
より具体的には、例えば、復号部604は、セキュアモジュール102から提供されるXOR暗号の暗号鍵を用いて、暗号化サブルーチンS−SRを復号する。これにより、サブルーチンSRを実行可能な状態にして、メインメモリ103に書き出すことができる。
【0063】
また、復号時まで暗号鍵をセキュアモジュール102が秘匿しておくため、クラッカー105によるプログラムの解析を防止することができる。また、セキュアモジュール102が暗号化ごとに異なる暗号鍵を使用する場合、次回以降の暗号化には同一の暗号鍵は使用しない。そのため、情報処理装置101に提供することにより暗号鍵がクラッカー105に知られても、次回以降に生成された暗号化サブルーチンS−SRの復号にクラッカー105が今回の暗号鍵を流用することはできないため、安全性を担保できる。
【0064】
さらに、復号部604はセキュアモジュールに内蔵することも可能だが、セキュアモジュール102外に存在するようにして、セキュアモジュール102の機能を省き、セキュアモジュール102を安価に作成することができる。
【0065】
実行部605は、復号部604によって復号されたいずれかのプログラムを実行する機能を有する。具体的には、例えば、実行部605は、サブルーチンSRを実行する。これにより、メインプログラムMPの処理を正常におこなうことができる。
【0066】
挿入部606は、セキュアモジュール102内に備えられ、暗号化に先だって、所定の演算をおこない演算結果を記憶領域の特定の領域に書き出す演算プログラムを、いずれかのプログラムに挿入する機能を有する。ここで、演算プログラムとは、所定の演算をおこない演算結果をメインメモリ103の所定の領域に格納するプログラムであり、後述する認証サブプログラムである。具体的には、例えば、挿入部606は、後述する加工プログラムを実行して、サブルーチンSRに認証サブプログラムを挿入する。
【0067】
判定部607は、セキュアモジュール102内に備えられ、実行部605によるいずれかのプログラムの実行に伴って、演算プログラムにより書き出される演算結果を取得する機能を有する。そして、判定部607は、取得した演算結果と、セキュアモジュール102で所定の演算をおこない得られた演算結果と、が一致しない場合、いずれかのプログラムに改ざんがあると判定する機能を有する。
【0068】
具体的には、例えば、判定部607は、サブルーチンSRの実行に伴って実行される認証サブプログラムによって、メインメモリ103に書き出された演算結果を取得する。次に、セキュアモジュール102で、認証サブプログラムと同様の演算をおこない、正規の演算結果を算出し、認証サブプログラムが書き出した演算結果が正規の演算結果でなければ、プログラムは改ざんされていると判定する。
【0069】
そして、挿入される認証サブプログラムがおこなう所定の演算を、毎回異なる演算にすることで、クラッカー105による正規の認証サブプログラムを挿入した不正プログラムの開発を困難にすることができる。
【0070】
出力部608は、セキュアモジュール102内に備えられ、判定部607によって改ざんがあると判定された場合、判定結果を出力する機能を有する。具体的には、例えば、出力部608は、改ざんがある場合には、ディスプレイ204に出力して、情報処理装置101のユーザに不正プログラムが実行されるおそれがあることを通知する。これにより、不正プログラムによる被害を防止する。
【0071】
設定部609は、判定部607によって改ざんがあると判定された場合、復号部604を復号不能な状態に設定する機能を有する。具体的には、例えば、設定部609は、判定部607によってプログラムの改ざんがあると判定された場合、復号部604、暗号化部602、または全機能を使用不能に設定する。これにより、設定部609は、セキュアモジュール102を、改ざんが検出されたプログラムからの復号依頼に対応しないようにできる。または、設定部609は、不正プログラムの続行を不可能にすることができる。
【0072】
削除部610は、実行部605による実行が終了したいずれかのプログラムを記憶領域から削除する機能を有する。具体的には、例えば、削除部610は、メインメモリ103に書き出されたサブルーチンSRを削除する。これにより、暗号化されていない状態のプログラムが、安全性が担保されていないメインメモリ103に存在する時間を短くして、クラッカー105によりプログラムが解析および改ざんされることを防止することができる。
【0073】
記憶部611は、プログラム群を暗号化した第1の暗号化プログラム群を保持する機能を有する。具体的には、例えば、記憶部611は、HDD104であり、暗号化サブルーチンC−SRを保持する。これにより、プログラムをセキュアに保持する。
【0074】
加工部612は、プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工する機能を有する。具体的には、例えば、加工部612は、サブルーチンSRを、後述する「難読化」、「暗号化」、「シャッフリング」により加工する。これにより、クラッカー105がサブルーチンSRを解読するのを困難にし、サブルーチンSRが解析され、改ざんされることを防止することができる。
【0075】
送信部613は、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号する鍵を情報処理装置に送信する機能を有する。具体的には、例えば、送信部613は、RAM304に保持されているXOR暗号の暗号鍵を情報処理装置101に送信する。
【0076】
また、セキュアモジュール102が暗号化ごとに異なる暗号鍵を使用している場合では、送信部613は、暗号鍵と暗号化サブルーチンS−SRとを対応付けて記憶するテーブルを参照して実行要求されている暗号化サブルーチンS−SRに対応する暗号鍵を特定する。そして、送信部613は、特定された暗号鍵を情報処理装置101に送信する。
【0077】
これにより、情報処理装置101は、復号部604によって暗号化サブルーチンS−SRを復号する際に使用する暗号鍵を得ることができるようになる。
【0078】
(情報処理装置101の機能的構成例2)
また、図7に示すように、復号部604はセキュアモジュール102に備えられていてもよい。図7は、情報処理装置101の機能的構成例2を示すブロック図である。
【0079】
具体的には、例えば、復号部604は、セキュアモジュール102に備えられ、暗号化サブルーチンS−SRを復号して、メインメモリ103に書き出す。これにより、サブルーチンSRを実行可能な状態にして、メインメモリ103に書き出すことができる。また、信頼性の担保されたセキュアモジュール102が復号部604を備えるため、暗号化方法や暗号鍵を秘匿することができ、クラッカー105によるプログラムの解析を防止しやすくなる。
【0080】
(情報処理装置101での動作概要例)
次に、図8を用いて、情報処理装置101の動作概要例について説明する。
【0081】
図8は、情報処理装置101の動作概要例を示す説明図である。(1)まず、情報処理装置101は、暗号化メインプログラムC−MPと暗号化サブルーチンC−SR群とを含む暗号化ソフトウェアを実行するために、HDD104の暗号化ソフトウェアをセキュアモジュール102に入力する。
【0082】
(2)セキュアモジュール102は、入力された暗号化ソフトウェアの暗号化メインプログラムC−MPを復号してメインメモリ103に書き出す。また、セキュアモジュール102は、入力された暗号化ソフトウェアの暗号化サブルーチンC−SR群を復号する。
【0083】
(3)次に、セキュアモジュール102は、復号したサブルーチンSR群の各サブルーチンSRを、加工プログラムPPを用いて加工する。加工プログラムPPの内容としては、「認証サブプログラムや命令の挿入」や「サブルーチンSRの難読化、暗号化、またはシャッフリング」が挙げられる。これにより、セキュアモジュール102は、サブルーチンSR群の各サブルーチンSRを、クラッカー105による解析および改ざんが困難なように加工する。
【0084】
(4)そして、セキュアモジュール102は、加工済みサブルーチンP−SR群の各加工済みサブルーチンP−SRを、XOR暗号によりスクランブルして、暗号化サブルーチンS−SR群を生成する。次に、セキュアモジュール102は、生成した暗号化サブルーチンS−SR群を、メインメモリ103に書き出す。
【0085】
(5)ここで、情報処理装置101は、メインプログラムMPを実行する。実行されたメインプログラムMPは、サブルーチンSR群のうちのいずれかのサブルーチンSRの実行要求を発生させる。
【0086】
(6)情報処理装置101は、サブルーチンSRの実行要求の発生を検出すると、検出した実行要求に基づいて、暗号化サブルーチンS−SR群のいずれかの暗号化サブルーチンS−SRをデスクランブルして、実行要求がなされたサブルーチンSRを得る。
【0087】
デスクランブルは、例えば、(3)においてサブルーチンSRに、(4)による暗号化の対象としない命令として「自身をデスクランブルする依頼をセキュアモジュール102に出力する命令」を挿入しておくことにより実現できる。なお、復号により、復号前の暗号化サブルーチンS−SRはメインメモリ103からなくなる。
【0088】
具体的には、情報処理装置101は、セキュアモジュール102に暗号化サブルーチンS−SRのデスクランブル依頼をする。または、情報処理装置101は、セキュアモジュール102に暗号化サブルーチンS−SRのデスクランブルに使用する暗号鍵の提供を依頼し、セキュアモジュール102から提供された暗号鍵により、暗号化サブルーチンS−SRをデスクランブルする。
【0089】
(7)そして、情報処理装置101は、デスクランブルされたサブルーチンSRを実行する。ここで、サブルーチンSRが実行されると、サブルーチンSRに挿入された認証サブプログラムもともに実行される。実行された認証サブプログラムは、所定の演算をおこない演算結果をメインメモリ103の所定の領域に格納する。
【0090】
一方、セキュアモジュール102は、認証プログラムを実行している。実行された認証プログラムは、認証サブプログラムと同一内容の所定の演算をおこない、正規の演算結果を算出する。そして、実行された認証プログラムは、認証サブプログラムが格納した演算結果を取得し、正規の演算結果と一致判定をおこない、サブルーチンSRに改ざんがあるか否か判定する。
【0091】
これにより、サブルーチンSR内の認証サブプログラムが、クラッカー105による改ざんの影響を受けている場合には、一致判定により演算結果が一致しないと判定されることになり、セキュアモジュール102は、改ざんがあると判定できる。
【0092】
そして、改ざんがある場合、改ざんを情報処理装置101のユーザに出力したり、実行中のサブルーチンSRを中断させたり、セキュアモジュール102の復号機能を不能に設定したりすることにより、クラッカー105による改ざんの被害を防ぐことができる。
【0093】
(8)そして、情報処理装置101は、サブルーチンSRの実行が終了すると、サブルーチンSRを削除する。例えば、サブルーチンSRの削除は、(3)において、サブルーチンSRに「自身を削除する命令」を挿入しておくことで実現できる。
【0094】
これにより、暗号化されていない状態のサブルーチンSRが、メインメモリ103に存在する時間は、上述した(6)〜(8)の間だけになり、クラッカー105がサブルーチンSRを解析および改ざんする時間をなくすことができる。そのため、クラッカー105による不正ソフトウェアの開発を防止することができる。
【0095】
また、情報処理装置101は、削除されたサブルーチンSRが、メインプログラムMPにより複数回実行されるサブルーチンSRである場合に対応するために、新たに暗号化サブルーチンS−SRを生成してメインメモリ103に書き出しておく。これにより、メインプログラムMPにより2度目以降にサブルーチンSRが呼び出される際に、呼び出されるべきサブルーチンSRが既に削除されメインメモリ103に存在しない状態になってしまうことを防止できる。
【0096】
以下では、図9〜図24を用いて、図8に示した情報処理装置101の各動作の内容について詳細に説明する。まず、図9〜図16を用いて、図8の(3)に示したサブルーチンSRの加工について具体的に説明する。
【0097】
なお、図9〜図13では、簡単のため、メインメモリ103およびHDD104でのサブルーチンSRを暗号化されていない状態で表しているが、実際にはメインメモリ103およびHDD104ではサブルーチンSRは暗号化された状態である。
【0098】
(サブルーチンSRの加工)
図9は、サブルーチンSRの加工の概要を示す説明図である。サブルーチンSRは、セキュアモジュール102のプロセッサ301が実行する加工プログラムPPによって、加工される。
【0099】
サブルーチンSR(プログラム)は、アドレス単位の命令の集合体である。ここでは、わかりやすさを考慮して、サブルーチンSRが5つのアドレス単位の命令で成り立っているものとする。具体的には、分割プログラムP1〜P5で構成されており、アドレスadr1〜adr5の順に分割プログラムP1〜P5が実行されるものとする。したがって、HDD104では、論理アドレスとして、実行順序となるアドレスadr1〜adr5の並びで記憶されている。
【0100】
サブルーチンSR(分割プログラムP1〜P5)は、加工プログラムPPにより配置順、即ち、アドレスを入れ替えられる。図9では、アドレスadr1が分割プログラムP1、アドレスadr2が分割プログラムP4、アドレスadr3が分割プログラムP2、アドレスadr4が分割プログラムP3、アドレスadr5が分割プログラムP5に加工されている。
【0101】
この場合、分割プログラムP1,P4,P3の後続に、セキュアモジュール102へのRead命令を追記しておく。セキュアモジュール102内には、アドレス変更後の対応関係を示すプログラム片を保持しておく。例えば、プログラム片paは、分割プログラムP1の実行後に参照されるGoto文であり、アドレスadr3にジャンプするものとする。
【0102】
また、プログラム片pbは、分割プログラムP3の実行後に参照されるGoto文であり、アドレスadr2にジャンプするものとする。プログラム片pcは、分割プログラムP4の実行後に参照されるGoto文であり、アドレスadr5にジャンプするものとする。プログラム片pa〜pcは加工の際に生成される。
【0103】
図10〜図13は、加工プログラムPPによるサブルーチンSRの加工例を示す説明図である。まず、図10では、HDD104内のサブルーチンSRのアドレス3〜5の命令群を、アドレス7〜9に移動させている。また、サブルーチンSRのアドレス6,7の命令群を、アドレス15,16に移動させている。アドレス1,2の命令群はそのままである。
【0104】
加工前では、アドレス2の命令「Y=X+8」の次は、アドレス3の命令「Z=X+Y」が実行される。アドレス3の命令「Z=X+Y」は、アドレス7に移動したため、アドレス3の内容を、「Goto7」というプログラム片(ジャンプ命令)に書き換える。そして、セキュアモジュール102は、テーブルにアドレス3とプログラム片「Goto7」との組み合わせを保持する。
【0105】
同様に、加工前では、アドレス5の命令「Z=Z+1」の次は、アドレス6の命令「Z=5+Z」が実行される。アドレス5の命令「Z=Z+1」はアドレス9に移動し、アドレス6の命令は、アドレス15に移動したため、アドレス9の次であるアドレス10の内容を、「Goto15」というプログラム片(ジャンプ命令)に書き換える。そして、セキュアモジュール102は、テーブルにアドレス10とプログラム片「Goto15」との組み合わせを保持する。
【0106】
そして、セキュアモジュール102は、サブルーチンSRをメインメモリ103に書き出す前に、プログラム片をセキュアモジュール102へのRead命令に書き換える。これにより、メインメモリ103に実装された加工後のサブルーチンSRが実行される場合、アドレス3のREAD命令により、セキュアモジュール102内のテーブルを参照して、アドレス3に対応するプログラム片「Goto7」を特定する。セキュアモジュール102は、プロセッサ201に対し、「Goto7」を通知することで、プロセッサ201は加工後のサブルーチンSRのアドレス7の命令を実行することとなる。
【0107】
このように、サブルーチンSRを構成する命令群を、対応関係を保持しておきながらシャッフリングする。したがって、サブルーチンSRを解読しにくい状態とすることで、セキュリティの向上を図ることができる。
【0108】
図11は、図10よりも加工を複雑化した例である。具体的には、図10では、プログラム片を単なるジャンプ命令としたが、図11では、単なるジャンプ命令ではなく、プログラム片にサブルーチンSRを構成する命令も挿入している。
【0109】
まず、図11では、HDD104内のサブルーチンSRのアドレス4,5の命令群を、アドレス8,9に移動させている。また、サブルーチンSRのアドレス6,7の命令群を、アドレス15,16に移動させている。アドレス1〜3の命令群はそのままである。
【0110】
加工前では、アドレス2の命令「Y=X+8」の次は、アドレス3の命令「Z=X+Y」が実行される。アドレス3の次であるアドレス4の命令は、アドレス8に移動したため、Goto文「Goto8」を生成する。そして、セキュアモジュール102は、アドレス3と、アドレス3の命令「Z=X+Y」および生成されたGoto文「Goto8」との組み合わせを保持する。このように、プログラム片を単なるジャンプ命令ではなく、複雑化することで、セキュリティの向上を図ることができる。
【0111】
図12は、サブルーチンSRを構成する命令群を暗号化する例である。図12では、セキュアモジュール102は、サブルーチンSR(加工前)のアドレス4〜7の命令群を暗号鍵K1〜K4で暗号化する。次に、暗号化された命令の前に、セキュアモジュール102へのREAD命令と復号命令を挿入する。これにより、挿入された命令分だけ、アドレスが繰り下がる。
【0112】
例えば、アドレス4の命令「Y=Y+1」を暗号鍵K1で暗号化して、アドレス6に書き込む。そして、空いているアドレス4にセキュアモジュール102へのREAD命令を挿入し、アドレス5に復号命令を挿入する。
【0113】
このあと、セキュアモジュール102では、サブルーチンSR(加工後)における暗号化命令を暗号化した鍵とその暗号化命令のために挿入されたREAD命令のアドレスとの組み合わせをテーブルに保持する。例えば、アドレス6に書き込まれた暗号化命令E1(Y=Y+1)を暗号化した暗号鍵K1と、暗号化命令E1(Y=Y+1)の生成により挿入されたREAD命令のアドレス4との組み合わせをテーブルに保持する。
【0114】
このあと、セキュアモジュール102は、テーブルをRAM304またはフラッシュメモリ306に保持しておき、加工したサブルーチンSRをメインメモリ103に書き込む。サブルーチンSR(加工後)を実行するときは、挿入されたREAD命令により暗号鍵を読み出して、次の復号命令で、暗号化命令を復号する。これにより、復号された命令を実行することが可能となる。例えば、アドレス4のREAD命令があると、セキュアモジュール102は、テーブルを参照して暗号鍵K1をプロセッサ201に渡す。
【0115】
プロセッサ201は、暗号鍵K1とアドレス5の復号命令により、暗号化命令E1(Y=Y+1)を復号して、アドレス6に命令「Y=Y+1」を書き込む。そして、アドレス6で、命令「Y=Y+1」を実行することとなる。このように、サブルーチンSRが一部暗号化されていても、復号鍵をセキュアモジュール102から取得することで処理の続行が可能になる。
【0116】
図13は、サブルーチンSRを構成する命令群を暗号化する例である。図13では、セキュアモジュール102は、サブルーチンSR(加工前)のアドレス4〜7の命令群をセキュアモジュール102へのREAD命令に置換する。例えば、アドレス4の命令「Y=Y+1」をREAD命令に置換する。そして、次のアドレス5に、「アドレス4でセキュアモジュール102から読み出した命令「Y=Y+1」を書き込む」命令を挿入する。
【0117】
このあと、セキュアモジュール102は、置換対象の命令とそのアドレスとの組み合わせをテーブルに保持する。例えば、セキュアモジュール102は、置換対象となったアドレス4とその命令「Y=Y+1」の組み合わせをテーブルに保持する。
【0118】
このあと、セキュアモジュール102は、テーブルをRAM304またはフラッシュメモリ306に保持しておき、加工したサブルーチンSRをメインメモリ103に書き込む。サブルーチンSR(加工後)を実行するときは、プロセッサ201は、置換されたREAD命令により置換元の命令を読み出して実行する。例えば、プロセッサ201は、アドレス4のREAD命令でセキュアモジュール102から命令「Y=Y+1」を読み出して実行することとなる。
【0119】
(サブルーチンSR加工処理)
図14は、サブルーチンSR加工処理の処理手順例を示すフローチャートである。まず、セキュアモジュール102が、暗号化サブルーチンC−SRをHDD104から読み出し(ステップS1401)、暗号化サブルーチンC−SRを復号する(ステップS1402)。
【0120】
ここで、セキュアモジュール102は、サブルーチンSRに認証サブプログラムや命令を挿入しておく(ステップS1403)。命令の内容については、図18および図19を用いて後述する。認証サブプログラムの内容については、図22を用いて後述する。
【0121】
次に、セキュアモジュール102は、サブルーチンSRの加工方法をランダムに決定する(ステップS1404)。具体的には、セキュアモジュール102は、「難読化」、「暗号化」(図12,図13を参照)、「シャッフリング」(図11,図12,図13を参照)、「何もしない」の中から決定する。
【0122】
そして、セキュアモジュール102は、加工方法が「難読化」であるか否かを判断する(ステップS1405)。加工方法が「難読化」である場合(ステップS1405:Yes)、セキュアモジュール102は、サブルーチンSRから難読化の対象範囲を指定し(ステップS1406)、対象範囲の命令を難読化する(ステップS1407)。そして、ステップS1404に戻る。
【0123】
また、ステップS1405において、加工方法が「難読化」でない場合(ステップS1405:No)、セキュアモジュール102は、加工方法が「暗号化」であるか否かを判断する(ステップS1408)。加工方法が「暗号化」である場合(ステップS1408:Yes)、セキュアモジュール102は、サブルーチンSRから暗号化の対象範囲を指定し(ステップS1409)、対象範囲の命令を暗号化する(ステップS1410)。このとき、図12に示したように、セキュアモジュール102は、暗号化対象のアドレスとそのアドレスの暗号化命令を復号する復号鍵の組み合わせをテーブルに保存する。そして、ステップS1404に戻る。
【0124】
また、ステップS1408において、加工方法が「暗号化」でない場合(ステップS1408:No)、セキュアモジュール102は、加工方法が「シャッフリング」であるか否かを判断する(ステップS1411)。加工方法が「シャッフリング」である場合(ステップS1411:Yes)、セキュアモジュール102は、シャッフリング処理(図15)を実行する(ステップS1412)。そして、シャッフリング処理の後、ステップS1404に戻る。
【0125】
また、ステップS1411において、加工方法が「シャッフリング」でない場合(ステップS1411:No)、セキュアモジュール102は、加工終了であるか否かを判断する(ステップS1413)。具体的には、例えば、このケースでは、加工方法が「何もしない」にランダム決定されているため、一度も加工していない場合は、加工を終了しない(ステップS1413:No)。この場合は、ステップS1404に戻る。
【0126】
少なくとも一度、または、予め設定しておいた所定回数加工がおこなわれた場合、ランダムに加工を終了する(ステップS1413:Yes)。これにより、加工処理を終了する。
【0127】
図15は、図14に示したシャッフリング処理(ステップS1412)の詳細な処理手順例を示すフローチャートである。ここでは、例として、図10に示したようなシャッフリングをする場合を例に挙げる。まず、セキュアモジュール102は、セキュアモジュール102内で加工先の領域を確保し(ステップS1501)、サブルーチンSRを複数の命令群に分割する(ステップS1502)。
【0128】
次に、セキュアモジュール102は、先頭の命令群を対象命令群に設定する(ステップS1503)。そして、セキュアモジュール102は、対象命令群の後続命令群があるか否かを判断する(ステップS1504)。後続命令群がある場合(ステップS1504:Yes)、セキュアモジュール102は、プログラム片(例えば、Goto文)をランダムに生成する(ステップS1505)。具体的には、セキュアモジュール102は、ランダムかつ対象命令群が入る領域が確保できるように生成する。
【0129】
このあと、セキュアモジュール102は、生成されたプログラム片のアドレスを、対象命令群の末尾アドレスの次のアドレスに設定する(ステップS1506)。そして、セキュアモジュール102は、プログラム片とその書込先アドレスとの組み合わせをテーブルに追加する(ステップS1507)。
【0130】
そして、セキュアモジュール102は、サブルーチンSRのプログラム片に割り当てられたアドレスに、プログラム片のRead命令を書き込む(ステップS1508)。このあと、セキュアモジュール102は、プログラム片で指定されたアドレス(プログラム片が「Goto8」なら「8」)に、後続命令群を対象命令群として設定して(ステップS1509)、ステップS1504に戻る。
【0131】
ステップS1504において、対象命令群の後続命令群がない場合(ステップS1504:No)、シャッフリング処理を終了して、ステップS1404に戻る。
【0132】
このように、サブルーチンSRを加工することでサブルーチンSRのクラッキングに対してセキュリティ強度を高めることができる。なお、上述した加工処理は、暗号化サブルーチンSRを読み込む都度実行されるため、その都度、サブルーチンSRの加工方法が変更されることとなる。したがって、クラッカーから見るとさらにサブルーチンSRの解析を困難にすることができる。
【0133】
図16は、サブルーチンSRの加工例を示す説明図である。(A)では、サブルーチンSRのアドレス1〜4の命令が難読化され、アドレス5〜7にNOPを追加した例である。(B)では、アドレス1〜4の命令はそのままで、アドレス5〜7に命令が追加されているが、結果は同一となる例である。(C)では、アドレス1〜4の命令はそのままで、アドレス5〜7に無意味な命令が追加されているため、結果は同一となる例である。
【0134】
このように、図16の左側のサブルーチンSRを、図16の右側のように加工する。これにより、サブルーチンSRのクラッキングに対してセキュリティ強度を高めることができる。
【0135】
(スクランブル処理の内容)
次に、図17を用いて、暗号化対象のプログラムをスクランブルするスクランブル処理の内容について説明する。具体的には、図8の(4)に示した加工済みサブルーチンP−SR(図9〜図16に示した加工プログラムPPにより加工された加工済みサブルーチンP−SR)をスクランブルするスクランブル処理である。
【0136】
図17は、スクランブル処理の詳細を示すフローチャートである。まず、プロセッサ301は、スクランブル依頼を情報処理装置101から受信したか否か判定する(ステップS1701)。ここで、スクランブル依頼を受信していない場合(ステップS1701:No)、プロセッサ301は、ステップS1701に戻り、スクランブル依頼の受信を待つ。
【0137】
一方、スクランブル依頼を受信した場合(ステップS1701:Yes)、プロセッサ301は、暗号鍵をランダムに生成し(ステップS1702)、生成した暗号鍵を用いて、暗号化対象のプログラムにスクランブルをかける(ステップS1703)。
【0138】
そして、プロセッサ201は、スクランブルしたプログラムをメインメモリ103に書き出して(ステップS1704)、スクランブル処理を終了する。これにより、スクランブルごとに異なる暗号鍵によりスクランブルして、クラッカー105によるプログラムの解析を困難にし、不正プログラムの開発を防止する。
【0139】
(暗号化サブルーチンS−SRの内容)
次に、図18および図19を用いて、図8に示した暗号化サブルーチンS−SRの内容について説明する。図8に示した暗号化サブルーチンS−SRとは、即ち、図17のスクランブル処理によりスクランブルされた暗号化サブルーチンS−SRである。
【0140】
ここで、図18では、セキュアモジュール102が暗号化サブルーチンS−SRを復号する場合の暗号化サブルーチンS−SRの内容について説明する。一方、図19では、セキュアモジュール102から復号に使用する暗号鍵を提供された情報処理装置101が、暗号化サブルーチンS−SRを復号する場合の暗号化サブルーチンS−SRの内容について説明する。
【0141】
図18は、図8に示した暗号化サブルーチンS−SRの具体例1を示す説明図である。暗号化サブルーチンS−SRの先頭には、スクランブルされていない領域が存在し、自身のデスクランブルをセキュアモジュール102に依頼する命令である「デスクランブル依頼」が含まれている。「デスクランブル依頼」は、セキュアモジュール102が加工プログラムPPにより挿入した命令である。
【0142】
セキュアモジュール102が暗号化ごとに異なる暗号鍵を使用する場合、加工プログラムPPにより挿入される「デスクランブル依頼」には、暗号化に使用した暗号鍵に対応する識別情報を含めておいても良い。そして、セキュアモジュール102は、識別情報を参照して暗号鍵を特定し、デスクランブルをおこなう。
【0143】
暗号化サブルーチンS−SRには、「デスクランブル依頼」の次に、スクランブルされた領域が存在し、暗号化ソフトウェアの通常処理をおこなう命令である「通常処理」が含まれている。また、「通常処理」と「通常処理」との間には、セキュアモジュール102が加工プログラムPPにより挿入した「認証サブプログラム」が含まれている。
【0144】
「通常処理」の次に、自身の実行終了時に自身を削除するように情報処理装置101に依頼する命令である「削除処理」が含まれている。「削除処理」は、セキュアモジュール102が加工プログラムPPにより挿入した命令である。
【0145】
また、暗号化サブルーチンS−SRには、「削除処理」の次に、スクランブルされていない領域が存在する。このスクランブルされていない領域には、削除された自身の代わりに新たに暗号化サブルーチンS−SRを生成するように情報処理装置101に依頼する命令である「新ルーチン置き換え」が含まれている。「新ルーチン置き換え」は、セキュアモジュール102が加工プログラムPPにより挿入した命令である。
【0146】
また、「新ルーチン置き換え」の次に、メインプログラムへ復帰する命令である「メインプログラム復帰」が含まれている。ただし、上述したセキュアモジュール102により挿入された各命令は、サブルーチンSRに初めから(サブルーチンSRの開発時点で)含まれていてもよい。
【0147】
図19は、図8に示した暗号化サブルーチンS−SRの具体例2を示す説明図である。なお、「通常処理」、「認証サブプログラム」、「削除処理」、「新ルーチン置き換え」、「メインプログラム復帰」の内容は、図18で説明した内容と同一のため、ここでは説明を省略する。
【0148】
図19では、図18に示した「デスクランブル依頼」の代わりに、「デスクランブル用の暗号鍵の出力依頼」と「デスクランブル」とが先頭のスクランブルされていない領域に含まれている。「デスクランブル用の暗号鍵の出力依頼」と「デスクランブル」は、セキュアモジュール102が加工プログラムPPにより挿入した命令である。
【0149】
「デスクランブル用の暗号鍵の出力依頼」は、セキュアモジュール102に暗号鍵の提供を依頼する命令である。セキュアモジュール102が暗号化ごとに異なる暗号鍵を使用する場合、加工プログラムPPにより挿入される「デスクランブル用の暗号鍵の出力依頼」には、暗号化に使用した暗号鍵に対応する識別情報を含めておいても良い。そして、セキュアモジュール102に識別情報を通知して、暗号鍵の提供を依頼する。
【0150】
「デスクランブル」は、提供された暗号鍵を使用して暗号化サブルーチンS−SRのデスクランブルを情報処理装置101におこなわせる命令である。ただし、上述したセキュアモジュール102により挿入された各命令は、サブルーチンSRに初めから(サブルーチンSRの開発時点で)含まれていてもよい。
【0151】
(デスクランブル処理の内容)
ここで、図20を用いて、図8の(6)に示した暗号化サブルーチンS−SRをデスクランブルするデスクランブル処理の内容について説明する。具体的には、デスクランブル処理は、図18に示した「デスクランブル依頼」の命令により情報処理装置101から送信されたデスクランブル依頼を受信したセキュアモジュール102によりおこなわれる。もしくは、図19に示した「デスクランブル」の命令を実行する情報処理装置101によりおこなわれる。
【0152】
ここでは、図19に示すように、デスクランブル処理を情報処理装置101がおこなう場合の処理について説明する。
【0153】
図20は、デスクランブル処理の詳細を示すフローチャートである。まず、プロセッサ201は、暗号鍵を読み込む(ステップS2001)。暗号鍵は、例えば、セキュアモジュール102から提供され、メインメモリ103に記憶されている。
【0154】
次に、プロセッサ201は、メインメモリ103にある復号対象となる暗号化されたプログラムに含まれる暗号化されたすべての命令を復号したか否かを判定する(ステップS2002)。
【0155】
ここで、すべての命令を復号していない場合(ステップS2002:No)、プロセッサ201は、まだ復号されていない命令が格納されたメインメモリ103の番地を指定する(ステップS2003)。そして、プロセッサ201は、指定された番地に格納された暗号化された命令と、暗号鍵とのXOR演算をおこない、暗号化された命令を復号された命令に書き換える(ステップS2004)。その後、プロセッサ201は、ステップS2002に戻る。
【0156】
一方、すべての命令を復号した場合(ステップS2002:Yes)、プロセッサ201は、復号された命令群を実行して(ステップS2005)、デスクランブル処理を終了する。これにより、暗号化されたプログラムを実行可能な状態にする。
【0157】
(デスクランブル処理を実行するプログラム例)
次に、図20に示したデスクランブル処理を実行するプログラムの一例について説明する。
【0158】
図21は、デスクランブル処理を実行するプログラム例を示す説明図である。サブルーチンSR(プログラム)は、アドレス単位の命令の集合体である。ここでは、メインメモリ103のx5番地〜x100番地に暗号化サブルーチンS−SRのスクランブルされた部分が存在すると想定する。
【0159】
ここで、デスクランブルをセキュアモジュール102がおこなう場合、デスクランブルのプログラムは、セキュアモジュール102のRAM304に存在する。デスクランブルを情報処理装置101がおこなう場合、デスクランブルのプログラムは、メインメモリ103に存在する。
【0160】
図21では、情報処理装置101が、セキュアモジュール102から提供された暗号鍵を使用してデスクランブルをおこなう場合を例に挙げ、デスクランブルのプログラムはメインメモリ103の1番地〜8番地に存在すると想定する。
【0161】
また、以下では、xx番地は、復号の作業領域である。xx番地には、まず、暗号化された命令が格納される。そして、xx番地の命令は、デスクランブルされ、復号された命令に変換される。yy番地には、作業対象となっている番地の番地番号が格納される。zz番地には、セキュアモジュール102から提供された暗号鍵が格納される。
【0162】
具体的には、1番地の命令は、情報処理装置101に、セキュアモジュール102から提供された暗号鍵が格納されているzz番地から、暗号鍵を読み込ませる命令である。そして、2番地の命令は、情報処理装置101に、yy番地に番地番号「x4」を格納させる命令である。1番地および2番地の命令は、図20のステップS2001に対応している。
【0163】
そして、3番地の命令は、情報処理装置101に、yy番地に格納された番地番号に1を加算させる命令である。ここで、4番地の命令は、情報処理装置101に、yy番地の番地番号が「x100」を越えたら、x5番地にジャンプし、x5番地の命令を実行させる命令である。即ち、x100番地までの復号が終了したら、x5番地にジャンプして、x5番地〜x100番地までの復号された命令を実行する。3番地および4番地の命令は、図20のステップS2002の分岐に対応している。
【0164】
また、5番地の命令は、情報処理装置101に、暗号化された命令が格納されているyy番地の命令をxx番地に格納させる命令である。5番地の命令は、図20のステップS2003に対応している。
【0165】
そして、6番地の命令は、情報処理装置101に、xx番地に格納された暗号化された命令に、zz番地に格納された暗号鍵を用いてXOR演算を施し、xx番地に格納された暗号化された命令を復号された命令に変換させる命令である。
【0166】
また、7番地の命令は、情報処理装置101に、yy番地の番地番号が示す番地に格納されている暗号化された命令に、xx番地に格納された復号された命令を上書きさせる命令である。6番地および7番地の命令は、図20のステップS2005に対応している。
【0167】
そして、8番地の命令は、情報処理装置101に、実行する番地を3番地に戻し、x100番地の復号が終了するまで、3番地〜8番地の命令を繰り返し実行させる命令である。以上に示したプログラムが、図20に示したデスクランブル処理を実行するプログラムの一例である。
【0168】
(サブルーチンSRの認証)
次に、図22〜図24を用いて、図8の(7)に示したサブルーチンSRの認証について説明する。まず、図22を用いて、サブルーチンSRの認証の概要について説明する。
【0169】
(サブルーチンSRの認証の概要)
図22は、サブルーチンSRの認証の概要を示す説明図である。認証サブプログラムは、サブルーチンSRに挿入され、所定の演算による演算結果を算出するプログラムである。また、セキュアモジュール102は、認証サブプログラムと同様の所定の演算をおこない正規の演算結果を算出する認証プログラムを有し、認証サブプログラムの演算結果が正規の演算結果であるか否かによってサブルーチンSRの正当性を判断する。
【0170】
例えば、認証サブプログラムは、1番地の値に第1の秘密番号「yyy」を乗算した値を2番地に格納し、2番地の値に第2の秘密番号「zzz」を乗算した値を3番地に格納するプログラムであるとする。
【0171】
ここで、セキュアモジュール102は、ランダムに生成した値「X」を1番地に格納する。次に、セキュアモジュール102は、認証プログラムを実行して、「X」から認証サブプログラムによって算出されるべき正規の値「Xans」を算出しておく。
【0172】
一方、サブルーチンSRは、1番地の「X」を読み出し、「X」に第1の秘密番号「yyy」を乗算した値「Y」を2番地に格納し、2番地の値「Y」に第2の秘密番号「zzz」を乗算した値「Xcul」を3番地に格納する。
【0173】
セキュアモジュール102は、定期的に3番地の値を参照し、3番地の値「Xcul」を読み出し、正規の値「Xans」と比較する。セキュアモジュール102は、1番地に「X」を格納してから所定時間以内に「Xcul」と「Xans」が一致した場合は、サブルーチンSRが正規プログラムであると判断する。セキュアモジュール102は、所定時間以内に「Xcul」と「Xans」が一致しなかった場合は、サブルーチンSRが不正プログラムであると判断する。
【0174】
これにより、サブルーチンSRが、クラッカー105により改ざんされた不正プログラムであるか否かを判断することができる。そして、不正プログラムである場合は、セキュアモジュール102は、不正プログラムの実行を中断させたり、セキュアモジュール102の暗号化機能や復号機能を不能に設定したりすることにより、不正プログラムの被害を防ぐことができる。
【0175】
(セキュアモジュール102による認証処理)
次に、図23を用いて、図22に示したセキュアモジュール102が認証プログラムを用いておこなう認証処理について説明する。
【0176】
図23は、セキュアモジュール102による認証処理の詳細を示すフローチャートである。まず、セキュアモジュール102は、時間計測を開始する(ステップS2301)。次に、セキュアモジュール102は、ランダムに生成した値「X」を所定の第1のメモリ番地に格納する(ステップS2302)。そして、セキュアモジュール102は、「X」から認証サブプログラムによって算出されるべき正規の値「Xans」を算出する(ステップS2303)。
【0177】
次に、セキュアモジュール102は、所定の第2のメモリ番地を読み出す(ステップS2304)。セキュアモジュール102は、読み出した値が「Xans」と一致するか判定する(ステップS2305)。「Xans」と一致する場合(ステップS2305:Yes)、セキュアモジュール102は、サブルーチンSRを正規プログラムと判断して(ステップS2306)、認証処理を終了する。
【0178】
一方、「Xans」と一致しない場合(ステップS2305:No)、セキュアモジュール102は、ステップS2301の時間計測の開始から一定時間が経過したか判定する(ステップS2307)。一定時間が経過していない場合(ステップS2307:No)、ステップS2304に戻る。
【0179】
一方、一定時間が経過した場合(ステップS2307:Yes)、セキュアモジュール102は、サブルーチンSRを不正プログラムと判断して(ステップS2308)、認証処理を終了する。なお、この認証処理(認証サブプログラム)の内容は、毎回違う内容になるように加工してもよい。この加工処理を暗号化サブルーチンSRを読み込む都度実行すれば、その都度、サブルーチンSRの中の認証サブプログラムが変更されることとなる。したがって、クラッカーから見ると認証処理(認証サブプログラム)の解析と成りすましを困難にすることができる。
【0180】
(セキュアモジュール102の暗号化許可処理)
次に、図24を用いて、図23に示した認証処理において、サブルーチンSRが不正プログラムと判断された場合に不正プログラムの被害を防ぐために、セキュアモジュール102の機能を不能に設定する処理の一例について説明する。
【0181】
図24は、セキュアモジュール102による暗号化許可処理の詳細を示すフローチャートである。まず、セキュアモジュール102は、サブルーチンSRが改ざんされているか否かを判断する(ステップS2401)。
【0182】
改ざんされていない場合(ステップS2401:No)、セキュアモジュール102は、サブルーチンSRから処理要求を受信したか否か判断する(ステップS2402)。
【0183】
処理要求を受信した場合(ステップS2402:Yes)、セキュアモジュール102は、サブルーチンSRからの処理要求にしたがって処理をおこない(ステップS2403)、ステップS2401に戻る。また、処理要求を受信していない場合(ステップS2402:No)、ステップS2401に戻る。
【0184】
一方、改ざんされている場合(ステップS2401:Yes)、セキュアモジュール102は、「エラーモード」に移行して(ステップS2404)、暗号化許可処理を終了する。「エラーモード」では、セキュアモジュール102は、サブルーチンSRを再起動しない限り、サブルーチンSRからの操作(暗号化依頼や復号依頼など)を受け付けない状態となる。
【0185】
これにより、不正プログラムが、セキュアモジュール102内の秘匿情報(暗号鍵)を要求したり、セキュアモジュール102の機能を利用したりすることを防止する。そのため、不正プログラムによる情報処理装置101のユーザへの被害を防止できる。
【0186】
以上説明したように、情報処理装置101は、安全性が担保されていないメインメモリ103に書き出されるプログラムを、信頼性が担保されたセキュアモジュール102で暗号化してから、メインメモリ103に書き出す。そして、情報処理装置101は、暗号化されたプログラムを、プログラムの実行時に復号して実行する。これにより、情報処理装置101は、暗号化されていない状態のプログラムがメインメモリ103に存在する時間を少なくして、クラッカー105によるプログラムの解析および改ざんを防止する。
【0187】
また、情報処理装置101は、暗号化をおこなうごとに異なる暗号化方法を使用することにより、クラッカー105によるプログラムの解析を困難にして、不正プログラムの開発を防止することができる。
【0188】
また、情報処理装置101は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する。これにより、暗号化されたプログラムの実行時に、暗号化されたプログラムの復号にかかる時間を短くすることができる。そのため、復号によるプログラムの実行の遅延を少なくすることができる。
【0189】
また、情報処理装置101は、暗号化の際に、プログラムに認証サブプログラムを挿入しておく。これにより、認証サブプログラムの演算結果の正当性から、プログラムの改ざんを検出できる。
【0190】
そして、情報処理装置101は、改ざんがあった場合に、暗号化されたプログラムの復号が不可能な状態にセキュアモジュール102を設定したり、情報処理装置101のユーザに判定結果を通知したりする。これにより、不正プログラムによる被害を防止することができる。
【0191】
また、復号手段をセキュアモジュール102が備えるようにすれば、暗号鍵や、暗号化方法が秘匿され、プログラムの安全性を高めることができる。一方、セキュアモジュール102が暗号鍵をセキュアに管理し、復号手段は情報処理装置101が備えるようにすれば、セキュアモジュール102の機能を削減することができ、セキュアモジュール102が安価に作成できるようになる。
【0192】
また、情報処理装置101は、プログラムが実行待ち状態になるまでは、HDD104に暗号強度の高い暗号化方式により暗号化して保持しておくため、プログラムの安全性を担保できる。
【0193】
また、情報処理装置101は、プログラムを、上述した「難読化」、「暗号化」、「シャッフリング」により加工することで、クラッカー105によるプログラムの解析を困難にし、不正プログラムの開発を防止できる。
【0194】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0195】
(付記1)1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置であって、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出する第1の検出手段と、
内部に格納された情報を外部から参照ができない構造であって、前記第1の検出手段によって実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出すセキュアモジュールと、
前記いずれかのプログラムの実行要求を検出する第2の検出手段と、
前記第2の検出手段によって前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出す復号手段と、
前記復号手段によって復号された前記いずれかのプログラムを実行する実行手段と、
を備えることを特徴とする情報処理装置。
【0196】
(付記2)前記セキュアモジュールは、
暗号化をおこなうごとに異なる暗号化方法を使用することを特徴とする付記1に記載の情報処理装置。
【0197】
(付記3)前記セキュアモジュールは、
暗号化をおこなうごとに異なるデータを暗号鍵に用いて暗号化することを特徴とする付記2に記載の情報処理装置。
【0198】
(付記4)前記セキュアモジュールが使用する暗号化方法は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する方法であることを特徴とする付記1〜3のいずれか一つに記載の情報処理装置。
【0199】
(付記5)前記セキュアモジュールは、
暗号化に先だって、所定の演算をおこない演算結果を前記記憶領域の特定の領域に書き出す演算プログラムを、前記いずれかのプログラムに挿入する挿入手段と、
前記実行手段による前記いずれかのプログラムの実行に伴って、前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定する判定手段と、
前記判定手段によって改ざんがあると判定された場合、判定結果を出力する出力手段と、
を備えることを特徴とする付記1〜4のいずれか一つに記載の情報処理装置。
【0200】
(付記6)前記判定手段によって改ざんがあると判定された場合、前記復号手段を復号不能な状態に設定する設定手段を備えることを特徴とする付記5に記載の情報処理装置。
【0201】
(付記7)前記実行手段による実行が終了した前記いずれかのプログラムを前記記憶領域から削除する削除手段を備えることを特徴とする付記1〜6のいずれか一つに記載の情報処理装置。
【0202】
(付記8)前記復号手段は、
前記セキュアモジュール外に存在し、前記セキュアモジュールから提供される前記セキュアモジュールが前記いずれかのプログラムの暗号化に使用した暗号鍵を用いて、前記いずれかのプログラムを復号することを特徴とする付記1〜7のいずれか一つに記載の情報処理装置。
【0203】
(付記9)前記復号手段は、
前記セキュアモジュール内に存在することを特徴とする付記1〜7のいずれか一つに記載の情報処理装置。
【0204】
(付記10)前記プログラム群を暗号化した暗号化プログラム群を保持する記憶手段を備え、
前記セキュアモジュールは、
前記プログラム群を呼び出すプログラムが起動された場合、前記暗号化プログラム群を復号し、前記暗号化プログラム群の暗号化に使用されている第1の暗号化方法とは異なる第2の暗号化方法により、復号された前記プログラム群を暗号化して前記記憶領域に書き出すことを特徴とする付記1〜9のいずれか一つに記載の情報処理装置。
【0205】
(付記11)前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの命令を難読化することを特徴とする付記1〜10のいずれか一つに記載の情報処理装置。
【0206】
(付記12)前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令と当該ジャンプ命令のアドレスとの組み合わせを特定するテーブルを記憶し、シャッフリング後の前記プログラム群のプログラムにおける前記ジャンプ命令の内容を前記テーブルのリード命令に変更することを特徴とする付記1〜10のいずれか一つに記載の情報処理装置。
【0207】
(付記13)前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令およびジャンプ元命令と当該ジャンプ元命令のアドレスとの組み合わせを特定するテーブルを記憶し、シャッフリング後の前記プログラム群のプログラムにおける前記ジャンプ元命令の内容を前記テーブルのリード命令に変更することを特徴とする付記1〜10のいずれか一つに記載の情報処理装置。
【0208】
(付記14)前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの任意の命令を、当該命令を暗号化した暗号化命令と、前記セキュアモジュールに対するリード命令と、前記暗号化命令を復号する復号命令とに置換し、前記リード命令のアドレスと前記暗号化命令を復号する復号鍵との組み合わせを特定するテーブルを記憶することを特徴とする付記1〜10のいずれか一つに記載の情報処理装置。
【0209】
(付記15)前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの任意の命令を前記セキュアモジュールに対するリード命令に置換し、当該リード命令のアドレスと置換元の命令との組み合わせを特定するテーブルを記憶することを特徴とする付記1〜10のいずれか一つに記載の情報処理装置。
【0210】
(付記16)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す復号手段と、
を備えることを特徴とするセキュアモジュール。
【0211】
(付記17)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する送信手段と、
を備えることを特徴とするセキュアモジュール。
【0212】
(付記18)内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置が、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行する、
ことを特徴とする情報処理方法。
【0213】
(付記19)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す、
ことを特徴とする情報処理方法。
【0214】
(付記20)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する、
ことを特徴とする情報処理方法。
【0215】
(付記21)内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置に、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行する、
処理を実行させることを特徴とする情報処理プログラム。
【0216】
(付記22)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す、
処理を実行させることを特徴とする情報処理プログラム。
【0217】
(付記23)第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する、
処理を実行させることを特徴とする情報処理プログラム。
【符号の説明】
【0218】
101 情報処理装置
102 セキュアモジュール
103 メインメモリ
104 HDD
MP メインプログラム
SR サブルーチン
C−SR,S−SR 暗号化サブルーチン
PP 加工プログラム
【特許請求の範囲】
【請求項1】
1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置であって、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出する第1の検出手段と、
内部に格納された情報を外部から参照ができない構造であって、前記第1の検出手段によって実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出すセキュアモジュールと、
前記いずれかのプログラムの実行要求を検出する第2の検出手段と、
前記第2の検出手段によって前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出す復号手段と、
前記復号手段によって復号された前記いずれかのプログラムを実行する実行手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記セキュアモジュールは、
暗号化をおこなうごとに異なる暗号化方法を使用することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記セキュアモジュールは、
暗号化をおこなうごとに異なるデータを暗号鍵に用いて暗号化することを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記セキュアモジュールが使用する暗号化方法は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する方法であることを特徴とする請求項1〜3のいずれか一つに記載の情報処理装置。
【請求項5】
前記セキュアモジュールは、
暗号化に先だって、所定の演算をおこない演算結果を前記記憶領域の特定の領域に書き出す演算プログラムを、前記いずれかのプログラムに挿入する挿入手段と、
前記実行手段による前記いずれかのプログラムの実行に伴って、前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定する判定手段と、
前記判定手段によって改ざんがあると判定された場合、判定結果を出力する出力手段と、
を備えることを特徴とする請求項1〜4のいずれか一つに記載の情報処理装置。
【請求項6】
前記判定手段によって改ざんがあると判定された場合、前記復号手段を復号不能な状態に設定する設定手段を備えることを特徴とする請求項5に記載の情報処理装置。
【請求項7】
前記実行手段による実行が終了した前記いずれかのプログラムを前記記憶領域から削除する削除手段を備えることを特徴とする請求項1〜6のいずれか一つに記載の情報処理装置。
【請求項8】
前記復号手段は、前記セキュアモジュール外に存在し、前記セキュアモジュールから提供される前記セキュアモジュールが前記いずれかのプログラムの暗号化に使用した暗号鍵を用いて、前記いずれかのプログラムを復号することを特徴とする請求項1〜7のいずれか一つに記載の情報処理装置。
【請求項9】
前記復号手段は前記セキュアモジュール内に存在することを特徴とする請求項1〜7のいずれか一つに記載の情報処理装置。
【請求項10】
前記プログラム群を暗号化した暗号化プログラム群を保持する記憶手段を備え、
前記セキュアモジュールは、
前記プログラム群を呼び出すプログラムが起動された場合、前記暗号化プログラム群を復号し、前記暗号化プログラム群の暗号化に使用されている第1の暗号化方法とは異なる第2の暗号化方法により、復号された前記プログラム群を暗号化して前記記憶領域に書き出すことを特徴とする請求項1〜9のいずれか一つに記載の情報処理装置。
【請求項11】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す復号手段と、
を備えることを特徴とするセキュアモジュール。
【請求項12】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する送信手段と、
を備えることを特徴とするセキュアモジュール。
【請求項13】
内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置が、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行する、
ことを特徴とする情報処理方法。
【請求項14】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す、
ことを特徴とする情報処理方法。
【請求項15】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する、
ことを特徴とする情報処理方法。
【請求項16】
内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置に、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行する、
処理を実行させることを特徴とする情報処理プログラム。
【請求項17】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す、
処理を実行させることを特徴とする情報処理プログラム。
【請求項18】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する、
処理を実行させることを特徴とする情報処理プログラム。
【請求項1】
1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置であって、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出する第1の検出手段と、
内部に格納された情報を外部から参照ができない構造であって、前記第1の検出手段によって実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出すセキュアモジュールと、
前記いずれかのプログラムの実行要求を検出する第2の検出手段と、
前記第2の検出手段によって前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出す復号手段と、
前記復号手段によって復号された前記いずれかのプログラムを実行する実行手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記セキュアモジュールは、
暗号化をおこなうごとに異なる暗号化方法を使用することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記セキュアモジュールは、
暗号化をおこなうごとに異なるデータを暗号鍵に用いて暗号化することを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記セキュアモジュールが使用する暗号化方法は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する方法であることを特徴とする請求項1〜3のいずれか一つに記載の情報処理装置。
【請求項5】
前記セキュアモジュールは、
暗号化に先だって、所定の演算をおこない演算結果を前記記憶領域の特定の領域に書き出す演算プログラムを、前記いずれかのプログラムに挿入する挿入手段と、
前記実行手段による前記いずれかのプログラムの実行に伴って、前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定する判定手段と、
前記判定手段によって改ざんがあると判定された場合、判定結果を出力する出力手段と、
を備えることを特徴とする請求項1〜4のいずれか一つに記載の情報処理装置。
【請求項6】
前記判定手段によって改ざんがあると判定された場合、前記復号手段を復号不能な状態に設定する設定手段を備えることを特徴とする請求項5に記載の情報処理装置。
【請求項7】
前記実行手段による実行が終了した前記いずれかのプログラムを前記記憶領域から削除する削除手段を備えることを特徴とする請求項1〜6のいずれか一つに記載の情報処理装置。
【請求項8】
前記復号手段は、前記セキュアモジュール外に存在し、前記セキュアモジュールから提供される前記セキュアモジュールが前記いずれかのプログラムの暗号化に使用した暗号鍵を用いて、前記いずれかのプログラムを復号することを特徴とする請求項1〜7のいずれか一つに記載の情報処理装置。
【請求項9】
前記復号手段は前記セキュアモジュール内に存在することを特徴とする請求項1〜7のいずれか一つに記載の情報処理装置。
【請求項10】
前記プログラム群を暗号化した暗号化プログラム群を保持する記憶手段を備え、
前記セキュアモジュールは、
前記プログラム群を呼び出すプログラムが起動された場合、前記暗号化プログラム群を復号し、前記暗号化プログラム群の暗号化に使用されている第1の暗号化方法とは異なる第2の暗号化方法により、復号された前記プログラム群を暗号化して前記記憶領域に書き出すことを特徴とする請求項1〜9のいずれか一つに記載の情報処理装置。
【請求項11】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す復号手段と、
を備えることを特徴とするセキュアモジュール。
【請求項12】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する送信手段と、
を備えることを特徴とするセキュアモジュール。
【請求項13】
内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置が、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行する、
ことを特徴とする情報処理方法。
【請求項14】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す、
ことを特徴とする情報処理方法。
【請求項15】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する、
ことを特徴とする情報処理方法。
【請求項16】
内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、1または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置に、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行する、
処理を実行させることを特徴とする情報処理プログラム。
【請求項17】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第1の記憶領域に書き出す、
処理を実行させることを特徴とする情報処理プログラム。
【請求項18】
第1の記憶領域と1または複数のプログラムからなるプログラム群をセキュアに記憶する第2の記憶領域とを有し前記第1の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第1の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する、
処理を実行させることを特徴とする情報処理プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【公開番号】特開2012−234362(P2012−234362A)
【公開日】平成24年11月29日(2012.11.29)
【国際特許分類】
【出願番号】特願2011−102491(P2011−102491)
【出願日】平成23年4月28日(2011.4.28)
【出願人】(000005223)富士通株式会社 (25,993)
【出願人】(308014341)富士通セミコンダクター株式会社 (2,507)
【Fターム(参考)】
【公開日】平成24年11月29日(2012.11.29)
【国際特許分類】
【出願日】平成23年4月28日(2011.4.28)
【出願人】(000005223)富士通株式会社 (25,993)
【出願人】(308014341)富士通セミコンダクター株式会社 (2,507)
【Fターム(参考)】
[ Back to top ]