(57)【特許請求の範囲】
【請求項１】
対象プログラムに固有なコードをセキュアモジュール内に記憶する記憶手段と、
前記対象プログラムに固有なコードを生成するスキャン処理を接続先装置で実行させるスキャンプログラムを前記セキュアモジュール内に生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容を前記セキュアモジュール内でランダムに更新し、更新した前記スキャンプログラムで、前記対象プログラムをスキャンした結果で、記憶した前記固有なコードを更新する更新処理とを実行する生成手段と、
更新した前記スキャンプログラムを、前記対象プログラムが記憶されている特定の記憶領域以外の前記接続先装置の記憶領域に記憶し、前記接続先装置内の前記特定の記憶領域に記憶されている前記対象プログラムに対し記憶された前記スキャンプログラムが前記接続先装置で実行された場合、前記接続先装置での前記スキャンプログラムの実行結果と更新した前記固有なコードとに基づいて、前記特定の記憶領域に記憶されている前記対象プログラムの正当性を認証する認証手段と、
を備えることを特徴とするセキュアモジュール。
【請求項２】
前記セキュアモジュールは、内部に格納された情報を外部から参照できない構造であることを特徴とする請求項１に記載のセキュアモジュール。
【請求項３】
前記生成手段は、前記更新処理を定期的に実行することを特徴とする請求項１または２に記載のセキュアモジュール。
【請求項４】
前記生成手段は、前記更新処理を不定期に実行することを特徴とする請求項１または２に記載のセキュアモジュール。
【請求項５】
前記生成手段は、前記更新処理として、前記スキャンプログラムの命令を難読化することを特徴とする請求項１〜４のいずれか一つに記載のセキュアモジュール。
【請求項６】
前記生成手段は、前記更新処理として、前記スキャンプログラムで指定された前記特定の記憶領域内のスキャン先アドレスを変更することを特徴とする請求項１〜４のいずれか一つに記載のセキュアモジュール。
【請求項７】
前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令群においてそれぞれ指定された前記特定の記憶領域内のスキャン先アドレスの順序を変更することを特徴とする請求項１〜４のいずれか一つに記載のセキュアモジュール。
【請求項８】
前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令で指定されたデータに基づく演算命令の内容を変更して、変更後の演算命令による演算結果を前記記憶手段に記憶しておき、前記変更後の演算命令による演算結果を前記セキュアモジュールに返す命令を追加することを特徴とする請求項１〜４のいずれか一つに記載のセキュアモジュール。
【請求項９】
前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令を、前記スキャンプログラムの前記接続先装置での格納先アドレスに依存した命令に変更することを特徴とする請求項１〜４のいずれか一つに記載のセキュアモジュール。
【請求項１０】
プロセッサと、
メモリと、
セキュアモジュールと、を備え、
前記セキュアモジュールは、
対象プログラムに固有なコードを前記セキュアモジュール内に記憶する記憶手段と、
前記対象プログラムに固有なコードを生成するスキャン処理を前記プロセッサで実行させるスキャンプログラムを前記セキュアモジュール内に生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容を前記セキュアモジュール内でランダムに更新し、更新した前記スキャンプログラムで、前記対象プログラムをスキャンした結果で、記憶した前記固有なコードを更新する更新処理とを実行する生成手段と、
更新した前記スキャンプログラムを、前記対象プログラムが記憶されている特定の記憶領域以外の前記メモリに記憶し、前記メモリ内の前記特定の記憶領域に記憶されている前記対象プログラムに対し記憶された前記スキャンプログラムが実行された場合、前記スキャンプログラムの実行結果と更新した前記固有なコードとに基づいて、前記特定の記憶領域に記憶されている前記対象プログラムの正当性を認証する認証手段と、
を備えることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報を保護するセキュアモジュールおよび情報処理装置に関する。
【背景技術】
【０００２】
近年、ブロードバンドインターネットやディジタル放送が普及しつつあり、配信されたコンテンツ（主にディジタルＡＶ（Ａｕｄｉｏ  Ｖｉｓｕａｌ）コンテンツ）の安全性を保障する権利保護技術がクローズアップされている。この中でも特にＰＣ（パーソナルコンピュータ）はオープンアーキテクチャーである。したがって、ＡＶコンテンツを処理するメモリ上のプログラム（ソフトウェア）は、誰もが覗き見し、解析し、書き換えることが可能な空間に存在するため、安全性の実現は困難とされている。
【０００３】
すなわち、ＡＶコンテンツは、インターネット上あるいは放送ネットワーク上に存在する時は、暗号化されているので安全だが、それをＰＣで受信し処理する際はコンテンツを復号する必要があり、復号したコンテンツを違法コピーされる可能性がある。ＰＣのメモリ上のプログラムは、誰でも覗き見し、書き換えることが可能なので、当該プログラムを解析し、復号されたＡＶコンテンツを無断でハードディスクなどに書き込むように改造することが原理的に可能である。
【０００４】
一方で、ＰＣは、ブロードバンドインターネットの主要な出入り口であり、そこで安全性を保証できれば、インターネット全体でのディジタルＡＶコンテンツの配信が可能になり意義は大きい。
【０００５】
従来は、ＰＣでのプログラムの保護は、安全性を保障するアルゴリズムの秘匿化、さらにアルゴリズムの解析を困難にする難読化（プログラムを限りなく複雑にし、プログラムの違法書換えの第一ステップであるプログラム解析を限りなく困難にする）が主流であった。
【０００６】
しかしプログラムは一旦、ＰＣのメインメモリ上に展開してしまえば、先ほど述べたように覗き見可能な空間のためコピーすることは容易であり、コピーした結果を時間かけて解析することで、権利保護アルゴリズムを解析できる。非常に安全性に不安のある権利保護システムと考えられ、放送等公共性の高いシステムで一度解析されたことによる被害を考えると採用は困難である。
【０００７】
また、近年、安全性の保証されたセキュアモジュール（耐タンパモジュール）を信頼性拠点として、セキュアモジュールがＰＣのメモリ領域に展開されたプログラムの改ざん（違法な書換え）ができないようにプログラムをリアルタイムにスキャンし、プログラムが書き換えられないようにすることでプログラムの安全性を担保する手法も考えられている（たとえば、下記特許文献１、２を参照。）。
【０００８】
この信頼性拠点が安全性の保証されたセキュアモジュール（耐タンパモジュール、基本的にハードウェア）であり、このハードウェアを無効化することが非常に困難なため、安全性は格段に向上する。なお、上述した特許文献１では、セキュアモジュールがプログラムをリアルタイム・スキャンする場合、「スキャン機能の無効化」を阻止するため、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）を用いたＤＭＡスキャンと呼ばれるハードウェアスキャンが用いられている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００４−１２９２２７号公報
【特許文献２】特開２００３−１９８５２７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上述したハードウェアスキャンは、それが適用可能なシステムでしか適用できない。すなわち、セキュアモジュールとＰＣの接続インターフェースがハードウェアスキャン可能なインターフェースであることが前提となる。具体的には、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）インターフェースやＰＣＩｅ（ＰＣＩ  Ｅｘｐｒｅｓｓ）インターフェースに限定される。
【００１１】
一方で、一般的に、ＰＣとモジュールの間の接続で最も一般的なインターフェースはＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）である。ＵＳＢは、ハードウェアスキャン機能をサポートしていないため、ハードウェアスキャンを適用することができない。
【００１２】
具体的には、ＵＳＢでは、ＰＣ上のＵＳＢ対応ソフトウェア（ドライバなど）にすべての処理を依頼する必要がある。たとえば、ＵＳＢインターフェースを持つモジュールがスキャンを依頼する場合は、ＵＳＢインターフェースを持つモジュールがＰＣ上のＵＳＢ対応のソフトウェアにＰＣのメモリのスキャンを依頼する。つぎに、依頼を受けたＵＳＢ対応ソフトウェアがスキャンを実行する。そして、そのスキャン結果を、ＵＳＢインターフェースを持つモジュールに返すことになる。この際、ＰＣ上のＵＳＢ対応のソフトウェアがクラッカーに違法改ざんされ、スキャン機能が無効化されるおそれがある。
【００１３】
本発明は、上述した従来技術による問題点を解消するため、ハードウェアスキャンに対応しないインターフェースであっても、容易に無効化されないスキャンを実現するセキュアモジュールおよび情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上述した課題を解決し、目的を達成するため、対象プログラムに固有なコードを記憶しておき、前記対象プログラムに固有なコードを生成するスキャン処理を接続先装置で実行させるスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行し、前記接続先装置内の特定の記憶領域に記憶されている前記対象プログラムに対し前記スキャンプログラムが前記接続先装置で実行された場合、前記接続先装置での前記スキャンプログラムの実行結果と記憶された前記コードとに基づいて、前記特定の記憶領域に記憶されている前記対象プログラムの正当性を認証するセキュアモジュールまたは当該セキュアモジュールを備えた情報処理装置が、一例として提供される。
【発明の効果】
【００１５】
本発明にかかるセキュアモジュールおよび情報処理装置によれば、ハードウェアスキャンに対応しないインターフェースであっても、クラッカーに容易に無効化されないスキャンを実現することができるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】情報処理装置のハードウェア構成例を示すブロック図である。
【図２】セキュアモジュールのハードウェア構成例を示すブロック図である。
【図３】情報処理装置での動作概要例を示す説明図である。
【図４】対象プログラムＴＰの実行例を示す説明図である。
【図５】スキャンプログラムの具体例１を示す説明図である。
【図６】スキャンプログラムの具体例２を示す説明図である。
【図７】スキャンプログラムの具体例３を示す説明図である。
【図８】スキャンプログラムの具体例４を示す説明図である。
【図９】スキャンプログラム生成／更新処理の手順を示すフローチャートである。
【図１０】図９に示したスキャンプログラム生成処理（ステップＳ９０３）の詳細な処理手順例を示すフローチャート（前半）である。
【図１１】図９に示したスキャンプログラム生成処理（ステップＳ９０３）の詳細な処理手順例を示すフローチャート（後半）である。
【図１２】スキャンプログラム更新処理（ステップＳ９０８）の詳細な処理手順例を示すフローチャート（その１）である。
【図１３】スキャンプログラム更新処理（ステップＳ９０８）の詳細な処理手順例を示すフローチャート（その２）である。
【図１４】対象プログラムの加工の概要を示す説明図である。
【図１５】加工プログラムによる対象プログラムの加工例１を示す説明図である。
【図１６】加工プログラムによる対象プログラムの加工例２を示す説明図である。
【図１７Ａ】加工プログラムによる対象プログラムの加工例３を示す説明図である。
【図１７Ｂ】加工プログラムによる対象プログラムの加工例４を示す説明図である。
【図１８】対象プログラムＴＰ加工処理の処理手順例を示すフローチャートである。
【図１９】図１８に示したシャッフリング処理（ステップＳ１８１１）の詳細な処理手順例を示すフローチャートである。
【図２０】対象プログラムＴＰの加工例を示す説明図である。
【発明を実施するための形態】
【００１７】
以下に添付図面を参照して、この発明にかかるセキュアモジュールおよび情報処理装置の実施の形態を詳細に説明する。情報処理装置は、たとえば、パーソナル・コンピュータ、据置型ゲーム機、テレビ、ハードディスクレコーダや、携帯型端末（携帯電話機、スマートフォン、携帯ゲーム機、電子辞書、タブレット型端末）などのコンピュータである。
【００１８】
＜ハードウェア構成＞
図１は、情報処理装置のハードウェア構成例を示すブロック図である。情報処理装置１００は、プロセッサ１０１と、ノースブリッジ１０２と、メモリと、ディスプレイ１０５と、サウスブリッジ１０６と、ＨＤＤ１０７と、通信Ｉ／Ｆ１０８と、入力デバイス１０９と、セキュアモジュール１１０と、を備えている。これらハードウェアは、バスによってそれぞれ接続されている。
【００１９】
プロセッサ１０１は、情報処理装置１００内の制御や演算処理をおこなう。ノースブリッジ１０２は、プロセッサ１０１とメモリ（ＲＡＭ１０３、ＲＯＭ１０４）とディスプレイ１０５とサウスブリッジ１０６に接続され、これらの橋渡しをおこなう。ＲＡＭ１０３は、プロセッサ１０１のワークエリアとして使用されるメインメモリである。ＲＯＭ１０４は、プログラムやデータが格納される不揮発性メモリである。ディスプレイ１０５は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。
【００２０】
サウスブリッジ１０６は、ノースブリッジ１０２、ＨＤＤ１０７、通信Ｉ／Ｆ１０８、入力デバイス１０９、セキュアモジュール１１０に接続され、これらの橋渡しをおこなう。ＨＤＤ１０７は、プロセッサ１０１の制御にしたがって内蔵するハードディスクに対するデータのリード／ライトを制御する駆動装置である。
【００２１】
通信Ｉ／Ｆ１０８（インターフェース）は、サウスブリッジ１０６の制御により、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続可能なインターフェースである。また、ディジタル放送波を受信することも可能なインターフェースである。
【００２２】
入力デバイス１０９は、文字、数字、各種指示などの入力する装置である。たとえば、キーボードやマウス、タッチパネルなどが挙げられる。入力デバイス１０９からの入力データは、サウスブリッジ１０６およびノースブリッジ１０２を経由してプロセッサ１０１に送られ、プロセッサ１０１で処理される。
【００２３】
セキュアモジュール１１０は、内部に格納された情報を外部から参照できない構造を有するＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）であり、外部からの覗き見を防止するとともに、内部のデータが改ざんされることを防止するハードウェアである。たとえば、ＴＲＭ（Ｔａｍｐｅｒ  Ｒｅｓｉｓｔａｎｔ  Ｍｏｄｕｌｅ：耐タンパ性）構造が挙げられる。
【００２４】
ＴＲＭ構造は、半導体チップ（この場合、セキュアモジュール１１０）などの内部解析や改ざんを物理的および論理的に防衛するための構造をいう。具体的には、セキュアモジュール１１０においては、内部に強固で粘着力が高いコーティングが施され、その表面が剥がされると内部の回路が完全に破壊されたり、ダミーの配線が配されている。
【００２５】
セキュアモジュール１１０は、ＨＤＤ１０７から監視対象ソフトウェア（以下、「対象プログラム」）を読み出す機能、対象プログラムをスキャンするスキャンプログラムを生成／更新する機能、対象プログラムやスキャンプログラムをＲＡＭ１０３に実装する機能、暗号化機能、復号化機能等を備えている。セキュアモジュール１１０は、サウスブリッジ１０６内のＵＳＢコントローラとＵＳＢバス１１１を介して通信可能に接続されている。セキュアモジュール１１０は、情報処理装置１００に内蔵されていてもよく、外付けとしてもよい。
【００２６】
図２は、セキュアモジュール１１０のハードウェア構成例を示すブロック図である。セキュアモジュール１１０は、プロセッサ２０１、ＵＳＢＩ／Ｆ２０２、暗号化回路２０３、ＲＡＭ２０４、ＲＯＭ２０５、フラッシュメモリ２０６、を備えている。
【００２７】
プロセッサ２０１は、セキュアモジュール１１０内の制御や演算処理をおこなう。ＵＳＢＩ／Ｆ２０２は、ＵＳＢバス１１１を介してサウスブリッジ１０６内のＵＳＢコントローラと接続され、通信をおこなう。暗号化回路２０３は、データやプログラムを暗号化したり、暗号化されたデータやプログラムを復号する。
【００２８】
ＲＡＭ２０４は、プロセッサ２０１のワークエリアとして使用されるメインメモリである。ＲＯＭ２０５は、プログラムやデータが格納される不揮発性メモリである。フラッシュメモリ２０６は、保存したデータやプログラムが書き換え可能な不揮発性メモリである。
【００２９】
＜情報処理装置１００での動作概要＞
つぎに、情報処理装置１００の動作概要について説明する。本実施の形態において、情報処理装置１００上のソフトウェアを書換えから守るセキュアモジュール１１０は、ハードウェアスキャンが不可能なＵＳＢインターフェースで情報処理装置１００に接続されている。このため、セキュアモジュール１１０が普通にＵＳＢインターフェース経由でＵＳＢ対応ソフトウェア（一般にこの種のソフトを「ドライバ」という）にメモリのスキャン対象領域のスキャンを依頼するとＵＳＢ対応ソフトウェア自身がクラッキングされる。
【００３０】
たとえば、情報処理装置１００上のソフトウェアが書き換えられても、さも書き換えられていないような結果を返すようにクラッキングされる。これにより、スキャン機能が有効に働かない可能性がある。したがって、本実施の形態では、以下のような処理を実行する。
【００３１】
図３は、情報処理装置１００での動作概要例を示す説明図である。本実施の形態では、まず、（１）セキュアモジュール１１０は、ＨＤＤ１０７内に記憶されている暗号化された対象プログラム（以下、「暗号化対象プログラムＥ（ＴＰ）」）を取得して、セキュアモジュール１１０内の暗号化回路２０３で対象プログラムＴＰに復号する。そして、セキュアモジュール１１０は、ＲＡＭ１０３のスキャン対象領域１３０に、復号された対象プログラムＴＰを書き出す。対象プログラムＴＰはセキュアモジュール１１０内でも保持しておく。
【００３２】
なお、ＨＤＤ１０７内に記憶されているプログラムが暗号化されていない場合は、セキュアモジュール１１０では復号することなく、ＲＡＭ１０３のスキャン対象領域１３０に、取得した対象プログラムＴＰを書き出す。
【００３３】
また、セキュアモジュール１１０は、加工プログラムＰＰにより対象プログラムＴＰを加工してもよい。加工内容の詳細は後述するが、対象プログラムＴＰの働きは同じだが、処理内容や処理手順は異なるように加工する。また、この加工により、対象プログラムＴＰの一部となるプログラム片をセキュアモジュール１１０内に保持しておき、情報処理装置１００での対象プログラムＴＰの実行の際に、セキュアモジュール１１０内のプログラム片を参照しないと、対象プログラムＴＰの実行を継続できないようにする。
【００３４】
（２）セキュアモジュール１１０は、定期的にまたは不定期に、スキャンプログラムＳＰをランダムに自動生成／更新する生成プログラムＧＰを実行する。具体的には、対象プログラムＴＰをスキャンするという機能は変わらないが、処理内容が毎回異なるスキャンプログラムＳＰをランダム自動生成する。
【００３５】
この自動生成は、たとえば、数［ｍｓｅｃ］〜数分間隔で定期的に実行してもよく、ランダムな間隔で不定期に実行してもよい。いずれにしても、クラッカーが改ざんに要する時間よりも短い間隔となるよう設定しておけばよい。
【００３６】
生成プログラムＧＰによりランダムに変化させるのは、たとえば、スキャン対象領域１３０、スキャン対象アドレスの順序、スキャン結果演算、演算したスキャン結果をセキュアモジュール１１０に戻す演算処理、スキャンプログラムＳＰコード、情報処理装置１００のメモリ上の位置などが挙げられる。この生成プログラムＧＰによるスキャンプログラムＳＰのランダム生成／更新処理は、セキュアモジュール１１０内で実行されるため、生成過程を覗き見されたり、解析されたり、その結果無効化されることはない。
【００３７】
なお、生成プログラムＧＰによりスキャンプログラムＳＰが生成／更新された場合、セキュアモジュール１１０でも対象プログラムＴＰを最新のスキャンプログラムＳＰでスキャンし、スキャン結果Ｒ１を更新しておく。スキャン結果Ｒ１はＲＡＭ２０４またはフラッシュメモリ２０６に記憶しておく。スキャン結果Ｒ１は、対象プログラムＴＰに固有のコードである。
【００３８】
（３）スキャンプログラムＳＰは、プロセッサ１０１に、ドライバ１３１にＲＡＭ１０３上の非スキャン対象領域への配置を依頼させる。これにより、ドライバ１３１は、プロセッサ１０１に、セキュアモジュール１１０から送られてきたスキャンプログラムＳＰをＲＡＭ１０３の非スキャン対象領域に格納させる。
【００３９】
（４）ＲＡＭ１０３に格納されたスキャンプログラムＳＰは、プロセッサ１０１に、スキャン対象領域１３０内の対象プログラムＴＰをスキャンさせる。スキャン結果Ｒ２は、ドライバ１３１を介してセキュアモジュール１１０に通知される。
【００４０】
（５）セキュアモジュール１１０はドライバ１３１から送られてくるスキャン結果Ｒ２を受け取る。スキャン結果Ｒ２を受け取ると、認証プログラムＡＰは、プロセッサ２０１に、セキュアモジュール１１０で保持しておいたスキャン結果Ｒ１と送られてきたスキャン結果Ｒ２を比較して一致判定を実行させる。
【００４１】
一致していれば、対象プログラムＴＰが改ざんされていないこととなる。一方、対象プログラムＴＰが書き換えられていれば、セキュアモジュール１１０は、対象プログラムＴＰの実行停止指示をプロセッサ１０１に通知する。これにより、プロセッサ１０１は当該通知を受けると対象プログラムＴＰの実行を停止する。
【００４２】
また、一定期間が経過してもドライバ１３１からスキャン結果Ｒ２を受け取れなかった場合も、対象プログラムＴＰの実行停止指示をプロセッサ１０１に通知する。
【００４３】
（６）セキュアモジュール１１０は、対象プログラムＴＰの動作が停止するまでは、上記（２）〜（５）を繰り返す。
【００４４】
このように、定期的または不定期にセキュアモジュール１１０によってランダムに生成／更新されたスキャンプログラムＳＰが動作するため、たとえスキャンプログラムＳＰが誰もが覗き見や書換えが可能な情報処理装置１００のメモリ空間に存在してもクラッカーにクラッキングされることはない。
【００４５】
すなわち、クラッカーがスキャンプログラムＳＰを覗き見し、解析し、偽スキャンプログラムに書き換えるには、一定の時間が必要である。しかし、セキュアモジュール１１０が不定期或いは定期的にスキャンプログラムをランダムに毎回違う形にするため、クラッカーは、解析し、偽スキャンプログラムに書き換える時間が得られない。
【００４６】
図４は、対象プログラムＴＰの実行例を示す説明図である。ＲＡＭ１０３のスキャン対象領域１３０には、対象プログラムＴＰとして、コンテンツ鍵復号プログラム４０１とコンテンツ復号プログラム４０２とコンテンツ処理プログラム４０３が実装されている。インターネットなどのネットワーク経由で、放送波で、またはＨＤＤ１０７から、暗号化されたコンテンツ（以下、「暗号化コンテンツＥ（４１２）」）や暗号化されたコンテンツ鍵（以下、「暗号化コンテンツ鍵Ｅ（４１１）」）が情報処理装置１００に取得されると、暗号化コンテンツ鍵Ｅ（４１１）がコンテンツ鍵復号プログラム４０１により復号される。
【００４７】
そして、コンテンツ復号プログラム４０２は、暗号化コンテンツＥ（４１２）を、復号されたコンテンツ鍵４１１を用いて復号する。復号されたコンテンツ４１２は、コンテンツ処理プログラム４０３により所定の処理（たとえば、ＭＰＥＧ伸張処理）が実行されて、当該処理後のコンテンツがディスプレイ１０５に表示される。
【００４８】
＜スキャンプログラムＳＰの具体例＞
図５〜図８は、スキャンプログラムＳＰの具体例を示す説明図である。なお、図５〜図８では、わかりやすさを考慮して単純なスキャンプログラムＳＰを例示している。なお、図５〜図８において、「○○番地」と記述されている番地は、スキャン対象領域１３０に対応する論理アドレスである。
【００４９】
図５は、対象プログラムＴＰのスキャンを実行するスキャンプログラムＳＰを示している。たとえば、１１番地に「１」、１２番地に「２」、１３番地に「３」、１４番地に「４」、１５番地に「５」が記憶されているとすると、アドレス１〜５のステップでは、１００１番地〜１００５番地に書き出す。そして、アドレス６のステップですべて加算して、アドレス７のステップで加算結果「１５」を１０１０番地に書き込む。
【００５０】
アドレス８のステップで１０１０番地の内容「１５」に「＋８０」して、さらに「＊５」するため、（１５＋８０）×５＝４７５を得る。アドレス９のステップで、アドレス８の計算結果「４７５」を１０１１番地に書き込み、アドレス１０のステップで１０１１番地の内容「４７５」をセキュアモジュール１１０に通知する。
【００５１】
セキュアモジュール１１０でも、事前のスキャンによりスキャン結果を保持している。そして、通知されてきたスキャン結果と一致すれば、改ざんされていないこととなる。一方、不一致であれば、改ざんされていることとなり、対象プログラムＴＰの実行を停止する。
【００５２】
図６は、図５に示したスキャンプログラムＳＰにおいて、アドレス１〜５の読込先となるスキャン対象アドレスを、１１番地〜１５番地から２１番地〜２５番地に変更した例である。図６では、２１番地〜２５番地の値を読み込むため、セキュアモジュール１１０に通知するスキャン結果が図５の場合と異なることとなる。
【００５３】
図７は、図５に示したスキャンプログラムＳＰにおいて、スキャン対象アドレスの順序変更および順序変更に依存した演算に変更した例を示している。具体的には、スキャンプログラムＳＰは、アドレス１〜５でのスキャン対象アドレスの順序が変更されている。この順序変更だけでは、スキャン結果は図５と変わらないため、アドレス６のステップの演算もランダムに書き換えている。これにより、セキュアモジュール１１０に通知されるスキャン結果は図５のスキャン結果と異なる値となる。
【００５４】
図８は、図７に示したスキャンプログラムＳＰにおいて、スキャンプログラムＳＰが特定の記憶領域に保持されていないと、スキャンが実行されない例を示している。この場合、セキュアモジュール１１０でも、スキャンプログラムＳＰが保持されるアドレスが特定済みである。
【００５５】
具体的には、アドレス１〜５のステップにおいて、読込先のスキャン対象アドレスの値に、スキャンプログラムＳＰが保持されているアドレス（たとえば、先頭の番地）を加算することとしている。この場合、セキュアモジュール１１０に保持されている図８のスキャンプログラムＳＰのスキャン結果Ｒ１と、情報処理装置１００のプロセッサ１０１で実行されたスキャンプログラムＳＰのスキャン結果Ｒ２が一致すれば、対象プログラムＴＰが改ざんされておらず、かつ、スキャンプログラムＳＰが特定の位置に配置されていることが確認できる。
【００５６】
逆に、不一致の場合は、スキャンプログラムＳＰが意図的に他の位置に保持されている可能性があるため、そのような場合はスキャン結果の不一致により、対象プログラムＴＰが停止する。
【００５７】
このように、スキャンプログラムＳＰの存在するメモリ番地が違えば、スキャン結果が変わってしまうこととなり、スキャンプログラムＳＰを想定と違うメモリ番地に書き込んで動作解析するようなクラッキングが困難になる。
【００５８】
＜スキャンプログラム生成／更新処理＞
図９は、スキャンプログラム生成／更新処理の手順を示すフローチャートである。スキャンプログラム生成／更新処理は、セキュアモジュール１１０のプロセッサ１０１が生成プログラムＧＰを実行するときの処理である。
【００５９】
まず、セキュアモジュール１１０は、所定時間経過するまで待ち受ける（ステップＳ９０１：Ｎｏ）。たとえば、すでに、対象プログラムＴＰがＲＡＭ１０３のスキャン対象領域１３０に書き込まれて実行開始したのをトリガにして、所定時間の計時を開始する。所定時間は、上述したように、数［ｍｓｅｃ］〜数分間隔とする。なお、数［ｍｓｅｃ］〜数分間隔の範囲内でランダムに設定してもよい。
【００６０】
所定時間が経過した場合（ステップＳ９０１：Ｙｅｓ）、セキュアモジュール１１０は、すでにスキャンプログラムＳＰが生成済みであるか否かを判断する（ステップＳ９０２）。生成済みでない場合（ステップＳ９０２：Ｎｏ）、セキュアモジュール１１０は、スキャンプログラム生成処理（図１０〜図１１）を実行し（ステップＳ９０３）、生成されたスキャンプログラムＳＰをＲＡＭ１０３の非スキャン対象領域に書き込む（ステップＳ９０４）。
【００６１】
このあと、生成されたスキャンプログラムＳＰで対象プログラムＴＰをスキャンし、スキャン結果をセキュアモジュール１１０内（たとえば、ＲＡＭ２０４やフラッシュメモリ２０６）に保持しておく（ステップＳ９０５）。そして、ステップＳ９０１に戻る。
【００６２】
また、ステップＳ９０２において、スキャンプログラムＳＰが生成済みである場合（ステップＳ９０２：Ｙｅｓ）、セキュアモジュール１１０は、スキャンプログラムＳＰを新規生成するか生成済みのスキャンプログラムＳＰを更新するかを決定する（ステップＳ９０６）。そして、新規生成である場合（ステップＳ９０７：新規生成）、ステップＳ９０３に移行する。一方、更新である場合（ステップＳ９０７：更新）、スキャンプログラム更新処理（図１２〜図１３）を実行し（ステップＳ９０８）、更新されたスキャンプログラムＳＰをＲＡＭ１０３の非スキャン対象領域に書き込む（ステップＳ９０４）。
【００６３】
このあと、更新されたスキャンプログラムＳＰで対象プログラムＴＰをスキャンし、スキャン結果をセキュアモジュール１１０内（たとえば、ＲＡＭ２０４やフラッシュメモリ２０６）に保持しておく（ステップＳ９０５）。そして、ステップＳ９０１に戻る。
【００６４】
なお、起動の契機となった対象プログラムＴＰが終了等により、スキャン対象領域１３０から消去されると、セキュアモジュール１１０は、スキャンプログラム生成／更新処理を終了する。
【００６５】
＜スキャンプログラム生成処理＞
図１０は、図９に示したスキャンプログラム生成処理（ステップＳ９０３）の詳細な処理手順例を示すフローチャート（前半）である。まず、セキュアモジュール１１０は、セキュアモジュール１１０外のＲＡＭ１０３のスキャン対象領域１３０［Ａｓ，Ａｅ］および書込先領域［Ｂｓ，Ｂｅ］を設定する（ステップＳ１００１）。なお、ここで設定するスキャン対象領域１３０［Ａｓ，Ａｅ］は、対象プログラムＴＰと同じサイズでもよく、対象プログラムＴＰの一部と同じサイズでもよい。
【００６６】
また、スキャン対象領域１３０［Ａｓ，Ａｅ］が対象プログラムＴＰの一部と同じサイズとする場合、スキャンプログラム生成処理を実行する都度、スキャン対象領域１３０［Ａｓ，Ａｅ］を異なる範囲とする。たとえば、スキャンプログラム生成処理を実行する都度、スキャン対象領域１３０［Ａｓ，Ａｅ］をシフトしていく。
【００６７】
セキュアモジュール１１０は、スキャン対象領域１３０よりも大きいメモリ領域［Ｍｓ，Ｍｅ］（以下、「モジュール内設定領域」）をセキュアモジュール１１０内のＲＡＭ２０４（またはフラッシュメモリ２０６）に設定する（ステップＳ１００２）。また、セキュアモジュール１１０は、各種変数の初期値を設定する（ステップＳ１００３）。ｉは初期値を１とする変数である。Ａｉは、スキャン対象領域１３０の任意のアドレスを示し、初期値は、先頭アドレスＡｓとする。Ｂｉは、書込先領域の任意のアドレスを示し、初期値は、先頭アドレスＢｓとする。
【００６８】
Ｍｉは、モジュール内設定領域内の任意のアドレスを示し、初期値は、先頭アドレスＭｓとする。Ｙｉは、生成されるスキャンプログラムＳＰ内で用いられるアドレスであり、初期値は、Ｂｉとする。このあと、セキュアモジュール１１０は、「Ａｉ番地の内容を読み込んで、Ｂｉ番地に書き込む」というスキャン命令を、モジュール内設定領域のＭｉ番地に書き込む（ステップＳ１００４）。
【００６９】
そして、セキュアモジュール１１０は、Ａｉ＞Ａｅであるか否かを判断する（ステップＳ１００５）。Ａｅは、スキャン対象領域１３０の末尾アドレスである。Ａｉ＞Ａｅでない場合（ステップＳ１００５：Ｎｏ）、ｉをインクリメントして（ステップＳ１００６）、ステップＳ１００４に戻る。一方、Ａｉ＞Ａｅである場合（ステップＳ１００５：Ｙｅｓ）、図１１のステップＳ１１０１に移行する。
【００７０】
図１１は、図９に示したスキャンプログラム生成処理（ステップＳ９０３）の詳細な処理手順例を示すフローチャート（後半）である。図１０のステップＳ１００５：Ｙｅｓのあと、セキュアモジュール１１０は、モジュール内設定領域の番地Ｍｉをインクリメントして（ステップＳ１１０１）、Ｍｉ＞Ｍｅ−２であるか否かを判断する（ステップＳ１１０２）。
【００７１】
Ｍｉ＞Ｍｅ−２でない場合（ステップＳ１１０２：Ｎｏ）、セキュアモジュール１１０は変数ｊの初期値をｊ＝１とし（ステップＳ１１０３）、演算方法Ｚｊをランダムに決定する（ステップＳ１１０４）。演算方法とは、四則演算や論理演算、チェックサムの算出やハッシュ関数によるハッシュ値算出などが挙げられる。以降、演算方法Ｚｊでの演算を「Ｚｊ演算」と称す。
【００７２】
そして、セキュアモジュール１１０は、ｊをインクリメントし（ステップＳ１１０５）、ｊ＝ｙであるか否かを判断する（ステップＳ１１０６）。ここで、ｙはＹｉの個数である。すなわち、モジュール内設定領域のＭｉ番地の個数である。
【００７３】
ｊ＝ｙでない場合（ステップＳ１１０６：Ｎｏ）、ステップＳ１１０４に戻る。一方、ｊ＝ｙとなった場合（ステップＳ１１０６：Ｙｅｓ）、セキュアモジュール１１０は「Ｙ１番地の内容とＹ２番地の内容をＺ１演算し、Ｚ１演算結果とＹ３番地の内容とをＺ２演算し、…、Ｚ（ｙ−２）演算結果とＹｙ番地の内容とをＺ（ｙ−１）演算する」というスキャン命令Ｚ（Ｍｉ）を、Ｍｉ番地に書き込む（ステップＳ１１０７）。
【００７４】
このあと、セキュアモジュール１１０は、Ｍｉをインクリメントし（ステップＳ１１０８）、「スキャン命令Ｚ（Ｍｉ―１）の計算結果を、（Ｂｉ＋１）番地に書き込む」というスキャン命令をＭｉ番地に書き込む（ステップＳ１１０９）。そして、ステップＳ１１０１に戻る。
【００７５】
ステップＳ１１０２において、Ｍｉ＞Ｍｅ−２である場合（ステップＳ１１０２：Ｙｅｓ）、「（Ｂｉ＋１）番地の内容をセキュアモジュール１１０に通知する」というスキャン命令をＭｉ番地に書き込む（ステップＳ１１１０）。そして、ステップＳ９０４に移行する。このスキャンプログラム生成処理（ステップＳ９０３）によれば、定期的（または不定期に）スキャンプログラムＳＰをランダムに生成することができる。
【００７６】
＜スキャンプログラム更新処理＞
図１２は、スキャンプログラム更新処理（ステップＳ９０８）の詳細な処理手順例を示すフローチャート（その１）である。まず、セキュアモジュール１１０は、更新内容をランダムに決定する（ステップＳ１２０１）。ここで、更新内容とは、たとえば、「難読化」、「スキャン対象領域変更」、「スキャン対象アドレスの順序変更」、「スキャン結果演算の追加」、「スキャンプログラムＳＰのアドレス追加」、「何もしない」、などが挙げられる。
【００７７】
「難読化」、「スキャン対象領域変更」、「スキャン対象アドレスの順序変更」の順序変更については、図１２で説明する。一方、「スキャン結果演算の追加」、「スキャンプログラムＳＰのアドレス追加」、「何もしない」については、図１３で説明する。なお、スキャンプログラム更新処理としては、これら６つの更新内容のうち、少なくとも１つ（「何もしない」を除く）でもあればよい。
【００７８】
図１２にもどって、セキュアモジュール１１０は、ランダムに決定された更新内容が、「難読化」であるか否かを判断する（ステップＳ１２０２）。難読化とは、対象となる命令または命令群を複雑にすることで、解読を難しくする方法である。具体的には、「働きは同じだが、処理内容が違うプログラムコード」に置き換えることである。たとえば、単一の命令の場合、「Ｘ＝１＋Ｙ」という命令を「Ｘ＝１０−９＋２Ｙ−Ｙ」という命令に更新する。また、「Ｘ＝１＋Ｙ」、「Ｚ＝Ｘ＋５０」を「Ｘ＝２６＋Ｙ」、「Ｚ＝Ｘ＋２５」という命令群に更新する。
【００７９】
更新後の命令は、更新前と同じ働きをするが、別のプログラムコードである。こうすると生成プログラムＧＰは、更新前後において、「働きは同じだが、プログラムコードが違う」ものになる。クラッカーが、生成プログラムＧＰのコードを「覗き見」したとしても、生成プログラムＧＰのプログラムコードが更新の都度違うのでそれだけ解析が困難である。また、生成プログラムＧＰのどの部分に肝心のコードがあるか分からなくなるという利点がある。
【００８０】
「難読化」である場合（ステップＳ１２０２：Ｙｅｓ）、セキュアモジュール１１０は、難読化の対象範囲を対象プログラムＴＰの中から指定し（ステップＳ１２０３）、指定された対象範囲の命令（難読化可能な命令に限る）の難読化を実行する（ステップＳ１２０４）。そして、ステップＳ１２０１に戻る。
【００８１】
一方、ステップＳ１２０２において、ランダムに決定された更新内容が、「難読化」でない場合（ステップＳ１２０２：Ｎｏ）、セキュアモジュール１１０は、ランダムに決定された更新内容が、「スキャン対象領域変更」か否かを判断する（ステップＳ１２０５）。
【００８２】
「スキャン対象領域変更」とは、スキャンプログラムＳＰにおいて指定されるスキャン対象アドレスを、スキャン対象領域１３０内の異なるアドレスに変更することである。たとえば、図５に示したスキャンプログラムＳＰから図６に示したスキャンプログラムＳＰへ更新する際に、スキャン対象領域変更が実行されることとなる。
【００８３】
「スキャン対象領域変更」である場合（ステップＳ１２０５：Ｙｅｓ）、セキュアモジュール１１０は、対象プログラムＴＰからスキャン対象領域１３０変更の対象範囲を指定し（ステップＳ１２０６）、指定された対象範囲のアドレスどうしを変更する（ステップＳ１２０７）。そして、ステップＳ１２０１に戻る。
【００８４】
スキャン対象領域変更をおこなっても、生成プログラムＧＰがアクセスするアドレスが変わるだけで、スキャンプログラムＳＰの働きは同じである。また、スキャン対象領域１３０が変更されることで、スキャン結果も更新されるため、セキュリティ強度が向上することとなる。
【００８５】
また、ステップＳ１２０５において、ランダムに決定された更新内容が、「スキャン対象領域変更」でない場合（ステップＳ１２０５：Ｎｏ）、セキュアモジュール１１０は、ランダムに決定された更新内容が、「スキャン対象アドレスの順序変更」か否かを判断する（ステップＳ１２０８）。スキャン対象アドレスの順序変更とは、スキャンプログラムＳＰのあるアドレスのコードとあるアドレスのコードを入れ替えることである。
【００８６】
たとえば、図５に示したスキャンプログラムＳＰから図７に示したスキャンプログラムＳＰへ更新する際に、スキャン対象アドレスの順序変更が実行されている。なお、スキャン対象アドレスの順序変更により実行順序が入れ替わることとなるが、入れ替え前後において、スキャン結果が変わる場合と変わらない場合とがある。
【００８７】
「スキャン対象アドレスの順序変更」である場合（ステップＳ１２０８：Ｙｅｓ）、セキュアモジュール１１０は、対象プログラムＴＰから順序変更の対象範囲を指定し（ステップＳ１２０９）、指定された対象範囲のアドレスのコードどうしを変更する（ステップＳ１２１０）。そして、ステップＳ１２０１に戻る。一方、ステップＳ１２０８において、スキャン対象アドレスの順序変更でない場合（ステップＳ１２０８：Ｎｏ）、図１３のステップＳ１３０１に移行する。
【００８８】
図１３は、スキャンプログラム更新処理（ステップＳ９０８）の詳細な処理手順例を示すフローチャート（その２）である。ステップＳ１３０１において、セキュアモジュール１１０は、ステップＳ１２０１においてランダムに決定された更新内容が、「スキャン結果演算の追加」であるか否かを判断する（ステップＳ１３０１）。
【００８９】
「スキャン結果演算の追加」である場合（ステップＳ１３０１：Ｙｅｓ）、セキュアモジュール１１０は、対象プログラムＴＰから演算対象アドレスを指定し（ステップＳ１３０２）、演算方法をランダムに決定する（ステップＳ１３０３）。ここで、演算方法とは、ある演算対象アドレスのデータとある演算対象アドレスのデータとについて、四則演算や論理演算をおこなったり、データごとにチェックサムの算出やハッシュ関数によるハッシュ値算出をおこなったりする。
【００９０】
そして、セキュアモジュール１１０は、「演算対象アドレス内のデータを用いて、ステップＳ１３０３で決定された演算方法で演算する」スキャン命令を、更新元の生成プログラムＧＰに追加する（ステップＳ１３０４）。また、セキュアモジュール１１０は、「追加されたスキャン命令による演算結果をセキュアモジュール１１０に通知する」スキャン命令を、更新元の生成プログラムＧＰに追加する（ステップＳ１３０５）。このあと、ステップＳ１２０１に戻る。
【００９１】
また、ステップＳ１２０１においてランダムに決定された更新内容が、「スキャン結果演算の追加」でない場合（ステップＳ１３０１：Ｎｏ）、セキュアモジュール１１０は、ランダムに決定された更新内容が、「スキャンプログラムＳＰのアドレス追加」であるか否かを判断する（ステップＳ１３０６）。スキャンプログラムＳＰのアドレス追加とは、スキャンプログラムＳＰのあるアドレスの命令に、スキャンプログラムＳＰの書込先アドレスを与えて、この書込先アドレスに依存したスキャン結果を得る手法である。
【００９２】
たとえば、図７に示したスキャンプログラムＳＰから図８に示したスキャンプログラムＳＰへ更新する際に、スキャンプログラムＳＰのアドレス追加が実行されている。
【００９３】
セキュアモジュール１１０は、ステップＳ１３０６において、「スキャンプログラムＳＰのアドレス追加」と判断された場合（ステップＳ１３０６：Ｙｅｓ）、追加対象アドレスを対象プログラムＴＰから指定する（ステップＳ１３０７）。そして、図７のアドレス１〜５に示したように、追加対象アドレス内のデータに、スキャンプログラムＳＰのアドレスの値を追加して、書き換える（ステップＳ１３０８）。このあと、ステップＳ１２０１に戻る。
【００９４】
また、ステップＳ１３０６で「スキャンプログラムＳＰのアドレス追加」でもないと判断された場合（ステップＳ１３０６：Ｎｏ）、セキュアモジュール１１０は、生成プログラムＧＰの更新を終了するか否かを判断する（ステップＳ１３０９）。具体的には、たとえば、このケースでは、「何もしない」にランダム決定されているため、一度も更新していない場合は、更新を終了しない（ステップＳ１３０９：Ｎｏ）。この場合は、ステップＳ１２０１に戻る。
【００９５】
少なくとも１度、または、あらかじめ設定しておいた所定回数更新が行われた場合、ランダムに更新を終了する（ステップＳ１３０９：Ｙｅｓ）。この場合、図９のステップＳ９０４に戻る。
【００９６】
このように、耐タンパ性構造のセキュアモジュール１１０内で実行されるため、スキャンプログラムＳＰの生成／更新を毎回セキュアにおこなうことができる。したがって、クラッキングによりスキャン機能を無効化しづらい状態となり、ＵＳＢ接続においてもセキュリティ強度を高めることができる。
【００９７】
＜対象プログラムＴＰの加工＞
つぎに、対象プログラムＴＰの加工について説明する。図３で説明したように、セキュアモジュール１１０内のプロセッサ２０１が加工プログラムＰＰを実行することで対象プログラムＴＰが加工される。ここで、対象プログラムＴＰの加工について具体的に説明する。
【００９８】
図１４は、対象プログラムＴＰの加工の概要を示す説明図である。プログラムは、アドレス単位の命令の集合体である。ここでは、わかりやすさを考慮して、対象プログラムＴＰが５つのアドレス単位の命令で成り立っているものとする。具体的には、分割プログラムＰ１〜Ｐ５で構成されており、アドレスａｄｒ１〜ａｄｒ５の順に分割プログラムＰ１〜Ｐ５が実行されるものとする。したがって、ＨＤＤ１０７では、論理アドレスとして、実行順序となるアドレスａｄｒ１〜ａｄｒ５の並びで記憶されている。
【００９９】
対象プログラムＴＰ（分割プログラムＰ１〜Ｐ５）は、加工プログラムＰＰにより配置順、すなわち、アドレスを入れ替えられる。図１４では、アドレスａｄｒ１が分割プログラムＰ１、アドレスａｄｒ２が分割プログラムＰ４、アドレスａｄｒ３が分割プログラムＰ２、アドレスａｄｒ４が分割プログラムＰ３、アドレスａｄｒ５が分割プログラムＰ５に加工されている。
【０１００】
この場合、分割プログラムＰ１，Ｐ４，Ｐ３の後続に、セキュアモジュール１１０へのＲＥＡＤ命令を追記しておく。セキュアモジュール１１０内には、アドレス変更後の対応関係を示すプログラム片を保持しておく。たとえば、プログラム片ｐａは、分割プログラムＰ１の実行後に参照されるＧｏｔｏ文であり、アドレスａｄｒ３にジャンプするものとする。
【０１０１】
また、プログラム片ｐｂは、分割プログラムＰ３の実行後に参照されるＧｏｔｏ文であり、アドレスａｄｒ２にジャンプするものとする。プログラム片ｐｃは、分割プログラムＰ４の実行後に参照されるＧｏｔｏ文であり、アドレスａｄｒ５にジャンプするものとする。プログラム片ｐａ〜ｐｃは加工の際に生成される。なお、加工前後では、スキャン結果Ｒ１は変わりない。
【０１０２】
図１５〜図１７Ｂは、加工プログラムＰＰによる対象プログラムＴＰの加工例を示す説明図である。まず、図１５では、ＨＤＤ１０７内の対象プログラムＴＰのアドレス３〜５の命令群を、アドレス７〜９に移動させている。また、対象プログラムＴＰのアドレス６，７の命令群を、アドレス１５，１６に移動させている。アドレス１，２の命令群はそのままである。
【０１０３】
加工前では、アドレス２の命令「Ｙ＝Ｘ＋８」のつぎは、アドレス３の命令「Ｚ＝Ｘ＋Ｙ」が実行される。アドレス３の命令「Ｚ＝Ｘ＋Ｙ」は、アドレス７に移動したため、アドレス３の内容を、「Ｇｏｔｏ７」というプログラム片（ジャンプ命令）に書き換える。そして、セキュアモジュール１１０は、テーブルにアドレス３とプログラム片「Ｇｏｔｏ７」との組み合わせを保持する。
【０１０４】
同様に、加工前では、アドレス５の命令「Ｚ＝Ｚ＋１」のつぎは、アドレス６の命令「Ｚ＝５＋Ｚ」が実行される。アドレス５の命令「Ｚ＝Ｚ＋１」はアドレス９に移動し、アドレス６の命令は、アドレス１５に移動したため、アドレス９の次であるアドレス１０の内容を、「Ｇｏｔｏ１５」というプログラム片（ジャンプ命令）に書き換える。そして、セキュアモジュール１１０は、テーブルにアドレス１０とプログラム片「Ｇｏｔｏ１５」との組み合わせを保持する。
【０１０５】
そして、セキュアモジュール１１０は、対象プログラムＴＰをスキャン対象領域１３０に書き出す前に、プログラム片をセキュアモジュール１１０へのＲＥＡＤ命令に書き換える。これにより、スキャン対象領域１３０に実装された加工後の対象プログラムＴＰが実行される場合、アドレス３のＲＥＡＤ命令により、セキュアモジュール１１０内のテーブルを参照して、アドレス３に対応するプログラム片「Ｇｏｔｏ７」を特定する。セキュアモジュール１１０は、プロセッサ１０１に対し、「Ｇｏｔｏ７」を通知することで、プロセッサ１０１は加工後の対象プログラムＴＰのアドレス７の命令を実行することとなる。
【０１０６】
このように、対象プログラムＴＰを構成する命令群を、対応関係を保持しておきながらシャッフリングする。したがって、対象プログラムＴＰも解読しにくい状態とすることで、セキュリティの向上を図ることができる。
【０１０７】
図１６は、図１５よりも加工を複雑化した例である。具体的には、図１５では、プログラム片を単なるジャンプ命令としたが、図１６では、単なるジャンプ命令ではなく、プログラム片に対象プログラムＴＰを構成する命令も挿入している。
【０１０８】
まず、図１６では、ＨＤＤ１０７内の対象プログラムＴＰのアドレス４，５の命令群を、アドレス８，９に移動させている。また、対象プログラムＴＰのアドレス６，７の命令群を、アドレス１５，１６に移動させている。アドレス１〜３の命令群はそのままである。
【０１０９】
加工前では、アドレス２の命令「Ｙ＝Ｘ＋８」のつぎは、アドレス３の命令「Ｚ＝Ｘ＋Ｙ」が実行される。アドレス３の次であるアドレス４の命令は、アドレス８に移動したため、Ｇｏｔｏ文「Ｇｏｔｏ８」を生成する。そして、セキュアモジュール１１０は、アドレス３と、アドレス３の命令「Ｚ＝Ｘ＋Ｙ」および生成されたＧｏｔｏ文「Ｇｏｔｏ８」との組み合わせを保持する。このように、プログラム片を単なるジャンプ命令ではなく、複雑化することで、セキュリティの向上を図ることができる。
【０１１０】
図１７Ａは、対象プログラムＴＰを構成する命令群を暗号化する例である。図１７では、セキュアモジュール１１０は、対象プログラムＴＰ（加工前）のアドレス４〜７の命令群を暗号復号鍵Ｋ１〜Ｋ４で暗号化する。つぎに、暗号化された命令の前に、セキュアモジュール１１０へのＲＥＡＤ命令と復号命令を挿入する。これにより、挿入された命令分だけ、アドレスが繰り下がる。
【０１１１】
たとえば、アドレス４の命令「Ｙ＝Ｙ＋１」を暗号復号鍵Ｋ１で暗号化して、アドレス６に書き込む。そして、空いているアドレス４にセキュアモジュールへのＲＥＡＤ命令を挿入し、アドレス５に復号命令を挿入する。
【０１１２】
このあと、セキュアモジュール１１０では、対象プログラムＴＰ（加工後）における暗号化命令を暗号化した鍵とその暗号化命令のために挿入されたＲＥＡＤ命令のアドレスとの組み合わせをテーブルに保持する。たとえば、アドレス６に書き込まれた暗号化命令Ｅ１（Ｙ＝Ｙ＋１）を暗号化した暗号復号鍵Ｋ１と、暗号化命令Ｅ１（Ｙ＝Ｙ＋１）の生成により挿入されたＲＥＡＤ命令のアドレス４との組み合わせをテーブルに保持する。
【０１１３】
このあと、セキュアモジュール１１０は、テーブルをＲＡＭ２０４またはフラッシュメモリ２０６に保持しておき、加工した対象プログラムＴＰをスキャン対象領域に書き込む。対象プログラムＴＰ（加工後）を実行するときは、挿入されたＲＥＡＤ命令により暗号復号鍵を読み出して、つぎの復号命令で、暗号化命令を復号する。これにより、復号された命令を実行することが可能となる。たとえば、アドレス４のＲＥＡＤ命令があると、セキュアモジュール１１０は、テーブルを参照して暗号復号鍵Ｋ１をプロセッサ１０１に渡す。プロセッサ１０１は、暗号復号鍵Ｋ１とアドレス５の復号命令により、暗号化命令Ｅ１（Ｙ＝Ｙ＋１）を復号して、アドレス６に命令「Ｙ＝Ｙ＋１」を書き込む。そして、アドレス６で、命令「Ｙ＝Ｙ＋１」を実行することとなる。こうすることで、スキャン対象プログラムが一部暗号化されていても、復号鍵をセキュアモジュールから取得することで処理の続行が可能になります。
【０１１４】
図１７Ｂは、対象プログラムＴＰを構成する命令群を暗号化する例である。図１７Ｂでは、セキュアモジュール１１０は、対象プログラムＴＰ（加工前）のアドレス４〜７の命令群をセキュアモジュール１１０へのＲＥＡＤ命令に置換する。たとえば、アドレス４の命令「Ｙ＝Ｙ＋１」をＲＥＡＤ命令に置換する。そして、つぎのアドレス５に、「アドレス４でセキュアモジュール１１０から読み出した命令「Ｙ＝Ｙ＋１」を書き込む」命令を挿入する。
【０１１５】
このあと、セキュアモジュール１１０は、置換対象の命令とそのアドレスとの組み合わせをテーブルに保持する。たとえば、セキュアモジュール１１０は、置換対象となったアドレス４とその命令「Ｙ＝Ｙ＋１」の組み合わせをテーブルに保持する。
【０１１６】
このあと、セキュアモジュール１１０は、テーブルをＲＡＭ２０４またはフラッシュメモリ２０６に保持しておき、加工した対象プログラムＴＰをスキャン対象領域に書き込む。対象プログラムＴＰ（加工後）を実行するときは、プロセッサ１０１は、置換されたＲＥＡＤ命令により置換元の命令を読み出して実行する。たとえば、プロセッサ１０１は、アドレス４のＲＥＡＤ命令でセキュアモジュール１１０から命令「Ｙ＝Ｙ＋１」を読み出して実行することとなる。
【０１１７】
＜対象プログラムＴＰ加工処理＞
図１８は、対象プログラムＴＰ加工処理の処理手順例を示すフローチャートである。まず、セキュアモジュール１１０が、暗号化対象プログラムＥ（ＴＰ）をＨＤＤ１０７から読み出し（ステップＳ１８０１）、暗号化対象プログラムＥ（ＴＰ）を復号する（ステップＳ１８０２）。なお、ＨＤＤ１０７において対象プログラムＴＰが暗号化されていない場合は、ＨＤＤ１０７から対象プログラムＴＰを読み出すだけでよい。
【０１１８】
つぎに、セキュアモジュール１１０は、対象プログラムＴＰの加工方法をランダムに決定する（ステップＳ１８０３）。具体的には、セキュアモジュール１１０は、「難読化」、「暗号化」（図１７を参照）、「シャッフリング」（図１６，図１７を参照）、「何もしない」の中から決定する。
【０１１９】
そして、セキュアモジュール１１０は、加工方法が「難読化」である場合（ステップＳ１８０４：Ｙｅｓ）、対象プログラムＴＰから難読化の対象範囲を指定し（ステップＳ１８０５）、対象範囲の命令を難読化する（ステップＳ１８０６）。そして、ステップＳ１８０３に戻る。
【０１２０】
また、ステップＳ１８０４において、加工方法が「難読化」でない場合（ステップＳ１８０４：Ｎｏ）、セキュアモジュール１１０は、加工方法が「暗号化」であるか否かを判断する（ステップＳ１８０７）。加工方法が「暗号化」である場合（ステップＳ１８０７：Ｙｅｓ）、対象プログラムＴＰから暗号化の対象範囲を指定し（ステップＳ１８０８）、対象範囲の命令を暗号化する（ステップＳ１８０９）。このとき、図１７に示したように、暗号化対象のアドレスとそのアドレスの暗号化命令を復号する復号鍵の組み合わせをテーブルに保存する。そして、ステップＳ１８０３に戻る。
【０１２１】
また、ステップＳ１８０７において、加工方法が「暗号化」でない場合（ステップＳ１８０７：Ｎｏ）、セキュアモジュール１１０は、加工方法が「シャッフリング」であるか否かを判断する（ステップＳ１８１０）。加工方法が「シャッフリング」である場合（ステップＳ１８１０：Ｙｅｓ）、セキュアモジュール１１０は、シャッフリング処理（図１９）を実行する。そして、シャッフリング処理（ステップＳ１８１１）のあと、ステップＳ１８０３に戻る。
【０１２２】
また、ステップＳ１８１０において、加工方法が「シャッフリング」でない場合（ステップＳ１８１０：Ｎｏ）、セキュアモジュール１１０は、加工終了であるか否かを判断する（ステップＳ１８１２）。具体的には、たとえば、このケースでは、加工方法が「何もしない」にランダム決定されているため、一度も加工していない場合は、加工を終了しない（ステップＳ１８１２：Ｎｏ）。この場合は、ステップＳ１８０３に戻る。
【０１２３】
少なくとも１度、または、あらかじめ設定しておいた所定回数加工が行われた場合、ランダムに加工を終了する（ステップＳ１８１２：Ｙｅｓ）。この場合、ＲＡＭ１０３のスキャン対象領域１３０に加工後の対象プログラムＴＰを書き出す（ステップＳ１８１３）。これにより、加工処理を終了する。
【０１２４】
図１９は、図１８に示したシャッフリング処理（ステップＳ１８１１）の詳細な処理手順例を示すフローチャートである。ここでは、例として、図１５に示したようなシャッフリングをする場合を例に挙げる。まず、セキュアモジュール１１０は、セキュアモジュール１１０内で加工先の領域を確保し（ステップＳ１９０１）、対象プログラムＴＰを複数の命令群に分割する（ステップＳ１９０２）。
【０１２５】
つぎに、セキュアモジュール１１０は、先頭の命令群を対象命令群に設定する（ステップＳ１９０３）。そして、セキュアモジュール１１０は、対象命令群の後続命令群があるか否かを判断する（ステップＳ１９０４）。後続命令群がある場合（ステップＳ１９０４：Ｙｅｓ）、セキュアモジュール１１０は、プログラム片（たとえば、Ｇｏｔｏ文）をランダムに生成する（ステップＳ１９０５）。具体的には、セキュアモジュール１１０は、ランダムかつ対象命令群が入る領域が確保できるように生成する。
【０１２６】
このあと、セキュアモジュール１１０は、生成されたプログラム片のアドレスを、対象命令群の末尾アドレスの次のアドレスに設定する（ステップＳ１９０６）。そして、セキュアモジュール１１０は、プログラム片とその書込先アドレスとの組み合わせをテーブルに追加する（ステップＳ１９０７）。
【０１２７】
そして、セキュアモジュール１１０は、対象プログラムＴＰのプログラム片に割り当てられたアドレスに、プログラム片のＲＥＡＤ命令を書き込む（ステップＳ１９０８）。このあと、セキュアモジュール１１０は、プログラム片で指定されたアドレス（プログラム片が「Ｇｏｔｏ８」なら「８」）に、後続命令群を対象命令群に設定して（ステップＳ１９０９）、ステップＳ１９０４に戻る。
【０１２８】
ステップＳ１９０４において、対象命令群の後続命令群がない場合（ステップＳ１９０４：Ｎｏ）、シャッフリング処理を終了して、ステップＳ１８０３に戻る。
【０１２９】
このように、対象プログラムＴＰを加工することで対象プログラムＴＰのクラッキングに対してもセキュリティ強度を高めることができる。なお、上述した加工処理は、暗号化対象プログラムＴＰを読み込む都度実行されるため、その都度、対象プログラムＴＰの加工方法が変更することとなる。したがって、クラッカーから見るとさらに対象プログラムＴＰの解析を困難にすることができる。
【０１３０】
また、スキャンプログラムＳＰが、スキャン対象領域１３０に不定期または定期的にスキャンした場合、そのスキャンプログラムＳＰが更新される前に、加工プログラムＰＰが、スキャン対象領域１３０にランダムにデータやコードを書き込む。そして、更新前に、加工後のスキャンプログラムＳＰでスキャンすることで、スキャンプログラムＳＰの正常動作を再々確認することができる。
【０１３１】
図２０は、対象プログラムＴＰの加工例を示す説明図である。（Ａ）では、対象プログラムＴＰのアドレス１〜４の命令が難読化され、アドレス５〜７にＮＯＰを追加した例である。（Ｂ）では、アドレス１〜４の命令はそのままで、アドレス５〜７に命令が追加されているが、結果は同一となる例である。（Ｃ）では、アドレス１〜４の命令はそのままで、アドレス５〜７に無意味な命令が追加されているため、結果は同一となる例である。
【０１３２】
このように、図２０の左側の対象プログラムＴＰをスキャンしたあと、図２０の右側のように対象プログラムＴＰを加工して、スキャンプログラムＳＰを更新する前に加工後の対象プログラムＴＰをスキャンする。これにより、スキャンプログラムＳＰの正常動作を再々確認することができる。
【０１３３】
以上説明したように、本実施の形態によれば、ハードウェアスキャンに対応しないインターフェースであっても、クラッカーに容易に無効化されないスキャンを実現することができるという効果を奏する。特に、スキャンプログラムＳＰの更新頻度を高めることで、よりセキュリティ強度が高くなる。さらに、対象プログラムＴＰをスキャン対象領域１３０に書き込む都度、対象プログラムＴＰを加工するため、よりセキュリティ強度を高めることができる。
【０１３４】
なお、本実施の形態では、ＰＣＩ（またはＰＣＩｅ）接続およびＵＳＢ接続が可能な情報処理装置１００に対し、セキュアモジュール１１０をＵＳＢ接続する場合の例について説明したが、ＵＳＢに限らず、ＵＳＢ以外の他の規格でもよい。
【０１３５】
また、本実施の形態は、ディジタルＡＶ情報、ゲームソフトウェア、アプリケーションがディジタル放送やブロードバンドインターネット上で送信されたときに、オープンアーキテクチャーのＰＣのソフトウェア上で安全性（ディジタルＡＶ情報が悪意ある者に盗まれない）を保証する場合に利用することができる。
【０１３６】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１３７】
（付記１）対象プログラムに固有なコードを記憶する記憶手段と、
前記対象プログラムに固有なコードを生成するスキャン処理を接続先装置で実行させるスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行する生成手段と、
前記接続先装置内の特定の記憶領域に記憶されている前記対象プログラムに対し前記スキャンプログラムが前記接続先装置で実行された場合、前記接続先装置での前記スキャンプログラムの実行結果と前記記憶手段に記憶された前記コードとに基づいて、前記特定の記憶領域に記憶されている前記対象プログラムの正当性を認証する認証手段と、
を備えることを特徴とするセキュアモジュール。
【０１３８】
（付記２）前記セキュアモジュールは、内部に格納された情報を外から参照できない構造であることを特徴とする付記１に記載のセキュアモジュール。
【０１３９】
（付記３）前記生成手段は、前記更新処理を定期的に実行することを特徴とする付記１または２に記載のセキュアモジュール。
【０１４０】
（付記４）前記生成手段は、前記更新処理を不定期に実行することを特徴とする付記１または２に記載のセキュアモジュール。
【０１４１】
（付記５）前記生成手段は、前記更新処理として、前記スキャンプログラムの命令を難読化することを特徴とする付記１〜４のいずれか一つに記載のセキュアモジュール。
【０１４２】
（付記６）前記生成手段は、前記更新処理として、前記スキャンプログラムで指定された前記特定の記憶領域内のスキャン先アドレスを変更することを特徴とする付記１〜４のいずれか一つに記載のセキュアモジュール。
【０１４３】
（付記７）前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令群においてそれぞれ指定された前記特定の記憶領域内のスキャン先アドレスの順序を変更することを特徴とする付記１〜４のいずれか一つに記載のセキュアモジュール。
【０１４４】
（付記８）前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令で指定されたデータに基づく演算命令の内容を変更して、変更後の演算命令による演算結果を前記記憶手段に記憶しておき、前記変更後の演算命令による演算結果を前記セキュアモジュールに返す命令を追加することを特徴とする付記１〜４のいずれか一つに記載のセキュアモジュール。
【０１４５】
（付記９）前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令を、前記スキャンプログラムの前記接続先装置での格納先アドレスに依存した命令に変更することを特徴とする付記１〜４のいずれか一つに記載のセキュアモジュール。
【０１４６】
（付記１０）前記生成手段は、前記生成処理として、前記固有なコードと同一コードの生成を維持したまま記述内容が異なるスキャンプログラムをランダムに生成することを特徴とする付記１または２に記載のセキュアモジュール。
【０１４７】
（付記１１）前記生成手段は、前記生成処理を定期的に実行することを特徴とする付記１０に記載のセキュアモジュール。
【０１４８】
（付記１２）前記生成手段は、前記生成処理を不定期に実行することを特徴とする付記１０に記載のセキュアモジュール。
【０１４９】
（付記１３）前記対象プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工する加工手段を備え、
前記加工手段による加工後の対象プログラムに固有なコードを前記記憶手段に上書きすることを特徴とする付記１〜１２のいずれか一つに記載のセキュアモジュール。
【０１５０】
（付記１４）前記加工手段は、前記対象プログラムの命令を難読化することを特徴とする付記１３に記載のセキュアモジュール。
【０１５１】
（付記１５）前記加工手段は、前記対象プログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令と当該ジャンプ命令のアドレスとの組み合わせを特定するテーブルを前記記憶手段に記憶し、シャッフリング後の前記対象プログラムにおける前記ジャンプ命令の内容を前記テーブルのリード命令に変更して、前記特定の記憶領域に書き出すことを特徴とする付記１３に記載のセキュアモジュール。
【０１５２】
（付記１６）前記加工手段は、前記対象プログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令およびジャンプ元命令と当該ジャンプ元命令のアドレスとの組み合わせを特定するテーブルを前記記憶手段に記憶し、シャッフリング後の前記対象プログラムにおける前記ジャンプ元命令の内容を前記テーブルのリード命令に変更して、前記特定の記憶領域に書き出すことを特徴とする付記１３に記載のセキュアモジュール。
【０１５３】
（付記１７）前記加工手段は、前記対象プログラムの任意の命令を、当該命令を暗号化した暗号化命令と、セキュアモジュールに対するリード命令と、前記暗号化命令を復号する復号命令とに置換し、前記リード命令のアドレスと前記暗号化命令を復号する復号鍵との組み合わせを特定するテーブルを前記記憶手段に記憶し、加工後の前記対象プログラムを前記特定の記憶領域に書き出すことを特徴とする付記１３に記載のセキュアモジュール。
【０１５４】
（付記１８）前記加工手段は、前記対象プログラムの任意の命令をセキュアモジュールに対するリード命令に置換し、当該リード命令のアドレスと置換元の命令との組み合わせを特定するテーブルを前記記憶手段に記憶し、加工後の前記対象プログラムを前記特定の記憶領域に書き出すことを特徴とする付記１３に記載のセキュアモジュール。
【０１５５】
（付記１９）前記加工手段は、前記接続先装置において前記スキャンプログラムの実行中に、前記対象プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工し、
前記加工手段による加工後の対象プログラムに固有なコードを前記記憶手段に上書きすることを特徴とする付記１３に記載のセキュアモジュール。
【０１５６】
（付記２０）プロセッサと、
メモリと、
セキュアモジュールと、を備え、
前記セキュアモジュールは、
対象プログラムに固有なコードを記憶する記憶手段と、
前記対象プログラムに固有なコードを生成するスキャン処理を前記プロセッサで実行させるスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行する生成手段と、
前記メモリ内の特定の記憶領域に記憶されている前記対象プログラムに対し前記スキャンプログラムが実行された場合、前記スキャンプログラムの実行結果と前記記憶手段に記憶された前記コードとに基づいて、前記特定の記憶領域に記憶されている前記対象プログラムの正当性を認証する認証手段と、
を備えることを特徴とする情報処理装置。
【符号の説明】
【０１５７】
１００  情報処理装置
１０１  プロセッサ
１０２  ノースブリッジ
１０５  ディスプレイ
１０６  サウスブリッジ
１０９  入力デバイス
１１０  セキュアモジュール
１１１  ＵＳＢバス
１３０  スキャン対象領域
１３１  ドライバ
２０１  プロセッサ
２０３  暗号化回路
２０６  フラッシュメモリ
ＡＰ  認証プログラム
ＧＰ  生成プログラム
ＰＰ  加工プログラム
ＳＰ  スキャンプログラム
ＴＰ  対象プログラム
【図１】
0005588781.tif 000002
【図２】
0005588781.tif 000003
【図３】
0005588781.tif 000004
【図４】
0005588781.tif 000005
【図５】
0005588781.tif 000006
【図６】
0005588781.tif 000007
【図７】
0005588781.tif 000008
【図８】
0005588781.tif 000009
【図９】
0005588781.tif 000010
【図１０】
0005588781.tif 000011
【図１１】
0005588781.tif 000012
【図１２】
0005588781.tif 000013
【図１３】
0005588781.tif 000014
【図１４】
0005588781.tif 000015
【図１５】
0005588781.tif 000016
【図１６】
0005588781.tif 000017
【図１７Ａ】
0005588781.tif 000018
【図１７Ｂ】
0005588781.tif 000019
【図１８】
0005588781.tif 000020
【図１９】
0005588781.tif 000021
【図２０】
0005588781.tif 000022