(57)【要約】【課題】セキュアモジュールにかかる処理負荷の抑制化を図ること。【解決手段】情報処理装置１０１は、実行中のアプリ１０３がセキュアな状態であるか否かを検証する第１の検証処理１０４を実行する。セキュアモジュール１０２は、第１の検証処理１０４の実行コードの特徴を抽出した第１の特徴量および第１の検証処理１０４を認証する認証処理の実行コードの両方またはいずれか一方を記憶する記憶部１１１にアクセス可能である。そして、セキュアモジュール１０２は、記憶部１１１の記憶内容に基づいて、実行中の第１の検証処理１０４がセキュアな状態であるか否かを検証する第２の検証処理１０５を実行する。【選択図】図１
2014235326.tif 000002
【特許請求の範囲】
【請求項１】
内部に格納された情報が外部から参照できない構造を有するセキュアモジュールと、前記セキュアモジュールと通信可能な情報処理装置と、を含むシステムであって、
前記情報処理装置は、
第１のコンピュータを有し、
前記情報処理装置により実行中のアプリケーションがセキュアな状態であるか否かを検証する第１の検証処理を前記第１のコンピュータが実行し、
前記セキュアモジュールは、
第２のコンピュータと、
前記第１の検証処理の実行コードの特徴を抽出した第１の特徴量および前記第１の検証処理を認証する認証処理の実行コードの両方またはいずれか一方を記憶する記憶部と、を有し、
前記記憶部の記憶内容に基づいて、前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する第２の検証処理を前記第２のコンピュータが実行する、
ことを特徴とするシステム。
【請求項２】
前記第２のコンピュータは、
前記第１のコンピュータによって実行中の前記第１の検証処理の実行コードの特徴を抽出した第２の特徴量を算出し、
算出した前記第２の特徴量と、前記記憶部に記憶された前記第１の特徴量とを比較することにより、前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する、
処理を実行することを特徴とする請求項１に記載のシステム。
【請求項３】
前記記憶部は、
前記第１の検証処理の実行コードが暗号化された暗号化コードと前記暗号化コードを復号可能な復号鍵とを記憶しており、
前記セキュアモジュールは、
前記暗号化コードから、前記復号鍵を用いて前記第１の検証処理の実行コードを復号する復号部を有し、
前記第２のコンピュータは、
前記復号部が復号した前記第１の検証処理の実行コードの特徴を抽出した第１の特徴量を算出して前記記憶部に格納し、
算出した前記第２の特徴量と、前記記憶部に格納した前記第１の特徴量とを比較することにより、前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する、
処理を実行することを特徴とする請求項２に記載のシステム。
【請求項４】
前記情報処理装置は、前記暗号化コードを記憶しており、
前記第１のコンピュータは、
前記暗号化コードを前記セキュアモジュールに送信し、
前記暗号化コードを送信した結果、前記セキュアモジュールが送信した前記第１の検証処理の実行コードに従って、前記アプリケーションがセキュアな状態であるか否かを検証する、
処理を実行することを特徴とする請求項３に記載のシステム。
【請求項５】
前記第２のコンピュータは、
前記認証処理の実行コードに従って、前記第１の検証処理を認証するチャレンジ乱数を生成し、
前記認証処理の実行コードに従って、生成した前記チャレンジ乱数に基づいて第１のレスポンスデータを算出し、
前記情報処理装置に前記チャレンジ乱数を送信し、
前記情報処理装置が有する前記第１のコンピュータにより実行中の前記第１の検証処理において前記送信したチャレンジ乱数に基づいて算出された第２のレスポンスデータと、前記第２のコンピュータが算出した第１のレスポンスデータとを比較することにより、前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する、
処理を実行することを特徴とする請求項１〜４のいずれか一つに記載のシステム。
【請求項６】
前記セキュアモジュールは前記システムから挿抜可能であり、
前記第１のコンピュータは、
前記セキュアモジュールが前記システムから抜かれたことを検出した場合、前記アプリケーションがセキュアな状態でないと検証する、
処理を実行することを特徴とする請求項１〜５のいずれか一つに記載のシステム。
【請求項７】
前記第２のコンピュータは、
前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態でないと検証した場合、前記第１のコンピュータによる前記第１の検証処理の実行を停止させる、
処理を実行することを特徴とする請求項１〜６のいずれか一つに記載のシステム。
【請求項８】
内部に格納された情報が外部から参照できない構造を有するセキュアモジュールと通信可能な情報処理装置であって、
前記セキュアモジュールによってセキュアな状態であるか否かを検証される処理であって、前記情報処理装置により実行中のアプリケーションがセキュアな状態であるか否かを検証する第１の検証処理を実行するコンピュータを有することを特徴とする情報処理装置。
【請求項９】
第１のコンピュータを有する情報処理装置と通信可能であり、内部に格納された情報が外部から参照できない構造を有するセキュアモジュールであって、
前記情報処理装置により実行中のアプリケーションがセキュアな状態であるか否かを検証する第１の検証処理を前記第１のコンピュータで実行するための実行コードの特徴を抽出した第１の特徴量および前記第１の検証処理を認証する認証処理の実行コードの両方またはいずれか一方を記憶する記憶部と、
前記記憶部の記憶内容に基づいて、前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する第２の検証処理を実行する第２のコンピュータと、
を有することを特徴とするセキュアモジュール。
【請求項１０】
内部に格納された情報が外部から参照できない構造を有するセキュアモジュールと、前記セキュアモジュールと通信可能な情報処理装置と、を含むシステムの検証方法であって、
前記情報処理装置は、
前記情報処理装置により実行中のアプリケーションがセキュアな状態であるか否かを検証する第１の検証処理を実行し、
前記セキュアモジュールは、
前記第１の検証処理の実行コードの特徴を抽出した第１の特徴量および前記第１の検証処理を認証する認証処理の実行コードの両方またはいずれか一方を記憶する記憶部の記憶内容に基づいて、実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する第２の検証処理を実行する、
処理を実行することを特徴とする検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システム、情報処理装置、セキュアモジュール、および検証方法に関する。
【背景技術】
【０００２】
従来、セキュアモジュールと呼ばれる、前述のセキュアモジュールが接続された情報処理装置が実行中のアプリケーションがセキュアな状態かを検証する装置がある。関連する先行技術として、たとえば、安全性が担保されていないメインメモリに書き出されるプログラムを、信頼性が担保されたセキュアモジュールで暗号化してから、メインメモリに書き出すものがある。また、セキュアモジュールが、第１の記憶部にある暗号化されたプログラムを実行可能な状態へ復帰して第２の記憶部に書き込み、ＣＰＵが復帰したプログラムを実行終了後に第２の記憶部から削除するものがある。さらに、メモリ上のアドレス空間のうちプログラムの実行イメージが占めるべきメモリ領域を示すロード先情報に改ざんがないと判明したら、ロード先情報に示されるメモリ領域に、プログラムの実行イメージを生成して、実行に供することでロードする技術がある。さらに、プロセッサが安全モードでプログラムを実行しているときに、プロセッサが非安全モードで作動中にアクセスできない安全データへプログラムがアクセスし、モニタモードを介して安全モードと非安全モードとの切り換えが行われる技術がある。（たとえば、下記特許文献１〜４を参照。）
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−２３４３６２号公報
【特許文献２】特開２００５−１３５２６５号公報
【特許文献３】特開２００７−１３３８６０号公報
【特許文献４】特表２００６−５０６７５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術によれば、セキュアモジュールを含むシステムにおける情報処理装置が実行中のアプリケーションの数が多い場合や、アプリケーションの実行コードの量が多い場合に、セキュアモジュールにかかる処理負荷が増大する。
【０００５】
１つの側面では、本発明は、セキュアモジュールにかかる処理負荷を抑制できるシステム、情報処理装置、セキュアモジュール、および検証方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、情報処理装置が、情報処理装置により実行中のアプリケーションがセキュアな状態であるか否かを検証する第１の検証処理を実行し、内部に格納された情報が外部から参照できない構造を有するセキュアモジュールが、第１の検証処理の実行コードの特徴を抽出した第１の特徴量および第１の検証処理を認証する認証処理の実行コードの両方またはいずれか一方を記憶する記憶部の記憶内容に基づいて、実行中の第１の検証処理がセキュアな状態であるか否かを検証する第２の検証処理を実行するシステム、情報処理装置、セキュアモジュール、および検証方法が提案される。
【発明の効果】
【０００７】
本発明の一態様によれば、セキュアモジュールにかかる処理負荷の抑制化を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施の形態１にかかるシステムの動作例を示す説明図である。
【図２】図２は、実施の形態１にかかるコンピュータシステムの構成例を示すブロック図である。
【図３】図３は、実施の形態１にかかるコンピュータシステムの機能構成例を示すブロック図である。
【図４】図４は、コンピュータシステムの処理の一例を示すシーケンス図（その１）である。
【図５】図５は、コンピュータシステムの処理の一例を示すシーケンス図（その２）である。
【図６】図６は、アプリの改ざん検証処理の一例を示すシーケンス図である。
【図７】図７は、セキュアサービスの改ざん検証処理の一例を示すシーケンス図である。
【図８】図８は、セキュアサービスおよびアプリの認証処理の一例を示すシーケンス図である。
【図９】図９は、アプリの難読化対象部分の実行処理の一例を示すシーケンス図である。
【図１０】図１０は、コントローラの動作処理手順の一例を示すフローチャートである。
【図１１】図１１は、アプリの暗号化処理手順の一例を示すフローチャートである。
【図１２】図１２は、改ざん検証処理手順の一例を示すフローチャートである。
【図１３】図１３は、認証処理手順の一例を示すフローチャートである。
【図１４】図１４は、実施の形態２にかかるコンピュータシステムの構成例を示すブロック図である。
【図１５】図１５は、実施の形態２にかかるコンピュータシステムの機能構成例を示すブロック図である。
【図１６】図１６は、セキュアモジュールの挿抜状態の変化時に実行する処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下に図面を参照して、開示のシステム、情報処理装置、セキュアモジュール、および検証方法の実施の形態を詳細に説明する。
【００１０】
（実施の形態１の説明）
図１は、実施の形態１にかかるシステムの動作例を示す説明図である。システム１００は、情報処理装置１０１と、セキュアモジュール１０２と、を有する。情報処理装置１０１は、セキュアモジュール１０２と通信可能な装置である。セキュアモジュール１０２は、セキュアモジュール１０２の内部に格納された情報がセキュアモジュール１０２の外部から参照できない構造を有する装置である。
【００１１】
情報処理装置１０１は、多種多様な機能を有しており、高度なアプリケーションソフトウェアを実行する。以下、アプリケーションソフトウェアを、「アプリ」と称する。一方、アプリの技術仕様が一般の開発者に公開されていることから、アプリの覗き見による解析や改ざん、および、不正操作といった攻撃にさらされやすくなっている。
【００１２】
覗き見による解析や改ざん、および、不正操作といった攻撃から保護するために、セキュアモジュール１０２が、情報処理装置１０１が実行するアプリを保護して、セキュアな状態であることを検証する技術がある。ここで、セキュアな状態とは、外部からの攻撃や侵入、盗聴、改ざんなどの危険の無い状態を示す。
【００１３】
しかしながら、情報処理装置１０１が実行するアプリは高機能であり、実行コードの量が多くなっているため、セキュアモジュール１０２が処理する処理量も増加している。セキュアモジュール１０２が処理する処理量が増加したため、セキュアモジュール１０２のコストが増大する。
【００１４】
そこで、本実施の形態にかかるシステム１００は、アプリ１０３の正当性を検証する処理を情報処理装置１０１が実行し、アプリ１０３の正当性を検証する処理の正当性をセキュアモジュール１０２が検証する。これにより、システム１００は、セキュアモジュール１０２の処理負荷を抑制しつつセキュアな状態でアプリ１０３を実行できる。
【００１５】
情報処理装置１０１は、実行中のアプリ１０３がセキュアな状態であるか否かを検証する第１の検証処理１０４を実行する。アプリ１０３は、著作権コンテンツの再生処理や、決済処理などといった、外部から参照されたくない情報を扱う処理である。第１の検証処理１０４が行う検証処理とは、アプリ１０３の実行コードが改ざんされているか否かを検証する改ざん検証処理と、アプリ１０３が正当な通信相手であるか否かを検証する認証処理とである。アプリ１０３の改ざん検証処理については、図６にて後述する。認証処理については、図８にて後述する。
【００１６】
セキュアモジュール１０２は、第１の検証処理１０４の実行コードの特徴を抽出した第１の特徴量および第１の検証処理１０４を認証する認証処理の実行コードの両方またはいずれか一方を記憶する記憶部１１１にアクセス可能である。実行コードの特徴を抽出した特徴量は、たとえば、実行コードのハッシュ値である。ハッシュ値を算出する関数としては、ＭＤ５（Ｍｅｓｓａｇｅ−Ｄｉｇｅｓｔ  ５）、ＳＨＡ（Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ）−１、ＳＨＡ−２５６等がある。
【００１７】
そして、セキュアモジュール１０２は、記憶部１１１の記憶内容に基づいて、実行中の第１の検証処理１０４がセキュアな状態であるか否かを検証する第２の検証処理１０５を実行する。第２の検証処理１０５が行う検証処理とは、第１の検証処理１０４の実行コードが改ざんされているか否かを検証する改ざん検証処理と、第１の検証処理１０４が正当な通信相手であるか否かを検証する認証処理とである。
【００１８】
ここで、記憶部１１１の記憶内容は外部から参照できず、改ざんされることがないため、セキュアモジュール１０２は、第１の検証処理がセキュアな状態であるかを正しく判定することができる。そして、セキュアな状態であると判定された第１の検証処理によって、アプリ１０３がセキュアな状態であるかを正しく判定することができる。このように、システム１００は、セキュアな状態であるかを正しく判定するとともに、処理量を分散して、セキュアモジュール１０２のコストを低減化する。
【００１９】
図２は、実施の形態１にかかるコンピュータシステムの構成例を示すブロック図である。コンピュータシステム２００は、情報処理装置１０１とセキュアモジュール１０２とを含む。コンピュータシステム２００は、携帯電話、スマートフォンなどのモバイル端末を想定する。また、コンピュータシステム２００は、パーソナル・コンピュータ等でもよい。
【００２０】
情報処理装置１０１は、ＭＣＵ（Ｍｉｃｒｏ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）２０１と、不揮発性メモリ２０２と、揮発性メモリ２０３と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０４と、ディスプレイ２０５と、キーボード２０６と、メモリコントローラ２１１、２１２と、Ｉ／Ｆコントローラ２１３と、を含む。ＭＣＵ２０１と、メモリコントローラ２１１、２１２と、Ｉ／Ｆコントローラ２１３と、ディスプレイ２０５と、キーボード２０６とは、バス２１４によって接続される。
【００２１】
また、セキュアモジュール１０２は、ＭＣＵ２２１と、不揮発性メモリ２２２と、揮発性メモリ２２３と、演算回路２２４と、を含む。ＭＣＵ２２１〜演算回路２２４は、バス２１４によって接続される。
【００２２】
ＭＣＵ２０１は、情報処理装置１０１の全体の制御を司る演算処理装置である。また、ＭＣＵ２０１は、セキュアモードと非セキュアモードとの２状態があり、かつ、両状態間を遷移する機構を有する。
【００２３】
不揮発性メモリ２０２は、ブートプログラムなどのプログラムを記憶するメモリである。揮発性メモリ２０３は、ＭＣＵ２０１のワークエリアとして使用される揮発性メモリである。Ｉ／Ｆ２０４は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。そして、Ｉ／Ｆ２０４は、ネットワークと内部のインターフェースを司り、セキュアモジュール１０２や他の装置からのデータの入出力を制御する。Ｉ／Ｆ２０４には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２４】
また、不揮発性メモリ２０２〜Ｉ／Ｆ２０４が有する記憶領域は、セキュア領域と非セキュア領域とに分類される。セキュア領域は、ＭＣＵ２０１がセキュアモードである場合にアクセスされる。非セキュア領域は、ＭＣＵ２０１がセキュアモードである場合、または非セキュアモードである場合にアクセスされる。具体的には、たとえば、不揮発性メモリ２０２と揮発性メモリ２０３との記憶領域のうち、記憶領域に割り当てられたアドレス領域のうち、あるアドレス領域がセキュア領域のアドレス領域とし、他のアドレス領域をセキュア領域のアドレス領域とする。また、たとえば、Ｉ／Ｆ２０４の記憶領域となる設定レジスタや制御レジスタのうち、メモリマップドＩ／Ｏにより割り当てられたアドレス領域のうち、あるアドレス領域がセキュア領域のアドレス領域とし、他のアドレス領域をセキュア領域のアドレス領域とする。
【００２５】
ディスプレイ２０５は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。たとえば、ディスプレイ２０５は、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２６】
キーボード２０６は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０６は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２７】
メモリコントローラ２１１は、不揮発性メモリ２０２へのアクセスを制御する装置である。メモリコントローラ２１２は、揮発性メモリ２０３へのアクセスを制御する装置である。また、Ｉ／Ｆコントローラ２１３は、Ｉ／Ｆ２０４へのアクセスを制御する装置である。たとえば、メモリコントローラ２１１は、不揮発性メモリ２０２へのアクセスを検出した場合、ＭＣＵの状態と、アクセス先のアドレスとを取得して、アクセスを許可するか拒否するかを判断する。具体的な判断内容については、図１０にて後述する。また、以下、メモリコントローラ２１１〜Ｉ／Ｆコントローラ２１３を総称して、「コントローラ」と呼称する。
【００２８】
ＭＣＵ２２１は、セキュアモジュール１０２の全体の制御を司る演算処理装置である。不揮発性メモリ２２２は、ブートプログラムやセキュアＦＷ（ＦｉｒｍＷａｒｅ）などのプログラムを記憶するメモリである。セキュアＦＷは、セキュアモジュール１０２を制御するファームウェアである。揮発性メモリ２２３は、ＭＣＵ２２１のワークエリアとして使用される揮発性メモリである。演算回路２２４は、暗号化処理、復号処理、ハッシュ値算出処理等を行う回路である。
【００２９】
（コンピュータシステム２００の機能）
次に、コンピュータシステム２００の機能について説明する。図３は、実施の形態１にかかるコンピュータシステムの機能構成例を示すブロック図である。コンピュータシステム２００は、記憶部１１１と、送信部３１１と、第１検証部３１２と、第１停止部３１３と、復号部３２１と、特徴量算出部３２２と、生成部３２３と、レスポンスデータ算出部３２４と、第２検証部３２５と、第２停止部３２６と、を含む。
【００３０】
送信部３１１は、情報処理装置１０１のブートプログラムに含まれる機能である。第１検証部３１２と、第１停止部３１３とは、情報処理装置１０１が実行するセキュアサービス３０２に含まれる機能である。ブートプログラムやセキュアサービス３０２は、記憶装置に記憶されたプログラムをＭＣＵ２０１が実行することにより、送信部３１１〜第１停止部３１３の機能を実現する。記憶装置とは、具体的には、たとえば、図２に示した不揮発性メモリ２０２などである。セキュアサービス３０２は、図１に示した第１の検証処理１０４に相当する。
【００３１】
また、復号部３２１〜第２停止部３２６は、セキュアモジュール１０２が実行するセキュアＦＷ３０１に含まれる機能である。セキュアＦＷ３０１は、記憶装置に記憶されたプログラムをＭＣＵ２２１が実行することにより、復号部３２１〜第２停止部３２６の機能を実現する。記憶装置とは、具体的には、たとえば、図２に示した不揮発性メモリ２２２などである。セキュアＦＷ３０１は、図１に示した第２の検証処理１０５に相当する。
【００３２】
記憶部１１１は、セキュアサービス３０２の実行コードの特徴を抽出した第１の特徴量およびセキュアサービス３０２を認証する認証処理の実行コードの両方またはいずれか一方を記憶する。また、記憶部１１１は、揮発性メモリ２０３のセキュア領域に存在する。
【００３３】
また、記憶部１１１は、セキュアサービス３０２の実行コードが暗号化された暗号化コードと暗号化コードを復号可能な復号鍵を記憶していてもよい。セキュアサービス３０２の実行コードの暗号化方式は、共通鍵方式でもよいし、公開鍵方式でもよい。ここで、復号鍵は、セキュアサービス３０２の実行コードの暗号化方式が、共通鍵方式であれば、暗号鍵と同一のものとなる。公開鍵方式であれば、復号鍵は、暗号鍵に対応するものとなる。
【００３４】
送信部３１１は、情報処理装置１０１が記憶する、セキュアサービス３０２が暗号化された暗号化コードをセキュアモジュール１０２に送信する。
【００３５】
第１検証部３１２は、情報処理装置１０１により実行中のアプリ１０３がセキュアな状態であるか否かを検証するセキュアサービス３０２を実行する。
【００３６】
また、第１検証部３１２は、送信部３１１が暗号化コードを送信した結果、セキュアモジュール１０２が送信したセキュアサービス３０２の実行コードに従って、アプリ１０３がセキュアな状態であるか否かを検証してもよい。なお、検証結果は、揮発性メモリ２０３のセキュア領域に格納される。
【００３７】
第１停止部３１３は、アプリ１０３がセキュアな状態でないと第１検証部３１２が検証した場合、アプリ１０３の実行を停止させる。具体的なアプリ１０３の停止方法については、図６にて後述する。
【００３８】
復号部３２１は、セキュアサービス３０２の実行コードが暗号化された暗号化コードから、復号鍵を用いてセキュアサービス３０２の実行コードを復号する。なお、復号されたセキュアサービス３０２の実行コードは、セキュアサービス３０２に送信される。
【００３９】
特徴量算出部３２２は、第１検証部３１２によって実行中のセキュアサービス３０２の実行コードの特徴を抽出した第２の特徴量を算出する。なお、算出した第２の特徴量は、揮発性メモリ２０３のセキュア領域に格納される。
【００４０】
また、特徴量算出部３２２は、復号部３２１が復号したセキュアサービス３０２の実行コードの特徴を抽出した第１の特徴量を算出して記憶部１１１に格納してもよい。
【００４１】
生成部３２３は、認証処理の実行コードに従って、セキュアサービス３０２を認証するチャレンジ乱数を生成する。生成したチャレンジ乱数は、揮発性メモリ２２３に格納される。
【００４２】
レスポンスデータ算出部３２４は、認証処理の実行コードに従って、生成部３２３が生成したチャレンジ乱数に基づいて第１のレスポンスデータを算出する。算出した第１のレスポンスデータは、揮発性メモリ２２３に格納される。
【００４３】
第２検証部３２５は、記憶部１１１の記憶内容に基づいて、第１検証部３１２により実行中のセキュアサービス３０２がセキュアな状態であるか否かを検証するセキュアＦＷ３０１を実行する。
【００４４】
また、第２検証部３２５は、特徴量算出部３２２が算出した第２の特徴量と、記憶部１１１に記憶された第１の特徴量とを比較することにより、実行中のセキュアサービス３０２がセキュアな状態であるか否かを検証してもよい。たとえば、第２検証部３２５は、第２の特徴量と第１の特徴量が一致すれば、セキュアサービス３０２がセキュアな状態であると検証する。
【００４５】
また、第２検証部３２５は、特徴量算出部３２２が算出した第２の特徴量と、特徴量算出部３２２が算出して記憶部に格納した第１の特徴量とを比較することにより、実行中のセキュアサービス３０２がセキュアな状態であるか否かを検証してもよい。
【００４６】
また、セキュアＦＷ３０１が第１検証部３１２にチャレンジ乱数を送信したとする。このとき、セキュアＦＷ３０１は、実行中のセキュアサービス３０２がチャレンジ乱数に基づいて、第２のレスポンスデータを算出する。そして、第２検証部３２５は、第２のレスポンスデータと、レスポンスデータ算出部３２４が算出した第１のレスポンスデータとを比較することにより、実行中のセキュアサービス３０２がセキュアな状態であるか否かを検証してもよい。なお、検証結果は、揮発性メモリ２２３に格納される。
【００４７】
第２停止部３２６は、第２検証部３２５が第１検証部３１２により実行中のセキュアサービス３０２がセキュアな状態でないと検証した場合、第１検証部３１２によるセキュアサービス３０２の実行を停止させる。セキュアサービス３０２の停止方法については、図７にて後述する。
【００４８】
続けて、図４と図５を用いて、コンピュータシステム２００の処理シーケンスを示す。ＭＣＵ２０１は、セキュアサービス３０２とアプリ１０３という２種類のプログラムを実行する。セキュアサービス３０２は、ＭＣＵ２０１がセキュア状態の時に動作するプログラムであり、アプリ１０３のロードや改ざんから保護する役割を担う。
【００４９】
図４は、コンピュータシステムの処理の一例を示すシーケンス図（その１）である。ＭＣＵ２０１は、リセット解除時にセキュア状態で起動する。ＭＣＵ２０１は、ブートプログラムを起動する（ステップＳ４０１）。また、セキュアモジュール１０２は、セキュアＦＷ３０１を起動する（ステップＳ４０２）。
【００５０】
ブートプログラムの起動完了後、セキュア状態のＭＣＵ２０１は、セキュア状態であることをセキュアモジュール１０２に認証してもらうために、チャレンジレスポンス方式による認証処理を行う。認証ができたら、セキュア状態のＭＣＵ２０１は、セキュアモジュール１０２との通信を盗聴から保護するためにセッション鍵Ａを生成し、セキュアモジュール１０２上で動作するセキュアＦＷ３０１と共有する。長期間同じ鍵を使用することで鍵を特定されるリスクを避けるため、セキュア状態のＭＣＵ２０１は、セッション鍵Ａをブートの度に生成し直す。
【００５１】
認証処理からセッション鍵生成までを、ステップＳ４０３〜ステップＳ４１３を用いて説明する。セキュア状態のＭＣＵ２０１は、セッション鍵Ａ生成用チャレンジデータの生成依頼を送信する（ステップＳ４０３）。セッション鍵Ａ生成用チャレンジデータの生成依頼を受信したセキュアＦＷ３０１は、チャレンジデータＣＡ１を生成する（ステップＳ４０４）。ＣＡ１は、たとえば、１６［バイト］の乱数である。次に、セキュアＦＷ３０１は、ＣＡ１を送信する（ステップＳ４０５）。続けて、セキュアＦＷ３０１は、ＣＡ１から、認証データＭＡ１を算出する（ステップＳ４０６）。ＭＡ１は、たとえば、ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）−ＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ）方式を用いて、ＣＡ１を用いて算出した値である。
【００５２】
ＣＡ１を受信したセキュア状態のＭＣＵ２０１は、ＣＡ１から、ＭＡ１を算出する（ステップＳ４０７）。同時に、セキュア状態のＭＣＵ２０１は、チャレンジデータＣＡ２を生成する（ステップＳ４０８）。ＣＡ２は、たとえば、１６［バイト］の乱数である。そして、セキュア状態のＭＣＵ２０１は、ＭＡ１と、ＣＡ２とを送信する（ステップＳ４０９）。また、ＣＡ２を生成後、セキュア状態のＭＣＵ２０１は、ＣＡ１とＣＡ２とから、セッション鍵Ａを生成する（ステップＳ４１０）。たとえば、セキュア状態のＭＣＵ２０１は、ＣＡ１とＣＡ２とをＸＯＲした上で、１６［バイト］のセッション鍵Ａ算出鍵で暗号化した結果を、１６［バイト］のセッション鍵Ａとして使用する。
【００５３】
ＭＡ１と、ＣＡ２とを受信したセキュアＦＷ３０１は、受信したＭＡ１と生成したＭＡ１とから、認証成功か否かを検証する（ステップＳ４１１）。続けて、セキュアＦＷ３０１は、ＭＣＵ２０１にＭＡ１の検証結果を送信する（ステップＳ４１２）。また、セキュアＦＷ３０１は、ＣＡ１とＣＡ２とから、セッション鍵Ａを生成する（ステップＳ４１３）。
【００５４】
ステップＳ４１３までの処理により、セッション鍵Ａの生成が終了したため、ＭＣＵ２０１は、セキュアサービス３０２を起動して、以降の処理は、セキュアサービス３０２が実行する。セキュアサービス３０２は、セッション鍵Ａを利用するため、セキュア状態のＭＣＵ２０１のブートプログラムは、揮発性メモリ２０３のセキュア領域にセッション鍵Ａを格納してセキュアサービス３０２が取得する。これにより、情報処理装置１０１は、セッション鍵Ａを第三者に取得される可能性を低減して、第三者からのアクセスを防ぐ。
【００５５】
セキュアサービス３０２を起動するまでを、ステップＳ４１４〜ステップＳ４１８を用いて説明する。セキュア状態のＭＣＵ２０１は、セキュアサービス３０２の復号依頼を送信する（ステップＳ４１４）。セキュアサービス３０２の復号依頼には、セキュアサービス３０２の実行コードが暗号化された暗号化コードが含まれる。セキュアサービス３０２の復号依頼を受信したセキュアＦＷ３０１は、セキュアサービス３０２の暗号化コードを復号する（ステップＳ４１５）。続けて、セキュアＦＷ３０１は、セッション鍵Ａを用いて、セキュアサービス３０２の署名データを生成する（ステップＳ４１６）。署名データは、ここで、セキュアサービス３０２の署名データは、セキュアサービス３０２の実行コードをセッション鍵Ａを用いて算出したハッシュ値である。
【００５６】
次に、セキュアＦＷ３０１は、セキュアサービス３０２を展開する（ステップＳ４１７）。セキュア状態のＭＣＵ２０１は、セキュアサービス３０２を起動する（ステップＳ４１８）。セキュアサービス３０２の起動後の処理について、図５を用いて説明する。
【００５７】
図５は、コンピュータシステムの処理の一例を示すシーケンス図（その２）である。セキュアサービス３０２は、セキュア状態に対して周期的に発生するタイマー割込みを起動する（ステップＳ５０１）。タイマー割込みは非セキュア状態のＭＣＵ２０１が実行するプログラムからはマスクできない様に設定される。これにより、セキュアサービス３０２による監視を有効にすることができる。
【００５８】
続けて、セキュアサービス３０２は、非セキュア状態のＭＣＵ２０１のブートプログラムに、セッション鍵Ｂを埋め込む（ステップＳ５０２）。セッション鍵Ｂは、たとえば、非セキュア状態のＭＣＵ２０１が起動する度に生成する１６［バイト］の乱数である。また、具体的なセッション鍵Ｂの埋め込み方としては、非セキュア状態のＭＣＵ２０１のブートプログラムの末尾にセッション鍵Ｂそのものを追加してもよいし、セッション鍵Ｂを所定の値でＸＯＲした値を追加してもよい。そして、セキュアサービス３０２は、セッション鍵Ｂを埋め込んだ非セキュア状態のＭＣＵ２０１のブートプログラムを、揮発性メモリ２０３の非セキュア領域に展開する（ステップＳ５０３）。
【００５９】
非セキュア状態のＭＣＵ２０１のブートプログラムが展開された後、非セキュア状態のＭＣＵ２０１は、非セキュア状態のＭＣＵ２０１のブートプログラムを起動する（ステップＳ５０４）。
【００６０】
ブートプログラムを起動後、非セキュア状態のＭＣＵ２０１は、コンピュータシステム２００の利用者の操作等によるアプリ１０３の起動要求を検出する（ステップＳ５０５）。アプリ１０３の実行コードは、予め暗号化されて不揮発性メモリ２０２の非セキュア領域に格納されている。また、復号する鍵は、セキュアモジュール１０２に格納されている。アプリ１０３が不揮発性メモリ２０２の非セキュア領域に格納される処理およびアプリ１０３の実行コードを復号する鍵がセキュアモジュール１０２に格納される処理については、図１１にて後述する。
【００６１】
アプリ１０３の起動要求を検出した非セキュア状態のＭＣＵ２０１は、セキュア状態のＭＣＵ２０１にアプリ１０３の復号要求を依頼する（ステップＳ５０６）。アプリ１０３の復号要求の依頼を受け付けたセキュア状態のＭＣＵ２０１は、アプリ１０３の復号用鍵と、署名生成用の鍵との提供依頼を送信する（ステップＳ５０７）。アプリ１０３の復号用鍵と、署名生成用の鍵との提供依頼を受信したセキュアＦＷ３０１は、アプリ１０３の署名生成用鍵を生成する（ステップＳ５０８）。なお、セキュアＦＷ３０１は、アプリ１０３の署名生成用鍵について、アプリ１０３起動の度に変更して、長期間同じ鍵を用いるリスクを低減させる。次に、セキュアＦＷ３０１は、アプリ１０３の復号用鍵と、アプリ１０３の署名生成用鍵とをセキュア状態のＭＣＵ２０１に送信する（ステップＳ５０９）。
【００６２】
アプリ１０３の復号用鍵と、アプリ１０３の署名生成用鍵とを受信したセキュア状態のＭＣＵ２０１は、アプリ１０３の復号用鍵を用いて、アプリ１０３を復号する（ステップＳ５１０）。続けて、セキュア状態のＭＣＵ２０１は、アプリ１０３の署名生成用鍵を用いて、アプリ１０３の署名データを生成する（ステップＳ５１１）。ステップＳ５１１について、具体的には、たとえば、セキュア状態のＭＣＵ２０１は、復号したアプリ１０３の実行コードを４バイトごとにアプリ１０３の署名生成用鍵により算出した値を結合して、署名データとする。
【００６３】
アプリ１０３の署名データを生成後、セキュア状態のＭＣＵ２０１は、復号したアプリ１０３を揮発性メモリ２０３の非セキュア領域に展開する（ステップＳ５１２）。復号したアプリ１０３が展開された後、非セキュア状態のＭＣＵ２０１は、アプリ１０３を起動する（ステップＳ５１３）。
【００６４】
ステップＳ５１２について、アプリ１０３の展開については、サブルーチン単位でセッション鍵Ｂとは異なる鍵で難読化しておき、難読化の関数が呼び出される時に、セキュアサービス３０２は、関数を復号し、実行完了後は再度難読化してもよい。アプリ１０３の難読化については、図９にて後述する。または、難読化の代わりに、保護対象の関数自体をブート時のロード対象から除外し、関数がコールされる時に、セキュアサービス３０２が、ロードを行い、実行後はメモリ領域を乱数などで上書きしてコードをクリアすることとしてもよい。難読化を行う鍵は、セキュアサービス３０２のみが知る鍵であり、揮発性メモリ２０３のセキュア領域に格納される。
【００６５】
図６は、アプリの改ざん検証処理の一例を示すシーケンス図である。アプリの改ざん検証処理はセキュアサービス３０２が実行する。ただし、数百〜数千回に一回程度、または、セキュアＦＷ３０１が任意に指定するタイミングにおいて、セキュアＦＷ３０１は、直接、アプリの改ざん検証処理を行うこととしてもよい。
【００６６】
セキュアＦＷ３０１は、セキュアサービス３０２に、アプリの改ざん検証指示を送信する（ステップＳ６０１）。署名検証指示を受信したセキュアサービス３０２は、非セキュア領域のアプリ１０３の実行コードを取得する（ステップＳ６０２）。次に、セキュアサービス３０２は、アプリに対する改ざん検証処理を実行する（ステップＳ６０３）。改ざん検証処理の詳細については、図１２に後述する。続けて、セキュアサービス３０２は、セキュアＦＷ３０１に検証結果を送信する（ステップＳ６０４）。
【００６７】
ステップＳ６０３の処理結果について、改ざんされていないという検証結果を得た場合、セキュアサービス３０２は、アプリ１０３の動作の継続を許可する。一方、改ざんされたという検証結果または検証失敗という検証結果を得た場合、セキュアサービス３０２は、アプリ１０３の実行を停止させる。
【００６８】
具体的なアプリ１０３の動作の停止方法について、たとえば、セキュアサービス３０２は、揮発性メモリ２０３に展開されたアプリ１０３の実行コードを０等により上書きする、後述する図９の処理において、難読化された実行コードの復号を行わない、等がある。ここで、セキュアサービス３０２が単にアプリ１０３に停止要求を送信しないのは、アプリ１０３が第３者に改ざんされており、アプリ１０３に停止要求を送信しても、アプリ１０３が停止するとは限らないためである。
【００６９】
アプリの改ざん検証処理について、セキュアＦＷ３０１は、対象となるアプリ１０３全体のハッシュ値算出を常時行わないため、演算回路２２４による演算ではなく、ソフトウェアによるハッシュ値算出としてよいので、セキュアＦＷ３０１のコストを低減できる。また、セキュアＦＷ３０１は、アプリ１０３全体のハッシュ値算出を常時行わないため、揮発性メモリ２２３にアプリ１０３の実行コードを格納しないので、揮発性メモリ２２３のサイズを低減することができて、セキュアモジュール１０２のコストを低減できる。
【００７０】
なお、図５で前述した通り、アプリ１０３の一部は難読化またはロードされていない場合がある。アプリ１０３の一部が暗号化されている場合、セキュアサービス３０２は、暗号化されている状態でハッシュ値の算出を行う。ロードされてない場合、セキュアサービス３０２は、ロードされていないアプリ１０３を、ハッシュ値の算出の対象外にする。
【００７１】
図７は、セキュアサービスの改ざん検証処理の一例を示すシーケンス図である。セキュアサービス３０２の改ざん検証処理は、セキュアＦＷ３０１が実行する。セキュアＦＷ３０１は、不揮発性メモリ２０２のセキュア領域のセキュアサービス３０２の実行コードを取得する（ステップＳ７０１）。次に、セキュアＦＷ３０１は、セキュアサービス３０２に対する改ざん検証処理を実行する（ステップＳ７０２）。改ざん検証処理の詳細については、図１２に後述する。
【００７２】
ステップＳ７０２の処理結果について、改ざんされていないという検証結果を得た場合、セキュアＦＷ３０１は、セキュアサービス３０２の動作の継続を許可する。一方、改ざんされたという検証結果または検証失敗という検証結果を得た場合、セキュアＦＷ３０１は、セキュアサービス３０２の実行を停止させる。また、セキュアＦＷ３０１は、セキュアサービス３０２の実行を停止させるとともに、アプリ１０３の実行を停止させてもよい。これにより、コンピュータシステム２００は、アプリ１０３が扱う情報の流出を最小限に抑えることができる。
【００７３】
図８は、セキュアサービスおよびアプリの認証処理の一例を示すシーケンス図である。セキュアサービスおよびアプリの認証処理は、たとえば１分ごとに、定期的に実行される。セキュアＦＷ３０１は、Ｓｅｅｄを生成して、Ｓｅｅｄをチャレンジ乱数Ａとして記憶する（ステップＳ８０１）。チャレンジ乱数Ａは、たとえば、１６［バイト］の乱数である。
【００７４】
次に、セキュアＦＷ３０１は、セキュアサービス３０２に、認証処理の実行要求を、チャレンジ乱数Ａを含めて送信する（ステップＳ８０２）。続けて、セキュアＦＷ３０１は、チャレンジ乱数ＡからレスポンスデータＡを算出する（ステップＳ８０３）。レスポンスデータＡは、たとえば、チャレンジ乱数Ａに、ある固定値を用いて算出した１６［バイト］の値である。セキュアモジュール１０２は、Ｓｅｅｄの生成アルゴリズムやある固定値により加工するアルゴリズムを内部に秘匿しておくことにより、外部への流出を防ぐ。
【００７５】
認証処理の実行要求を受信したセキュアサービス３０２は、チャレンジ乱数Ａから、別の固定値で加工して、チャレンジ乱数Ｂを生成する（ステップＳ８０４）。次に、セキュアサービス３０２は、アプリ１０３にチャレンジ乱数Ｂを送信する（ステップＳ８０５）。続けて、セキュアサービス３０２は、チャレンジ乱数ＢからレスポンスデータＢを算出する（ステップＳ８０６）。
【００７６】
チャレンジ乱数Ｂを受信したアプリ１０３は、チャレンジ乱数ＢからレスポンスデータＢを算出する（ステップＳ８０７）。続けて、アプリ１０３は、セキュアサービス３０２に、レスポンスデータＢを送信する（ステップＳ８０８）。
【００７７】
レスポンスデータＢを受信したセキュアサービス３０２は、算出したレスポンスデータＢと、受信したレスポンスデータＢとから、認証成功か否かを検証する（ステップＳ８０９）。ステップＳ８０９の処理について、認証成功という検証結果を得た場合、認証成功であるとして、セキュアサービス３０２は、アプリ１０３の動作の継続を許可する。一方、認証失敗という検証結果または検証失敗という検証結果を得た場合、認証失敗であるとして、セキュアサービス３０２は、アプリ１０３の実行を停止させる。
【００７８】
また、チャレンジ乱数Ａを受信したセキュアサービス３０２は、チャレンジ乱数ＡからレスポンスデータＡを算出する（ステップＳ８１０）。次に、セキュアサービス３０２は、セキュアＦＷ３０１に、レスポンスデータＡを送信する（ステップＳ８１１）。
【００７９】
レスポンスデータＡを受信したセキュアＦＷ３０１は、算出したレスポンスデータＡと、受信したレスポンスデータＡとから、認証成功か否かを検証する（ステップＳ８１２）。ステップＳ８１２の処理について、認証成功という検証結果を得た場合、認証成功であるとして、セキュアＦＷ３０１は、セキュアサービス３０２の動作の継続を許可する。一方認証失敗という検証結果または検証失敗という検証結果を得た場合、認証失敗であるとして、セキュアＦＷ３０１は、セキュアサービス３０２の実行を停止させる。
【００８０】
なお、アプリの認証処理を行う場合、アプリ１０３には、アプリ１０３の開発者等によりセキュア化ツールにより認証処理を行う実行コードが埋め込まれているものとする。たとえば、埋め込まれた認証処理があるスレッドであり、あるスレッドは、ステップＳ８０５によるチャレンジ乱数Ｂを待ち受ける。チャレンジ乱数Ｂを受け付けると、あるスレッドは、ステップＳ８０７と、ステップＳ８０８との処理を実行する。ステップＳ８０８の処理終了後、あるスレッドは、再びステップＳ８０５によるチャレンジ乱数Ｂを待ち受ける。
【００８１】
図９は、アプリの難読化対象部分の実行処理の一例を示すシーケンス図である。アプリ１０３は、難読化された実行コードを検出する（ステップＳ９０１）。次に、アプリ１０３は、難読化された実行コードの解除要求を送信する（ステップＳ９０２）。
【００８２】
解除要求を受信したセキュアサービス３０２は、アプリおよびセキュアサービスに対する改ざん検証処理の検証結果と、アプリおよびセキュアサービスに対する認証検証処理の検証結果と、を確認する（ステップＳ９０３）。
【００８３】
アプリおよびセキュアサービスに対する改ざん検証処理がともに改ざんされていないという検証結果であり、かつアプリおよびセキュアサービスに対する認証検証処理がともに認証成功という検証結果であれば、セキュアサービス３０２は、難読化の解除を続行する。一方、前述の条件を満たさなければ、セキュアサービス３０２は、難読化の解除を停止する。
【００８４】
難読化の解除を続行する場合、セキュアサービス３０２は、解除要求を受けた実行コードを読み込む（ステップＳ９０４）。次に、セキュアサービス３０２は、難読化された実行コードを解除する（ステップＳ９０５）。続けて、セキュアサービス３０２は、難読化解除後の実行コードを展開する（ステップＳ９０６）。次に、セキュアサービス３０２は、アプリ１０３に解除完了を通知する（ステップＳ９０７）。
【００８５】
解除完了の通知を受けたアプリ１０３は、難読化解除後の実行コードを実行する（ステップＳ９０８）。実行完了後、アプリ１０３は、セキュアサービス３０２に難読化解除後の実行コードの実行終了を通知する（ステップＳ９０９）。ステップＳ９０９の処理について、アプリ１０３からの難読化解除後の実行コードの実行終了が一定期間を越えて通知されない場合、セキュアサービス３０２は、セキュア状態に強制的に戻し、アプリ１０３の実行を停止させることにより、セキュリティを保つ。
【００８６】
難読化解除後の実行コードの実行終了の通知を受けたセキュアサービス３０２は、セキュアＦＷ３０１に、新たな難読化方式の決定要求を送信する（ステップＳ９１０）。新たな難読化方式の決定要求を受信したセキュアＦＷ３０１は、新たな難読化方式を決定する（ステップＳ９１１）。次に、セキュアＦＷ３０１は、セキュアサービス３０２に、決定した難読化方式を送信する（ステップＳ９１２）。
【００８７】
難読化方式の例としては、ゼロクリア、乱数での排他的論理和、または、ゼロクリアと乱数での排他的論理和との組み合わせ等がある。たとえば、ゼロクリアを行う場合、セキュアサービス３０２は、揮発性メモリ２０３の非セキュア領域に展開された実行コードを０で塗りつぶす。ゼロクリアした実行コードを再度実行する場合、セキュアサービス３０２は、不揮発性メモリ２０２にある実行コードを取得して、塗りつぶされた領域に、取得した実行コードを書き込む。
【００８８】
決定した難読化方式を受信したセキュアサービス３０２は、新たな難読化方式により、難読化解除後の実行コードを再難読化する（ステップＳ９１３）。次に、セキュアサービス３０２は、再難読化後の実行コードを展開する（ステップＳ９１４）。再難読化後の実行コードの展開終了後、セキュアサービス３０２は、アプリ１０３に、再難読化完了を通知する（ステップＳ９１５）。
【００８９】
図１０は、コントローラの動作処理手順の一例を示すフローチャートである。コントローラはＭＣＵ２０１の状態と、アクセス先のアドレスまたはＩ／Ｆの状態とを監視する。コントローラは、両者の組み合わせによって、アクセスの可否を判定する。
【００９０】
コントローラは、アクセス先へのアクセスを検出する（ステップＳ１００１）。次に、コントローラは、ＭＣＵ２０１の状態とアクセス先のアドレス領域との組み合わせが次に示すいずれに一致するかを判断する（ステップＳ１００２）。組み合わせは、ＭＣＵ２０１の状態がセキュア状態と非セキュア状態との２つあり、アクセス先がセキュア領域と非セキュア領域との２つあるため、全部で４つある。
【００９１】
ＭＣＵ２０１の状態がセキュア状態であり、かつアクセス先のアドレス領域がセキュア領域である場合（ステップＳ１００２：セキュア状態、セキュア領域）、コントローラは、アクセス先へのアクセスを許可する（ステップＳ１００３）。
【００９２】
ＭＣＵ２０１の状態が非セキュア状態であり、かつアクセス先のアドレス領域がセキュア領域である場合（ステップＳ１００２：非セキュア状態、セキュア領域）、コントローラは、アクセス先へのアクセスを拒否する（ステップＳ１００４）。
【００９３】
ＭＣＵ２０１の状態がセキュア状態であり、かつアクセス先のアドレス領域が非セキュア領域である場合（ステップＳ１００２：セキュア状態、非セキュア領域）、コントローラは、アクセス先へのアクセスを許可する（ステップＳ１００５）。
【００９４】
ＭＣＵ２０１の状態が非セキュア状態であり、かつアクセス先のアドレス領域が非セキュア領域である場合（ステップＳ１００２：非セキュア状態、非セキュア領域）、コントローラは、アクセス先へのアクセスを許可する（ステップＳ１００６）。
【００９５】
ステップＳ１００３〜ステップＳ１００６のいずれかの処理終了後、コントローラは、動作を終了する。コントローラの動作処理を実行することにより、コンピュータシステム２００は、非セキュアモードで実行する悪意のあるソフトウェアからの不正アクセスを防止することができる。
【００９６】
図１１は、アプリの暗号化処理手順の一例を示すフローチャートである。アプリの暗号化処理は、アプリ１０３を開発した後に行う処理であり、アプリ１０３を暗号化する処理である。また、アプリの暗号化処理を行う装置は、コンピュータシステム２００とは異なる装置であり、コンピュータシステム２００向けの実行コードを生成するクロスコンパイラがインストールされた装置である。以下、クロスコンパイラがインストールされた装置を、「クロスコンパイラ装置」と呼称する。
【００９７】
クロスコンパイラ装置は、セキュア化ツールが提供するライブラリを含めてアプリ１０３のソースコードをコンパイル、リンクする（ステップＳ１１０１）。セキュア化ツールが提供するライブラリは、図８と図９とで説明した、アプリ１０３が行う処理の実行コードを含むライブラリである。
【００９８】
次に、クロスコンパイラ装置は、リンクにより生成されたアプリ１０３を、セキュア化ツールにより暗号化する（ステップＳ１１０２）。暗号化を行う際には、たとえばアプリ１０３の開発者によって決められた、アプリ１０３復号用鍵のＳｅｅｄを用いて生成された暗号鍵を用いて、クロスコンパイラ装置は、アプリ１０３を暗号化する。
【００９９】
続けて、クロスコンパイラ装置は、アプリ１０３復号用の鍵と、暗号化したアプリ１０３とを出力する（ステップＳ１１０３）。アプリ１０３復号用の鍵は、たとえば、アプリ１０３がＡＥＳ暗号といった共通鍵暗号方式で暗号化されていれば、暗号鍵と同一のものとなる。
【０１００】
クロスコンパイラ装置は、開発者の操作により、暗号化したアプリ１０３を、たとえば、アプリ１０３配布サイトに登録する。また、クロスコンパイラ装置は、開発者の操作により、アプリ１０３復号用の鍵をセキュアモジュール１０２内に格納する。
【０１０１】
コンピュータシステム２００の利用者は、セキュアモジュール１０２を含むコンピュータシステム２００を購入する。購入後、コンピュータシステム２００は、コンピュータシステム２００の利用者の操作により、アプリ配布サイトから暗号化したアプリ１０３を取得する。これにより、コンピュータシステム２００は、本実施の形態にかかるセキュアな状態を保障するアプリ１０３を実行することができる。
【０１０２】
図１２は、改ざん検証処理手順の一例を示すフローチャートである。改ざん検証処理は、アプリ１０３またはセキュアサービス３０２が改ざんされていないか否かを検証する処理である。アプリに対する改ざん検証処理は、セキュアサービス３０２が実行する。また、セキュアサービス３０２に対する改ざん検証処理は、セキュアＦＷ３０１が実行する。図１２の説明では、セキュアサービス３０２に対する改ざん検証処理を例にして説明する。
【０１０３】
セキュアＦＷ３０１は、改ざん検証を開始する開始時刻を記憶する（ステップＳ１２０１）。次に、セキュアＦＷ３０１は、対象の実行コードのうち、先頭の４［Ｋバイト］を読み込む（ステップＳ１２０２）。ここで、対象の実行コードとは、セキュアサービス３０２の実行コードとなる。一方、アプリに対する改ざん検証処理であれば、対象の実行コードとは、アプリ１０３の実行コードとなる。
【０１０４】
続けて、セキュアＦＷ３０１は、読み込んだ実行コードから、署名データを生成する（ステップＳ１２０３）。ここで、セキュアＦＷ３０１は、セッション鍵Ａを用いて署名データを生成する。一方、アプリに対する改ざん検証処理であれば、セキュアサービス３０２は、ステップＳ５０８で生成された鍵を用いて署名データを生成する。
【０１０５】
次に、セキュアＦＷ３０１は、起動時の署名データと生成した署名データを比較する（ステップＳ１２０４）。ここで、起動時の署名データとは、セキュアサービス３０２起動時となる、ステップＳ４１６の処理にて生成した署名データである。一方、アプリに対する改ざん検証処理であれば、起動時の署名データは、アプリ１０３起動時となる、ステップＳ５１１の処理にて生成した署名データである。
【０１０６】
続けて、セキュアＦＷ３０１は、起動時の署名データと生成した署名データとが一致したか否かを判断する（ステップＳ１２０５）。起動時の署名データと生成した署名データとが一致しない場合（ステップＳ１２０５：Ｎｏ）、セキュアＦＷ３０１は、改ざんされたという検証結果を出力する（ステップＳ１２０６）。改ざんされたという検証結果を得た場合、対象の実行コードは、セキュアな状態でないと検証されたことになる。
【０１０７】
起動時の署名データと生成した署名データとが一致した場合（ステップＳ１２０５：Ｙｅｓ）、セキュアＦＷ３０１は、続けて、実行コード全てを比較したか否かを判断する（ステップＳ１２０７）。実行コード全てを比較した場合（ステップＳ１２０７：Ｙｅｓ）、セキュアＦＷ３０１は、改ざんされていないという検証結果を出力する（ステップＳ１２０８）。改ざんされていないという検証結果を得た場合、対象の実行コードは、セキュアな状態であると検証されたことになる。
【０１０８】
まだ実行コードのうち比較していない部分がある場合（ステップＳ１２０７：Ｎｏ）、セキュアＦＷ３０１は、続けて、現在時刻−開始時刻が上限時間より大きいか否かを判断する（ステップＳ１２０９）。現在時刻−開始時刻が上限時間以下である場合（ステップＳ１２０９：Ｎｏ）、セキュアＦＷ３０１は、次の４［Ｋバイト］を読み込む（ステップＳ１２１０）。そして、セキュアＦＷ３０１は、ステップＳ１２０３の処理に移行する。
【０１０９】
現在時刻−開始時刻が上限時間より大きい場合（ステップＳ１２０９：Ｙｅｓ）、セキュアＦＷ３０１は、検証失敗という検証結果を出力する（ステップＳ１２１１）。検証失敗という検証結果を得た場合、対象の実行コードは、セキュアな状態でないと検証されたことになる。また、現在時刻−開始時刻が上限時間より大きくなる場合とは、たとえば、不正なアプリ等により、メモリのアクセスが頻繁に発生した結果、図１２に示すフローチャートの処理が遅延してしまった場合である。
【０１１０】
ステップＳ１２０６、ステップＳ１２０８、またはステップＳ１２１１の処理終了後、セキュアＦＷ３０１は、改ざん検証処理を終了する。改ざん検証処理を実行することにより、コンピュータシステム２００は、対象の実行コードが改ざんされたか否かを検証することができる。
【０１１１】
図１３は、認証処理手順の一例を示すフローチャートである。認証処理は、アプリ１０３またはセキュアサービス３０２が正当な通信相手か否かを検証する処理である。アプリに対する認証処理は、セキュアサービス３０２が実行する。また、セキュアサービスに対する認証処理は、セキュアＦＷ３０１が実行する。図１３の説明では、セキュアサービス３０２に対する認証処理を例にして説明するとともに、アプリに対する認証処理も併せて説明を行う。
【０１１２】
セキュアＦＷ３０１は、認証を開始する開始時刻を記憶する（ステップＳ１３０１）。次に、セキュアＦＷ３０１は、チャレンジ乱数を生成する（ステップＳ１３０２）。具体的に、セキュアＦＷ３０１は、セキュアモジュール１０２内の認証処理の実行コードに従って、チャレンジ乱数Ａを生成する。一方、アプリに対する認証処理の場合、セキュアサービス３０２は、受信したチャレンジ乱数Ａに基づいて、チャレンジ乱数Ｂを生成する。
【０１１３】
続けて、セキュアＦＷ３０１は、チャレンジ乱数を送信する（ステップＳ１３０３）。具体的に、セキュアＦＷ３０１は、チャレンジ乱数Ａをセキュアサービス３０２に送信する。一方、アプリに対する認証処理の場合、セキュアサービス３０２は、チャレンジ乱数Ａをアプリ１０３に送信する。
【０１１４】
次に、セキュアＦＷ３０１は、レスポンスデータを受信するまで待機する（ステップＳ１３０４）。具体的に、セキュアＦＷ３０１は、セキュアサービス３０２からレスポンスデータＡを受信するまで待機する。一方、アプリに対する認証処理の場合、セキュアサービス３０２は、アプリ１０３からレスポンスデータＢを受信するまで待機する。
【０１１５】
続けて、セキュアＦＷ３０１は、現在時刻−開始時刻が上限時間より大きいか否かを判断する（ステップＳ１３０５）。現在時刻−開始時刻が上限時間以下である場合（ステップＳ１３０５：Ｎｏ）、セキュアＦＷ３０１は、チャレンジ乱数から、レスポンスデータを算出する（ステップＳ１３０６）。具体的に、セキュアＦＷ３０１は、チャレンジ乱数Ａから、レスポンスデータＡを算出する。一方、アプリに対する認証処理の場合、セキュアサービス３０２は、チャレンジ乱数Ｂから、レスポンスデータＢを算出する。
【０１１６】
次に、セキュアＦＷ３０１は、受信したレスポンスデータと算出したレスポンスデータを比較する（ステップＳ１３０７）。具体的に、セキュアＦＷ３０１は、セキュアサービス３０２から受信したレスポンスデータＡと算出したレスポンスデータＡを比較する。一方、アプリに対する認証処理の場合、セキュアサービス３０２は、アプリ１０３から受信したレスポンスデータＢと算出したレスポンスデータＢを比較する。
【０１１７】
続けて、セキュアＦＷ３０１は、受信したレスポンスデータと算出したレスポンスデータとが一致したか否かを判断する（ステップＳ１３０８）。受信したレスポンスデータと算出したレスポンスデータとが一致した場合（ステップＳ１３０８：Ｙｅｓ）、セキュアＦＷ３０１は、認証成功という検証結果を出力する（ステップＳ１３０９）。
【０１１８】
一方、受信したレスポンスデータと算出したレスポンスデータとが一致していない場合（ステップＳ１３０８：Ｎｏ）、または、現在時刻−開始時刻が上限時間より大きい場合（ステップＳ１３０５：Ｙｅｓ）、セキュアＦＷ３０１は、認証失敗という検証結果を出力する（ステップＳ１３１０）。
【０１１９】
ステップＳ１３０５：Ｙｅｓとなる場合の例としては、悪意のあるアプリによって制御が奪われた場合である。たとえば、セキュアサービス３０２の実行コードに、バッファーオーバーランを起こす可能性があったとする。この時、悪意のあるアプリは、バッファーオーバーランによって、セキュアサービス３０２に、悪意のあるアプリが指定した実行コードを実行させることが可能になる場合がある。この場合、セキュアサービス３０２は、レスポンスデータＡをセキュアＦＷ３０１に送信しなくなる。なお、バッファーオーバーランでは、実行コードの改ざんは行われていないため、図１２に示す改ざん検証処理は、改ざんされていないという検証結果となる。
【０１２０】
ステップＳ１３０９またはステップＳ１３１０の処理終了後、セキュアＦＷ３０１は、認証処理を終了する。認証処理を実行することにより、コンピュータシステム２００は、アプリ１０３またはセキュアサービス３０２が正当な通信相手か否かを検証することができる。
【０１２１】
以上説明したように、コンピュータシステム２００によれば、アプリ１０３の正当性を検証する処理を情報処理装置１０１が実行し、アプリ１０３の正当性を検証する処理の正当性をセキュアモジュール１０２が検証する。これにより、コンピュータシステム２００は、セキュアモジュール１０２の処理負荷を抑制しつつセキュアな状態でアプリ１０３を実行できる。
【０１２２】
また、コンピュータシステム２００によれば、セキュアサービス３０２の実行コードの特徴量を記憶しておき、実行中のセキュアサービス３０２の実行コードの特徴量と比較することにより、セキュアサービス３０２がセキュアな状態か否かを検証してもよい。これにより、コンピュータシステム２００は、セキュアサービス３０２の実行コードが改ざんされてセキュアな状態にないのか、またはセキュアサービス３０２の実行コードが改ざんされておらずセキュアな状態であるかを特定できる。そして、コンピュータシステム２００は、セキュアサービス３０２がセキュアな状態であれば、セキュアサービス３０２によりアプリ１０３がセキュアな状態か否かを検証することができる。
【０１２３】
また、コンピュータシステム２００によれば、セキュアサービス３０２が暗号化された暗号化コードを記憶しており、暗号化コードを復号して、復号した際のセキュアサービス３０２の実行コードの特徴量を記憶しておいてもよい。ここで、暗号化コードに改ざんを行うと、復号しても正常に戻せないため、暗号化コードに改ざんすることは難しい。したがって、復号した際のセキュアサービス３０２の実行コードは改ざんされていないことが保障でき、コンピュータシステム２００は、改ざんの可能性がない実行コードの特徴量に基づいて、セキュアサービス３０２の改ざん検証や、認証処理を行うことができる。
【０１２４】
また、コンピュータシステム２００によれば、セキュアサービス３０２が暗号化された暗号化コードを記憶しており、情報処理装置１０１は、暗号化コードを復号した際のセキュアサービス３０２の実行コードに従って、アプリがセキュアな状態かを検証してもよい。これにより、コンピュータシステム２００は、改ざんの可能性がないセキュアサービス３０２の実行コードに従って、アプリ１０３の改ざん検証や、認証処理を行うことができる。
【０１２５】
また、コンピュータシステム２００によれば、セキュアＦＷ３０１がチャレンジレスポンス方式による認証によって、セキュアサービス３０２が正当な通信相手であり、セキュアサービス３０２がセキュアな状態であるか否かを検証してもよい。これにより、コンピュータシステム２００は、セキュアサービス３０２が、実行コードを改ざんせずに制御を奪う攻撃を受けた場合も、セキュアな状態にないと特定することができる。
【０１２６】
また、コンピュータシステム２００によれば、セキュアサービス３０２がセキュアな状態でないと検証した場合、セキュアサービス３０２の実行を停止させてもよい。これにより、コンピュータシステム２００は、不正な動作を行う可能性があるセキュアサービス３０２を停止し、情報の流出を最小限に抑えることができる。
【０１２７】
また、実施の形態１にかかるコンピュータシステム２００は、改ざん検証処理をセキュアサービス３０２とセキュアＦＷ３０１とに分散して実施するため、情報処理装置１０１とセキュアモジュール１０２間の通信量を低減することができる。すなわち、より低速なＩＯを有するセキュアモジュール１０２であっても、強度の高いセキュリティを実現できることとなり、セキュアモジュール１０２のコスト低減とセキュリティとを両立することができる。
【０１２８】
このように、セキュアモジュール１０２が行う処理内容が減少することから、暗号復号およびハッシュ処理を行う回路を追加搭載することなくソフトウェア処理で代替えすることも可能になり、より低コストにセキュアモジュール１０２を実現することができる。
【０１２９】
また、コンピュータシステム２００は、特に重要な情報を、第三者がアクセスできないセキュアモジュール１０２内に秘匿しつつ、セキュア状態のＭＣＵ２０１に認証、改ざん検出、難読化を担わせることが可能となり高いセキュリティを保つことができる。
【０１３０】
（実施の形態２の説明）
実施の形態２にかかるコンピュータシステムは、セキュアモジュール１０２が挿抜可能であるシステムである。なお、実施の形態１において説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
【０１３１】
図１４は、実施の形態２にかかるコンピュータシステムの構成例を示すブロック図である。コンピュータシステム１４００は、情報処理装置１４０１とセキュアモジュール１４０２とを含む。
【０１３２】
情報処理装置１４０１は、ＭＣＵ２０１〜Ｉ／Ｆコントローラ２１３と、挿抜検出機構１４１１とを含む。挿抜検出機構１４１１は、Ｉ／Ｆ２０４と接続する。セキュアモジュール１４０２は、ＭＣＵ２２１〜演算回路２２４を含む。ＭＣＵ２２１〜演算回路２２４は、バス１４１２によって接続される。
【０１３３】
挿抜検出機構１４１１は、セキュアモジュール１４０２が挿入された状態と抜かれた状態との検出と、挿入された状態から抜かれた状態への変化と、抜かれた状態から挿入された状態への変化と、を検出する端子を有する。
【０１３４】
また、挿抜検出機構１４１１による挿抜の検出はＭＣＵ２０１のセキュア状態における汎用入出力端子に外部割込みとして定義される。ここで、前述の割込みが、非セキュア状態のＭＣＵ２０１からはノンマスカブルであるという特徴を持たせることにより、非セキュア状態からの不正なマスクを回避することができる。
【０１３５】
（コンピュータシステム１４００の機能）
図１５は、実施の形態２にかかるコンピュータシステムの機能構成例を示すブロック図である。コンピュータシステム１４００は、記憶部１１１と、送信部３１１と、検出部１５１１と、第１検証部１５１２と、第１停止部３１３と、復号部３２１〜第２停止部３２６と、を含む。
【０１３６】
検出部１５１１は、挿抜検出機構１４１１に相当する機能である。また、第１検証部１５１２と、第１停止部３１３とは、情報処理装置１４０１が実行するセキュアサービス１５０１に含まれる機能である。セキュアサービス１５０１は、記憶装置に記憶されたプログラムをＭＣＵ２０１が実行することにより、第１検証部１５１２と、第１停止部３１３の機能を実現する。記憶装置とは、具体的には、たとえば、図１４に示した不揮発性メモリ２０２などである。セキュアサービス１５０１は、図１に示した第１の検証処理１０４に相当する。
【０１３７】
検出部１５１１は、セキュアモジュール１４０２がコンピュータシステム１４００から抜かれたことと、セキュアモジュールがコンピュータシステム１４００に挿入されたことを検出する。検出結果は、揮発性メモリ２０３のセキュア領域に格納される。
【０１３８】
第１検証部１５１２は、検出部１５１１がコンピュータシステム１４００から抜かれたことを検出した場合、アプリ１０３がセキュアな状態でないと検証する。また、第１検証部１５１２は、セキュアモジュール１４０２がコンピュータシステム１４００に挿入されたことを検出した場合、第１の検証処理１０４の実行を開始する。
【０１３９】
図１６は、セキュアモジュールの挿抜状態の変化時に実行する処理手順の一例を示すフローチャートである。セキュアモジュール１４０２の挿抜状態の変化時に実行する処理は、セキュアサービス１５０１が実行する。
【０１４０】
セキュアサービス１５０１は、セキュアモジュール挿抜状態の変化を検知したことを示す割込みを検出する（ステップＳ１６０１）。次に、セキュアモジュール１４０２の挿抜状態が次に示す状態のいずれに一致するかを判断する（ステップＳ１６０２）。次に示す状態は、挿入された状態と、抜かれた状態と、である。セキュアモジュール１４０２の挿抜状態が挿入された状態である場合（ステップＳ１６０２：挿入された状態）、セキュアサービス１５０１は、アプリ１０３の起動を許可する（ステップＳ１６０３）。
【０１４１】
ステップＳ１６０３の処理について、ステップＳ１６０３の処理を実行した後にステップＳ５０６により、アプリ１０３の復号要求を受け付けた場合、セキュアサービス１５０１は、アプリ１０３の起動要求を許可してステップＳ５０７の処理を実行する。一方、ステップＳ１６０３の処理を実行していない状態で、セキュアサービス１５０１は、アプリ１０３の起動要求を許可しないため、ステップＳ５０７の処理を実行しない。
【０１４２】
セキュアモジュール１４０２の挿抜状態が抜かれた状態である場合（ステップＳ１６０２：抜かれた状態）、セキュアサービス１５０１は、続けて、アプリ１０３の動作状態が次に示す状態のいずれに一致するかを判断する（ステップＳ１６０４）。次に示す状態は、動作中と、停止中と、である。アプリ１０３の動作状態が動作中である場合（ステップＳ１６０４：動作中）、セキュアサービス１５０１は、不正な操作が行われたことを示すメッセージをディスプレイ２０５に表示する（ステップＳ１６０５）。また、ステップＳ１６０５の処理について、セキュアモジュール１４０２の再挿入を促すメッセージを表示してもよい。続けて、セキュアサービス１５０１は、アプリ１０３の実行を停止させる（ステップＳ１６０６）。アプリ１０３の実行を停止させる方法として、たとえば、セキュアサービス１５０１は、アプリ１０３が展開されたメモリの一部または全部を上書きする。
【０１４３】
アプリ１０３の動作状態が停止中である場合（ステップＳ１６０４：停止中）、セキュアサービス１５０１は、セキュアモジュールの挿抜状態の変化時に実行する処理を終了する。ステップＳ１６０４：停止中となった場合に、過去のアプリの動作時に展開されたデータがあれば、セキュアサービス１５０１は、展開されたデータを削除する。
【０１４４】
ステップＳ１６０３またはステップＳ１６０６の処理終了後、セキュアサービス１５０１は、セキュアモジュールの挿抜状態の変化時に実行する処理を終了する。セキュアモジュールの挿抜状態の変化時に実行する処理を実行することにより、コンピュータシステム１４００は、セキュアモジュール１４０２の挿抜状態の変化により、セキュアな状態を保障できなくなったアプリを停止させることができる。
【０１４５】
以上説明したように、コンピュータシステム１４００によれば、セキュアモジュール１４０２がコンピュータシステム１４００から抜かれたことを挿抜検出機構１４１１が検出した場合、アプリ１０３がセキュアな状態でないと検証する。これにより、コンピュータシステム１４００は、アプリ１０３について、セキュアな状態であるという保障がなくなったことを特定することができる。アプリ１０３がセキュアな状態でないと検証したコンピュータシステム１４００は、アプリ１０３の実行を停止させることにより、情報の流出を抑えることができる。
【０１４６】
また、コンピュータシステム１４００によれば、セキュアモジュール１４０２がコンピュータシステム１４００に挿入されたことを挿抜検出機構１４１１が検出した場合、セキュアサービスの実行を開始してもよい。これにより、コンピュータシステム１４００は、秘匿したい情報を扱うアプリ１０３を安全に用いることができる。
【０１４７】
なお、本実施の形態で説明した検証方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。セキュアＦＷ３０１、セキュアサービス３０２、１５０１は、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またセキュアＦＷ３０１、セキュアサービス３０２、１５０１は、インターネット等のネットワークを介して配布してもよい。
【０１４８】
上述した実施の形態１、２に関し、さらに以下の付記を開示する。
【０１４９】
（付記１）内部に格納された情報が外部から参照できない構造を有するセキュアモジュールと、前記セキュアモジュールと通信可能な情報処理装置と、を含むシステムであって、
前記情報処理装置は、
第１のコンピュータを有し、
前記情報処理装置により実行中のアプリケーションがセキュアな状態であるか否かを検証する第１の検証処理を前記第１のコンピュータが実行し、
前記セキュアモジュールは、
第２のコンピュータと、
前記第１の検証処理の実行コードの特徴を抽出した第１の特徴量および前記第１の検証処理を認証する認証処理の実行コードの両方またはいずれか一方を記憶する記憶部と、を有し、
前記記憶部の記憶内容に基づいて、前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する第２の検証処理を前記第２のコンピュータが実行する、
ことを特徴とするシステム。
【０１５０】
（付記２）前記第２のコンピュータは、
前記第１のコンピュータによって実行中の前記第１の検証処理の実行コードの特徴を抽出した第２の特徴量を算出し、
算出した前記第２の特徴量と、前記記憶部に記憶された前記第１の特徴量とを比較することにより、前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する、
処理を実行することを特徴とする付記１に記載のシステム。
【０１５１】
（付記３）前記記憶部は、
前記第１の検証処理の実行コードが暗号化された暗号化コードと前記暗号化コードを復号可能な復号鍵とを記憶しており、
前記セキュアモジュールは、
前記暗号化コードから、前記復号鍵を用いて前記第１の検証処理の実行コードを復号する復号部を有し、
前記第２のコンピュータは、
前記復号部が復号した前記第１の検証処理の実行コードの特徴を抽出した第１の特徴量を算出して前記記憶部に格納し、
算出した前記第２の特徴量と、前記記憶部に格納した前記第１の特徴量とを比較することにより、前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する、
処理を実行することを特徴とする付記２に記載のシステム。
【０１５２】
（付記４）前記情報処理装置は、前記暗号化コードを記憶しており、
前記第１のコンピュータは、
前記暗号化コードを前記セキュアモジュールに送信し、
前記暗号化コードを送信した結果、前記セキュアモジュールが送信した前記第１の検証処理の実行コードに従って、前記アプリケーションがセキュアな状態であるか否かを検証する、
処理を実行することを特徴とする付記３に記載のシステム。
【０１５３】
（付記５）前記第２のコンピュータは、
前記認証処理の実行コードに従って、前記第１の検証処理を認証するチャレンジ乱数を生成し、
前記認証処理の実行コードに従って、生成した前記チャレンジ乱数に基づいて第１のレスポンスデータを算出し、
前記情報処理装置に前記チャレンジ乱数を送信し、
前記情報処理装置が有する前記第１のコンピュータにより実行中の前記第１の検証処理において前記送信したチャレンジ乱数に基づいて算出された第２のレスポンスデータと、前記第２のコンピュータが算出した第１のレスポンスデータとを比較することにより、前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する、
処理を実行することを特徴とする付記１〜４のいずれか一つに記載のシステム。
【０１５４】
（付記６）前記セキュアモジュールは前記システムから挿抜可能であり、
前記第１のコンピュータは、
前記セキュアモジュールが前記システムから抜かれたことを検出した場合、前記アプリケーションがセキュアな状態でないと検証する、
処理を実行することを特徴とする付記１〜５のいずれか一つに記載のシステム。
【０１５５】
（付記７）前記セキュアモジュールは前記システムから挿抜可能であり、
前記第１のコンピュータは、
前記セキュアモジュールが前記システムに挿入されたことを検出した場合、前記第１の検証処理の実行を開始する、
処理を実行することを特徴とする付記１〜６のいずれか一つに記載のシステム。
【０１５６】
（付記８）前記第２のコンピュータは、
前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態でないと検証した場合、前記第１のコンピュータによる前記第１の検証処理の実行を停止させる、
処理を実行することを特徴とする付記１〜７のいずれか一つに記載のシステム。
【０１５７】
（付記９）内部に格納された情報が外部から参照できない構造を有するセキュアモジュールと通信可能な情報処理装置であって、
前記セキュアモジュールによってセキュアな状態であるか否かを検証される処理であって、前記情報処理装置により実行中のアプリケーションがセキュアな状態であるか否かを検証する第１の検証処理を実行するコンピュータを有することを特徴とする情報処理装置。
【０１５８】
（付記１０）第１のコンピュータを有する情報処理装置と通信可能であり、内部に格納された情報が外部から参照できない構造を有するセキュアモジュールであって、
前記情報処理装置により実行中のアプリケーションがセキュアな状態であるか否かを検証する第１の検証処理を前記第１のコンピュータで実行するための実行コードの特徴を抽出した第１の特徴量および前記第１の検証処理を認証する認証処理の実行コードの両方またはいずれか一方を記憶する記憶部と、
前記記憶部の記憶内容に基づいて、前記第１のコンピュータにより実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する第２の検証処理を実行する第２のコンピュータと、
を有することを特徴とするセキュアモジュール。
【０１５９】
（付記１１）内部に格納された情報が外部から参照できない構造を有するセキュアモジュールと、前記セキュアモジュールと通信可能な情報処理装置と、を含むシステムの検証方法であって、
前記情報処理装置は、
前記情報処理装置により実行中のアプリケーションがセキュアな状態であるか否かを検証する第１の検証処理を実行し、
前記セキュアモジュールは、
前記第１の検証処理の実行コードの特徴を抽出した第１の特徴量および前記第１の検証処理を認証する認証処理の実行コードの両方またはいずれか一方を記憶する記憶部の記憶内容に基づいて、実行中の前記第１の検証処理がセキュアな状態であるか否かを検証する第２の検証処理を実行する、
処理を実行することを特徴とする検証方法。
【符号の説明】
【０１６０】
１００  システム
１０１、１４０１  情報処理装置
１０２、１４０２  セキュアモジュール
１０３  アプリ
２００、１４００  コンピュータシステム
３０１  セキュアＦＷ
３０２、１５０１  セキュアサービス
３１１  送信部
３１２、１５１２  第１検証部
３１３  第１停止部
３２１  復号部
３２２  特徴量算出部
３２３  生成部
３２４  レスポンスデータ算出部
３２５  第２検証部
３２６  第２停止部
１５１１  検出部
【図１】
2014235326.tif 000003
【図２】
2014235326.tif 000004
【図３】
2014235326.tif 000005
【図４】
2014235326.tif 000006
【図５】
2014235326.tif 000007
【図６】
2014235326.tif 000008
【図７】
2014235326.tif 000009
【図８】
2014235326.tif 000010
【図９】
2014235326.tif 000011
【図１０】
2014235326.tif 000012
【図１１】
2014235326.tif 000013
【図１２】
2014235326.tif 000014
【図１３】
2014235326.tif 000015
【図１４】
2014235326.tif 000016
【図１５】
2014235326.tif 000017
【図１６】
2014235326.tif 000018