"通信装置内に備えられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールと、前記通信装置内の前記セキュアモジュール外に備えられ、前記通信装置の外部の装置との暗号化通信を前記セキュアモジュール内に保持されている暗号鍵を用いておこなうプログラムが保持された記憶装置と、前記セキュアモジュールに備えられ、前記プログラムの改ざんを検出する検出手段と、前記セキュアモジュールに備えられ、前記検出手段によって前記プログラムの改ざんが検出された場合に、前記セキュアモジュールを、前記プログラムによる前記暗号鍵を用いた前記暗号化通信が不可能な状態に設定する設定手段と、を備えることを特徴とする通信装置。前記セキュアモジュールに備えられ、前記プログラムに固有なコードを記憶する記憶手段と、前記セキュアモジュールに備えられ、前記プログラムに固有なコードを生成するスキャン処理を前記通信装置で実行させるスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行する生成手段と、を備え、前記検出手段は、前記記憶装置内の特定の記憶領域に記憶されている前記プログラムに対し前記スキャンプログラムが前記通信装置で実行された場合、前記通信装置での前記スキャンプログラムの実行結果と前記記憶手段に記憶された前記コードとに基づいて、前記特定の記憶領域に記憶されている前記プログラムの改ざんを検出することを特徴とする請求項1に記載の通信装置。前記セキュアモジュールに備えられ、前記プログラムに固有なコードを記憶する記憶手段と、前記セキュアモジュールに備えられ、前記記憶装置に直接アクセスをおこない読み出した前記プログラムから前記プログラムに固有なコードを生成するスキャン処理を実行するスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行する生成手段と、を備え、前記検出手段は、前記スキャンプログラムの実行結果と、前記記憶手段に記憶された前記コードとに基づいて、前記プログラムの改ざんを検出することを特徴とする請求項1に記載の通信装置。前記プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工し、加工後のプログラムに固有なコードを前記記憶手段に上書きする加工手段を備え、前記検出手段は、前記加工手段による加工後のプログラム内の演算プログラムの演算結果の正当性に基づいて、前記加工後のプログラムの改ざんを検出することを特徴とする請求項1に記載の通信装置。前記検出手段によって前記プログラムの改ざんが検出されなかった場合に、前記プログラムを実行する前記通信装置内のプロセッサへ要求を出力した時から、前記プロセッサからの返答を取得する時までの経過時間が許容時間以上であるか否かを判定する判定手段を前記セキュアモジュール内に備え、前記設定手段は、前記判定手段によって前記許容時間以上であると判定された場合に、前記セキュアモジュールを、前記プログラムによる前記暗号鍵を用いた前記暗号化通信が不可能な状態に設定することを特徴とする請求項1~4のいずれか一つに記載の通信装置。前記セキュアモジュールに備えられ、前記プログラムが前記外部の装置に送信するデータを、前記送信に先だって前記プログラムから取得する取得手段と、前記セキュアモジュールに備えられ、前記取得手段によって取得された前記データを前記暗号鍵を用いて暗号化する暗号化手段と、を備え、前記設定手段は、前記暗号化手段を不能な状態に設定することにより、前記セキュアモジュールを、前記プログラムによる前記暗号鍵を用いた前記暗号化通信が不可能な状態に設定することを特徴とする請求項1~5のいずれか一つに記載の通信装置。前記セキュアモジュールに備えられ、前記暗号鍵の出力依頼を前記プログラムから取得する取得手段と、前記セキュアモジュールに備えられ、前記取得手段によって前記出力依頼が取得された場合に、前記暗号鍵を前記プログラムに出力する出力手段と、を備え、前記設定手段は、前記出力手段を不能な状態に設定することにより、前記セキュアモジュールを、前記プログラムによる前記暗号鍵を用いた前記暗号化通信が不可能な状態に設定することを特徴とする請求項1~5のいずれか一つに記載の通信装置。前記データは、前記セキュアモジュールと前記プログラムを実行するプロセッサとが有する共通鍵を用いて暗号化されることを特徴とする請求項6または7に記載の通信装置。前記暗号鍵は、前記外部の装置が有する公開鍵に対応する前記セキュアモジュールの秘密鍵であることを特徴とする請求項5~8のいずれか一つに記載の通信装置。前記暗号鍵は、前記セキュアモジュールと前記外部の装置とが共通して有する共通鍵であることを特徴とする請求項5~8のいずれか一つに記載の通信装置。通信装置内に備えられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールにおいて、前記通信装置内の前記セキュアモジュール外に備えられた記憶装置に保持され、前記通信装置の外部の装置との暗号化通信を前記セキュアモジュール内に保持されている暗号鍵を用いておこなうプログラムの改ざんを検出する検出手段と、前記検出手段によって前記プログラムの改ざんが検出された場合に、前記セキュアモジュールを、前記プログラムによる前記暗号鍵を用いた前記暗号化通信が不可能な状態に設定する設定手段と、を備えることを特徴とするセキュアモジュール。しかしながら、近年では、スマートフォンで見られるように、端末の仕様およびソフトウェア構造を公開し、第3者によるソフトウェア開発を促す傾向にある。このため、クラッカーによって、端末内のソフトウェアが読み出され、解析され、改ざんされ、不正ソフトウェアが開発される可能性が増大している。また、セキュアモジュールは、外から覗き見や改ざんは不可能であるが、ソフトウェアから利用するためのインターフェースが公開されているため、セキュアモジュール内の秘匿すべき情報は不正ソフトウェアによって容易に読み出されてしまう。したがって、不正ソフトウェアが、偽の通信内容を正規の暗号鍵を用いて暗号化した上で、外部の装置に送信することができるため、外部の装置では偽の通信内容か否かを判別できず、通信の安全性を担保できないという問題があった。本発明は、かかる問題点に鑑み、不正ソフトウェアによる正規の暗号鍵を用いた暗号化通信を防止する通信装置およびセキュアモジュールを提供することを目的とする。上述した課題を解決し、目的を達成するため、通信装置内に備えられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールと、通信装置内のセキュアモジュール外に備えられ、通信装置の外部の装置との暗号化通信をセキュアモジュール内に保持されている暗号鍵を用いておこなうプログラムが保持された記憶装置と、を備え、セキュアモジュールに実装された検出手段により、プログラムの改ざんを検出し、セキュアモジュールに実装された設定手段により、プログラムの改ざんが検出された場合に、セキュアモジュールを、プログラムによる暗号鍵を用いた暗号化通信が不可能な状態に設定する通信装置が一例として提案される。上述した課題を解決し、目的を達成するため、通信装置内に備えられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールにおいて、通信装置内のセキュアモジュール外に備えられた記憶装置に保持され、通信装置の外部の装置との暗号化通信をセキュアモジュール内に保持されている暗号鍵を用いておこなうプログラムの改ざんを検出し、プログラムの改ざんが検出された場合に、セキュアモジュールを、プログラムによる暗号鍵を用いた暗号化通信が不可能な状態に設定するセキュアモジュールが一例として提案される。本発明の一側面によれば、不正ソフトウェアによる正規の暗号鍵を用いた暗号化通信の防止を図ることができるという効果を奏する。以下に添付図面を参照して、この発明にかかる通信装置およびセキュアモジュールの実施の形態を詳細に説明する。通信装置とセンタ間の通信図1は、通信装置とセンタ間の通信の内容を示す説明図である。図1において、通信装置101は、セキュアモジュール102を有し、また、セキュアモジュール102内の暗号復号鍵K以下、単に暗号鍵Kというを用いて暗号化通信をおこなうプログラム以下、暗号化通信プログラムというを有している。暗号化通信とは、通信内容を暗号化する通信であり、暗号化通信プログラムは、例えば、暗号鍵Kを用いて送信する通信内容を暗号化し、または、暗号鍵Kを用いて受信した通信内容を復号する。また、暗号化用の鍵と復号用の鍵は異なる鍵でもよい。通信装置101は、暗号化通信プログラムを用いて、外部の装置ここでは、センタ103とネットワーク110を介した暗号化通信をおこなう。暗号化通信プログラムは、例えば、書籍注文用ソフトウェアや電子書籍注文用ソフトウェアや電子マネー受信用ソフトウェアである。また、通信装置101は、ネットワーク110を介してクラッカーのコンピュータ104に接続されている。セキュアモジュール102は、TRMTamperResistantModule構造など内部に格納された情報を外部から参照できない構造を有するLSILargeScaleIntegrationである。これにより、セキュアモジュール102は、外部からの覗き見を防止するとともに、内部のデータの改ざんを防止する。セキュアモジュール102は、正規の暗号鍵Kを保持している。暗号鍵Kに対応する復号鍵は、例えば、暗号鍵Kそのものである。また、暗号鍵Kと復号鍵が異なる場合は、セキュアモジュール102は、復号鍵をさらに保持する。さらに、セキュアモジュール102は、通信装置101内の通信相手であるセンタ103の暗号鍵に対応する復号鍵を保持する。また、セキュアモジュール102は、プログラムの改ざんを検出する機能により監視対象となるプログラム以下、対象プログラムTPというが正規プログラムなのか改ざんされた不正プログラムなのかを一定時間間隔で監視している。ここでは、対象プログラムTPは、上述した通信装置101内の暗号化通信プログラムである。セキュアモジュール102は、対象プログラムTPが正規プログラムであると判断されている場合、対象プログラムTPによる通信内容の暗号化に暗号鍵Kを供する。一方、セキュアモジュール102は、対象プログラムTPが不正プログラムであると判断された場合、自身の状態を、通信装置101内の対象プログラムTPによる暗号鍵Kを用いた暗号化通信が不可能な状態に設定する。暗号鍵Kを用いた暗号化通信が不可能な状態とは、例えば、セキュアモジュール102が不正プログラムからの暗号鍵Kの読出し要求や通信内容の暗号化依頼を拒絶する状態である。また、例えば、セキュアモジュール102が、再起動されるまで全機能を停止させた状態であってもよい。さらに、セキュアモジュール102が通信装置101に不正プログラムの停止要求を送信し、不正プログラム自体を終了させてもよい。センタ103は、通信装置101と暗号化通信をおこなう。また、センタ103は、セキュアモジュール102内の暗号鍵Kに対応する復号鍵を保持している。例えば、セキュアモジュール102の暗号鍵Kが秘密鍵である場合は、センタ103の復号鍵はセキュアモジュール102の公開鍵である。また、例えば、セキュアモジュール102の暗号鍵Kとセンタ103の復号鍵とは、共通鍵でもよい。センタ103は、受信した通信内容が、安全性の担保された正規の暗号鍵Kにより暗号化されているかに基づいて、正規の通信内容か偽の通信内容かを判別している。すなわち、センタ103が、暗号鍵Kに対応する復号鍵によって、受信した通信内容が正常に復号できた場合に、正規の通信内容と判断する。図1のAに示すように、通信装置101内で正規プログラムが動作している場合は、セキュアモジュール102により対象プログラムTPが正規プログラムであると判断される。よって、セキュアモジュール102は、正規プログラムの通信内容の暗号化に暗号鍵Kを供する。これにより、正規プログラムは、通信内容を正規の暗号鍵Kによって暗号化してセンタ103に送信することができる。センタ103は、受信した通信内容が、安全性の担保された正規の暗号鍵Kにより暗号化されているかに基づいて、正規の通信内容か偽の通信内容かを判別する。ここで、センタ103が、受信した通信内容を暗号鍵Kに対応する復号鍵によって復号すると、正常に復号できるため、正規の通信内容と判断できる。よって、センタ103のユーザは、安心して、受信した通信内容にしたがって、通信装置101のユーザへの書籍の発送や課金をおこなうことができる。次に、図1のBに示すように、クラッカーのコンピュータ104から不正プログラムが通信装置101に送信され、正規プログラムに上書きされたとする。不正プログラムとは、例えば、書籍販売用ソフトウェアを改ざんしたプログラムであって、通信装置101のユーザが書籍購入時に入力した宛先住所を偽装することによりユーザの購入書籍を窃取するプログラムである。その後、図1のCに示すように、通信装置101内で不正プログラムが動作している場合は、セキュアモジュール102により対象プログラムTPが不正プログラムであると判断されるようになる。セキュアモジュール102は、対象プログラムTPが不正プログラムであると判断された場合、自身の状態を、通信装置101内の対象プログラムTPによる暗号鍵Kを用いた暗号化通信が不可能な状態に設定する。これにより、不正プログラムは、偽装した通信内容を正規の暗号鍵Kを用いて暗号化することができない。このように、正規プログラムによる通信内容は正規の暗号鍵Kを用いて暗号化されるが、不正プログラムにより偽装された通信内容が正規の暗号鍵Kを用いて暗号化されることはない。よって、センタ103が偽装された通信内容を正規プログラムからの通信内容と誤認することもなくなるため、通信の安全性を担保できる。通信装置101のハードウェア構成例1図2は、実施の形態にかかる通信装置101のハードウェア構成例1を示すブロック図である。図2において、通信装置101は、プロセッサ201と、ROMRead‐OnlyMemory202と、RAMRandomAccessMemory203と、HDDHardDiskDrive204と、を備えている。また、通信装置101は、I/FInterface205と、ディスプレイ206と、セキュアモジュール102と、を備えている。また、各構成部はバス200によってそれぞれ接続されている。ここで、プロセッサ201は、通信装置101の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、プロセッサ201のワークエリアとして使用される。HDD204は、プロセッサ201の制御にしたがって内蔵するハードディスクに対するデータのリード/ライトを制御する駆動装置である。インターフェース以下、I/Fと略する。205は、通信回線を通じてLANLocalAreaNetwork、WANWideAreaNetwork、インターネットなどのネットワーク110に接続され、このネットワーク110を介して他の装置に接続される。そして、I/F205は、ネットワーク110と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F205には、例えばモデムやLANアダプタなどを採用することができる。ディスプレイ206は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ206は、例えば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。セキュアモジュール102は、HDD204から対象プログラムTPを読み出す機能、対象プログラムTPをスキャンして改ざんを検出するスキャンプログラムを生成/更新する機能を備えている。また、セキュアモジュール102は、対象プログラムTPやスキャンプログラムをRAM203に実装する機能、暗号化機能、復号化機能、乱数生成機能等を備えている。セキュアモジュール102は、暗号鍵Kやユーザ識別情報をセキュアに保持している。ただし、セキュアモジュール102は、正規の暗号鍵K、ユーザ識別情報のみを保持し、暗号化機能、復号化機能、乱数生成機能等は、通信装置101が備えることとしてもよい。この場合、セキュアモジュール102は、通信装置101の要求にしたがって、暗号鍵Kやユーザ識別情報を出力する。セキュアモジュール102は、通信装置101に内蔵されていてもよく、外付けとしてもよい。図3は、図2のセキュアモジュール102のハードウェア構成例を示すブロック図である。セキュアモジュール102は、プロセッサ301と、I/F302と、暗号化回路303と、RAM304と、ROM305と、フラッシュメモリ306と、乱数生成回路307と、を備えている。プロセッサ301は、セキュアモジュール310内の制御や演算処理をおこなう。I/F302は、バス300を介して通信装置101内の各構成部と接続され、通信をおこなう。暗号化回路303は、データやプログラムを暗号化したり、暗号化されたデータやプログラムを復号したりする。RAM304は、プロセッサ301のワークエリアとして使用されるメインメモリである。ROM305は、プログラムやデータが格納される不揮発性メモリである。ROM305には、正規の暗号鍵K、ユーザ識別情報が格納されている。フラッシュメモリ306は、保存したデータやプログラムが書き換え可能な不揮発性メモリである。乱数生成回路307は、乱数を生成する。セキュアモジュール102は、外部から覗き見や改ざんができないのが前提であるため、できる限り、図3の構成のようにワンチップのLSIにして実装するべきである。例えば、セキュアモジュール102はTRM構造である。TRM構造は、半導体チップこの場合、セキュアモジュール102の内部解析や改ざんを物理的および論理的に防衛するための構造をいう。具体的には、セキュアモジュール102においては、内部に強固で粘着力が高いコーティングが施され、その表面が剥がされると内部の回路が完全に破壊されたり、ダミーの配線が配されている。通信装置101のハードウェア構成例2図4は、実施の形態にかかる通信装置101のハードウェア構成例2を示すブロック図である。図4において、通信装置101は、プロセッサ201と、ROM202と、RAM203と、HDD204と、I/F205と、ディスプレイ206と、セキュアモジュール102と、を備えている。図4において、図2と同様の構成部には同一の符号を付し、その説明を省略する。図4では、セキュアモジュール102は、暗号化機能、復号化機能、乱数生成機能等を備えるLSI401と、暗号鍵Kやユーザ識別情報をセキュアに保持する既存のSIMカード402とを接合して作成される。そして、LSI401は、必要に応じて暗号鍵KをSIMカード402から読み出して暗号化機能、復号化機能を使用する。図5は、図4のセキュアモジュール102のハードウェア構成例を示すブロック図である。図5において、セキュアモジュール102は、LSI401とSIMカード402とで構成される。LSI401は、プロセッサ301と、I/F302と、暗号化回路303と、RAM304と、ROM305と、フラッシュメモリ306と、乱数生成回路307と、を備えている。SIMカード402は、暗号鍵Kやユーザ識別情報をセキュアに保持している。セキュアモジュール102内で、LSI401と、SIMカード402とはI/F302によって接続され、通信をおこなう。図5において、図3と同様の構成部には同一の符号を付し、その説明を省略する。セキュアモジュール102は、外部から覗き見や改ざんができないのが前提であるため、図5の構成のように複数チップで実現した場合は、全体を一つのモジュールとし、全体を樹脂で固めて第3者が覗き見や改ざんが困難なように実装すべきである。セキュアモジュール102の機能的構成例次に、セキュアモジュール102の機能的構成例について説明する。図6は、セキュアモジュール102の機能的構成を示すブロック図である。セキュアモジュール102は、検出部601と、設定部602と、記憶部603と、生成部604と、加工部605と、判定部606と、取得部607と、暗号化部608と、出力部609と、を含む構成である。検出部601は、プログラムの改ざんを検出する機能を有する。ここで、プログラムとは、通信装置101の記憶装置に保持され、通信装置101の外部の装置センタ103との暗号化通信をセキュアモジュール102内に保持されている暗号鍵Kを用いておこなうプログラムである。例えば、プログラムとは、上述した対象プログラムTPである。例えば、通信装置101の記憶装置内の特定の記憶領域に記憶されているプログラムに対しスキャンプログラムが通信装置101で実行される。この場合、検出部601は、通信装置101でのスキャンプログラムの実行結果と記憶部603に記憶されたコードとに基づいて、特定の記憶領域に記憶されているプログラムの改ざんを検出する。ここで、特定の記憶領域とは、RAM203内の対象プログラムTPを含むスキャン対象となる領域であり、後述するスキャン対象領域230である。スキャンプログラムは、対象プログラムTPの改ざんを検出するプログラムであり、後述するスキャンプログラムSPである。この場合、スキャンプログラムは、通信装置101内で実行されている。コードおよび実行結果とは、対象プログラムTPのプログラムコードそのもの、または、対象プログラムTPのプログラムコードに所定の演算をおこなった結果である。所定の演算とは、例えば、四則演算や論理演算、チェックサムの算出やハッシュ関数によるハッシュ値算出である。これにより、検出部601は、クラッキングによる対象プログラムTPの改ざんを検出することができる。例えば、検出部601は、通信装置101の記憶装置内の特定の記憶領域に記憶されているプログラムに対するスキャンプログラムの実行結果と記憶部603に記憶されたコードとに基づいて、特定の記憶領域に記憶されているプログラムの改ざんを検出する。この場合、スキャンプログラムは、セキュアモジュール102内で実行されている。これにより、検出部601は、クラッキングによる対象プログラムTPの改ざんを検出することができる。また、検出部601は、安全性の担保されたセキュアモジュール102内のスキャンプログラムを実行するため、スキャンプログラム自体がクラッキングされる虞がない。検出部601は、図3に示したROM305、RAM304、フラッシュメモリ306、などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、その機能を実現する。設定部602は、セキュアモジュール102を、プログラムによる暗号鍵Kを用いた暗号化通信が不可能な状態に設定する機能を有する。具体的には、例えば、設定部602は、検出部601によってプログラムの改ざんが検出された場合に、後述する暗号化部608、出力部609、または全機能を使用不能に設定する。これにより、設定部602は、セキュアモジュール102を、改ざんが検出された対象プログラムTPからの暗号鍵Kの読出し要求や通信内容の暗号化依頼に対応しないようにできる。そのため、改ざんが検出された対象プログラムTPによる暗号鍵Kを用いた暗号化通信が不可能となる。具体的には、例えば、後述する判定部606によって、通信装置101を装ってクラッカーのコンピュータ104がセキュアモジュール102と通信していると判断される。この場合に、設定部602は、後述する暗号化部608、出力部609、または全機能を使用不能に設定する。これにより、設定部602は、セキュアモジュール102を、クラッカーのコンピュータ104との通信に対応しないようにできる。設定部602は、図3に示したROM305、RAM304、フラッシュメモリ306、などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、その機能を実現する。記憶部603は、プログラムに固有なコードを記憶する機能を有する。ここで、プログラムに固有なコードとは、対象プログラムTPのプログラムコードそのものであってもよく、プログラムコードに所定の演算をおこなった結果であってもよい。所定の演算とは、例えば、四則演算や論理演算、チェックサムの算出やハッシュ関数によるハッシュ値算出である。具体的には、例えば、記憶部603は、対象プログラムTPを予め通信装置101のRAM203とは別にセキュアモジュール102のRAM304に保持しておく。そして、記憶部603は、セキュアモジュール102のRAM304に保持された対象プログラムTPに固有のコードを記憶しておく。記憶部603は、図3に示したROM305、RAM304、フラッシュメモリ306、などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、その機能を実現する。生成部604は、プログラムに固有なコードを生成するスキャン処理をおこなうスキャンプログラムを生成する生成処理を実行する機能を有する。また、生成部604は、固有なコードと同一コードの生成を維持したままスキャンプログラムの内容をランダムに更新する更新処理を実行する機能を有する。ここで、スキャンプログラムとは、対象プログラムTPのプログラムコードを取得し、または取得したプログラムコードに所定の演算をおこなった結果を算出するプログラムである。具体的には、例えば、生成部604は、スキャン処理を通信装置101で実行させるスキャンプログラムを生成する。これにより、生成部604は、対象プログラムTPに固有のコードを生成することができ、対象プログラムTPの改ざんの検出に使用できる。また、生成部604は、通信装置101の記憶装置に直接アクセスをおこなうスキャン処理をセキュアモジュール102で実行させるスキャンプログラムを生成する。これにより、クラッカーによるスキャンプログラムへのクラッキングをセキュアモジュール102の構造によって防止できる。具体的には、例えば、生成部604は、定期的にスキャンプログラムを更新する。これにより、生成部604は、クラッカーによるスキャンプログラムのクラッキングを防止することができる。また、生成部604は、不定期的にスキャンプログラムを更新する。これにより、生成部604は、クラッカーによるスキャンプログラムのクラッキングを防止することができる。また、生成部604は、スキャンプログラムを、例えば、後述する難読化、スキャン対象領域変更、スキャン対象アドレスの順序変更、スキャン結果演算の追加、スキャンプログラムのアドレス追加により更新する。生成部604は、スキャンプログラムを更新することにより、クラッカーによってスキャンプログラムが解読され、改ざんされることを防止することができる。生成部604は、図3に示したROM305、RAM304、フラッシュメモリ306、などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、または、I/F302により、その機能を実現する。加工部605は、プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工する機能を有する。具体的には、例えば、加工部605は、対象プログラムTPを、後述する難読化、暗号化、シャッフリングにより加工する。これにより、クラッカーが対象プログラムTPを解読するのを困難にし、対象プログラムTPが解読され、改ざんされることを防止することができる。加工部605は、図3に示したROM305、RAM304、フラッシュメモリ306、などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、または、I/F302により、その機能を実現する。判定部606は、プログラムを実行する通信装置内のプロセッサへ要求を出力した時から、プロセッサからの返答を取得する時までの経過時間を計測する。そして、判定部606は、通信装置内のプロセッサとセキュアモジュールとの物理的距離に対応する許容時間以上であるか否かを判定する機能を有する。具体的には、例えば、判定部606は、セキュアモジュール102内にタイマーを設け、対象プログラムTPを実行する通信装置101内のプロセッサ201へ要求を出力した時から、タイマーの計測を開始する。そして、セキュアモジュール102は、返答を取得する時まで時間を計測し、計測した経過時間が予め定められた許容時間以上であるかを判定する。クラッカーのコンピュータ104が、通信装置101を装って、セキュアモジュール102と通信をおこなう場合が考えられる。この場合、タイマーの経過時間が、通信装置101内のプロセッサ301とセキュアモジュール102間の物理的距離から推測される所要時間より大きく上回ると推定される。よって、判定部606により、経過時間を測定することで、クラッカーによる通信装置101のなりすましを判断できる。判定部606は、図3に示したROM305、RAM304、フラッシュメモリ306、などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、または、I/F302により、その機能を実現する。取得部607は、プログラムが外部の装置に送信するデータを、送信に先だってプログラムから取得する機能を有する。また、取得部607は、暗号鍵Kの出力依頼をプログラムから取得する機能を有する。具体的には、例えば、取得部607は、I/F302を介して、対象プログラムTPからセンタ103に送信する通信内容や暗号鍵Kの出力依頼を取得する。これにより、取得部607は、対象プログラムTPから暗号鍵Kの出力依頼を取得できる。また、これにより、取得部607は、暗号化対象となる通信内容を取得することができる。取得部607は、図3に示したROM305、RAM304、フラッシュメモリ306、などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、または、I/F302により、その機能を実現する。暗号化部608は、暗号鍵Kを用いて取得部607によって取得された通信内容を暗号化する機能を有する。具体的には、例えば、暗号化部608は、暗号鍵Kを用いて通信内容を暗号化する。暗号鍵Kは、例えば、セキュアモジュール102の秘密鍵やセンタ103との共通鍵である。これにより、暗号化部608は、暗号鍵Kを外部に出力することなく、通信内容の暗号化をおこなうことができる。暗号化部608は、図3に示したROM305、RAM304、フラッシュメモリ306、などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、その機能を実現する。出力部609は、暗号鍵Kをプログラムに出力する機能を有する。具体的には、例えば、出力部609は、取得部607によって、暗号鍵Kの出力依頼を取得した場合に、暗号鍵Kを対象プログラムTPに出力する。これにより、出力部609は、対象プログラムTPに暗号鍵Kを供することができる。出力部609は、図3に示したROM305、RAM304、フラッシュメモリ306、などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、または、I/F302により、その機能を実現する。また、セキュアモジュール102は、取得部607および出力部609が扱うデータを暗号化する。これにより、クラッカーによって、セキュアモジュール102と通信装置101内のプロセッサ301との間の通信路がクラッキングされ、データが解析されることを防止することができる。セキュアモジュール102による対象プログラムTPの正当性チェックの内容次に、セキュアモジュール102による対象プログラムTPの正当性チェックの内容について説明する。本実施の形態において、通信装置101上の対象プログラムTPの正当性をチェックするセキュアモジュール102は、ハードウェアスキャンが不可能なインターフェースで通信装置101に接続される場合と、ハードウェアスキャンが可能なインターフェースで通信装置101と接続される場合とがある。まず、セキュアモジュール102が、ハードウェアスキャンが不可能なインターフェース例えば、USBインターフェースで通信装置101に接続される場合を例に挙げる。この場合、セキュアモジュール102が普通にUSBインターフェース経由でUSB対応ソフトウェア一般にこの種のソフトをドライバというにメモリのスキャン対象領域のスキャンを依頼することで対象プログラムTPの正当性をチェックできる。しかし、この場合には、USB対応ソフトウェア自身がクラッキングされる虞がある。例えば、通信装置101上のソフトウェアが書き換えられても、さも書き換えられていないような結果を返すようにクラッキングされる。これにより、スキャン機能が有効に働かない可能性がある。したがって、本実施の形態では、以下のような処理を実行する。通信装置101での動作概要例1図7は、通信装置101での動作概要例1を示す説明図である。本実施の形態では、まず、1セキュアモジュール102は、HDD204内に記憶されている暗号化された対象プログラム以下、暗号化対象プログラムETPを取得して、セキュアモジュール102内の暗号化回路303で対象プログラムTPに復号する。そして、セキュアモジュール102は、RAM203のスキャン対象領域230に、復号された対象プログラムTPを書き出す。対象プログラムTPはセキュアモジュール102内でも保持しておく。なお、HDD204内に記憶されているプログラムが暗号化されていない場合は、セキュアモジュール102では復号することなく、RAM203のスキャン対象領域230に、取得した対象プログラムTPを書き出す。また、セキュアモジュール102は、加工プログラムPPにより対象プログラムTPを加工してもよい。加工内容の詳細は後述するが、対象プログラムTPの働きは同じであっても処理内容や処理手順は異なるように加工する。また、この加工により、対象プログラムTPの一部となるプログラム片をセキュアモジュール102内に保持しておき、通信装置101での対象プログラムTPの実行の際に、セキュアモジュール102内のプログラム片を参照しないと、対象プログラムTPの実行を継続できないようにする。さらに、この加工により、対象プログラムTP内に、後述する演算プログラムを書き込んでおく。2セキュアモジュール102は、定期的にまたは不定期に、スキャンプログラムSPをランダムに自動生成/更新する生成プログラムGPを実行する。具体的には、対象プログラムTPをスキャンするという機能は変わらないが、処理内容が毎回異なるスキャンプログラムSPをランダム自動生成する。この自動生成は、例えば、数[msec]~数分間隔で定期的に実行してもよく、ランダムな間隔で不定期に実行してもよい。いずれにしても、クラッカーが改ざんに要する時間よりも短い間隔となるよう設定しておけばよい。生成プログラムGPによりランダムに変化させるのは、例えば、スキャン対象領域230、スキャン対象アドレスの順序、スキャン結果演算、演算したスキャン結果をセキュアモジュール102に戻す演算処理、スキャンプログラムSPコード、通信装置101のメモリ上の位置などが挙げられる。この生成プログラムGPによるスキャンプログラムSPのランダム自動生成/更新処理は、セキュアモジュール102内で実行されるため、生成過程を覗き見されたり、解析されたり、その結果無効化されることはない。なお、生成プログラムGPによりスキャンプログラムSPが生成/更新された場合、セキュアモジュール102でも対象プログラムTPを最新のスキャンプログラムSPでスキャンし、スキャン結果R1を更新しておく。スキャン結果R1はRAM304またはフラッシュメモリ306に記憶しておく。スキャン結果R1は、対象プログラムTPに固有のコードである。3スキャンプログラムSPは、プロセッサ201に、ドライバ231にRAM203上の非スキャン対象領域への配置を依頼させる。これにより、ドライバ231は、プロセッサ201に、セキュアモジュール102から送られてきたスキャンプログラムSPをRAM203の非スキャン対象領域に格納させる。4RAM203に格納されたスキャンプログラムSPは、プロセッサ201に、スキャン対象領域230内の対象プログラムTPをスキャンさせる。スキャン結果R2は、ドライバ231を介してセキュアモジュール102に通知される。5セキュアモジュール102はドライバ231から送られてくるスキャン結果R2を受け取る。スキャン結果R2を受け取ると、認証プログラムAPは、プロセッサ201に、セキュアモジュール102で保持しておいたスキャン結果R1と送られてきたスキャン結果R2を比較して一致判定を実行させる。一致していれば、対象プログラムTPが改ざんされていないこととなる。一方、対象プログラムTPが書き換えられていれば、セキュアモジュール102は、例えば、対象プログラムTPの実行停止指示をプロセッサ201に通知する。これにより、プロセッサ201は当該通知を受けると対象プログラムTPの実行を停止する。また、一定期間が経過してもドライバ231からスキャン結果R2を受け取れなかった場合も、対象プログラムTPの実行停止指示をプロセッサ201に通知する。セキュアモジュール102は、対象プログラムTPの動作が停止するまでは、上記2~5を繰り返す。このように、定期的または不定期にセキュアモジュール102によってランダムに生成/更新されたスキャンプログラムSPが動作するため、たとえスキャンプログラムSPが誰もが覗き見や書き換えが可能な通信装置101のメモリ空間に存在してもクラッカーにクラックされることはない。すなわち、クラッカーがスキャンプログラムSPを覗き見し、解析し、偽スキャンプログラムに書き換えるには、一定の時間が必要である。しかし、セキュアモジュール102が不定期あるいは定期的にスキャンプログラムをランダムに毎回違う形にするため、クラッカーは、解析し、偽スキャンプログラムに書き換える時間が得られない。通信装置101での動作概要例2次に、セキュアモジュール102が、ハードウェアスキャンが可能なインターフェース例えば、DMADirectMemoryAccessで通信装置101と接続される場合を例に挙げる。図8は、通信装置101での動作概要例2を示す説明図である。まず、1セキュアモジュール102は、HDD204内に記憶されている暗号化対象プログラムETPを取得して、セキュアモジュール102内の暗号化回路303で対象プログラムTPに復号する。そして、セキュアモジュール102は、RAM203のスキャン対象領域230に、復号された対象プログラムTPを書き出す。対象プログラムTPはセキュアモジュール102内でも保持しておく。2セキュアモジュール102は、定期的にまたは不定期に、スキャンプログラムSPをランダムに自動生成/更新する生成プログラムGPを実行する。具体的には、対象プログラムTPをスキャンするという機能は変わらないが、処理内容が毎回異なるスキャンプログラムSPをランダム自動生成する。この自動生成は、例えば、数[msec]~数分間隔で定期的に実行してもよく、ランダムな間隔で不定期に実行してもよい。いずれにしても、クラッカーが改ざんに要する時間よりも短い間隔となるよう設定しておけばよい。生成プログラムGPによりランダムに変化させるのは、例えば、スキャン対象領域230、スキャン対象アドレスの順序、スキャン結果演算、演算したスキャン結果をセキュアモジュール102に戻す演算処理、スキャンプログラムSPコード、通信装置101のメモリ上の位置などが挙げられる。この生成プログラムGPによるスキャンプログラムSPのランダム自動生成/更新処理は、セキュアモジュール102内で実行されるため、生成過程を覗き見されたり、解析されたり、その結果無効化されることはない。なお、生成プログラムGPによりスキャンプログラムSPが生成/更新された場合、セキュアモジュール102でも対象プログラムTPを最新のスキャンプログラムSPでスキャンし、スキャン結果R1を更新しておく。スキャン結果R1はRAM304またはフラッシュメモリ306に記憶しておく。スキャン結果R1は、対象プログラムTPに固有のコードである。3セキュアモジュール102内のスキャンプログラムSPは、スキャン対象領域230内にDMAを用いて直接アクセスし、対象プログラムTPをスキャンする。スキャン結果R2は、セキュアモジュール102に保持される。4そして、認証プログラムAPが、セキュアモジュール102で保持しておいたスキャン結果R1とスキャン結果R2を比較して一致判定をおこなう。一致していれば、対象プログラムTPが改ざんされていないこととなる。一方、対象プログラムTPが書き換えられていれば、セキュアモジュール102は、例えば、対象プログラムTPの実行停止指示をプロセッサ201に通知する。これにより、プロセッサ201は当該通知を受けると対象プログラムTPの実行を停止する。セキュアモジュール102は、対象プログラムTPの動作が停止するまでは、上記2~4を繰り返す。スキャンプログラムSPは、通信装置101のプロセッサ201やドライバを一切経由しないのでドライバのクラッキングによる改ざんや覗き見に対しても安全性が強い。スキャンプログラムSPの具体例図9~図12は、スキャンプログラムSPの具体例を示す説明図である。なお、図9~図12では、わかりやすさを考慮して単純なスキャンプログラムSPを例示している。なお、図9~図12において、○○番地と記述されている番地は、スキャン対象領域230に対応する論理アドレスである。図9は、対象プログラムTPのスキャンを実行するスキャンプログラムSPを示している。例えば、11番地に1、12番地に2、13番地に3、14番地に4、15番地に5が記憶されているとする。アドレス1~5のステップでは、11番地~15番地の内容をそれぞれ1001番地~1005番地に書き出す。そして、アドレス6のステップですべて加算して、アドレス7のステップで加算結果15を1010番地に書き込む。アドレス8のステップで1010番地の内容15に80して、さらに5するため、1580×5=475を得る。アドレス9のステップで、アドレス8の計算結果475を1011番地に書き込み、アドレス10のステップで1011番地の内容475をセキュアモジュール102に通知する。セキュアモジュール102でも、事前のスキャンによりスキャン結果を保持している。そして、事前のスキャン結果とスキャン対象領域230内の対象プログラムTPのスキャン結果とが一致すれば、対象プログラムTPは改ざんされていないこととなる。一方、不一致であれば、対象プログラムTPは改ざんされていることとなり、対象プログラムTPの実行を停止する。図10は、図9に示したスキャンプログラムSPにおいて、アドレス1~5の読込先となるスキャン対象アドレスを、11番地~15番地から21番地~25番地に変更した例を示している。図10では、21番地~25番地の値を読み込むため、セキュアモジュール102に通知するスキャン結果が図9の場合と異なることとなる。図11は、図9に示したスキャンプログラムSPにおいて、スキャン対象アドレスの順序変更および順序変更に依存した演算に変更した例を示している。具体的には、スキャンプログラムSPは、アドレス1~5でのスキャン対象アドレスの順序が変更されている。この順序変更だけでは、スキャン結果は図9と変わらないため、アドレス6のステップの演算もランダムに書き換えている。これにより、セキュアモジュール102に通知されるスキャン結果は図9のスキャン結果と異なる値となる。図12は、図11に示したスキャンプログラムSPにおいて、スキャンプログラムSPが特定の記憶領域に保持されていないと、スキャンが実行されない例を示している。この場合、セキュアモジュール102でも、スキャンプログラムSPが保持されるアドレスが特定済みである。具体的には、アドレス1~5のステップにおいて、読込先のスキャン対象アドレスの値に、スキャンプログラムSPが保持されているアドレスたとえば、先頭の番地を加算することとしている。この場合、セキュアモジュール102に保持されている図12のスキャンプログラムSPのスキャン結果R1と、スキャン対象領域230内の対象プログラムTPのスキャン結果R2が一致すれば、対象プログラムTPが改ざんされておらず、かつ、スキャンプログラムSPが特定の位置に配置されていることが確認できる。逆に、不一致の場合は、スキャンプログラムSPが意図的に他の位置に保持されている可能性があるため、そのような場合はスキャン結果の不一致により、対象プログラムTPが停止する。このように、スキャンプログラムSPの存在するメモリ番地が違えば、スキャン結果が変わってしまうこととなり、スキャンプログラムSPを想定と違うメモリ番地に書き込んで動作解析するようなクラッキングが困難になる。スキャンプログラム生成/更新処理図13は、スキャンプログラム生成/更新処理の手順を示すフローチャートである。スキャンプログラム生成/更新処理は、セキュアモジュール102のプロセッサ301が生成プログラムGPを実行する時の処理である。まず、セキュアモジュール102は、所定時間経過するまで待ち受けるステップS1301:No。例えば、すでに、対象プログラムTPがRAM203のスキャン対象領域230に書き込まれて実行開始したのをトリガにして、所定時間の計時を開始する。所定時間は、上述したように、数[msec]~数分間隔とする。なお、数[msec]~数分間隔の範囲内でランダムに設定してもよい。所定時間が経過した場合ステップS1301:Yes、セキュアモジュール102は、すでにスキャンプログラムSPが生成済みであるか否かを判断するステップS1302。生成済みでない場合ステップS1302:No、セキュアモジュール102は、スキャンプログラム生成処理図14~図15を実行しステップS1303、生成されたスキャンプログラムSPをRAM203の非スキャン対象領域に書き込むステップS1304。このあと、セキュアモジュール102は、生成されたスキャンプログラムSPで対象プログラムTPをスキャンし、スキャン結果をセキュアモジュール102内例えば、RAM304やフラッシュメモリ306に保持しておくステップS1305。そして、ステップS1301に戻る。また、ステップS1302において、スキャンプログラムSPが生成済みである場合ステップS1302:Yes、セキュアモジュール102は、スキャンプログラムSPを新規生成するか生成済みのスキャンプログラムSPを更新するかを決定するステップS1306。そして、新規生成である場合ステップS1307:新規生成、ステップS1303に移行する。一方、更新である場合ステップS1307:更新、スキャンプログラム更新処理図16~図17を実行しステップS1308、更新されたスキャンプログラムSPをRAM203の非スキャン対象領域に書き込むステップS1304。このあと、セキュアモジュール102は、更新されたスキャンプログラムSPで対象プログラムTPをスキャンし、スキャン結果をセキュアモジュール102内例えば、RAM304やフラッシュメモリ306に保持しておくステップS1305。そして、ステップS1301に戻る。なお、起動の契機となった対象プログラムTPが終了等により、スキャン対象領域230から消去されると、セキュアモジュール102は、スキャンプログラム生成/更新処理を終了する。スキャンプログラム生成処理図14は、図13に示したスキャンプログラム生成処理ステップS1303の詳細な処理手順例を示すフローチャートその1である。まず、セキュアモジュール102は、セキュアモジュール102外のRAM203のスキャン対象領域230[As,Ae]および書込先領域[Bs,Be]を設定するステップS1401。なお、ここで設定するスキャン対象領域230[As,Ae]は、対象プログラムTPと同じサイズでもよく、対象プログラムTPの一部と同じサイズでもよい。また、スキャン対象領域230[As,Ae]が対象プログラムTPの一部と同じサイズとする場合、スキャンプログラム生成処理を実行する都度、スキャン対象領域230[As,Ae]を異なる範囲とする。例えば、スキャンプログラム生成処理を実行する都度、スキャン対象領域230[As,Ae]をシフトしていく。セキュアモジュール102は、スキャン対象領域230よりも大きいメモリ領域[Ms,Me]以下、モジュール内設定領域というをセキュアモジュール102内のRAM304またはフラッシュメモリ306に設定するステップS1402。また、セキュアモジュール102は、各種変数の初期値を設定するステップS1403。iは初期値を1とする変数である。Aiは、スキャン対象領域230の任意のアドレスを示し、初期値は、先頭アドレスAsとする。Biは、書込先領域の任意のアドレスを示し、初期値は、先頭アドレスBsとする。Miは、モジュール内設定領域内の任意のアドレスを示し、初期値は、先頭アドレスMsとする。Yiは、生成されるスキャンプログラムSP内で用いられるアドレスであり、初期値は、Biとする。このあと、セキュアモジュール102は、Ai番地の内容を読み込んで、Bi番地に書き込むというスキャン命令を、モジュール内設定領域のMi番地に書き込むステップS1404。そして、セキュアモジュール102は、Ai>Aeであるか否かを判断するステップS1405。Aeは、スキャン対象領域230の末尾アドレスである。Ai>Aeでない場合ステップS1405:No、セキュアモジュール102は、iをインクリメントしてステップS1406、ステップS1404に戻る。一方、Ai>Aeである場合ステップS1405:Yes、図15のステップS1501に移行する。図15は、図13に示したスキャンプログラム生成処理ステップS1303の詳細な処理手順例を示すフローチャートその2である。図14のステップS1405:Yesの後、セキュアモジュール102は、モジュール内設定領域の番地MiをインクリメントしてステップS1501、Mi>Me-2であるか否かを判断するステップS1502。Mi>Me-2でない場合ステップS1502:No、セキュアモジュール102は、変数jの初期値をj=1としステップS1503、演算方法Zjをランダムに決定するステップS1504。演算方法とは、四則演算や論理演算、チェックサムの算出やハッシュ関数によるハッシュ値算出などが挙げられる。以降、演算方法Zjでの演算をZj演算と称す。そして、セキュアモジュール102は、jをインクリメントしステップS1505、j=yであるか否かを判断するステップS1506。ここで、yはYiの個数である。すなわち、モジュール内設定領域のMi番地の個数である。j=yでない場合ステップS1506:No、ステップS1504に戻る。一方、j=yとなった場合ステップS1506:Yes、セキュアモジュール102は、Y1番地の内容とY2番地の内容をZ1演算する。そして、セキュアモジュール102は、Z1演算結果とY3番地の内容とをZ2演算し、...、Zy-2演算結果とYy番地の内容とをZy-1演算するというスキャン命令ZMiを、Mi番地に書き込むステップS1507。このあと、セキュアモジュール102は、MiをインクリメントしステップS1508、スキャン命令ZMi―1の計算結果を、Bi1番地に書き込むというスキャン命令をMi番地に書き込むステップS1509。そして、ステップS1501に戻る。ステップS1502において、Mi>Me-2である場合ステップS1502:Yes、セキュアモジュール102は、Bi1番地の内容をセキュアモジュール102に通知するというスキャン命令をMi番地に書き込むステップS1510。そして、ステップS1304に移行する。このスキャンプログラム生成処理ステップS1303によれば、定期的または不定期にスキャンプログラムSPをランダムに生成することができる。スキャンプログラム更新処理図16は、スキャンプログラム更新処理ステップS1308の詳細な処理手順例を示すフローチャートその1である。まず、セキュアモジュール102は、更新内容をランダムに決定するステップS1601。ここで、更新内容とは、例えば、難読化、スキャン対象領域変更、スキャン対象アドレスの順序変更、スキャン結果演算の追加、スキャンプログラムSPのアドレス追加、何もしない、などが挙げられる。難読化、スキャン対象領域変更、スキャン対象アドレスの順序変更の順序変更については、図16で説明する。一方、スキャン結果演算の追加、スキャンプログラムSPのアドレス追加、何もしないについては、図17で説明する。なお、スキャンプログラム更新処理としては、これら6つの更新内容のうち、少なくとも1つ何もしないを除くでもあればよい。図16に戻って、セキュアモジュール102は、ランダムに決定された更新内容が、難読化であるか否かを判断するステップS1602。難読化とは、対象となる命令または命令群を複雑にすることで、解読を難しくする方法である。具体的には、本当に働きは、同じだが、処理内容が違うプログラムコードに置き換えることである。例えば、単一の命令の場合、X=1Yという命令をX=10-92Y-Yという命令に更新する。また、X=1Y、Z=X50をX=26Y、Z=X25という命令群に更新する。更新後の命令は、更新前と同じ働きをするが、別のプログラムコードである。こうすると生成プログラムGPは、更新前後において、働きは同じだが、プログラムコードが違うものになる。クラッカーが、生成プログラムGPのコードを覗き見したとしても、生成プログラムGPのプログラムコードが更新の都度違うのでそれだけ解析が困難である。また、生成プログラムGPのどの部分に肝心のコードがあるかわからなくなるという利点がある。難読化である場合ステップS1602:Yes、セキュアモジュール102は、難読化の対象範囲を対象プログラムTPの中から指定しステップS1603、指定された対象範囲の命令難読化可能な命令に限るの難読化を実行するステップS1604。そして、ステップS1601に戻る。一方、ステップS1602において、ランダムに決定された更新内容が、難読化でない場合ステップS1602:No、セキュアモジュール102は、ランダムに決定された更新内容が、スキャン対象領域変更か否かを判断するステップS1605。スキャン対象領域変更とは、スキャンプログラムSPにおいて指定されるスキャン対象アドレスを、スキャン対象領域230内の異なるアドレスに変更することである。例えば、図9に示したスキャンプログラムSPから図10に示したスキャンプログラムSPへ更新する際に、スキャン対象領域変更が実行されることとなる。スキャン対象領域変更である場合ステップS1605:Yes、セキュアモジュール102は、対象プログラムTPからスキャン対象領域230の変更の対象範囲を指定しステップS1606、指定された対象範囲のアドレスどうしを変更するステップS1607。そして、ステップS1601に戻る。スキャン対象領域変更をおこなっても、生成プログラムGPがアクセスするアドレスが変わるだけで、スキャンプログラムSPの働きは同じである。また、スキャン対象領域230が変更されることで、スキャン結果も更新されるため、セキュリティ強度が向上することとなる。また、ステップS1605において、ランダムに決定された更新内容が、スキャン対象領域変更でない場合ステップS1605:No、セキュアモジュール102は、ランダムに決定された更新内容が、スキャン対象アドレスの順序変更か否かを判断するステップS1608。スキャン対象アドレスの順序変更とは、スキャンプログラムSPのあるアドレスのコードとあるアドレスのコードを入れ替えることである。例えば、図9に示したスキャンプログラムSPから図11に示したスキャンプログラムSPへ更新する際に、スキャン対象アドレスの順序変更が実行されている。なお、スキャン対象アドレスの順序変更により実行順序が入れ替わることとなるが、入れ替え前後において、スキャン結果が変わる場合と変わらない場合とがある。スキャン対象アドレスの順序変更である場合ステップS1608:Yes、セキュアモジュール102は、対象プログラムTPから順序変更の対象範囲を指定しステップS1609、指定された対象範囲のアドレスのコードどうしを変更するステップS1610。そして、ステップS1601に戻る。一方、ステップS1608において、スキャン対象アドレスの順序変更でない場合ステップS1608:No、図17のステップS1701に移行する。図17は、スキャンプログラム更新処理ステップS1308の詳細な処理手順例を示すフローチャートその2である。ステップS1701において、セキュアモジュール102は、ステップS1601においてランダムに決定された更新内容が、スキャン結果演算であるか否かを判断するステップS1701。スキャン結果演算の追加である場合ステップS1701:Yes、セキュアモジュール102は、対象プログラムTPから演算対象アドレスを指定しステップS1702、演算方法をランダムに決定するステップS1703。ここで、演算方法とは、ある演算対象アドレスのデータとある演算対象アドレスのデータとについて、四則演算や論理演算をおこなったり、データごとにチェックサムの算出やハッシュ関数によるハッシュ値算出をおこなったりする。そして、セキュアモジュール102は、演算対象アドレス内のデータを用いて、ステップS1703で決定された演算方法で演算するスキャン命令を、更新元の生成プログラムGPに追加するステップS1704。また、セキュアモジュール102は、追加されたスキャン命令による演算結果をセキュアモジュール102に通知するスキャン命令を、更新元の生成プログラムGPに追加するステップS1705。このあと、ステップS1601に戻る。また、ステップS1601においてランダムに決定された更新内容が、スキャン結果演算の追加でない場合ステップS1701:No、セキュアモジュール102は、ランダムに決定された更新内容が、スキャンプログラムSPのアドレス追加であるか否かを判断するステップS1706。スキャンプログラムSPのアドレス追加とは、スキャンプログラムSPのあるアドレスの命令に、スキャンプログラムSPの書込先アドレスを与えて、この書込先アドレスに依存したスキャン結果を得る手法である。例えば、図11に示したスキャンプログラムSPから図12に示したスキャンプログラムSPへ更新する際に、スキャンプログラムSPのアドレス追加が実行されている。セキュアモジュール102は、ステップS1706において、スキャンプログラムSPのアドレス追加と判断された場合ステップS1706:Yes、追加対象アドレスを対象プログラムTPから指定するステップS1707。そして、図12のアドレス1~5に示したように、追加対象アドレス内のデータに、スキャンプログラムSPのアドレスの値を追加して、書き換えるステップS1708。このあと、ステップS1601に戻る。また、ステップS1706でスキャンプログラムSPのアドレス追加でもないと判断された場合ステップS1706:No、セキュアモジュール102は、生成プログラムGPの更新を終了するか否かを判断するステップS1709。具体的には、例えば、このケースでは、何もしないにランダム決定されているため、一度も更新していない場合は、更新を終了しないステップS1709:No。この場合は、ステップS1601に戻る。少なくとも1度、または、予め設定しておいた所定回数更新が行われた場合、ランダムに更新を終了するステップS1709:Yes。この場合、図13のステップS1304に戻る。この更新は、耐タンパ性構造のセキュアモジュール102内で実行されるため、スキャンプログラムSPの生成/更新を毎回セキュアにおこなうことができる。したがって、クラッキングによりスキャン機能を無効化しづらい状態となり、USB接続においてもセキュリティ強度を高めることができる。対象プログラムTPの加工次に、対象プログラムTPの加工について説明する。図7で説明したように、セキュアモジュール102内のプロセッサ301が加工プログラムPPを実行することで対象プログラムTPが加工される。ここで、対象プログラムTPの加工について具体的に説明する。図18は、対象プログラムTPの加工の概要を示す説明図である。プログラムは、アドレス単位の命令の集合体である。ここでは、わかりやすさを考慮して、対象プログラムTPが5つのアドレス単位の命令で成り立っているものとする。具体的には、分割プログラムP1~P5で構成されており、アドレスadr1~adr5の順に分割プログラムP1~P5が実行されるものとする。したがって、HDD204では、論理アドレスとして、実行順序となるアドレスadr1~adr5の並びで記憶されている。対象プログラムTP分割プログラムP1~P5は、加工プログラムPPにより配置順、すなわち、アドレスを入れ替えられる。図18では、アドレスadr1が分割プログラムP1、アドレスadr2が分割プログラムP4、アドレスadr3が分割プログラムP2、アドレスadr4が分割プログラムP3、アドレスadr5が分割プログラムP5に加工されている。この場合、分割プログラムP1,P4,P3の後続に、セキュアモジュール102へのRead命令を追記しておく。セキュアモジュール102内には、アドレス変更後の対応関係を示すプログラム片を保持しておく。例えば、プログラム片paは、分割プログラムP1の実行後に参照されるGoto文であり、アドレスadr3にジャンプするものとする。また、プログラム片pbは、分割プログラムP3の実行後に参照されるGoto文であり、アドレスadr2にジャンプするものとする。プログラム片pcは、分割プログラムP4の実行後に参照されるGoto文であり、アドレスadr5にジャンプするものとする。プログラム片pa~pcは加工の際に生成される。なお、加工前後では、スキャン結果R1は変わりない。図19~図22は、加工プログラムPPによる対象プログラムTPの加工例を示す説明図である。まず、図19では、HDD204内の対象プログラムTPのアドレス3~5の命令群を、アドレス7~9に移動させている。また、対象プログラムTPのアドレス6,7の命令群を、アドレス15,16に移動させている。アドレス1,2の命令群はそのままである。加工前では、アドレス2の命令Y=X8の次は、アドレス3の命令Z=XYが実行される。アドレス3の命令Z=XYは、アドレス7に移動したため、アドレス3の内容を、Goto7というプログラム片ジャンプ命令に書き換える。そして、セキュアモジュール102は、テーブルにアドレス3とプログラム片Goto7との組み合わせを保持する。同様に、加工前では、アドレス5の命令Z=Z1の次は、アドレス6の命令Z=5Zが実行される。アドレス5の命令Z=Z1はアドレス9に移動し、アドレス6の命令は、アドレス15に移動したため、アドレス9の次であるアドレス10の内容を、Goto15というプログラム片ジャンプ命令に書き換える。そして、セキュアモジュール102は、テーブルにアドレス10とプログラム片Goto15との組み合わせを保持する。そして、セキュアモジュール102は、対象プログラムTPをスキャン対象領域230に書き出す前に、プログラム片をセキュアモジュール102へのRead命令に書き換える。これにより、スキャン対象領域230に実装された加工後の対象プログラムTPが実行される場合、アドレス3のREAD命令により、セキュアモジュール102内のテーブルを参照して、アドレス3に対応するプログラム片Goto7を特定する。セキュアモジュール102は、プロセッサ201に対し、Goto7を通知することで、プロセッサ201は加工後の対象プログラムTPのアドレス7の命令を実行することとなる。このように、対象プログラムTPを構成する命令群を、対応関係を保持しておきながらシャッフリングする。したがって、対象プログラムTPも解読しにくい状態とすることで、セキュリティの向上を図ることができる。図20は、図19よりも加工を複雑化した例である。具体的には、図19では、プログラム片を単なるジャンプ命令としたが、図20では、単なるジャンプ命令ではなく、プログラム片に対象プログラムTPを構成する命令も挿入している。まず、図20では、HDD204内の対象プログラムTPのアドレス4,5の命令群を、アドレス8,9に移動させている。また、対象プログラムTPのアドレス6,7の命令群を、アドレス15,16に移動させている。アドレス1~3の命令群はそのままである。加工前では、アドレス2の命令Y=X8の次は、アドレス3の命令Z=XYが実行される。アドレス3の次であるアドレス4の命令は、アドレス8に移動したため、Goto文Goto8を生成する。そして、セキュアモジュール102は、アドレス3と、アドレス3の命令Z=XYおよび生成されたGoto文Goto8との組み合わせを保持する。このように、プログラム片を単なるジャンプ命令ではなく、複雑化することで、セキュリティの向上を図ることができる。図21は、対象プログラムTPを構成する命令群を暗号化する例である。図21では、セキュアモジュール102は、対象プログラムTP加工前のアドレス4~7の命令群を暗号鍵K1~K4で暗号化する。次に、暗号化された命令の前に、セキュアモジュール102へのREAD命令と復号命令を挿入する。これにより、挿入された命令分だけ、アドレスが繰り下がる。例えば、アドレス4の命令Y=Y1を暗号鍵K1で暗号化して、アドレス6に書き込む。そして、空いているアドレス4にセキュアモジュールへのREAD命令を挿入し、アドレス5に復号命令を挿入する。このあと、セキュアモジュール102では、対象プログラムTP加工後における暗号化命令を暗号化した鍵とその暗号化命令のために挿入されたREAD命令のアドレスとの組み合わせをテーブルに保持する。例えば、アドレス6に書き込まれた暗号化命令E1Y=Y1を暗号化した暗号鍵K1と、暗号化命令E1Y=Y1の生成により挿入されたREAD命令のアドレス4との組み合わせをテーブルに保持する。このあと、セキュアモジュール102は、テーブルをRAM304またはフラッシュメモリ306に保持しておき、加工した対象プログラムTPをスキャン対象領域に書き込む。対象プログラムTP加工後を実行する時は、挿入されたREAD命令により暗号鍵を読み出して、次の復号命令で、暗号化命令を復号する。これにより、復号された命令を実行することが可能となる。例えば、アドレス4のREAD命令があると、セキュアモジュール102は、テーブルを参照して暗号鍵K1をプロセッサ201に渡す。プロセッサ201は、暗号鍵K1とアドレス5の復号命令により、暗号化命令E1Y=Y1を復号して、アドレス6に命令Y=Y1を書き込む。そして、アドレス6で、命令Y=Y1を実行することとなる。こうすることで、スキャン対象プログラムが一部暗号化されていても、復号鍵をセキュアモジュールから取得することで処理の続行が可能になる。図22は、対象プログラムTPを構成する命令群を暗号化する例である。図22では、セキュアモジュール102は、対象プログラムTP加工前のアドレス4~7の命令群をセキュアモジュール102へのREAD命令に置換する。例えば、アドレス4の命令Y=Y1をREAD命令に置換する。そして、次のアドレス5に、アドレス4でセキュアモジュール102から読み出した命令Y=Y1を書き込む命令を挿入する。このあと、セキュアモジュール102は、置換対象の命令とそのアドレスとの組み合わせをテーブルに保持する。例えば、セキュアモジュール102は、置換対象となったアドレス4とその命令Y=Y1の組み合わせをテーブルに保持する。このあと、セキュアモジュール102は、テーブルをRAM304またはフラッシュメモリ306に保持しておき、加工した対象プログラムTPをスキャン対象領域230に書き込む。対象プログラムTP加工後を実行する時は、プロセッサ201は、置換されたREAD命令により置換元の命令を読み出して実行する。例えば、プロセッサ201は、アドレス4のREAD命令でセキュアモジュール102から命令Y=Y1を読み出して実行することとなる。対象プログラムTP加工処理図23は、対象プログラムTP加工処理の処理手順例を示すフローチャートである。まず、セキュアモジュール102が、暗号化対象プログラムETPをHDD204から読み出しステップS2301、暗号化対象プログラムETPを復号するステップS2302。なお、HDD204において対象プログラムTPが暗号化されていない場合は、HDD204から対象プログラムTPを読み出すだけでよい。ここで、対象プログラムTPに演算プログラムを書き込んでおくステップS2303。演算プログラムの内容については、図26および図27を用いて後述する。次に、セキュアモジュール102は、対象プログラムTPの加工方法をランダムに決定するステップS2304。具体的には、セキュアモジュール102は、難読化、暗号化図21を参照、シャッフリング図20,図21を参照、何もしないの中から決定する。そして、セキュアモジュール102は、加工方法が難読化であるか否かを判断するステップS2305。加工方法が難読化である場合ステップS2305:Yes、セキュアモジュール102は、対象プログラムTPから難読化の対象範囲を指定しステップS2306、対象範囲の命令を難読化するステップS2307。そして、ステップS2304に戻る。また、ステップS2305において、加工方法が難読化でない場合ステップS2305:No、セキュアモジュール102は、加工方法が暗号化であるか否かを判断するステップS2308。加工方法が暗号化である場合ステップS2308:Yes、セキュアモジュール102は、対象プログラムTPから暗号化の対象範囲を指定しステップS2309、対象範囲の命令を暗号化するステップS2310。このとき、図21に示したように、セキュアモジュール102は、暗号化対象のアドレスとそのアドレスの暗号化命令を復号する復号鍵の組み合わせをテーブルに保存する。そして、ステップS2304に戻る。また、ステップS2308において、加工方法が暗号化でない場合ステップS2308:No、セキュアモジュール102は、加工方法がシャッフリングであるか否かを判断するステップS2311。加工方法がシャッフリングである場合ステップS2311:Yes、セキュアモジュール102は、シャッフリング処理図19を実行するステップS2312。そして、シャッフリング処理の後、ステップS2304に戻る。また、ステップS2311において、加工方法がシャッフリングでない場合ステップS2311:No、セキュアモジュール102は、加工終了であるか否かを判断するステップS2313。具体的には、例えば、このケースでは、加工方法が何もしないにランダム決定されているため、一度も加工していない場合は、加工を終了しないステップS2313:No。この場合は、ステップS2304に戻る。少なくとも1度、または、予め設定しておいた所定回数加工が行われた場合、ランダムに加工を終了するステップS2313:Yes。これにより、加工処理を終了する。そして、RAM203のスキャン対象領域230に加工後の対象プログラムTPを書き出す。図24は、図23に示したシャッフリング処理ステップS2312の詳細な処理手順例を示すフローチャートである。ここでは、例として、図15に示したようなシャッフリングをする場合を例に挙げる。まず、セキュアモジュール102は、セキュアモジュール102内で加工先の領域を確保しステップS2401、対象プログラムTPを複数の命令群に分割するステップS2402。次に、セキュアモジュール102は、先頭の命令群を対象命令群に設定するステップS2403。そして、セキュアモジュール102は、対象命令群の後続命令群があるか否かを判断するステップS2404。後続命令群がある場合ステップS2404:Yes、セキュアモジュール102は、プログラム片たとえば、Goto文をランダムに生成するステップS2405。具体的には、セキュアモジュール102は、ランダムかつ対象命令群が入る領域が確保できるように生成する。このあと、セキュアモジュール102は、生成されたプログラム片のアドレスを、対象命令群の末尾アドレスの次のアドレスに設定するステップS2406。そして、セキュアモジュール102は、プログラム片とその書込先アドレスとの組み合わせをテーブルに追加するステップS2407。そして、セキュアモジュール102は、対象プログラムTPのプログラム片に割り当てられたアドレスに、プログラム片のRead命令を書き込むステップS2408。このあと、セキュアモジュール102は、プログラム片で指定されたアドレスプログラム片がGoto8なら8に、後続命令群を対象命令群に設定してステップS2409、ステップS2404に戻る。ステップS2404において、対象命令群の後続命令群がない場合ステップS2404:No、シャッフリング処理を終了して、ステップS2304に戻る。このように、対象プログラムTPを加工することで対象プログラムTPのクラッキングに対してもセキュリティ強度を高めることができる。なお、上述した加工処理は、暗号化対象プログラムTPを読み込む都度実行されるため、その都度、対象プログラムTPの加工方法が変更することとなる。したがって、クラッカーから見るとさらに対象プログラムTPの解析を困難にすることができる。また、スキャンプログラムSPが、スキャン対象領域230を不定期または定期的にスキャンした場合、そのスキャンプログラムSPが更新される前に、加工プログラムPPが、スキャン対象領域230にランダムにデータやコードを書き込む。そして、更新前に、加工後のスキャンプログラムSPでスキャンすることで、スキャンプログラムSPの正常動作を再々確認することができる。図25は、対象プログラムTPの加工例を示す説明図である。Aでは、対象プログラムTPのアドレス1~4の命令が難読化され、アドレス5~7にNOPを追加した例である。Bでは、アドレス1~4の命令はそのままで、アドレス5~7に命令が追加されているが、結果は同一となる例である。Cでは、アドレス1~4の命令はそのままで、アドレス5~7に無意味な命令が追加されているため、結果は同一となる例である。このように、図25の左側の対象プログラムTPをスキャンしたあと、図25の右側のように対象プログラムTPを加工して、スキャンプログラムSPを更新する前に加工後の対象プログラムTPをスキャンする。これにより、スキャンプログラムSPの正常動作を再々確認することができる。対象プログラムTP内の演算プログラム図26は、対象プログラムTP内の演算プログラムの内容を示す説明図である。演算プログラムは、所定の演算結果を算出するプログラムであり、セキュアモジュール102は、演算プログラムの演算結果が正規の値であるか否かによって対象プログラムTPの正当性を判断する。例えば、演算プログラムは、1番地の値に第1の秘密番号yyyを乗算した値を2番地に格納し、2番地の値に第2の秘密番号zzzを乗算した値を3番地に格納するプログラムであるとする。ここで、セキュアモジュール102は、ランダムに生成した値Xを1番地に格納する。セキュアモジュール102は、Xから演算プログラムによって算出されるべき正規の値Xansを算出しておく。一方、対象プログラムTPは、1番地のXを読出し、Xに第1の秘密番号yyyを乗算した値Yを2番地に格納し、2番地の値Yに第2の秘密番号zzzを乗算した値Xculを3番地に格納する。セキュアモジュール102は、定期的に3番地の値を参照し、3番地の値Xculを読出し、正規の値Xansと比較する。セキュアモジュール102は、1番地にXを格納してから所定時間以内にXculとXansが一致した場合は、対象プログラムTPが正規プログラムであると判断する。セキュアモジュール102は、所定時間以内にXculとXansが一致しなかった場合は、対象プログラムTPが不正プログラムであると判断する。図27は、セキュアモジュール102による認証処理の詳細を示す説明図である。まず、セキュアモジュール102は、時間計測を開始するステップS2701。次に、セキュアモジュール102は、ランダムに生成した値Xを所定の第1のメモリ番地に格納するステップS2702。そして、Xから演算プログラムによって算出されるべき正規の値Xansを算出するステップS2703。次に、セキュアモジュール102は、所定の第2のメモリ番地を読み出すステップS2704。セキュアモジュール102は、読み出した値がXansと一致するか判定するステップS2705。Xansと一致する場合ステップS2705:Yes、セキュアモジュール102は、対象プログラムTPを正規プログラムと判断してステップS2706、認証処理を終了する。一方、Xansと一致しない場合ステップS2705:No、セキュアモジュール102は、ステップS2701の時間計測の開始から一定時間が経過したか判定するステップS2707。一定時間が経過していない場合ステップS2707:No、ステップS2704に戻る。一方、一定時間が経過した場合ステップS2707:Yes、セキュアモジュール102は、対象プログラムTPを不正プログラムと判断してステップS2708、認証処理を終了する。なお、この認証処理演算プログラムの内容は、毎回違う内容になるように加工してもよい。この加工処理を暗号化対象プログラムTPを読み込む都度実行すれば、その都度、対象プログラムTPの中の演算プログラムが変更されることとなる。したがって、クラッカーから見ると認証処理演算プログラムの解析となりすましを困難にすることができる。セキュアモジュール102の暗号化処理プログラム図28は、セキュアモジュール102による暗号化許可のフローチャートを示す説明図である。まず、セキュアモジュール102は、対象プログラムTPが改ざんされているか否かを判断するステップS2801。改ざんされていない場合ステップS2801:No、セキュアモジュール102は、対象プログラムTPから処理要求を受信したか否か判断するステップS2802。処理要求を受信した場合ステップS2802:Yes、セキュアモジュール102は、対象プログラムTPからの処理要求にしたがって処理を行いステップS2803、ステップS2801に戻る。また、処理要求を受信していない場合ステップS2802:No、ステップS2801に戻る。一方、改ざんされている場合ステップS2801:Yes、セキュアモジュール102は、エラーモードに移行してステップS2804、暗号化許可処理を終了する。エラーモードでは、セキュアモジュール102は、対象プログラムTPを再起動しない限り、対象プログラムTPからの操作を受け付けない状態となる。通信装置101とセンタ103との通信次に図29~図33を用いて、通信装置101とセンタ103との通信の内容について説明する。まず、図29および図30に示すように、通信装置101とセンタ103とは、相互に、通信の相手方が正規の装置であることを認証する。図29は、通信装置101とセンタ103との相互認証を示すシーケンス図その1である。ここでは、セキュアモジュール102は、センタ103の公開鍵およびセキュアモジュール102の秘密鍵を保持しており、センタ103は、セキュアモジュール102の公開鍵およびセンタ103の秘密鍵を保持している。ただし、セキュアモジュール102とセンタ103で共通な共通鍵を保持しているとしてもよい。図29に示すように、まず、対象プログラムTPは、発生させた通信装置乱数と、ユーザ情報と、を認証依頼としてセンタ103に送信するステップS2901。認証依頼を受信したセンタ103は、センタ103で発生させたセンタ乱数と、センタ103で生成したセッション鍵一時鍵と、受信した認証依頼に含まれる通信装置乱数と、をセンタの秘密鍵により暗号化するステップS2902。そして、センタ103は、暗号化したセンタ乱数と、セッション鍵と、通信装置乱数と、を対象プログラムTPに送信するステップS2903。暗号化されたセンタ乱数と、セッション鍵と、通信装置乱数と、を受信した対象プログラムTPは、暗号化されたセンタ乱数と、セッション鍵と、通信装置乱数と、を、復号依頼としてセキュアモジュール102に送信するステップS2904。復号依頼を受信したセキュアモジュール102は、対象プログラムTPからプログラム認証情報を取得するステップS2905。そして、セキュアモジュール102は、取得したプログラム認証情報によって対象プログラムTPの正当性を認証するステップS2906。次に、セキュアモジュール102は、通信装置乱数と、センタ乱数と、セッション鍵と、をセンタ103の公開鍵により復号するステップS2907。セキュアモジュール102は、復号したセッション鍵を保持しておく。また、セキュアモジュール102は、復号したセンタ乱数をセキュアモジュール102の秘密鍵で再暗号化するステップS2908。そして、セキュアモジュール102は、復号した通信装置乱数と、再暗号化したセンタ乱数と、を対象プログラムTPに送信するステップS2909。通信装置乱数と、再暗号化されたセンタ乱数を受信した対象プログラムTPは、受信したセキュアモジュール102に復号された通信装置乱数と、ステップS2901において送信した通信装置乱数とが一致するか判定する。一致しているならば、対象プログラムTPは、正規のセンタ103に接続されていることを認証するステップS2910。また、対象プログラムTPは、再暗号化されたセンタ乱数を、センタ103に送信するステップS2911。そして、センタ103は、受信した再暗号化されたセンタ乱数を復号するステップS2912。センタ103は、復号したセンタ乱数と、ステップS2903において送信したセンタ乱数とが一致するか判定する。一致しているならば、センタ103は、正規の対象プログラムTPと接続されていることを認証するステップS2913。そして、図30のステップS3001処理に進む。図30は、通信装置101とセンタ103との相互認証を示すシーケンス図その2である。図30に示すように、対象プログラムTPを認証したセンタ103は、接続確認を、セッション鍵により暗号化するステップS3001。そして、センタ103は、暗号化した接続確認を対象プログラムTPに送信するステップS3002。暗号化された接続確認を受信した対象プログラムTPは、暗号化された接続確認を、復号依頼としてセキュアモジュール102に送信するステップS3003。復号依頼を受信したセキュアモジュール102は、対象プログラムTPからプログラム認証情報を取得するステップS3004。そして、セキュアモジュール102は、取得したプログラム認証情報によって対象プログラムTPの正当性を認証するステップS3005。次に、セキュアモジュール102は、接続確認を復号依頼からセンタ103のセッション鍵により復号するステップS3006。セキュアモジュール102は、復号した接続確認を対象プログラムTPに送信するステップS3007。接続確認を受信した対象プログラムTPは、センタ103と相互接続が完了したと判断して、ユーザからの入力待ちの状態に移行するステップS3008。ここで、相互認証の際、通信装置101とセンタ103それぞれの乱数を送信するのは、いわゆる再送攻撃を防止するための処理である。すなわち、相互認証を複数回おこなった場合、乱数を送信しないと、常に同じ暗号化された信号列を送信することになる。よって、クラッカーは暗号化された信号列を復号することができずとも、全く同じ信号列をセンタ103に送ることで正規の通信装置として偽装できる。これを防止するため、相互認証の都度、乱数を送信し、相互認証の信号列が変わるようにする。なお、乱数を予測されると、クラッカーに信号列を偽装される虞があるため、乱数生成機能もセキュアである必要がある。これにより、通信装置101とセンタ103とが、相互に通信の相手方が正規の装置であることを認証してから、通信装置101は対象プログラムTPによるデータの送受信をおこなうことができる。次に、図31を用いて、対象プログラムTPが書籍購入用の通信プログラムである場合の通信装置101とセンタ103との暗号化通信の内容について説明する。図31は、通信装置101とセンタ103との暗号化通信を示すシーケンス図である。ここで、ユーザが、届け先住所と購入書籍の情報からなる購入情報を対象プログラムTPに入力したとする。図31に示すように、対象プログラムTPは、ユーザから購入情報の入力を受けると、購入情報を、暗号化依頼としてセキュアモジュール102に送信するステップS3101。暗号化依頼を受信したセキュアモジュール102は、対象プログラムTPからプログラム認証情報を取得するステップS3102。そして、セキュアモジュール102は、取得したプログラム認証情報によって対象プログラムTPの正当性を認証するステップS3103。購入情報を受信したセキュアモジュール102は、購入情報を、セキュアモジュール102のセッション鍵により暗号化するステップS3104。そして、セキュアモジュール102は、暗号化した購入情報を対象プログラムTPに送信するステップS3105。暗号化された購入情報を受信した対象プログラムTPは、暗号化された購入情報をセンタ103に送信するステップS3106。暗号化された購入情報を受信したセンタ103は、購入情報を、センタ103のセッション鍵により復号するステップS3107。センタ103は、復号した購入情報に基づいて、商品の販売処理をおこなうステップS3108。これにより、セキュアモジュール102は、対象プログラムTPが正規プログラムであることを確認してから、購入情報の暗号化をおこなうため、偽装された購入情報がセンタ103に送信されることを防止できる。次に、図32および図33を用いて、対象プログラムTPが希望ソフトウェアサービスのダウンロード用の通信プログラムである場合の通信装置101とセンタ103との暗号化通信の内容について説明する。図32は、通信装置101とセンタ103とのプログラムコードの暗号化通信を示すシーケンス図その1である。ここで、ユーザが、希望ソフトウェアサービスのサービス識別番号を対象プログラムTPに入力したとする。図32に示すように、対象プログラムTPは、ユーザからサービス識別番号の入力を受けると、サービス識別番号を、暗号化依頼としてセキュアモジュール102に送信するステップS3201。暗号化依頼を受信したセキュアモジュール102は、対象プログラムTPからプログラム認証情報を取得するステップS3202。そして、セキュアモジュール102は、取得したプログラム認証情報によって対象プログラムTPの正当性を認証するステップS3203。サービス識別番号を受信したセキュアモジュール102は、サービス識別番号を、セキュアモジュール102のセッション鍵により暗号化するステップS3204。そして、セキュアモジュール102は、暗号化したサービス識別番号を対象プログラムTPに送信するステップS3205。暗号化されたサービス識別番号を受信した対象プログラムTPは、暗号化されたサービス識別番号をセンタ103に送信するステップS3206。暗号化されたサービス識別番号を受信したセンタ103は、サービス識別番号を、センタのセッション鍵により復号するステップS3207。次に、センタ103は、復号したサービス識別番号と、サービス識別番号に対応するプログラムコードと、をセンタ103のセッション鍵により暗号化する。そして、センタ103は、暗号化したサービス識別番号と、プログラムコードと、を対象プログラムTPに送信するステップS3208。次に、図33のステップS3301の処理に進む。図33は、通信装置101とセンタ103とのプログラムコードの暗号化通信を示すシーケンス図その2である。図33に示すように、対象プログラムTPは、受信した暗号化されたサービス識別番号と、プログラムコードと、を、復号依頼としてセキュアモジュール102に送信するステップS3301。復号依頼を受信したセキュアモジュール102は、対象プログラムTPからプログラム認証情報を取得するステップS3302。そして、セキュアモジュール102は、取得したプログラム認証情報によって対象プログラムTPの正当性を認証するステップS3303。暗号化されたサービス識別番号とプログラムコードとを受信したセキュアモジュール102は、サービス識別番号とプログラムコードとを、セキュアモジュール102のセッション鍵により復号するステップS3304。次に、セキュアモジュール102は、復号したプログラムコードを、ランダムに生成した鍵により再暗号化するステップS3305。そして、セキュアモジュール102は、サービス識別番号と、再暗号化したプログラムコードと、を対象プログラムTPに送信するステップS3306。また、セキュアモジュール102は、ランダムに生成した暗号鍵と、サービス識別番号と、を対応付けて保存するステップS3307。次に、対象プログラムTPは、受信したサービス識別番号と、再暗号化されたプログラムコードと、を対応付けて保存するステップS3308。これにより、セキュアモジュール102は、対象プログラムTPが正規プログラムであることを確認してから、サービス識別番号の暗号化をおこなうため、偽装されたサービス識別番号がセンタ103に送信されることを防止できる。また、セキュアモジュール102は、センタ103から送信されたプログラムコードを再暗号化して、プログラムコードの復号鍵をセキュアに管理するため、プログラムコードの改ざんを防止できる。以上説明したように、通信装置101およびセキュアモジュール102によれば、対象プログラムTPの改ざんを検出し、検出した対象プログラムTPが暗号化通信ができないようにするため、安全な暗号化通信が実現できる。また、改ざんの検出は、安全性の担保されたセキュアモジュール102内のスキャンプログラムSPによりおこなわれるため、スキャンプログラムSPがクラッキングされる虞がなく、安全に改ざんの検出ができる。また、改ざんの検出が通信装置101内のスキャンプログラムSPによりおこなわれる場合には、セキュアモジュール102は通信装置101内のスキャンプログラムSPの更新をランダムにおこなう。そのため、クラッカーによりスキャンプログラムSPがクラッキングされる虞を減らすことができる。また、セキュアモジュール102は、スキャンプログラムSPを、難読化、スキャン対象領域変更、スキャン対象アドレスの順序変更、スキャン結果演算の追加、スキャンプログラムのアドレス追加により更新する。これにより、クラッカーによってスキャンプログラムSPが解読され、改ざんされることを防止することができる。また、セキュアモジュール102は、対象プログラムTPを加工することにより、クラッカーにより対象プログラムTPがクラッキングされる虞を減らすことができる。例えば、セキュアモジュール102は、対象プログラムTPを、難読化、暗号化、シャッフリングにより加工する。これにより、クラッカーによって対象プログラムTPが解読され、改ざんされることを防止することができる。そして、改ざんが検出された場合には、セキュアモジュール102は、暗号化部608、出力部609、または全機能を使用不能に設定する。これにより、改ざんが検出された対象プログラムTPからの暗号鍵Kの読出し要求や通信内容の暗号化依頼に対応しないようにできるため、改ざんが検出された対象プログラムTPによる暗号鍵Kを用いた暗号化通信が不可能となる。また、セキュアモジュール102は、通信装置101内に対する要求の出力時とその応答の取得時との時間間隔から、セキュアモジュール102と応答の送信元との物理的距離を推定する。これにより、セキュアモジュール102は、クラッカーのコンピュータ104による通信装置101のなりすましを判定し、クラッカーのコンピュータ104との通信に対応しないようにできる。また、セキュアモジュール102は、通信装置101内の対象プログラムTPとやり取りするデータを暗号化する。そのため、クラッカーによって、セキュアモジュール102と通信装置101内のプロセッサ301との間の通信路がクラッキングされ、データが解析されることを防止することができる。このように安全な暗号化通信が実現されるため、セキュアモジュール102のユーザおよびセンタ103のユーザの損害を防止できる。上述した実施の形態に関し、さらに以下の付記を開示する。付記1通信装置内に備えられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールと、前記通信装置内の前記セキュアモジュール外に備えられ、前記通信装置の外部の装置との暗号化通信を前記セキュアモジュール内に保持されている暗号鍵を用いておこなうプログラムが保持された記憶装置と、前記セキュアモジュールに備えられ、前記プログラムの改ざんを検出する検出手段と、前記セキュアモジュールに備えられ、前記検出手段によって前記プログラムの改ざんが検出された場合に、前記セキュアモジュールを、前記プログラムによる前記暗号鍵を用いた前記暗号化通信が不可能な状態に設定する設定手段と、を備えることを特徴とする通信装置。付記2前記セキュアモジュールに備えられ、前記プログラムに固有なコードを記憶する記憶手段と、前記セキュアモジュールに備えられ、前記プログラムに固有なコードを生成するスキャン処理を前記通信装置で実行させるスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行する生成手段と、を備え、前記検出手段は、前記記憶装置内の特定の記憶領域に記憶されている前記プログラムに対し前記スキャンプログラムが前記通信装置で実行された場合、前記通信装置での前記スキャンプログラムの実行結果と前記記憶手段に記憶された前記コードとに基づいて、前記特定の記憶領域に記憶されている前記プログラムの改ざんを検出することを特徴とする付記1に記載の通信装置。付記3前記セキュアモジュールに備えられ、前記プログラムに固有なコードを記憶する記憶手段と、前記セキュアモジュールに備えられ、前記記憶装置に直接アクセスをおこない読み出した前記プログラムから前記プログラムに固有なコードを生成するスキャン処理を実行するスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行する生成手段と、を備え、前記検出手段は、前記スキャンプログラムの実行結果と、前記記憶手段に記憶された前記コードとに基づいて、前記プログラムの改ざんを検出することを特徴とする付記1に記載の通信装置。付記4前記生成手段は、前記更新処理を定期的に実行することを特徴とする付記2または3に記載の通信装置。付記5前記生成手段は、前記更新処理を不定期に実行することを特徴とする付記2または3に記載の通信装置。付記6前記生成手段は、前記更新処理として、前記スキャンプログラムの命令を難読化することを特徴とする付記2~5のいずれか一つに記載の通信装置。付記7前記生成手段は、前記更新処理として、前記スキャンプログラムで指定された前記特定の記憶領域内のスキャン先アドレスを変更することを特徴とする付記2~5のいずれか一つに記載の通信装置。付記8前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令群においてそれぞれ指定された前記特定の記憶領域内のスキャン先アドレスの順序を変更することを特徴とする付記2~5のいずれか一つに記載の通信装置。付記9前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令で指定されたデータに基づく演算命令の内容を変更して、変更後の演算命令による演算結果を前記記憶手段に記憶しておき、前記変更後の演算命令による演算結果を前記セキュアモジュールに返す命令を追加することを特徴とする付記2~5のいずれか一つに記載の通信装置。付記10前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令を、前記スキャンプログラムの前記通信装置での格納先アドレスに依存した命令に変更することを特徴とする付記2~5のいずれか一つに記載の通信装置。付記11前記生成手段は、前記生成処理として、前記固有なコードと同一コードの生成を維持したまま記述内容が異なるスキャンプログラムをランダムに生成することを特徴とする付記2または3に記載の通信装置。付記12前記生成手段は、前記生成処理を定期的に実行することを特徴とする付記11に記載の通信装置。付記13前記生成手段は、前記生成処理を不定期に実行することを特徴とする付記12に記載の通信装置。付記14前記プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工する加工手段を備え、前記加工手段による加工後のプログラムに固有なコードを前記記憶手段に上書きすることを特徴とする付記2~13のいずれか一つに記載の通信装置。付記15前記プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工し、加工後のプログラムに固有なコードを前記記憶手段に上書きする加工手段を備え、前記検出手段は、前記加工手段による加工後のプログラム内の演算プログラムの演算結果の正当性に基づいて、前記加工後のプログラムの改ざんを検出することを特徴とする付記1に記載の通信装置。付記16前記加工手段は、前記通信装置において前記スキャンプログラムの実行中に、前記プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工し、前記加工後のプログラムに固有なコードを前記記憶手段に上書きすることを特徴とする付記15に記載の通信装置。付記17前記加工手段は、前記プログラムの命令を難読化することを特徴とする付記14~16のいずれか一つに記載の通信装置。付記18前記加工手段は、前記プログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令と当該ジャンプ命令のアドレスとの組み合わせを特定するテーブルを前記記憶手段に記憶し、シャッフリング後の前記プログラムにおける前記ジャンプ命令の内容を前記テーブルのリード命令に変更して、前記特定の記憶領域に書き出すことを特徴とする付記14~16のいずれか一つに記載の通信装置。付記19前記加工手段は、前記プログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令およびジャンプ元命令と当該ジャンプ元命令のアドレスとの組み合わせを特定するテーブルを前記記憶手段に記憶し、シャッフリング後の前記プログラムにおける前記ジャンプ元命令の内容を前記テーブルのリード命令に変更して、前記特定の記憶領域に書き出すことを特徴とする付記14~16のいずれか一つに記載の通信装置。付記20前記加工手段は、前記プログラムの任意の命令を、当該命令を暗号化した暗号化命令と、前記セキュアモジュールに対するリード命令と、前記暗号化命令を復号する復号命令とに置換し、前記リード命令のアドレスと前記暗号化命令を復号する復号鍵との組み合わせを特定するテーブルを前記記憶手段に記憶し、加工後の前記プログラムを前記特定の記憶領域に書き出すことを特徴とする付記14~16のいずれか一つに記載の通信装置。付記21前記加工手段は、前記プログラムの任意の命令を前記セキュアモジュールに対するリード命令に置換し、当該リード命令のアドレスと置換元の命令との組み合わせを特定するテーブルを前記記憶手段に記憶し、加工後の前記プログラムを前記特定の記憶領域に書き出すことを特徴とする付記14~16のいずれか一つに記載の通信装置。付記22前記検出手段によって前記プログラムの改ざんが検出されなかった場合に、前記プログラムを実行する前記通信装置内のプロセッサへ要求を出力した時から、前記プロセッサからの返答を取得する時までの経過時間が、前記通信装置内の前記プロセッサと前記セキュアモジュールとの物理的距離に対応する許容時間以上であるか否かを判定する判定手段を前記セキュアモジュール内に備え、前記設定手段は、前記判定手段によって前記許容時間以上であると判定された場合に、前記セキュアモジュールを、前記プログラムによる前記暗号鍵を用いた前記暗号化通信が不可能な状態に設定することを特徴とする付記1~21のいずれか一つに記載の通信装置。付記23前記セキュアモジュールに備えられ、前記プログラムが前記外部の装置に送信するデータを、前記送信に先だって前記プログラムから取得する取得手段と、前記セキュアモジュールに備えられ、前記取得手段によって取得された前記データを前記暗号鍵を用いて暗号化する暗号化手段と、を備え、前記設定手段は、前記暗号化手段を不能な状態に設定することにより、前記セキュアモジュールを、前記プログラムによる前記暗号鍵を用いた前記暗号化通信が不可能な状態に設定することを特徴とする付記1~22のいずれか一つに記載の通信装置。付記24前記セキュアモジュールに備えられ、前記暗号鍵の出力依頼を前記プログラムから取得する取得手段と、前記セキュアモジュールに備えられ、前記取得手段によって前記出力依頼が取得された場合に、前記暗号鍵を前記プログラムに出力する出力手段と、を備え、前記設定手段は、前記出力手段を不能な状態に設定することにより、前記セキュアモジュールを、前記プログラムによる前記暗号鍵を用いた前記暗号化通信が不可能な状態に設定することを特徴とする付記1~22のいずれか一つに記載の通信装置。付記25前記データは、前記セキュアモジュールと前記プログラムを実行するプロセッサとが有する共通鍵を用いて暗号化されることを特徴とする付記23または24に記載の通信装置。付記26前記暗号鍵は、前記外部の装置が有する公開鍵に対応する前記セキュアモジュールの秘密鍵であることを特徴とする付記22~25のいずれか一つに記載の通信装置。付記27前記暗号鍵は、前記セキュアモジュールと前記外部の装置とが共通して有する共通鍵であることを特徴とする付記22~25のいずれか一つに記載の通信装置。付記28通信装置内に備えられ、内部に格納された情報を外部から参照ができない構造のセキュアモジュールにおいて、前記通信装置内の前記セキュアモジュール外に備えられた記憶装置に保持され、前記通信装置の外部の装置との暗号化通信を前記セキュアモジュール内に保持されている暗号鍵を用いておこなうプログラムの改ざんを検出する検出手段と、前記検出手段によって前記プログラムの改ざんが検出された場合に、前記セキュアモジュールを、前記プログラムによる前記暗号鍵を用いた前記暗号化通信が不可能な状態に設定する設定手段と、を備えることを特徴とするセキュアモジュール。"