(57)【特許請求の範囲】
【請求項１】
１または複数のプログラムからなるプログラム群を暗号化した暗号化プログラム群を記憶する情報処理装置であって、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出する第１の検出手段と、
内部に格納された情報を外部から参照ができない構造であって、前記第１の検出手段によって実行待ち状態が検出された場合、前記いずれかのプログラムに対応する前記暗号化プログラム群のいずれかの暗号化プログラムを復号し、前記暗号化プログラム群の暗号化に使用されている第１の暗号化方法よりも復号の速度が速い第２の暗号化方法により、復号された前記いずれかのプログラムを暗号化して、前記暗号化プログラム群とは異なる記憶領域に書き出すセキュアモジュールと、
前記いずれかのプログラムの実行要求を検出する第２の検出手段と、
前記第２の検出手段によって前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出す復号手段と、
前記復号手段によって復号された前記いずれかのプログラムを実行する実行手段と、
を備え、
前記セキュアモジュールは、
暗号化に先だって、所定の演算をおこない演算結果を前記記憶領域の特定の領域に書き出す演算プログラムを、前記いずれかのプログラムに挿入する挿入手段と、
前記実行手段による前記いずれかのプログラムの実行に伴って前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定する判定手段と、
前記判定手段によって改ざんがあると判定された場合、判定結果を出力する出力手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記セキュアモジュールは、
暗号化をおこなうごとに異なる暗号化方法を使用することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記セキュアモジュールは、
暗号化をおこなうごとに異なるデータを暗号鍵に用いて暗号化することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記セキュアモジュールが使用する暗号化方法は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する方法であることを特徴とする請求項１〜３のいずれか一つに記載の情報処理装置。
【請求項５】
前記判定手段によって改ざんがあると判定された場合、前記復号手段を復号不能な状態に設定する設定手段を備えることを特徴とする請求項１〜４のいずれか一つに記載の情報処理装置。
【請求項６】
前記実行手段による実行が終了した前記いずれかのプログラムを前記記憶領域から削除する削除手段を備えることを特徴とする請求項１〜５のいずれか一つに記載の情報処理装置。
【請求項７】
前記復号手段は、前記セキュアモジュール外に存在し、前記セキュアモジュールから提供される前記セキュアモジュールが前記いずれかのプログラムの暗号化に使用した暗号鍵を用いて、前記いずれかのプログラムを復号することを特徴とする請求項１〜６のいずれか一つに記載の情報処理装置。
【請求項８】
前記復号手段は前記セキュアモジュール内に存在することを特徴とする請求項１〜６のいずれか一つに記載の情報処理装置。
【請求項９】
第１の記憶領域と１または複数のプログラムからなるプログラム群を暗号化した暗号化プログラム群を記憶する第２の記憶領域とを有し前記第１の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムに対応する前記暗号化プログラム群のいずれかの暗号化プログラムを復号する第１の復号手段と、
暗号化に先だって、所定の演算をおこない演算結果を前記第１の記憶領域の特定の領域に書き出す演算プログラムを、前記第１の復号手段によって復号された前記いずれかのプログラムに挿入する挿入手段と、
前記暗号化プログラム群の暗号化に使用されている第１の暗号化方法よりも復号の速度が速い第２の暗号化方法により、復号された前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、前記暗号化手段によって暗号化された前記いずれかのプログラムを復号して前記第１の記憶領域に書き出す第２の復号手段と、
前記第２の復号手段によって復号された前記いずれかのプログラムの実行に伴って前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定する判定手段と、
前記判定手段によって改ざんがあると判定された場合、判定結果を出力する出力手段と、
を備えることを特徴とするセキュアモジュール。
【請求項１０】
第１の記憶領域と１または複数のプログラムからなるプログラム群を暗号化した暗号化プログラム群を記憶する第２の記憶領域とを有し前記第１の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムに対応する前記暗号化プログラム群のいずれかの暗号化プログラムを復号する第１の復号手段と、
暗号化に先だって、所定の演算をおこない演算結果を前記第１の記憶領域の特定の領域に書き出す演算プログラムを、前記第１の復号手段によって復号された前記いずれかのプログラムに挿入する挿入手段と、
前記暗号化プログラム群の暗号化に使用されている第１の暗号化方法よりも復号の速度が速い第２の暗号化方法により、復号された前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、前記暗号化手段によって暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する送信手段と、
前記送信手段によって送信された前記鍵を用いて復号された前記いずれかのプログラムの実行に伴って前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定する判定手段と、
前記判定手段によって改ざんがあると判定された場合、判定結果を出力する出力手段と、
を備えることを特徴とするセキュアモジュール。
【請求項１１】
内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、１または複数のプログラムからなるプログラム群を暗号化した暗号化プログラム群を記憶する情報処理装置が、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムに対応する前記暗号化プログラム群のいずれかの暗号化プログラムを復号し、
前記セキュアモジュールにより、暗号化に先だって、所定の演算をおこない演算結果を前記暗号化プログラム群とは異なる記憶領域の特定の領域に書き出す演算プログラムを、復号された前記いずれかのプログラムに挿入し、
前記セキュアモジュールにより、前記暗号化プログラム群の暗号化に使用されている第１の暗号化方法よりも復号の速度が速い第２の暗号化方法により、復号された前記いずれかのプログラムを暗号化して、前記記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行し、
前記セキュアモジュールにより、前記いずれかのプログラムの実行に伴って前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定し、
前記セキュアモジュールにより、改ざんがあると判定された場合、判定結果を出力する、
ことを特徴とする情報処理方法。
【請求項１２】
第１の記憶領域と１または複数のプログラムからなるプログラム群を暗号化した暗号化プログラム群を記憶する第２の記憶領域とを有し前記第１の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムに対応する前記暗号化プログラム群のいずれかの暗号化プログラムを復号し、
暗号化に先だって、所定の演算をおこない演算結果を前記第１の記憶領域の特定の領域に書き出す演算プログラムを、復号された前記いずれかのプログラムに挿入し、
前記暗号化プログラム群の暗号化に使用されている第１の暗号化方法よりも復号の速度が速い第２の暗号化方法により、復号された前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第１の記憶領域に書き出し、
復号された前記いずれかのプログラムの実行に伴って前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定し、
改ざんがあると判定された場合、判定結果を出力する、
ことを特徴とする情報処理方法。
【請求項１３】
第１の記憶領域と１または複数のプログラムからなるプログラム群を暗号化した暗号化プログラム群を記憶する第２の記憶領域とを有し前記第１の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムに対応する前記暗号化プログラム群のいずれかの暗号化プログラムを復号し、
暗号化に先だって、所定の演算をおこない演算結果を前記第１の記憶領域の特定の領域に書き出す演算プログラムを、復号された前記いずれかのプログラムに挿入し、
前記暗号化プログラム群の暗号化に使用されている第１の暗号化方法よりも復号の速度が速い第２の暗号化方法により、復号された前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信し、
送信した前記鍵を用いて復号された前記いずれかのプログラムの実行に伴って前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定し、
改ざんがあると判定された場合、判定結果を出力する、
ことを特徴とする情報処理方法。
【請求項１４】
内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、１または複数のプログラムからなるプログラム群を暗号化した暗号化プログラム群を記憶する情報処理装置に、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムに対応する前記暗号化プログラム群のいずれかの暗号化プログラムを復号し、
前記セキュアモジュールにより、暗号化に先だって、所定の演算をおこない演算結果を前記暗号化プログラム群とは異なる記憶領域の特定の領域に書き出す演算プログラムを、復号された前記いずれかのプログラムに挿入し、
前記セキュアモジュールにより、前記暗号化プログラム群の暗号化に使用されている第１の暗号化方法よりも復号の速度が速い第２の暗号化方法により、復号された前記いずれかのプログラムを暗号化して、前記記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行し、
前記セキュアモジュールにより、前記いずれかのプログラムの実行に伴って前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定し、
前記セキュアモジュールにより、改ざんがあると判定された場合、判定結果を出力する、
処理を実行させることを特徴とする情報処理プログラム。
【請求項１５】
第１の記憶領域と１または複数のプログラムからなるプログラム群を暗号化した暗号化プログラム群を記憶する第２の記憶領域とを有し前記第１の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムに対応する前記暗号化プログラム群のいずれかの暗号化プログラムを復号し、
暗号化に先だって、所定の演算をおこない演算結果を前記第１の記憶領域の特定の領域に書き出す演算プログラムを、復号された前記いずれかのプログラムに挿入し、
前記暗号化プログラム群の暗号化に使用されている第１の暗号化方法よりも復号の速度が速い第２の暗号化方法により、復号された前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第１の記憶領域に書き出し、
復号された前記いずれかのプログラムの実行に伴って前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定し、
改ざんがあると判定された場合、判定結果を出力する、
処理を実行させることを特徴とする情報処理プログラム。
【請求項１６】
第１の記憶領域と１または複数のプログラムからなるプログラム群を暗号化した暗号化プログラム群を記憶する第２の記憶領域とを有し前記第１の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムに対応する前記暗号化プログラム群のいずれかの暗号化プログラムを復号し、
暗号化に先だって、所定の演算をおこない演算結果を前記第１の記憶領域の特定の領域に書き出す演算プログラムを、復号された前記いずれかのプログラムに挿入し、
前記暗号化プログラム群の暗号化に使用されている第１の暗号化方法よりも復号の速度が速い第２の暗号化方法により、復号された前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信し、
送信した前記鍵を用いて復号された前記いずれかのプログラムの実行に伴って前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定し、
改ざんがあると判定された場合、判定結果を出力する、
処理を実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報を処理する情報処理装置、セキュアモジュール、情報処理方法、および情報処理プログラムに関する。
【背景技術】
【０００２】
従来、モバイル端末（以下、単に「端末」という）は、第３者によるソフトウェア開発を想定していなかったため、端末の仕様およびソフトウェア構造は一般に知られておらず、端末内部は秘匿性が保たれ相当に安全であった。また、安全性の保証されたセキュアモジュール（耐タンパモジュール、例えばＳＩＭカード（Ｓｕｂｓｃｒｉｂｅｒ  Ｉｄｅｎｔｉｔｙ  Ｍｏｄｕｌｅ  Ｃａｒｄ））を信頼性拠点として、特に秘匿すべき情報（例えば、正規の暗号鍵やユーザ識別情報）の安全性を担保していた（例えば、下記特許文献１および２参照）。
【０００３】
即ち、秘匿すべき情報は、端末内部の正規のソフトウェアしか利用できない。そのため、外部装置は、端末から受信した通信内容が、安全性の担保された正規の暗号鍵により暗号化されていたり、安全性の担保されたユーザ識別情報を含んでいたりするか否かに基づいて、正規の通信内容か偽の通信内容かを判別して通信の安全性を担保できた。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１２９２２７号公報
【特許文献２】特許第４４０８６０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、近年では、スマートフォンで見られるように、端末の仕様およびソフトウェア構造を公開し、第３者によるソフトウェア開発を促す傾向にある。このため、クラッカーによって、端末内のソフトウェアが読み出され、解析され、改ざんされ、不正ソフトウェアが開発される可能性が増大している。また、セキュアモジュールは、外から覗き見や改ざんは不可能であるが、ソフトウェアから利用するためのインターフェースが公開されているため、セキュアモジュール内の秘匿すべき情報は不正ソフトウェアによって容易に読み出されてしまう。
【０００６】
したがって、不正ソフトウェアは、偽の通信内容を正規の暗号鍵を用いて暗号化した上で、または、偽の通信内容にユーザ情報を含ませた上で、外部の装置に送信することができる。そのため、外部の装置では偽の通信内容か否かを判別できず、通信の安全性を担保できないという問題があった。
【０００７】
本発明は、かかる問題点に鑑み、不正ソフトウェアの開発を防止する情報処理装置、セキュアモジュール、情報処理方法および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、１または複数のプログラムからなるプログラム群をセキュアに記憶し、プログラム群のいずれかのプログラムの実行待ち状態を検出し、内部に格納された情報を外部から参照ができない構造であって、実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、プログラム群とは異なる記憶領域に書き出すセキュアモジュールを有し、いずれかのプログラムの実行要求を検出し、いずれかのプログラムの実行要求が検出された場合、セキュアモジュールによって暗号化されたいずれかのプログラムを復号して記憶領域に書き出し、復号されたいずれかのプログラムを実行する情報処理装置、情報処理方法および情報処理プログラムが提案される。
【０００９】
第１の記憶領域と１または複数のプログラムからなるプログラム群をセキュアに記憶する第２の記憶領域とを有し第１の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第１の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号して第１の記憶領域に書き出すセキュアモジュール。
【００１０】
第１の記憶領域と１または複数のプログラムからなるプログラム群をセキュアに記憶する第２の記憶領域とを有し第１の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第１の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号して第１の記憶領域に書き出す情報処理方法および情報処理プログラム。
【００１１】
第１の記憶領域と１または複数のプログラムからなるプログラム群をセキュアに記憶する第２の記憶領域とを有し第１の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第１の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号する鍵を情報処理装置に送信するセキュアモジュール。
【００１２】
第１の記憶領域と１または複数のプログラムからなるプログラム群をセキュアに記憶する第２の記憶領域とを有し第１の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、第１の記憶領域に書き出し、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号する鍵を情報処理装置に送信する情報処理方法および情報処理プログラム。
【発明の効果】
【００１３】
本発明の一側面によれば、不正ソフトウェアの開発の防止を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】図１は、情報処理装置によるプログラムの改ざん防止の内容を示す説明図である。
【図２】図２は、実施の形態にかかる情報処理装置１０１のハードウェア構成例１を示すブロック図である。
【図３】図３は、図２のセキュアモジュール１０２のハードウェア構成例を示すブロック図である。
【図４】図４は、実施の形態にかかる情報処理装置１０１のハードウェア構成例２を示すブロック図である。
【図５】図５は、図４のセキュアモジュール１０２のハードウェア構成例を示すブロック図である。
【図６】図６は、情報処理装置１０１の機能的構成例１を示すブロック図である。
【図７】図７は、情報処理装置１０１の機能的構成例２を示すブロック図である。
【図８】図８は、情報処理装置１０１の動作概要例を示す説明図である。
【図９】図９は、サブルーチンＳＲの加工の概要を示す説明図である。
【図１０】図１０は、加工プログラムＰＰによるサブルーチンＳＲの加工例を示す説明図（その１）である。
【図１１】図１１は、加工プログラムＰＰによるサブルーチンＳＲの加工例を示す説明図（その２）である。
【図１２】図１２は、加工プログラムＰＰによるサブルーチンＳＲの加工例を示す説明図（その３）である。
【図１３】図１３は、加工プログラムＰＰによるサブルーチンＳＲの加工例を示す説明図（その４）である。
【図１４】図１４は、サブルーチンＳＲ加工処理の処理手順例を示すフローチャートである。
【図１５】図１５は、図１４に示したシャッフリング処理（ステップＳ１４１２）の詳細な処理手順例を示すフローチャートである。
【図１６】図１６は、サブルーチンＳＲの加工例を示す説明図である。
【図１７】図１７は、スクランブル処理の詳細を示すフローチャートである。
【図１８】図１８は、図８に示した暗号化サブルーチンＳ−ＳＲの具体例１を示す説明図である。
【図１９】図１９は、図８に示した暗号化サブルーチンＳ−ＳＲの具体例２を示す説明図である。
【図２０】図２０は、デスクランブル処理の詳細を示すフローチャートである。
【図２１】図２１は、デスクランブル処理を実行するプログラム例を示す説明図である。
【図２２】図２２は、サブルーチンＳＲの認証の概要を示す説明図である。
【図２３】図２３は、セキュアモジュール１０２による認証処理の詳細を示すフローチャートである。
【図２４】図２４は、セキュアモジュール１０２による暗号化許可処理の詳細を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下に添付図面を参照して、この発明にかかる情報処理装置、セキュアモジュール、情報処理方法、および情報処理プログラムの実施の形態を詳細に説明する。暗号化されていないプログラムが安全性が担保されていないメインメモリ上に存在する期間をできる限り短くするため、本実施の形態では、情報処理装置は、安全性が担保されていないメインメモリに書き出されるプログラムを、信頼性が担保されたセキュアモジュールで暗号化してから、メインメモリに書き出しておく。これにより、実行前は、メインメモリ上で暗号化されているため、メインメモリでのプログラムの安全性が担保され、クラッカーによるプログラムの解析および改ざんを防止することができる。
【００１６】
また、情報処理装置は、メインメモリ上に書き出された、暗号化されたプログラムを、当該プログラムの実行時にだけ復号して、プログラムの実行終了時に削除する。これにより、情報処理装置は、暗号化されていない状態のプログラムがメインメモリに存在する時間を少なくして、クラッカーによるプログラムの解析および改ざんを防止する。
【００１７】
（情報処理装置によるプログラムの改ざん防止の内容）
図１は、情報処理装置によるプログラムの改ざん防止の内容を示す説明図である。図１において、情報処理装置１０１は、セキュアモジュール１０２と、メインメモリ１０３と、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１０４と、を有する。
【００１８】
ＨＤＤ１０４は、情報処理装置１０１によって実行されるプログラム群が保持される記憶装置である。図１では、ＨＤＤ１０４には、サブルーチンＳＲ（図１では、例として２個のサブルーチンＳＲ１，ＳＲ２）を暗号強度の高い暗号化方式により暗号化して生成された暗号化サブルーチンＣ−ＳＲが保持されている。なお、暗号強度の高い暗号化方式とは、例えば、暗号規格であるＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）やＮＥＳＳＩＥ（Ｎｅｗ  Ｅｕｒｏｐｅａｎ  Ｓｃｈｅｍｅｓ  ｆｏｒ  Ｓｉｇｎａｔｕｒｅ，  Ｉｎｔｅｇｒｉｔｙ，  ａｎｄ  Ｅｎｃｒｙｐｔｉｏｎ）として規格化された暗号方式である。
【００１９】
メインメモリ１０３は、情報処理装置１０１がプログラムを実行する際の作業領域となる記憶装置であり、図１では、サブルーチンＳＲを呼び出して実行するメインプログラムＭＰが書き出されている。ただし、メインメモリ１０３は、クラッカー１０５であってもデータを読み出すことが可能な記憶装置であり、信頼性は担保されていない。
【００２０】
セキュアモジュール１０２は、ＴＲＭ（Ｔａｍｐｅｒ  Ｒｅｓｉｓｔａｎｔ  Ｍｏｄｕｌｅ）構造など内部に格納された情報を外部から参照できない構造を有するＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）である。これにより、セキュアモジュール１０２は、外部からの覗き見を防止するとともに、内部のデータの改ざんを防止する。
【００２１】
セキュアモジュール１０２は、暗号化回路を有する。暗号化回路は、ＨＤＤ１０４内の暗号化サブルーチンＣ−ＳＲの暗号化に用いられている暗号強度の高い暗号化方式による復号が可能である。また、暗号化回路は、暗号化および復号の速度が速い暗号化方式による暗号化および復号が可能である。暗号化および復号の速度が速い暗号化方式とは、例えば、暗号化されるデータと暗号鍵となるデータとの排他的論理和（ＸＯＲ：ｅＸｃｌｕｓｉｖｅ  ＯＲ）により暗号化（スクランブル）をおこなう方式（以下、「ＸＯＲ暗号」という）である。
【００２２】
ここで、メインプログラムＭＰが起動された場合を例に挙げて、情報処理装置１０１が、クラッカー１０５によるサブルーチンＳＲの解析および改ざんを防止しつつ、メインプログラムＭＰに呼び出されたサブルーチンＳＲを実行する場合について説明する。
【００２３】
例えば、図１の（Ａ）に示すように、まず、情報処理装置１０１は、メインプログラムＭＰに呼び出されるサブルーチンＳＲを、作業領域となるメインメモリ１０３に書き出す。ここで、メインメモリ１０３は信頼性が担保されていないため、暗号化されていない状態でサブルーチンＳＲが書き出された場合、サブルーチンＳＲがクラッカー１０５により解析されるおそれがある。
【００２４】
（１）そのため、情報処理装置１０１は、サブルーチンＳＲを暗号化した状態で、メインメモリ１０３に書き出し、サブルーチンＳＲの実行時に復号して実行する。この際、サブルーチンＳＲの復号を高速化するために、信頼性の担保されたセキュアモジュール１０２が、暗号化サブルーチンＣ−ＳＲを一旦復号し、復号したサブルーチンＳＲを、ＸＯＲ暗号によりスクランブルした暗号化サブルーチンＳ−ＳＲにして書き出しておく。
【００２５】
図１の（Ａ）に示すように、メインメモリ１０３に書き出されたサブルーチンＳＲは、暗号化サブルーチンＳ−ＳＲの状態であるため、クラッカー１０５による解析を防止できる。また、サブルーチンＳＲの暗号化および復号が信頼性の担保されたセキュアモジュール１０２内でおこなわれるため、クラッカー１０５は、復号された状態のサブルーチンＳＲを覗き見することもできない。同様に、クラッカー１０５は、サブルーチンＳＲに使用されている暗号化方式および暗号鍵を覗き見することもできない。
【００２６】
ここで、メインプログラムＭＰが実行開始され、メインプログラムＭＰからサブルーチンＳＲ１の実行要求が発生した場合を想定する。
【００２７】
サブルーチンＳＲ１の実行要求があると、図１の（Ｂ）に示すように、（２）信頼性の担保されたセキュアモジュール１０２が、暗号化サブルーチンＳ−ＳＲ１から、サブルーチンＳＲ１を復号（デスクランブル）する。
【００２８】
（３）そして、情報処理装置１０１は、デスクランブルされたサブルーチンＳＲ１を実行して、（４）サブルーチンＳＲ１の実行の終了時に、サブルーチンＳＲ１を削除する。また、サブルーチンＳＲ２の実行要求があった場合も、情報処理装置１０１は、（２）〜（４）と同様にして、サブルーチンＳＲ２を実行し、削除する。
【００２９】
図１の（Ｂ）に示すように、実行のために復号されたサブルーチンＳＲが、メインメモリ１０３に存在する時間は、サブルーチンＳＲの実行開始時の復号から、サブルーチンＳＲの実行終了時の削除までの時間のみである。そのため、クラッカー１０５がサブルーチンＳＲを解析できる時間はサブルーチンＳＲの復号から削除までの短い時間しかなく、クラッカー１０５はサブルーチンＳＲを解析することができない。
【００３０】
以上のように、情報処理装置１０１は、サブルーチンＳＲのクラッカー１０５による改ざんおよび解析を防止し、不正ソフトウェアの開発を防止することができる。また、情報処理装置１０１は、ＸＯＲ暗号を使用することにより、実行直前までサブルーチンＳＲを暗号化しておいても、サブルーチンＳＲの復号によりメインプログラムＭＰの実行が遅延しないようにすることができる。さらに、ＸＯＲ暗号では暗号化および復号が同一の処理により実現されるため、ＸＯＲ暗号を採用した場合には、セキュアモジュール１０２を簡素化でき安価に作成できるようになる。
【００３１】
また、結果として、セキュアモジュール１０２内の秘匿すべき情報（暗号鍵やユーザ識別情報）が、不正ソフトウェアに利用されることがなくなり、情報処理装置１０１のユーザの不正ソフトウェアによる被害をなくすことができる。例えば、通信販売の商品購入用ソフトウェアが、解析および改ざんされ、ユーザが入力した注文内容を書き換えてしまう不正ソフトウェアが開発されることを防止できる。そして、不正ソフトウェアにより、セキュアモジュール１０２内の暗号鍵やユーザ識別情報が利用され、偽の注文内容が送信されてしまうといった被害をなくすことができる。
【００３２】
（情報処理装置１０１のハードウェア構成）
次に、情報処理装置１０１のハードウェア構成について説明する。図１に示したように、情報処理装置１０１は、セキュアモジュール１０２を有しているが、セキュアモジュール１０２は、ワンチップで作成されていてもよいし、複数チップで作成されていてもよい。まず、図２および図３を用いて、セキュアモジュール１０２がワンチップで作成されている場合の情報処理装置１０１のハードウェア構成例について説明する。
【００３３】
（情報処理装置１０１のハードウェア構成例１）
図２は、実施の形態にかかる情報処理装置１０１のハードウェア構成例１を示すブロック図である。図２において、情報処理装置１０１は、プロセッサ２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、セキュアモジュール１０２と、メインメモリ１０３と、ＨＤＤ１０４と、を備えている。また、情報処理装置１０１は、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０３と、ディスプレイ２０４と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。
【００３４】
ここで、プロセッサ２０１は、情報処理装置１０１の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。メインメモリ１０３は、プロセッサ２０１のワークエリアとして使用される。ＨＤＤ１０４は、プロセッサ２０１の制御にしたがって内蔵するハードディスクに対するデータのリード／ライトを制御する駆動装置である。
【００３５】
インターフェース（以下、「Ｉ／Ｆ」と略する。）２０３は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１０に接続され、このネットワーク２１０を介して他の装置に接続される。そして、Ｉ／Ｆ２０３は、ネットワーク２１０と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０３には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００３６】
ディスプレイ２０４は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０４は、例えば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３７】
セキュアモジュール１０２は、ＨＤＤ１０４から暗号化サブルーチンＣ−ＳＲを読み出す機能を備えている。また、セキュアモジュール１０２は、サブルーチンＳＲをメインメモリ１０３に書き出す機能、暗号化機能、復号機能、乱数生成機能等を備えている。セキュアモジュール１０２は、暗号化サブルーチンＣ−ＳＲを復号する暗号鍵と、ＸＯＲ暗号の暗号鍵と、をセキュアに保持している。
【００３８】
ただし、セキュアモジュール１０２は、暗号鍵のみを保持し、暗号化機能、復号機能、乱数生成機能等は、情報処理装置１０１が備えることとしてもよい。この場合、セキュアモジュール１０２は、情報処理装置１０１の要求にしたがって、暗号鍵を出力する。セキュアモジュール１０２は、情報処理装置１０１に内蔵されていてもよく、外付けとしてもよい。
【００３９】
（セキュアモジュール１０２のハードウェア構成例１）
図３は、図２のセキュアモジュール１０２のハードウェア構成例を示すブロック図である。セキュアモジュール１０２は、プロセッサ３０１と、Ｉ／Ｆ３０２と、暗号化回路３０３と、ＲＡＭ３０４と、ＲＯＭ３０５と、フラッシュメモリ３０６と、乱数生成回路３０７と、を備えている。また、各構成部はバス３００によってそれぞれ接続されている。
【００４０】
プロセッサ３０１は、セキュアモジュール１０２内の制御や演算処理をおこなう。Ｉ／Ｆ３０２は、バス２００を介して情報処理装置１０１内の各構成部と接続され、通信をおこなう。暗号化回路３０３は、データやプログラムを暗号化したり、暗号化されたデータやプログラムを復号したりする。暗号化および復号をソフトウェア的に実行する場合は、暗号化回路３０３に相当するプログラムをＲＯＭ３０５に記憶させておくことで、暗号化回路３０３は不要となる。
【００４１】
ＲＡＭ３０４は、プロセッサ３０１のワークエリアとして使用されるメインメモリである。ＲＯＭ３０５は、プログラムやデータが格納される不揮発性メモリである。ＲＯＭ３０５には、暗号化サブルーチンＣ−ＳＲを復号する暗号鍵と、ＸＯＲ暗号の暗号鍵と、が格納されている。フラッシュメモリ３０６は、保存したデータやプログラムが書き換え可能な不揮発性メモリである。乱数生成回路３０７は、乱数を生成する。
【００４２】
セキュアモジュール１０２は、外部から覗き見や改ざんができないのが前提であるため、できる限り、図３の構成のようにワンチップのＬＳＩにして実装するべきである。例えば、セキュアモジュール１０２はＴＲＭ構造である。ＴＲＭ構造は、半導体チップ（この場合、セキュアモジュール１０２）の内部解析や改ざんを物理的および論理的に防衛するための構造をいう。具体的には、セキュアモジュール１０２においては、内部に強固で粘着力が高いコーティングが施され、その表面が剥がされると内部の回路が完全に破壊されたり、ダミーの配線が配されていたりする。
【００４３】
（情報処理装置１０１のハードウェア構成例２）
次に、図４および図５を用いて、セキュアモジュール１０２が複数のチップで作成されている場合の情報処理装置１０１のハードウェア構成について説明する。
【００４４】
図４は、実施の形態にかかる情報処理装置１０１のハードウェア構成例２を示すブロック図である。図４において、情報処理装置１０１は、プロセッサ２０１と、ＲＯＭ２０２と、メインメモリ１０３と、ＨＤＤ１０４と、Ｉ／Ｆ２０３と、ディスプレイ２０４と、セキュアモジュール１０２と、を備えている。図４において、図２と同様の構成部には同一の符号を付し、その説明を省略する。
【００４５】
図４では、セキュアモジュール１０２は、暗号化機能、復号機能、乱数生成機能等を備えるＬＳＩ４０１と、暗号化サブルーチンＣ−ＳＲを復号する暗号鍵をセキュアに保持する既存のＳＩＭカード４０２とを接合して作成される。そして、ＬＳＩ４０１は、必要に応じて暗号鍵をＳＩＭカード４０２から読み出して暗号化機能、復号機能を使用する。
【００４６】
（セキュアモジュール１０２のハードウェア構成例２）
図５は、図４のセキュアモジュール１０２のハードウェア構成例を示すブロック図である。図５において、セキュアモジュール１０２は、ＬＳＩ４０１とＳＩＭカード４０２とで構成される。ＬＳＩ４０１は、プロセッサ３０１と、Ｉ／Ｆ３０２と、暗号化回路３０３と、ＲＡＭ３０４と、ＲＯＭ３０５と、フラッシュメモリ３０６と、乱数生成回路３０７と、を備えている。ＳＩＭカード４０２は、暗号鍵をセキュアに保持している。セキュアモジュール１０２内で、ＬＳＩ４０１と、ＳＩＭカード４０２とはＩ／Ｆ３０２によって接続され、通信をおこなう。図５において、図３と同様の構成部には同一の符号を付し、その説明を省略する。
【００４７】
セキュアモジュール１０２は、外部から覗き見や改ざんができないのが前提であるため、図５の構成のように複数チップで実現した場合は、全体を一つのモジュールとし、全体を樹脂で固めて第３者が覗き見や改ざんが困難なように実装すべきである。
【００４８】
（情報処理装置１０１の機能的構成例１）
次に、情報処理装置１０１の機能的構成例１について説明する。図６は、情報処理装置１０１の機能的構成例１を示すブロック図である。情報処理装置１０１は、第１の検出部６０１と、暗号化部６０２と、第２の検出部６０３と、復号部６０４と、実行部６０５と、挿入部６０６と、判定部６０７と、出力部６０８と、設定部６０９と、削除部６１０と、記憶部６１１と、加工部６１２と、送信部６１３と、を含む構成である。
【００４９】
この制御部となる機能（第１の検出部６０１〜削除部６１０）は、具体的には、例えば、図２に示したＲＯＭ２０２、メインメモリ１０３、ＨＤＤ１０４、などの記憶装置に記憶されたプログラムをプロセッサ２０１に実行させることにより、または、Ｉ／Ｆ２０３により、その機能を実現する。もしくは、この制御部となる機能（第１の検出部６０１〜削除部６１０）は、具体的には、例えば、図３に示したＲＯＭ３０５、ＲＡＭ３０４、フラッシュメモリ３０６、などの記憶装置に記憶されたプログラムをプロセッサ３０１に実行させることにより、または、Ｉ／Ｆ３０２により、その機能を実現する。
【００５０】
第１の検出部６０１は、プログラム群のいずれかのプログラムの実行待ち状態を検出する機能を有する。ここで、いずれかのプログラムとは、他のプログラムから呼び出されるプログラムであり、例えば、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）に呼び出されるメインプログラムＭＰ、または、メインプログラムＭＰに呼び出されるサブルーチンＳＲが挙げられる。実行待ち状態とは、プログラムを呼び出す他のプログラムが起動されたときに、他のプログラムからの呼び出しを待っている状態である。
【００５１】
具体的には、例えば、第１の検出部６０１は、メインプログラムＭＰが起動され、メインプログラムＭＰによりサブルーチンＳＲが呼び出される状態になったことを検出する。これにより、他のプログラムに呼び出されるプログラムを、作業領域となるメインメモリ１０３に書き出すトリガを検出できる。
【００５２】
暗号化部６０２は、セキュアモジュール１０２内に備えられ、第１の検出部６０１によって実行待ち状態が検出された場合、いずれかのプログラムを暗号化して、プログラム群とは異なる記憶領域に書き出す機能を有する。ここで、プログラム群とは異なる記憶領域とは、プログラムの作業領域であり、例えば、上述したメインメモリ１０３である。
【００５３】
具体的には、例えば、暗号化部６０２は、サブルーチンＳＲを暗号化して、メインメモリ１０３に書き出す。これにより、誰もが参照可能であり安全性が担保されていないメインメモリ１０３に書き出されるプログラムを暗号化することにより、安全性を担保する。また、信頼性の担保されたセキュアモジュール１０２で暗号化をおこなうため、暗号化に使用した暗号化方式や暗号化前のプログラムは秘匿され、プログラムの安全性を担保できる。
【００５４】
また、具体的には、例えば、暗号化部６０２は、暗号化をおこなうごとに異なる暗号化方法を使用する。異なる暗号化方法とは、例えば、暗号化ごとに異なるデータを暗号鍵に用いる暗号化方式である。ここで、異なるデータとは、例えば、乱数生成回路３０７により生成された乱数列である。ただし、この場合、暗号化の際に暗号化対象のプログラムと暗号鍵とを対応付けてテーブルに記憶しておき、復号の際にテーブルを参照して復号に使用する暗号鍵を特定する。これにより、暗号化するごとに、暗号鍵が変更され、クラッカーによるプログラムの解析を困難にすることができる。
【００５５】
また、具体的には、例えば、暗号化部６０２は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する暗号化方式を使用する。即ち、上述したＸＯＲ暗号により暗号化をおこなう。ＸＯＲ暗号は暗号化および復号にかかる処理量が少なく所要時間が短い暗号であるから、暗号化されたプログラムの実行時に、暗号化されたプログラムの復号にかかる時間を短くすることができる。また、ＸＯＲ暗号では暗号化および復号が同一の処理により実現されるため、ＸＯＲ暗号を採用した場合には、セキュアモジュール１０２を簡素化して安価に作成できるようになる。
【００５６】
また、暗号化部６０２は、プログラム群を呼び出すプログラムが起動された場合、第１の暗号化プログラム群を復号する機能を有する。そして、暗号化部６０２は、暗号化プログラム群の暗号化に使用されている第１の暗号化方法とは異なる第２の暗号化方法により、復号されたプログラム群を暗号化して記憶領域に書き出す機能を有する。
【００５７】
ここで、プログラム群を呼び出すプログラムとは、例えば、メインプログラムＭＰである。暗号化プログラム群とは、例えば、ＨＤＤ１０４に保持された暗号化サブルーチンＣ−ＳＲである。第１の暗号化方法とは、暗号強度の高い暗号化方式である。第２の暗号化方法とは、ＸＯＲ暗号のうちで、暗号強度の高い暗号化方式であり、例えば、暗号鍵のデータ長が長いＸＯＲ暗号である。
【００５８】
具体的には、例えば、暗号化部６０２は、ＨＤＤ１０４に保持された暗号化サブルーチンＣ−ＳＲを、一旦、暗号強度の高いＸＯＲ暗号により暗号化して、メインメモリ１０３に書き出しておく。これにより、メインメモリ１０３に書き出したプログラムが長時間実行されない場合でも、プログラムの安全性を担保できる。長時間実行されない場合とは、例えば、メインプログラムＭＰが起動されているが、情報処理装置１０１のユーザから実行の指示が入力されていない状態が続いている場合をいう。
【００５９】
第２の検出部６０３は、プログラム群のいずれかのプログラムの実行要求を検出する機能を有する。具体的には、例えば、第２の検出部６０３は、メインプログラムＭＰによりサブルーチンＳＲの実行が要求されたことを検出する。これにより、第２の検出部６０３は、暗号化サブルーチンＳ−ＳＲの復号のトリガを検出することができる。
【００６０】
復号部６０４は、第２の検出部６０３によっていずれかのプログラムの実行要求が検出された場合、セキュアモジュール１０２によって暗号化されたいずれかのプログラムを復号して記憶領域に書き出す機能を有する。
【００６１】
具体的には、例えば、復号部６０４は、セキュアモジュール１０２外に存在し、セキュアモジュール１０２から提供されるセキュアモジュール１０２がいずれかのプログラムの暗号化に使用した暗号鍵を用いて、いずれかのプログラムを復号する。セキュアモジュール１０２から提供される暗号鍵は、後述する送信部６１３によって送信される。
【００６２】
より具体的には、例えば、復号部６０４は、セキュアモジュール１０２から提供されるＸＯＲ暗号の暗号鍵を用いて、暗号化サブルーチンＳ−ＳＲを復号する。これにより、サブルーチンＳＲを実行可能な状態にして、メインメモリ１０３に書き出すことができる。
【００６３】
また、復号時まで暗号鍵をセキュアモジュール１０２が秘匿しておくため、クラッカー１０５によるプログラムの解析を防止することができる。また、セキュアモジュール１０２が暗号化ごとに異なる暗号鍵を使用する場合、次回以降の暗号化には同一の暗号鍵は使用しない。そのため、情報処理装置１０１に提供することにより暗号鍵がクラッカー１０５に知られても、次回以降に生成された暗号化サブルーチンＳ−ＳＲの復号にクラッカー１０５が今回の暗号鍵を流用することはできないため、安全性を担保できる。
【００６４】
さらに、復号部６０４はセキュアモジュールに内蔵することも可能だが、セキュアモジュール１０２外に存在するようにして、セキュアモジュール１０２の機能を省き、セキュアモジュール１０２を安価に作成することができる。
【００６５】
実行部６０５は、復号部６０４によって復号されたいずれかのプログラムを実行する機能を有する。具体的には、例えば、実行部６０５は、サブルーチンＳＲを実行する。これにより、メインプログラムＭＰの処理を正常におこなうことができる。
【００６６】
挿入部６０６は、セキュアモジュール１０２内に備えられ、暗号化に先だって、所定の演算をおこない演算結果を記憶領域の特定の領域に書き出す演算プログラムを、いずれかのプログラムに挿入する機能を有する。ここで、演算プログラムとは、所定の演算をおこない演算結果をメインメモリ１０３の所定の領域に格納するプログラムであり、後述する認証サブプログラムである。具体的には、例えば、挿入部６０６は、後述する加工プログラムを実行して、サブルーチンＳＲに認証サブプログラムを挿入する。
【００６７】
判定部６０７は、セキュアモジュール１０２内に備えられ、実行部６０５によるいずれかのプログラムの実行に伴って、演算プログラムにより書き出される演算結果を取得する機能を有する。そして、判定部６０７は、取得した演算結果と、セキュアモジュール１０２で所定の演算をおこない得られた演算結果と、が一致しない場合、いずれかのプログラムに改ざんがあると判定する機能を有する。
【００６８】
具体的には、例えば、判定部６０７は、サブルーチンＳＲの実行に伴って実行される認証サブプログラムによって、メインメモリ１０３に書き出された演算結果を取得する。次に、セキュアモジュール１０２で、認証サブプログラムと同様の演算をおこない、正規の演算結果を算出し、認証サブプログラムが書き出した演算結果が正規の演算結果でなければ、プログラムは改ざんされていると判定する。
【００６９】
そして、挿入される認証サブプログラムがおこなう所定の演算を、毎回異なる演算にすることで、クラッカー１０５による正規の認証サブプログラムを挿入した不正プログラムの開発を困難にすることができる。
【００７０】
出力部６０８は、セキュアモジュール１０２内に備えられ、判定部６０７によって改ざんがあると判定された場合、判定結果を出力する機能を有する。具体的には、例えば、出力部６０８は、改ざんがある場合には、ディスプレイ２０４に出力して、情報処理装置１０１のユーザに不正プログラムが実行されるおそれがあることを通知する。これにより、不正プログラムによる被害を防止する。
【００７１】
設定部６０９は、判定部６０７によって改ざんがあると判定された場合、復号部６０４を復号不能な状態に設定する機能を有する。具体的には、例えば、設定部６０９は、判定部６０７によってプログラムの改ざんがあると判定された場合、復号部６０４、暗号化部６０２、または全機能を使用不能に設定する。これにより、設定部６０９は、セキュアモジュール１０２を、改ざんが検出されたプログラムからの復号依頼に対応しないようにできる。または、設定部６０９は、不正プログラムの続行を不可能にすることができる。
【００７２】
削除部６１０は、実行部６０５による実行が終了したいずれかのプログラムを記憶領域から削除する機能を有する。具体的には、例えば、削除部６１０は、メインメモリ１０３に書き出されたサブルーチンＳＲを削除する。これにより、暗号化されていない状態のプログラムが、安全性が担保されていないメインメモリ１０３に存在する時間を短くして、クラッカー１０５によりプログラムが解析および改ざんされることを防止することができる。
【００７３】
記憶部６１１は、プログラム群を暗号化した第１の暗号化プログラム群を保持する機能を有する。具体的には、例えば、記憶部６１１は、ＨＤＤ１０４であり、暗号化サブルーチンＣ−ＳＲを保持する。これにより、プログラムをセキュアに保持する。
【００７４】
加工部６１２は、プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工する機能を有する。具体的には、例えば、加工部６１２は、サブルーチンＳＲを、後述する「難読化」、「暗号化」、「シャッフリング」により加工する。これにより、クラッカー１０５がサブルーチンＳＲを解読するのを困難にし、サブルーチンＳＲが解析され、改ざんされることを防止することができる。
【００７５】
送信部６１３は、いずれかのプログラムの実行要求が検出された場合、暗号化されたいずれかのプログラムを復号する鍵を情報処理装置に送信する機能を有する。具体的には、例えば、送信部６１３は、ＲＡＭ３０４に保持されているＸＯＲ暗号の暗号鍵を情報処理装置１０１に送信する。
【００７６】
また、セキュアモジュール１０２が暗号化ごとに異なる暗号鍵を使用している場合では、送信部６１３は、暗号鍵と暗号化サブルーチンＳ−ＳＲとを対応付けて記憶するテーブルを参照して実行要求されている暗号化サブルーチンＳ−ＳＲに対応する暗号鍵を特定する。そして、送信部６１３は、特定された暗号鍵を情報処理装置１０１に送信する。
【００７７】
これにより、情報処理装置１０１は、復号部６０４によって暗号化サブルーチンＳ−ＳＲを復号する際に使用する暗号鍵を得ることができるようになる。
【００７８】
（情報処理装置１０１の機能的構成例２）
また、図７に示すように、復号部６０４はセキュアモジュール１０２に備えられていてもよい。図７は、情報処理装置１０１の機能的構成例２を示すブロック図である。
【００７９】
具体的には、例えば、復号部６０４は、セキュアモジュール１０２に備えられ、暗号化サブルーチンＳ−ＳＲを復号して、メインメモリ１０３に書き出す。これにより、サブルーチンＳＲを実行可能な状態にして、メインメモリ１０３に書き出すことができる。また、信頼性の担保されたセキュアモジュール１０２が復号部６０４を備えるため、暗号化方法や暗号鍵を秘匿することができ、クラッカー１０５によるプログラムの解析を防止しやすくなる。
【００８０】
（情報処理装置１０１での動作概要例）
次に、図８を用いて、情報処理装置１０１の動作概要例について説明する。
【００８１】
図８は、情報処理装置１０１の動作概要例を示す説明図である。（１）まず、情報処理装置１０１は、暗号化メインプログラムＣ−ＭＰと暗号化サブルーチンＣ−ＳＲ群とを含む暗号化ソフトウェアを実行するために、ＨＤＤ１０４の暗号化ソフトウェアをセキュアモジュール１０２に入力する。
【００８２】
（２）セキュアモジュール１０２は、入力された暗号化ソフトウェアの暗号化メインプログラムＣ−ＭＰを復号してメインメモリ１０３に書き出す。また、セキュアモジュール１０２は、入力された暗号化ソフトウェアの暗号化サブルーチンＣ−ＳＲ群を復号する。
【００８３】
（３）次に、セキュアモジュール１０２は、復号したサブルーチンＳＲ群の各サブルーチンＳＲを、加工プログラムＰＰを用いて加工する。加工プログラムＰＰの内容としては、「認証サブプログラムや命令の挿入」や「サブルーチンＳＲの難読化、暗号化、またはシャッフリング」が挙げられる。これにより、セキュアモジュール１０２は、サブルーチンＳＲ群の各サブルーチンＳＲを、クラッカー１０５による解析および改ざんが困難なように加工する。
【００８４】
（４）そして、セキュアモジュール１０２は、加工済みサブルーチンＰ−ＳＲ群の各加工済みサブルーチンＰ−ＳＲを、ＸＯＲ暗号によりスクランブルして、暗号化サブルーチンＳ−ＳＲ群を生成する。次に、セキュアモジュール１０２は、生成した暗号化サブルーチンＳ−ＳＲ群を、メインメモリ１０３に書き出す。
【００８５】
（５）ここで、情報処理装置１０１は、メインプログラムＭＰを実行する。実行されたメインプログラムＭＰは、サブルーチンＳＲ群のうちのいずれかのサブルーチンＳＲの実行要求を発生させる。
【００８６】
（６）情報処理装置１０１は、サブルーチンＳＲの実行要求の発生を検出すると、検出した実行要求に基づいて、暗号化サブルーチンＳ−ＳＲ群のいずれかの暗号化サブルーチンＳ−ＳＲをデスクランブルして、実行要求がなされたサブルーチンＳＲを得る。
【００８７】
デスクランブルは、例えば、（３）においてサブルーチンＳＲに、（４）による暗号化の対象としない命令として「自身をデスクランブルする依頼をセキュアモジュール１０２に出力する命令」を挿入しておくことにより実現できる。なお、復号により、復号前の暗号化サブルーチンＳ−ＳＲはメインメモリ１０３からなくなる。
【００８８】
具体的には、情報処理装置１０１は、セキュアモジュール１０２に暗号化サブルーチンＳ−ＳＲのデスクランブル依頼をする。または、情報処理装置１０１は、セキュアモジュール１０２に暗号化サブルーチンＳ−ＳＲのデスクランブルに使用する暗号鍵の提供を依頼し、セキュアモジュール１０２から提供された暗号鍵により、暗号化サブルーチンＳ−ＳＲをデスクランブルする。
【００８９】
（７）そして、情報処理装置１０１は、デスクランブルされたサブルーチンＳＲを実行する。ここで、サブルーチンＳＲが実行されると、サブルーチンＳＲに挿入された認証サブプログラムもともに実行される。実行された認証サブプログラムは、所定の演算をおこない演算結果をメインメモリ１０３の所定の領域に格納する。
【００９０】
一方、セキュアモジュール１０２は、認証プログラムを実行している。実行された認証プログラムは、認証サブプログラムと同一内容の所定の演算をおこない、正規の演算結果を算出する。そして、実行された認証プログラムは、認証サブプログラムが格納した演算結果を取得し、正規の演算結果と一致判定をおこない、サブルーチンＳＲに改ざんがあるか否か判定する。
【００９１】
これにより、サブルーチンＳＲ内の認証サブプログラムが、クラッカー１０５による改ざんの影響を受けている場合には、一致判定により演算結果が一致しないと判定されることになり、セキュアモジュール１０２は、改ざんがあると判定できる。
【００９２】
そして、改ざんがある場合、改ざんを情報処理装置１０１のユーザに出力したり、実行中のサブルーチンＳＲを中断させたり、セキュアモジュール１０２の復号機能を不能に設定したりすることにより、クラッカー１０５による改ざんの被害を防ぐことができる。
【００９３】
（８）そして、情報処理装置１０１は、サブルーチンＳＲの実行が終了すると、サブルーチンＳＲを削除する。例えば、サブルーチンＳＲの削除は、（３）において、サブルーチンＳＲに「自身を削除する命令」を挿入しておくことで実現できる。
【００９４】
これにより、暗号化されていない状態のサブルーチンＳＲが、メインメモリ１０３に存在する時間は、上述した（６）〜（８）の間だけになり、クラッカー１０５がサブルーチンＳＲを解析および改ざんする時間をなくすことができる。そのため、クラッカー１０５による不正ソフトウェアの開発を防止することができる。
【００９５】
また、情報処理装置１０１は、削除されたサブルーチンＳＲが、メインプログラムＭＰにより複数回実行されるサブルーチンＳＲである場合に対応するために、新たに暗号化サブルーチンＳ−ＳＲを生成してメインメモリ１０３に書き出しておく。これにより、メインプログラムＭＰにより２度目以降にサブルーチンＳＲが呼び出される際に、呼び出されるべきサブルーチンＳＲが既に削除されメインメモリ１０３に存在しない状態になってしまうことを防止できる。
【００９６】
以下では、図９〜図２４を用いて、図８に示した情報処理装置１０１の各動作の内容について詳細に説明する。まず、図９〜図１６を用いて、図８の（３）に示したサブルーチンＳＲの加工について具体的に説明する。
【００９７】
なお、図９〜図１３では、簡単のため、メインメモリ１０３およびＨＤＤ１０４でのサブルーチンＳＲを暗号化されていない状態で表しているが、実際にはメインメモリ１０３およびＨＤＤ１０４ではサブルーチンＳＲは暗号化された状態である。
【００９８】
（サブルーチンＳＲの加工）
図９は、サブルーチンＳＲの加工の概要を示す説明図である。サブルーチンＳＲは、セキュアモジュール１０２のプロセッサ３０１が実行する加工プログラムＰＰによって、加工される。
【００９９】
サブルーチンＳＲ（プログラム）は、アドレス単位の命令の集合体である。ここでは、わかりやすさを考慮して、サブルーチンＳＲが５つのアドレス単位の命令で成り立っているものとする。具体的には、分割プログラムＰ１〜Ｐ５で構成されており、アドレスａｄｒ１〜ａｄｒ５の順に分割プログラムＰ１〜Ｐ５が実行されるものとする。したがって、ＨＤＤ１０４では、論理アドレスとして、実行順序となるアドレスａｄｒ１〜ａｄｒ５の並びで記憶されている。
【０１００】
サブルーチンＳＲ（分割プログラムＰ１〜Ｐ５）は、加工プログラムＰＰにより配置順、即ち、アドレスを入れ替えられる。図９では、アドレスａｄｒ１が分割プログラムＰ１、アドレスａｄｒ２が分割プログラムＰ４、アドレスａｄｒ３が分割プログラムＰ２、アドレスａｄｒ４が分割プログラムＰ３、アドレスａｄｒ５が分割プログラムＰ５に加工されている。
【０１０１】
この場合、分割プログラムＰ１，Ｐ４，Ｐ３の後続に、セキュアモジュール１０２へのＲｅａｄ命令を追記しておく。セキュアモジュール１０２内には、アドレス変更後の対応関係を示すプログラム片を保持しておく。例えば、プログラム片ｐａは、分割プログラムＰ１の実行後に参照されるＧｏｔｏ文であり、アドレスａｄｒ３にジャンプするものとする。
【０１０２】
また、プログラム片ｐｂは、分割プログラムＰ３の実行後に参照されるＧｏｔｏ文であり、アドレスａｄｒ２にジャンプするものとする。プログラム片ｐｃは、分割プログラムＰ４の実行後に参照されるＧｏｔｏ文であり、アドレスａｄｒ５にジャンプするものとする。プログラム片ｐａ〜ｐｃは加工の際に生成される。
【０１０３】
図１０〜図１３は、加工プログラムＰＰによるサブルーチンＳＲの加工例を示す説明図である。まず、図１０では、ＨＤＤ１０４内のサブルーチンＳＲのアドレス３〜５の命令群を、アドレス７〜９に移動させている。また、サブルーチンＳＲのアドレス６，７の命令群を、アドレス１５，１６に移動させている。アドレス１，２の命令群はそのままである。
【０１０４】
加工前では、アドレス２の命令「Ｙ＝Ｘ＋８」の次は、アドレス３の命令「Ｚ＝Ｘ＋Ｙ」が実行される。アドレス３の命令「Ｚ＝Ｘ＋Ｙ」は、アドレス７に移動したため、アドレス３の内容を、「Ｇｏｔｏ７」というプログラム片（ジャンプ命令）に書き換える。そして、セキュアモジュール１０２は、テーブルにアドレス３とプログラム片「Ｇｏｔｏ７」との組み合わせを保持する。
【０１０５】
同様に、加工前では、アドレス５の命令「Ｚ＝Ｚ＋１」の次は、アドレス６の命令「Ｚ＝５＋Ｚ」が実行される。アドレス５の命令「Ｚ＝Ｚ＋１」はアドレス９に移動し、アドレス６の命令は、アドレス１５に移動したため、アドレス９の次であるアドレス１０の内容を、「Ｇｏｔｏ１５」というプログラム片（ジャンプ命令）に書き換える。そして、セキュアモジュール１０２は、テーブルにアドレス１０とプログラム片「Ｇｏｔｏ１５」との組み合わせを保持する。
【０１０６】
そして、セキュアモジュール１０２は、サブルーチンＳＲをメインメモリ１０３に書き出す前に、プログラム片をセキュアモジュール１０２へのＲｅａｄ命令に書き換える。これにより、メインメモリ１０３に実装された加工後のサブルーチンＳＲが実行される場合、アドレス３のＲＥＡＤ命令により、セキュアモジュール１０２内のテーブルを参照して、アドレス３に対応するプログラム片「Ｇｏｔｏ７」を特定する。セキュアモジュール１０２は、プロセッサ２０１に対し、「Ｇｏｔｏ７」を通知することで、プロセッサ２０１は加工後のサブルーチンＳＲのアドレス７の命令を実行することとなる。
【０１０７】
このように、サブルーチンＳＲを構成する命令群を、対応関係を保持しておきながらシャッフリングする。したがって、サブルーチンＳＲを解読しにくい状態とすることで、セキュリティの向上を図ることができる。
【０１０８】
図１１は、図１０よりも加工を複雑化した例である。具体的には、図１０では、プログラム片を単なるジャンプ命令としたが、図１１では、単なるジャンプ命令ではなく、プログラム片にサブルーチンＳＲを構成する命令も挿入している。
【０１０９】
まず、図１１では、ＨＤＤ１０４内のサブルーチンＳＲのアドレス４，５の命令群を、アドレス８，９に移動させている。また、サブルーチンＳＲのアドレス６，７の命令群を、アドレス１５，１６に移動させている。アドレス１〜３の命令群はそのままである。
【０１１０】
加工前では、アドレス２の命令「Ｙ＝Ｘ＋８」の次は、アドレス３の命令「Ｚ＝Ｘ＋Ｙ」が実行される。アドレス３の次であるアドレス４の命令は、アドレス８に移動したため、Ｇｏｔｏ文「Ｇｏｔｏ８」を生成する。そして、セキュアモジュール１０２は、アドレス３と、アドレス３の命令「Ｚ＝Ｘ＋Ｙ」および生成されたＧｏｔｏ文「Ｇｏｔｏ８」との組み合わせを保持する。このように、プログラム片を単なるジャンプ命令ではなく、複雑化することで、セキュリティの向上を図ることができる。
【０１１１】
図１２は、サブルーチンＳＲを構成する命令群を暗号化する例である。図１２では、セキュアモジュール１０２は、サブルーチンＳＲ（加工前）のアドレス４〜７の命令群を暗号鍵Ｋ１〜Ｋ４で暗号化する。次に、暗号化された命令の前に、セキュアモジュール１０２へのＲＥＡＤ命令と復号命令を挿入する。これにより、挿入された命令分だけ、アドレスが繰り下がる。
【０１１２】
例えば、アドレス４の命令「Ｙ＝Ｙ＋１」を暗号鍵Ｋ１で暗号化して、アドレス６に書き込む。そして、空いているアドレス４にセキュアモジュール１０２へのＲＥＡＤ命令を挿入し、アドレス５に復号命令を挿入する。
【０１１３】
このあと、セキュアモジュール１０２では、サブルーチンＳＲ（加工後）における暗号化命令を暗号化した鍵とその暗号化命令のために挿入されたＲＥＡＤ命令のアドレスとの組み合わせをテーブルに保持する。例えば、アドレス６に書き込まれた暗号化命令Ｅ１（Ｙ＝Ｙ＋１）を暗号化した暗号鍵Ｋ１と、暗号化命令Ｅ１（Ｙ＝Ｙ＋１）の生成により挿入されたＲＥＡＤ命令のアドレス４との組み合わせをテーブルに保持する。
【０１１４】
このあと、セキュアモジュール１０２は、テーブルをＲＡＭ３０４またはフラッシュメモリ３０６に保持しておき、加工したサブルーチンＳＲをメインメモリ１０３に書き込む。サブルーチンＳＲ（加工後）を実行するときは、挿入されたＲＥＡＤ命令により暗号鍵を読み出して、次の復号命令で、暗号化命令を復号する。これにより、復号された命令を実行することが可能となる。例えば、アドレス４のＲＥＡＤ命令があると、セキュアモジュール１０２は、テーブルを参照して暗号鍵Ｋ１をプロセッサ２０１に渡す。
【０１１５】
プロセッサ２０１は、暗号鍵Ｋ１とアドレス５の復号命令により、暗号化命令Ｅ１（Ｙ＝Ｙ＋１）を復号して、アドレス６に命令「Ｙ＝Ｙ＋１」を書き込む。そして、アドレス６で、命令「Ｙ＝Ｙ＋１」を実行することとなる。このように、サブルーチンＳＲが一部暗号化されていても、復号鍵をセキュアモジュール１０２から取得することで処理の続行が可能になる。
【０１１６】
図１３は、サブルーチンＳＲを構成する命令群を暗号化する例である。図１３では、セキュアモジュール１０２は、サブルーチンＳＲ（加工前）のアドレス４〜７の命令群をセキュアモジュール１０２へのＲＥＡＤ命令に置換する。例えば、アドレス４の命令「Ｙ＝Ｙ＋１」をＲＥＡＤ命令に置換する。そして、次のアドレス５に、「アドレス４でセキュアモジュール１０２から読み出した命令「Ｙ＝Ｙ＋１」を書き込む」命令を挿入する。
【０１１７】
このあと、セキュアモジュール１０２は、置換対象の命令とそのアドレスとの組み合わせをテーブルに保持する。例えば、セキュアモジュール１０２は、置換対象となったアドレス４とその命令「Ｙ＝Ｙ＋１」の組み合わせをテーブルに保持する。
【０１１８】
このあと、セキュアモジュール１０２は、テーブルをＲＡＭ３０４またはフラッシュメモリ３０６に保持しておき、加工したサブルーチンＳＲをメインメモリ１０３に書き込む。サブルーチンＳＲ（加工後）を実行するときは、プロセッサ２０１は、置換されたＲＥＡＤ命令により置換元の命令を読み出して実行する。例えば、プロセッサ２０１は、アドレス４のＲＥＡＤ命令でセキュアモジュール１０２から命令「Ｙ＝Ｙ＋１」を読み出して実行することとなる。
【０１１９】
（サブルーチンＳＲ加工処理）
図１４は、サブルーチンＳＲ加工処理の処理手順例を示すフローチャートである。まず、セキュアモジュール１０２が、暗号化サブルーチンＣ−ＳＲをＨＤＤ１０４から読み出し（ステップＳ１４０１）、暗号化サブルーチンＣ−ＳＲを復号する（ステップＳ１４０２）。
【０１２０】
ここで、セキュアモジュール１０２は、サブルーチンＳＲに認証サブプログラムや命令を挿入しておく（ステップＳ１４０３）。命令の内容については、図１８および図１９を用いて後述する。認証サブプログラムの内容については、図２２を用いて後述する。
【０１２１】
次に、セキュアモジュール１０２は、サブルーチンＳＲの加工方法をランダムに決定する（ステップＳ１４０４）。具体的には、セキュアモジュール１０２は、「難読化」、「暗号化」（図１２，図１３を参照）、「シャッフリング」（図１１，図１２，図１３を参照）、「何もしない」の中から決定する。
【０１２２】
そして、セキュアモジュール１０２は、加工方法が「難読化」であるか否かを判断する（ステップＳ１４０５）。加工方法が「難読化」である場合（ステップＳ１４０５：Ｙｅｓ）、セキュアモジュール１０２は、サブルーチンＳＲから難読化の対象範囲を指定し（ステップＳ１４０６）、対象範囲の命令を難読化する（ステップＳ１４０７）。そして、ステップＳ１４０４に戻る。
【０１２３】
また、ステップＳ１４０５において、加工方法が「難読化」でない場合（ステップＳ１４０５：Ｎｏ）、セキュアモジュール１０２は、加工方法が「暗号化」であるか否かを判断する（ステップＳ１４０８）。加工方法が「暗号化」である場合（ステップＳ１４０８：Ｙｅｓ）、セキュアモジュール１０２は、サブルーチンＳＲから暗号化の対象範囲を指定し（ステップＳ１４０９）、対象範囲の命令を暗号化する（ステップＳ１４１０）。このとき、図１２に示したように、セキュアモジュール１０２は、暗号化対象のアドレスとそのアドレスの暗号化命令を復号する復号鍵の組み合わせをテーブルに保存する。そして、ステップＳ１４０４に戻る。
【０１２４】
また、ステップＳ１４０８において、加工方法が「暗号化」でない場合（ステップＳ１４０８：Ｎｏ）、セキュアモジュール１０２は、加工方法が「シャッフリング」であるか否かを判断する（ステップＳ１４１１）。加工方法が「シャッフリング」である場合（ステップＳ１４１１：Ｙｅｓ）、セキュアモジュール１０２は、シャッフリング処理（図１５）を実行する（ステップＳ１４１２）。そして、シャッフリング処理の後、ステップＳ１４０４に戻る。
【０１２５】
また、ステップＳ１４１１において、加工方法が「シャッフリング」でない場合（ステップＳ１４１１：Ｎｏ）、セキュアモジュール１０２は、加工終了であるか否かを判断する（ステップＳ１４１３）。具体的には、例えば、このケースでは、加工方法が「何もしない」にランダム決定されているため、一度も加工していない場合は、加工を終了しない（ステップＳ１４１３：Ｎｏ）。この場合は、ステップＳ１４０４に戻る。
【０１２６】
少なくとも一度、または、予め設定しておいた所定回数加工がおこなわれた場合、ランダムに加工を終了する（ステップＳ１４１３：Ｙｅｓ）。これにより、加工処理を終了する。
【０１２７】
図１５は、図１４に示したシャッフリング処理（ステップＳ１４１２）の詳細な処理手順例を示すフローチャートである。ここでは、例として、図１０に示したようなシャッフリングをする場合を例に挙げる。まず、セキュアモジュール１０２は、セキュアモジュール１０２内で加工先の領域を確保し（ステップＳ１５０１）、サブルーチンＳＲを複数の命令群に分割する（ステップＳ１５０２）。
【０１２８】
次に、セキュアモジュール１０２は、先頭の命令群を対象命令群に設定する（ステップＳ１５０３）。そして、セキュアモジュール１０２は、対象命令群の後続命令群があるか否かを判断する（ステップＳ１５０４）。後続命令群がある場合（ステップＳ１５０４：Ｙｅｓ）、セキュアモジュール１０２は、プログラム片（例えば、Ｇｏｔｏ文）をランダムに生成する（ステップＳ１５０５）。具体的には、セキュアモジュール１０２は、ランダムかつ対象命令群が入る領域が確保できるように生成する。
【０１２９】
このあと、セキュアモジュール１０２は、生成されたプログラム片のアドレスを、対象命令群の末尾アドレスの次のアドレスに設定する（ステップＳ１５０６）。そして、セキュアモジュール１０２は、プログラム片とその書込先アドレスとの組み合わせをテーブルに追加する（ステップＳ１５０７）。
【０１３０】
そして、セキュアモジュール１０２は、サブルーチンＳＲのプログラム片に割り当てられたアドレスに、プログラム片のＲｅａｄ命令を書き込む（ステップＳ１５０８）。このあと、セキュアモジュール１０２は、プログラム片で指定されたアドレス（プログラム片が「Ｇｏｔｏ８」なら「８」）に、後続命令群を対象命令群として設定して（ステップＳ１５０９）、ステップＳ１５０４に戻る。
【０１３１】
ステップＳ１５０４において、対象命令群の後続命令群がない場合（ステップＳ１５０４：Ｎｏ）、シャッフリング処理を終了して、ステップＳ１４０４に戻る。
【０１３２】
このように、サブルーチンＳＲを加工することでサブルーチンＳＲのクラッキングに対してセキュリティ強度を高めることができる。なお、上述した加工処理は、暗号化サブルーチンＳＲを読み込む都度実行されるため、その都度、サブルーチンＳＲの加工方法が変更されることとなる。したがって、クラッカーから見るとさらにサブルーチンＳＲの解析を困難にすることができる。
【０１３３】
図１６は、サブルーチンＳＲの加工例を示す説明図である。（Ａ）では、サブルーチンＳＲのアドレス１〜４の命令が難読化され、アドレス５〜７にＮＯＰを追加した例である。（Ｂ）では、アドレス１〜４の命令はそのままで、アドレス５〜７に命令が追加されているが、結果は同一となる例である。（Ｃ）では、アドレス１〜４の命令はそのままで、アドレス５〜７に無意味な命令が追加されているため、結果は同一となる例である。
【０１３４】
このように、図１６の左側のサブルーチンＳＲを、図１６の右側のように加工する。これにより、サブルーチンＳＲのクラッキングに対してセキュリティ強度を高めることができる。
【０１３５】
（スクランブル処理の内容）
次に、図１７を用いて、暗号化対象のプログラムをスクランブルするスクランブル処理の内容について説明する。具体的には、図８の（４）に示した加工済みサブルーチンＰ−ＳＲ（図９〜図１６に示した加工プログラムＰＰにより加工された加工済みサブルーチンＰ−ＳＲ）をスクランブルするスクランブル処理である。
【０１３６】
図１７は、スクランブル処理の詳細を示すフローチャートである。まず、プロセッサ３０１は、スクランブル依頼を情報処理装置１０１から受信したか否か判定する（ステップＳ１７０１）。ここで、スクランブル依頼を受信していない場合（ステップＳ１７０１：Ｎｏ）、プロセッサ３０１は、ステップＳ１７０１に戻り、スクランブル依頼の受信を待つ。
【０１３７】
一方、スクランブル依頼を受信した場合（ステップＳ１７０１：Ｙｅｓ）、プロセッサ３０１は、暗号鍵をランダムに生成し（ステップＳ１７０２）、生成した暗号鍵を用いて、暗号化対象のプログラムにスクランブルをかける（ステップＳ１７０３）。
【０１３８】
そして、プロセッサ２０１は、スクランブルしたプログラムをメインメモリ１０３に書き出して（ステップＳ１７０４）、スクランブル処理を終了する。これにより、スクランブルごとに異なる暗号鍵によりスクランブルして、クラッカー１０５によるプログラムの解析を困難にし、不正プログラムの開発を防止する。
【０１３９】
（暗号化サブルーチンＳ−ＳＲの内容）
次に、図１８および図１９を用いて、図８に示した暗号化サブルーチンＳ−ＳＲの内容について説明する。図８に示した暗号化サブルーチンＳ−ＳＲとは、即ち、図１７のスクランブル処理によりスクランブルされた暗号化サブルーチンＳ−ＳＲである。
【０１４０】
ここで、図１８では、セキュアモジュール１０２が暗号化サブルーチンＳ−ＳＲを復号する場合の暗号化サブルーチンＳ−ＳＲの内容について説明する。一方、図１９では、セキュアモジュール１０２から復号に使用する暗号鍵を提供された情報処理装置１０１が、暗号化サブルーチンＳ−ＳＲを復号する場合の暗号化サブルーチンＳ−ＳＲの内容について説明する。
【０１４１】
図１８は、図８に示した暗号化サブルーチンＳ−ＳＲの具体例１を示す説明図である。暗号化サブルーチンＳ−ＳＲの先頭には、スクランブルされていない領域が存在し、自身のデスクランブルをセキュアモジュール１０２に依頼する命令である「デスクランブル依頼」が含まれている。「デスクランブル依頼」は、セキュアモジュール１０２が加工プログラムＰＰにより挿入した命令である。
【０１４２】
セキュアモジュール１０２が暗号化ごとに異なる暗号鍵を使用する場合、加工プログラムＰＰにより挿入される「デスクランブル依頼」には、暗号化に使用した暗号鍵に対応する識別情報を含めておいても良い。そして、セキュアモジュール１０２は、識別情報を参照して暗号鍵を特定し、デスクランブルをおこなう。
【０１４３】
暗号化サブルーチンＳ−ＳＲには、「デスクランブル依頼」の次に、スクランブルされた領域が存在し、暗号化ソフトウェアの通常処理をおこなう命令である「通常処理」が含まれている。また、「通常処理」と「通常処理」との間には、セキュアモジュール１０２が加工プログラムＰＰにより挿入した「認証サブプログラム」が含まれている。
【０１４４】
「通常処理」の次に、自身の実行終了時に自身を削除するように情報処理装置１０１に依頼する命令である「削除処理」が含まれている。「削除処理」は、セキュアモジュール１０２が加工プログラムＰＰにより挿入した命令である。
【０１４５】
また、暗号化サブルーチンＳ−ＳＲには、「削除処理」の次に、スクランブルされていない領域が存在する。このスクランブルされていない領域には、削除された自身の代わりに新たに暗号化サブルーチンＳ−ＳＲを生成するように情報処理装置１０１に依頼する命令である「新ルーチン置き換え」が含まれている。「新ルーチン置き換え」は、セキュアモジュール１０２が加工プログラムＰＰにより挿入した命令である。
【０１４６】
また、「新ルーチン置き換え」の次に、メインプログラムへ復帰する命令である「メインプログラム復帰」が含まれている。ただし、上述したセキュアモジュール１０２により挿入された各命令は、サブルーチンＳＲに初めから（サブルーチンＳＲの開発時点で）含まれていてもよい。
【０１４７】
図１９は、図８に示した暗号化サブルーチンＳ−ＳＲの具体例２を示す説明図である。なお、「通常処理」、「認証サブプログラム」、「削除処理」、「新ルーチン置き換え」、「メインプログラム復帰」の内容は、図１８で説明した内容と同一のため、ここでは説明を省略する。
【０１４８】
図１９では、図１８に示した「デスクランブル依頼」の代わりに、「デスクランブル用の暗号鍵の出力依頼」と「デスクランブル」とが先頭のスクランブルされていない領域に含まれている。「デスクランブル用の暗号鍵の出力依頼」と「デスクランブル」は、セキュアモジュール１０２が加工プログラムＰＰにより挿入した命令である。
【０１４９】
「デスクランブル用の暗号鍵の出力依頼」は、セキュアモジュール１０２に暗号鍵の提供を依頼する命令である。セキュアモジュール１０２が暗号化ごとに異なる暗号鍵を使用する場合、加工プログラムＰＰにより挿入される「デスクランブル用の暗号鍵の出力依頼」には、暗号化に使用した暗号鍵に対応する識別情報を含めておいても良い。そして、セキュアモジュール１０２に識別情報を通知して、暗号鍵の提供を依頼する。
【０１５０】
「デスクランブル」は、提供された暗号鍵を使用して暗号化サブルーチンＳ−ＳＲのデスクランブルを情報処理装置１０１におこなわせる命令である。ただし、上述したセキュアモジュール１０２により挿入された各命令は、サブルーチンＳＲに初めから（サブルーチンＳＲの開発時点で）含まれていてもよい。
【０１５１】
（デスクランブル処理の内容）
ここで、図２０を用いて、図８の（６）に示した暗号化サブルーチンＳ−ＳＲをデスクランブルするデスクランブル処理の内容について説明する。具体的には、デスクランブル処理は、図１８に示した「デスクランブル依頼」の命令により情報処理装置１０１から送信されたデスクランブル依頼を受信したセキュアモジュール１０２によりおこなわれる。もしくは、図１９に示した「デスクランブル」の命令を実行する情報処理装置１０１によりおこなわれる。
【０１５２】
ここでは、図１９に示すように、デスクランブル処理を情報処理装置１０１がおこなう場合の処理について説明する。
【０１５３】
図２０は、デスクランブル処理の詳細を示すフローチャートである。まず、プロセッサ２０１は、暗号鍵を読み込む（ステップＳ２００１）。暗号鍵は、例えば、セキュアモジュール１０２から提供され、メインメモリ１０３に記憶されている。
【０１５４】
次に、プロセッサ２０１は、メインメモリ１０３にある復号対象となる暗号化されたプログラムに含まれる暗号化されたすべての命令を復号したか否かを判定する（ステップＳ２００２）。
【０１５５】
ここで、すべての命令を復号していない場合（ステップＳ２００２：Ｎｏ）、プロセッサ２０１は、まだ復号されていない命令が格納されたメインメモリ１０３の番地を指定する（ステップＳ２００３）。そして、プロセッサ２０１は、指定された番地に格納された暗号化された命令と、暗号鍵とのＸＯＲ演算をおこない、暗号化された命令を復号された命令に書き換える（ステップＳ２００４）。その後、プロセッサ２０１は、ステップＳ２００２に戻る。
【０１５６】
一方、すべての命令を復号した場合（ステップＳ２００２：Ｙｅｓ）、プロセッサ２０１は、復号された命令群を実行して（ステップＳ２００５）、デスクランブル処理を終了する。これにより、暗号化されたプログラムを実行可能な状態にする。
【０１５７】
（デスクランブル処理を実行するプログラム例）
次に、図２０に示したデスクランブル処理を実行するプログラムの一例について説明する。
【０１５８】
図２１は、デスクランブル処理を実行するプログラム例を示す説明図である。サブルーチンＳＲ（プログラム）は、アドレス単位の命令の集合体である。ここでは、メインメモリ１０３のｘ５番地〜ｘ１００番地に暗号化サブルーチンＳ−ＳＲのスクランブルされた部分が存在すると想定する。
【０１５９】
ここで、デスクランブルをセキュアモジュール１０２がおこなう場合、デスクランブルのプログラムは、セキュアモジュール１０２のＲＡＭ３０４に存在する。デスクランブルを情報処理装置１０１がおこなう場合、デスクランブルのプログラムは、メインメモリ１０３に存在する。
【０１６０】
図２１では、情報処理装置１０１が、セキュアモジュール１０２から提供された暗号鍵を使用してデスクランブルをおこなう場合を例に挙げ、デスクランブルのプログラムはメインメモリ１０３の１番地〜８番地に存在すると想定する。
【０１６１】
また、以下では、ｘｘ番地は、復号の作業領域である。ｘｘ番地には、まず、暗号化された命令が格納される。そして、ｘｘ番地の命令は、デスクランブルされ、復号された命令に変換される。ｙｙ番地には、作業対象となっている番地の番地番号が格納される。ｚｚ番地には、セキュアモジュール１０２から提供された暗号鍵が格納される。
【０１６２】
具体的には、１番地の命令は、情報処理装置１０１に、セキュアモジュール１０２から提供された暗号鍵が格納されているｚｚ番地から、暗号鍵を読み込ませる命令である。そして、２番地の命令は、情報処理装置１０１に、ｙｙ番地に番地番号「ｘ４」を格納させる命令である。１番地および２番地の命令は、図２０のステップＳ２００１に対応している。
【０１６３】
そして、３番地の命令は、情報処理装置１０１に、ｙｙ番地に格納された番地番号に１を加算させる命令である。ここで、４番地の命令は、情報処理装置１０１に、ｙｙ番地の番地番号が「ｘ１００」を越えたら、ｘ５番地にジャンプし、ｘ５番地の命令を実行させる命令である。即ち、ｘ１００番地までの復号が終了したら、ｘ５番地にジャンプして、ｘ５番地〜ｘ１００番地までの復号された命令を実行する。３番地および４番地の命令は、図２０のステップＳ２００２の分岐に対応している。
【０１６４】
また、５番地の命令は、情報処理装置１０１に、暗号化された命令が格納されているｙｙ番地の命令をｘｘ番地に格納させる命令である。５番地の命令は、図２０のステップＳ２００３に対応している。
【０１６５】
そして、６番地の命令は、情報処理装置１０１に、ｘｘ番地に格納された暗号化された命令に、ｚｚ番地に格納された暗号鍵を用いてＸＯＲ演算を施し、ｘｘ番地に格納された暗号化された命令を復号された命令に変換させる命令である。
【０１６６】
また、７番地の命令は、情報処理装置１０１に、ｙｙ番地の番地番号が示す番地に格納されている暗号化された命令に、ｘｘ番地に格納された復号された命令を上書きさせる命令である。６番地および７番地の命令は、図２０のステップＳ２００５に対応している。
【０１６７】
そして、８番地の命令は、情報処理装置１０１に、実行する番地を３番地に戻し、ｘ１００番地の復号が終了するまで、３番地〜８番地の命令を繰り返し実行させる命令である。以上に示したプログラムが、図２０に示したデスクランブル処理を実行するプログラムの一例である。
【０１６８】
（サブルーチンＳＲの認証）
次に、図２２〜図２４を用いて、図８の（７）に示したサブルーチンＳＲの認証について説明する。まず、図２２を用いて、サブルーチンＳＲの認証の概要について説明する。
【０１６９】
（サブルーチンＳＲの認証の概要）
図２２は、サブルーチンＳＲの認証の概要を示す説明図である。認証サブプログラムは、サブルーチンＳＲに挿入され、所定の演算による演算結果を算出するプログラムである。また、セキュアモジュール１０２は、認証サブプログラムと同様の所定の演算をおこない正規の演算結果を算出する認証プログラムを有し、認証サブプログラムの演算結果が正規の演算結果であるか否かによってサブルーチンＳＲの正当性を判断する。
【０１７０】
例えば、認証サブプログラムは、１番地の値に第１の秘密番号「ｙｙｙ」を乗算した値を２番地に格納し、２番地の値に第２の秘密番号「ｚｚｚ」を乗算した値を３番地に格納するプログラムであるとする。
【０１７１】
ここで、セキュアモジュール１０２は、ランダムに生成した値「Ｘ」を１番地に格納する。次に、セキュアモジュール１０２は、認証プログラムを実行して、「Ｘ」から認証サブプログラムによって算出されるべき正規の値「Ｘａｎｓ」を算出しておく。
【０１７２】
一方、サブルーチンＳＲは、１番地の「Ｘ」を読み出し、「Ｘ」に第１の秘密番号「ｙｙｙ」を乗算した値「Ｙ」を２番地に格納し、２番地の値「Ｙ」に第２の秘密番号「ｚｚｚ」を乗算した値「Ｘｃｕｌ」を３番地に格納する。
【０１７３】
セキュアモジュール１０２は、定期的に３番地の値を参照し、３番地の値「Ｘｃｕｌ」を読み出し、正規の値「Ｘａｎｓ」と比較する。セキュアモジュール１０２は、１番地に「Ｘ」を格納してから所定時間以内に「Ｘｃｕｌ」と「Ｘａｎｓ」が一致した場合は、サブルーチンＳＲが正規プログラムであると判断する。セキュアモジュール１０２は、所定時間以内に「Ｘｃｕｌ」と「Ｘａｎｓ」が一致しなかった場合は、サブルーチンＳＲが不正プログラムであると判断する。
【０１７４】
これにより、サブルーチンＳＲが、クラッカー１０５により改ざんされた不正プログラムであるか否かを判断することができる。そして、不正プログラムである場合は、セキュアモジュール１０２は、不正プログラムの実行を中断させたり、セキュアモジュール１０２の暗号化機能や復号機能を不能に設定したりすることにより、不正プログラムの被害を防ぐことができる。
【０１７５】
（セキュアモジュール１０２による認証処理）
次に、図２３を用いて、図２２に示したセキュアモジュール１０２が認証プログラムを用いておこなう認証処理について説明する。
【０１７６】
図２３は、セキュアモジュール１０２による認証処理の詳細を示すフローチャートである。まず、セキュアモジュール１０２は、時間計測を開始する（ステップＳ２３０１）。次に、セキュアモジュール１０２は、ランダムに生成した値「Ｘ」を所定の第１のメモリ番地に格納する（ステップＳ２３０２）。そして、セキュアモジュール１０２は、「Ｘ」から認証サブプログラムによって算出されるべき正規の値「Ｘａｎｓ」を算出する（ステップＳ２３０３）。
【０１７７】
次に、セキュアモジュール１０２は、所定の第２のメモリ番地を読み出す（ステップＳ２３０４）。セキュアモジュール１０２は、読み出した値が「Ｘａｎｓ」と一致するか判定する（ステップＳ２３０５）。「Ｘａｎｓ」と一致する場合（ステップＳ２３０５：Ｙｅｓ）、セキュアモジュール１０２は、サブルーチンＳＲを正規プログラムと判断して（ステップＳ２３０６）、認証処理を終了する。
【０１７８】
一方、「Ｘａｎｓ」と一致しない場合（ステップＳ２３０５：Ｎｏ）、セキュアモジュール１０２は、ステップＳ２３０１の時間計測の開始から一定時間が経過したか判定する（ステップＳ２３０７）。一定時間が経過していない場合（ステップＳ２３０７：Ｎｏ）、ステップＳ２３０４に戻る。
【０１７９】
一方、一定時間が経過した場合（ステップＳ２３０７：Ｙｅｓ）、セキュアモジュール１０２は、サブルーチンＳＲを不正プログラムと判断して（ステップＳ２３０８）、認証処理を終了する。なお、この認証処理（認証サブプログラム）の内容は、毎回違う内容になるように加工してもよい。この加工処理を暗号化サブルーチンＳＲを読み込む都度実行すれば、その都度、サブルーチンＳＲの中の認証サブプログラムが変更されることとなる。したがって、クラッカーから見ると認証処理（認証サブプログラム）の解析と成りすましを困難にすることができる。
【０１８０】
（セキュアモジュール１０２の暗号化許可処理）
次に、図２４を用いて、図２３に示した認証処理において、サブルーチンＳＲが不正プログラムと判断された場合に不正プログラムの被害を防ぐために、セキュアモジュール１０２の機能を不能に設定する処理の一例について説明する。
【０１８１】
図２４は、セキュアモジュール１０２による暗号化許可処理の詳細を示すフローチャートである。まず、セキュアモジュール１０２は、サブルーチンＳＲが改ざんされているか否かを判断する（ステップＳ２４０１）。
【０１８２】
改ざんされていない場合（ステップＳ２４０１：Ｎｏ）、セキュアモジュール１０２は、サブルーチンＳＲから処理要求を受信したか否か判断する（ステップＳ２４０２）。
【０１８３】
処理要求を受信した場合（ステップＳ２４０２：Ｙｅｓ）、セキュアモジュール１０２は、サブルーチンＳＲからの処理要求にしたがって処理をおこない（ステップＳ２４０３）、ステップＳ２４０１に戻る。また、処理要求を受信していない場合（ステップＳ２４０２：Ｎｏ）、ステップＳ２４０１に戻る。
【０１８４】
一方、改ざんされている場合（ステップＳ２４０１：Ｙｅｓ）、セキュアモジュール１０２は、「エラーモード」に移行して（ステップＳ２４０４）、暗号化許可処理を終了する。「エラーモード」では、セキュアモジュール１０２は、サブルーチンＳＲを再起動しない限り、サブルーチンＳＲからの操作（暗号化依頼や復号依頼など）を受け付けない状態となる。
【０１８５】
これにより、不正プログラムが、セキュアモジュール１０２内の秘匿情報（暗号鍵）を要求したり、セキュアモジュール１０２の機能を利用したりすることを防止する。そのため、不正プログラムによる情報処理装置１０１のユーザへの被害を防止できる。
【０１８６】
以上説明したように、情報処理装置１０１は、安全性が担保されていないメインメモリ１０３に書き出されるプログラムを、信頼性が担保されたセキュアモジュール１０２で暗号化してから、メインメモリ１０３に書き出す。そして、情報処理装置１０１は、暗号化されたプログラムを、プログラムの実行時に復号して実行する。これにより、情報処理装置１０１は、暗号化されていない状態のプログラムがメインメモリ１０３に存在する時間を少なくして、クラッカー１０５によるプログラムの解析および改ざんを防止する。
【０１８７】
また、情報処理装置１０１は、暗号化をおこなうごとに異なる暗号化方法を使用することにより、クラッカー１０５によるプログラムの解析を困難にして、不正プログラムの開発を防止することができる。
【０１８８】
また、情報処理装置１０１は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する。これにより、暗号化されたプログラムの実行時に、暗号化されたプログラムの復号にかかる時間を短くすることができる。そのため、復号によるプログラムの実行の遅延を少なくすることができる。
【０１８９】
また、情報処理装置１０１は、暗号化の際に、プログラムに認証サブプログラムを挿入しておく。これにより、認証サブプログラムの演算結果の正当性から、プログラムの改ざんを検出できる。
【０１９０】
そして、情報処理装置１０１は、改ざんがあった場合に、暗号化されたプログラムの復号が不可能な状態にセキュアモジュール１０２を設定したり、情報処理装置１０１のユーザに判定結果を通知したりする。これにより、不正プログラムによる被害を防止することができる。
【０１９１】
また、復号手段をセキュアモジュール１０２が備えるようにすれば、暗号鍵や、暗号化方法が秘匿され、プログラムの安全性を高めることができる。一方、セキュアモジュール１０２が暗号鍵をセキュアに管理し、復号手段は情報処理装置１０１が備えるようにすれば、セキュアモジュール１０２の機能を削減することができ、セキュアモジュール１０２が安価に作成できるようになる。
【０１９２】
また、情報処理装置１０１は、プログラムが実行待ち状態になるまでは、ＨＤＤ１０４に暗号強度の高い暗号化方式により暗号化して保持しておくため、プログラムの安全性を担保できる。
【０１９３】
また、情報処理装置１０１は、プログラムを、上述した「難読化」、「暗号化」、「シャッフリング」により加工することで、クラッカー１０５によるプログラムの解析を困難にし、不正プログラムの開発を防止できる。
【０１９４】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１９５】
（付記１）１または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置であって、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出する第１の検出手段と、
内部に格納された情報を外部から参照ができない構造であって、前記第１の検出手段によって実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出すセキュアモジュールと、
前記いずれかのプログラムの実行要求を検出する第２の検出手段と、
前記第２の検出手段によって前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出す復号手段と、
前記復号手段によって復号された前記いずれかのプログラムを実行する実行手段と、
を備えることを特徴とする情報処理装置。
【０１９６】
（付記２）前記セキュアモジュールは、
暗号化をおこなうごとに異なる暗号化方法を使用することを特徴とする付記１に記載の情報処理装置。
【０１９７】
（付記３）前記セキュアモジュールは、
暗号化をおこなうごとに異なるデータを暗号鍵に用いて暗号化することを特徴とする付記２に記載の情報処理装置。
【０１９８】
（付記４）前記セキュアモジュールが使用する暗号化方法は、暗号鍵となるデータと、暗号化されるプログラムと、の排他的論理和により暗号化する方法であることを特徴とする付記１〜３のいずれか一つに記載の情報処理装置。
【０１９９】
（付記５）前記セキュアモジュールは、
暗号化に先だって、所定の演算をおこない演算結果を前記記憶領域の特定の領域に書き出す演算プログラムを、前記いずれかのプログラムに挿入する挿入手段と、
前記実行手段による前記いずれかのプログラムの実行に伴って、前記演算プログラムにより書き出される演算結果と、前記セキュアモジュールで前記所定の演算をおこなって得られた演算結果と、が一致しない場合、前記いずれかのプログラムに改ざんがあると判定する判定手段と、
前記判定手段によって改ざんがあると判定された場合、判定結果を出力する出力手段と、
を備えることを特徴とする付記１〜４のいずれか一つに記載の情報処理装置。
【０２００】
（付記６）前記判定手段によって改ざんがあると判定された場合、前記復号手段を復号不能な状態に設定する設定手段を備えることを特徴とする付記５に記載の情報処理装置。
【０２０１】
（付記７）前記実行手段による実行が終了した前記いずれかのプログラムを前記記憶領域から削除する削除手段を備えることを特徴とする付記１〜６のいずれか一つに記載の情報処理装置。
【０２０２】
（付記８）前記復号手段は、
前記セキュアモジュール外に存在し、前記セキュアモジュールから提供される前記セキュアモジュールが前記いずれかのプログラムの暗号化に使用した暗号鍵を用いて、前記いずれかのプログラムを復号することを特徴とする付記１〜７のいずれか一つに記載の情報処理装置。
【０２０３】
（付記９）前記復号手段は、
前記セキュアモジュール内に存在することを特徴とする付記１〜７のいずれか一つに記載の情報処理装置。
【０２０４】
（付記１０）前記プログラム群を暗号化した暗号化プログラム群を保持する記憶手段を備え、
前記セキュアモジュールは、
前記プログラム群を呼び出すプログラムが起動された場合、前記暗号化プログラム群を復号し、前記暗号化プログラム群の暗号化に使用されている第１の暗号化方法とは異なる第２の暗号化方法により、復号された前記プログラム群を暗号化して前記記憶領域に書き出すことを特徴とする付記１〜９のいずれか一つに記載の情報処理装置。
【０２０５】
（付記１１）前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの命令を難読化することを特徴とする付記１〜１０のいずれか一つに記載の情報処理装置。
【０２０６】
（付記１２）前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令と当該ジャンプ命令のアドレスとの組み合わせを特定するテーブルを記憶し、シャッフリング後の前記プログラム群のプログラムにおける前記ジャンプ命令の内容を前記テーブルのリード命令に変更することを特徴とする付記１〜１０のいずれか一つに記載の情報処理装置。
【０２０７】
（付記１３）前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令およびジャンプ元命令と当該ジャンプ元命令のアドレスとの組み合わせを特定するテーブルを記憶し、シャッフリング後の前記プログラム群のプログラムにおける前記ジャンプ元命令の内容を前記テーブルのリード命令に変更することを特徴とする付記１〜１０のいずれか一つに記載の情報処理装置。
【０２０８】
（付記１４）前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの任意の命令を、当該命令を暗号化した暗号化命令と、前記セキュアモジュールに対するリード命令と、前記暗号化命令を復号する復号命令とに置換し、前記リード命令のアドレスと前記暗号化命令を復号する復号鍵との組み合わせを特定するテーブルを記憶することを特徴とする付記１〜１０のいずれか一つに記載の情報処理装置。
【０２０９】
（付記１５）前記セキュアモジュールは、
暗号化に先だって、前記いずれかのプログラムの任意の命令を前記セキュアモジュールに対するリード命令に置換し、当該リード命令のアドレスと置換元の命令との組み合わせを特定するテーブルを記憶することを特徴とする付記１〜１０のいずれか一つに記載の情報処理装置。
【０２１０】
（付記１６）第１の記憶領域と１または複数のプログラムからなるプログラム群をセキュアに記憶する第２の記憶領域とを有し前記第１の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第１の記憶領域に書き出す復号手段と、
を備えることを特徴とするセキュアモジュール。
【０２１１】
（付記１７）第１の記憶領域と１または複数のプログラムからなるプログラム群をセキュアに記憶する第２の記憶領域とを有し前記第１の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールであって、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出す暗号化手段と、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する送信手段と、
を備えることを特徴とするセキュアモジュール。
【０２１２】
（付記１８）内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、１または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置が、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行する、
ことを特徴とする情報処理方法。
【０２１３】
（付記１９）第１の記憶領域と１または複数のプログラムからなるプログラム群をセキュアに記憶する第２の記憶領域とを有し前記第１の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第１の記憶領域に書き出す、
ことを特徴とする情報処理方法。
【０２１４】
（付記２０）第１の記憶領域と１または複数のプログラムからなるプログラム群をセキュアに記憶する第２の記憶領域とを有し前記第１の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールが、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する、
ことを特徴とする情報処理方法。
【０２１５】
（付記２１）内部に格納された情報を外部から参照ができない構造のセキュアモジュールを備え、１または複数のプログラムからなるプログラム群をセキュアに記憶する情報処理装置に、
前記プログラム群のいずれかのプログラムの実行待ち状態を検出し、
実行待ち状態が検出された場合、前記セキュアモジュールにより、前記いずれかのプログラムを暗号化して、前記プログラム群とは異なる記憶領域に書き出し、
前記いずれかのプログラムの実行要求を検出し、
前記いずれかのプログラムの実行要求が検出された場合、前記セキュアモジュールによって暗号化された前記いずれかのプログラムを復号して前記記憶領域に書き出し、
復号された前記いずれかのプログラムを実行する、
処理を実行させることを特徴とする情報処理プログラム。
【０２１６】
（付記２２）第１の記憶領域と１または複数のプログラムからなるプログラム群をセキュアに記憶する第２の記憶領域とを有し前記第１の記憶領域内のプログラムを実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号して前記第１の記憶領域に書き出す、
処理を実行させることを特徴とする情報処理プログラム。
【０２１７】
（付記２３）第１の記憶領域と１または複数のプログラムからなるプログラム群をセキュアに記憶する第２の記憶領域とを有し前記第１の記憶領域内の暗号化されたプログラムを復号した上で実行する情報処理装置内に設けられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュール内のプロセッサに、
前記プログラム群のいずれかのプログラムの実行待ち状態が検出された場合、前記いずれかのプログラムを暗号化して、前記第１の記憶領域に書き出し、
前記いずれかのプログラムの実行要求が検出された場合、暗号化された前記いずれかのプログラムを復号する鍵を前記情報処理装置に送信する、
処理を実行させることを特徴とする情報処理プログラム。
【符号の説明】
【０２１８】
１０１  情報処理装置
１０２  セキュアモジュール
１０３  メインメモリ
１０４  ＨＤＤ
ＭＰ  メインプログラム
ＳＲ  サブルーチン
Ｃ−ＳＲ，Ｓ−ＳＲ  暗号化サブルーチン
ＰＰ  加工プログラム
【図１】
0005775738.tif 000002
【図２】
0005775738.tif 000003
【図３】
0005775738.tif 000004
【図４】
0005775738.tif 000005
【図５】
0005775738.tif 000006
【図６】
0005775738.tif 000007
【図７】
0005775738.tif 000008
【図８】
0005775738.tif 000009
【図９】
0005775738.tif 000010
【図１０】
0005775738.tif 000011
【図１１】
0005775738.tif 000012
【図１２】
0005775738.tif 000013
【図１３】
0005775738.tif 000014
【図１４】
0005775738.tif 000015
【図１５】
0005775738.tif 000016
【図１６】
0005775738.tif 000017
【図１７】
0005775738.tif 000018
【図１８】
0005775738.tif 000019
【図１９】
0005775738.tif 000020
【図２０】
0005775738.tif 000021
【図２１】
0005775738.tif 000022
【図２２】
0005775738.tif 000023
【図２３】
0005775738.tif 000024
【図２４】
0005775738.tif 000025