(57)【要約】【課題】本発明は、各種プログラム毎に改竄の有無を検証すべき優先順位を設定してＯＳを起動するまでの起動時間の短縮を図りつつも、各種プログラムに生じた改竄を確実に検出することができる情報端末を提供することを目的とする。【解決手段】本発明の情報端末は、複数のプログラムを記憶する不揮発メモリ１３と、検証対象テーブルとして、前記複数のプログラム毎に、当該プログラムが改竄の有無を検証され得る確率についての情報である検証確率を記憶する保護メモリ１４と、前記保護メモリ１４に記憶した前記検証確率を参照して、前記複数のプログラムのうちの改竄の有無を検証すべきものを特定する検証対象判定手段と、検証すべきものとして特定したプログラムの改竄の有無を検証する改竄検証手段と、検証した結果に応じて前記不揮発メモリに記憶した前記複数のプログラムを起動するプログラム起動手段と、を含むＣＰＵ１１と、を備えるものである。【選択図】図１
2009009372.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラムを記憶するプログラム記憶部と、
検証対象テーブルとして、前記複数のプログラム毎に、当該プログラムが改竄の有無を検証され得る確率についての情報である検証確率を記憶する検証確率記憶部と、
前記検証確率記憶部に記憶した前記検証確率を参照して、前記複数のプログラムのうちの改竄の有無を検証すべきものを特定する検証対象判定手段と、
検証すべきものとして特定したプログラムの改竄の有無を検証する改竄検証手段と、
検証した結果に応じて前記プログラム記憶部に記憶した前記複数のプログラムを起動するプログラム起動手段と、
を備える情報端末。
【請求項２】
請求項１記載の情報端末であって、
前記複数のプログラムの改竄の有無を検証するよう指示する検証タイミングを検出するカウンタを備え、
前記検証対象判定手段は、前記カウンタが前記検証タイミングを検出した時点で、前記検証確率記憶部に記憶した前記検証確率を参照して、前記複数のプログラムのうちの改竄の有無を検証すべきものを特定する、
情報端末。
【請求項３】
請求項２記載の情報端末であって
前記カウンタは、前記検証タイミングを検出した回数をカウントし、
前記検証確率記憶部は、前記複数のプログラム毎に、数値ｒ／ｎ（ｒ、ｎは整数）で表される前記検証確率を記憶し、
前記検証対象判定手段は、前記カウンタがｎ回カウントする間に、前記複数のプログラムのうちの数値ｒ／ｎで表される前記検証確率が割り当てられたものをｒ回特定する、
情報端末。
【請求項４】
請求項２記載の情報端末であって、
前記検証確率記憶部は、前記複数のプログラム毎に、当該プログラム改竄の有無を検証すべき検証タイミングを識別する情報である検証種別を記憶し、
前記検証対象判定手段は、前記カウンタが前記検証種別により識別される前記検証タイミングを検出した時点で、前記検証確率記憶部に記憶した前記検証確率と前記検証タイミングの種別を参照して、前記複数のプログラムのうちの改竄の有無を検証すべきものを特定する、
情報端末。
【請求項５】
請求項２記載の情報端末であって、
前記検証確率記憶部は、数値の異なる前記検証確率毎に、当該プログラム改竄の有無を検証すべき検証タイミングを識別する情報である検証種別を記憶し、
前記検証対象判定手段は、前記カウンタが前記検証種別により識別される前記検証タイミングを検出した時点で、前記検証確率記憶部に記憶した前記検証確率と前記検証タイミングの種別を参照して、前記複数のプログラムのうちの改竄の有無を検証すべきものを特定する、
情報端末。
【請求項６】
請求項４または５記載の情報端末であって、
前記カウンタは、前記検証タイミングを検出した回数を前記検証種別毎にカウントし、
前記検証確率記憶部は、前記複数のプログラム毎に、数値ｒ／ｎ（ｒ、ｎは整数）で表される前記検証確率を記憶し、
前記検証対象判定手段は、前記検証種別により識別されるいずれか１つの前記検証タイミングを前記カウンタがｎ回カウントする間に、前記複数のプログラムのうちの、数値ｒ／ｎで表される前記検証確率が割り当てられ、かつ、前記検証種別により識別される前記検証タイミングが割り当てられたものを、ｒ回特定する、
情報端末。
【請求項７】
請求項３または６記載の情報端末であって、
前記検証対象判定手段は、前記検証確率記憶部に記憶されている、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムの個数が、ｎ／ｒ以下である場合、前記カウンタがｎ回の前記検証タイミングを検出したそれぞれの時点で、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムを一つずつ特定する、
情報端末。
【請求項８】
請求項３または６記載の情報端末であって、
前記検証対象判定手段は、前記検証確率記憶部に記憶されている、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムの個数が、ｎ／ｒより多い場合、前記カウンタがｎ回の前記検証タイミングを検出したそれぞれの時点で、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムを少なくとも一つ特定する、
情報端末。
【請求項９】
請求項８記載の情報端末であって、
前記検証対象判定手段は、前記検証確率記憶部に記憶されている、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムの個数が、ｎ／ｒより多いｍ×ｎ（ｍは整数）個である場合、前記カウンタがｎ回の前記検証タイミングを検出したそれぞれの時点で、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムのうちのｒ×ｍ個を重複させないように特定する、
情報端末。
【請求項１０】
請求項１から９のいずれか一項に記載の情報端末であって、
前記検証確率記憶部は、前記複数のプログラム毎に、当該プログラムの改竄の有無を検証する検証手法を記憶し、
前記改竄検証手段は、前記検証確率記憶部に記憶した前記検証手法を参照して、検証すべきものとして特定したプログラムの改竄の有無を当該プログラムに割り当てられた前記検証手法により検証する、
情報端末。
【請求項１１】
請求項１から９のいずれか一項に記載の情報端末であって、
前記検証確率記憶部は、数値の異なる前記検証確率毎に、当該プログラムの改竄の有無を検証する検証手法を記憶し、
前記改竄検証手段は、前記検証確率記憶部に記憶した前記検証手法を参照して、検証すべきものとして特定したプログラムの改竄の有無を当該プログラムに割り当てられた前記検証手法により検証する、
情報端末。
【請求項１２】
請求項１から１１のいずれか一項に記載の情報端末であって、
前記プログラム起動手段は、前記改竄検証手段がプログラムの改竄有りと判定した場合、前記プログラム記憶部に記憶した前記複数のプログラムのうちの、少なくとも前記改竄検証手段が改竄有りと判定したプログラムの起動を中止する、
情報端末。
【請求項１３】
請求項１から１１のいずれか一項に記載の情報端末であって、
前記プログラム起動手段は、前記改竄検証手段がプログラムの改竄有りと判定した場合、前記プログラム記憶部に記憶した前記複数のプログラムのうちの所定のものを起動する、
情報端末。
【請求項１４】
請求項１から１１のいずれか一項に記載の情報端末であって、
前記プログラム起動手段は、前記改竄検証手段がプログラムの改竄有りと判定した場合、当該プログラムに割り当てられた前記検証確率に応じて前記プログラム記憶部に記憶した前記複数のプログラムを起動する、
情報端末。
【請求項１５】
請求項１３または１４記載の情報端末であって、
前記プログラム起動手段は、前記改竄検証手段がプログラムの改竄有りと判定した場合、前記プログラム記憶部に記憶した前記複数のプログラムのうちの、エマージェンシーモードを実行するための所定のプログラムを起動する、
情報端末。
【請求項１６】
請求項１から１５のいずれか一項に記載の情報端末であって、
前記ＣＰＵを前記検証対象判定手段、前記改竄検証手段、前記プログラム起動手段として機能させるための第１のブートプログラムを記憶するＲＯＭを備える情報端末。
【請求項１７】
請求項１６記載の情報端末であって、
前記プログラム記憶部は、前記ＣＰＵを前記検証対象判定手段、前記改竄検証手段、前記プログラム起動手段として機能させるための前記第２のブートプログラムを記憶し、
前記ＣＰＵは、前記ＲＯＭに記憶した前記第１のブートプログラムを実行して前記プログラム記憶部に記憶した前記第２のブートプログラムの改竄の有無を検証し、改竄無しと検証すれば、前記プログラム記憶部に記憶した前記第２のブートプログラムを実行する、
情報端末。
【請求項１８】
請求項１から１７のいずれか一項に記載の情報端末であって、
少なくとも各種プログラムおよび前記検証対象テーブルの一方、または両方を記憶するサーバと通信を行う通信部を備え、
前記プログラム記憶部は、前記通信部により受信した前記各種プログラムを記憶し、
前記検証確率記憶部は、前記通信部により受信した前記検証対象テーブルを記憶する、
情報端末。
【請求項１９】
請求項１８記載の情報端末であって、
前記通信部は、前記改竄検証手段による検証した結果を前記サーバに送信する、
情報端末。
【請求項２０】
請求項１８記載の情報端末と、少なくとも一つのプログラムおよび前記検証対象テーブルの一方、または両方を記憶するサーバと、を含んで構成されるクライアントサーバシステム。
【請求項２１】
請求項１９記載の情報端末と、少なくとも一つのプログラムおよび前記検証対象テーブルの一方、または両方を記憶するサーバと、を含んで構成されるクライアントサーバシステムであって、
前記サーバは、前記情報端末から受信した前記検証した結果に応じて、前記少なくとも一つのプログラムを起動するよう指示する制御信号を前記情報端末にに送信し、
前記情報端末は、前記制御信号を受信すると、前記プログラム記憶部に記憶した前記複数のプログラムのうちの、前記少なくとも一つのプログラムを起動する、
クライアントサーバシステム。
【請求項２２】
コンピュータを、請求項１から１５のいずれか一項に記載の情報端末が有する前記検証対象判定手段、前記改竄検証手段、前記プログラム起動手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、セキュアブート（プログラムの改竄の有無を検証する処理）を実施する情報端末、および当該情報端末にセキュアブートを実行させるためのプログラムに関する。
【背景技術】
【０００２】
電源が投入された情報端末は、次のような一連の処理を行ってその情報端末に搭載されたＯＳを起動する。まず、マザーボード上にあるブートＲＯＭに記憶されたＩＰＬ（Initial Program Loader）を参照して、ハードディスク内のどの領域（パーティション）からＯＳを起動するかが選択されると、その選択されたパーティションの先頭セクターであるブートセクタが読み出される。そして、ＩＰＬ（Initial Program Loader）が上記パーティションに格納された各種プログラムをメモリに読み出し、実行することによって、ＯＳを起動することになる。
【０００３】
近年の情報端末では、ＩＰＬが各種プログラムを読み出す際、読み出した各種プログラムが改竄されているか否かを検証し、改竄されていないことが検証されればその各種プログラムを実行することによってＯＳを起動している。一般に、検証されるべきプログラムの数を増やすほど、改竄されたＯＳを起動する可能性は低く安全性が高まるものの、ＯＳを起動するまでにかかる時間が増大してしまうため、情報端末がＯＳを起動する上での安全性と起動時間の間にはトレードオフが生じることが知られている。
【０００４】
これまでには、上記の安全性と起動時間を最適化する手法、つまり、安全性の向上または起動時間の短縮の一方を実現する手法が開示されている。例えば、特許文献１に開示されている手法は、上述したパーティションに格納された各種プログラムには優先度を割り当てておき、その優先度の高い各種プログラムが改竄されていないかを検証するものである。また、特許文献２に開示されている手法は、今回検証すべきプログラムを、前回の検証において改竄されていると検証されたプログラムに絞って行うようにするものである。
【特許文献１】特開２００６−０３９８８８号公報
【特許文献２】特開平０５−２６５８０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１、２いずれの手法でも、検証が行われるプログラムが優先順位の高いプログラムに固定されており、それ以外の優先順位の高くないプログラムが改竄された場合には、その検出が困難である。このため、上述したパーティションに格納された各種プログラムに優先順位を設定するだけでは、改竄された全てのプログラムを検出することができない。
【０００６】
本発明は、上記事情に鑑みてなされたもので、各種プログラム毎に改竄の有無を検証すべき優先順位を設定してＯＳを起動するまでの起動時間の短縮を図りつつも、各種プログラムに生じた改竄を確実に検出することができる情報端末、クライアントサーバシステムおよびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の情報端末は、複数のプログラムを記憶するプログラム記憶部と、検証対象テーブルとして、前記複数のプログラム毎に、当該プログラムが改竄の有無を検証され得る確率についての情報である検証確率を記憶する検証確率記憶部と、前記検証確率記憶部に記憶した前記検証確率を参照して、前記複数のプログラムのうちの改竄の有無を検証すべきものを特定する検証対象判定手段と、検証すべきものとして特定したプログラムの改竄の有無を検証する改竄検証手段と、検証した結果に応じて前記プログラム記憶部に記憶した前記複数のプログラムを起動するプログラム起動手段と、を含むＣＰＵと、を備えるものである。
【０００８】
この構成により、安全性を向上させるための優先順位が高くないプログラムであっても、改竄の有無が検証される可能性がある。
【０００９】
また、本発明の情報端末は前記複数のプログラムの改竄の有無を検証するよう指示する検証タイミングを検出するカウンタを備え、前記検証対象判定手段が、前記カウンタが前記検証タイミングを検出した時点で、前記検証確率記憶部に記憶した前記検証確率を参照して、前記複数のプログラムのうちの改竄の有無を検証すべきものを特定する、ものを含む。
【００１０】
この構成により、長期的に考えれば、全てのプログラムについて改竄の有無を確実に検証することができる。
【００１１】
また、本発明の情報端末は、前記カウンタが、前記検証タイミングを検出した回数をカウントし、前記検証確率記憶部が、前記複数のプログラム毎に、数値ｒ／ｎ（ｒ、ｎは整数）で表される前記検証確率を記憶し、前記検証対象判定手段が、前記カウンタがｎ回カウントする間に、前記複数のプログラムのうちの数値ｒ／ｎで表される前記検証確率が割り当てられたものをｒ回特定する、ものを含む。
【００１２】
この構成により、検証タイミングを検証確率から算出される回数だけカウントすれば、確実にかつ短期間でそのプログラムの改竄の有無を検出することができる。
【００１３】
また、本発明の情報端末は、前記検証確率記憶部が、前記複数のプログラム毎に、当該プログラム改竄の有無を検証すべき検証タイミングを識別する情報である検証種別を記憶し、前記検証対象判定手段が、前記カウンタが前記検証種別により識別される前記検証タイミングを検出した時点で、前記検証確率記憶部に記憶した前記検証確率と前記検証タイミングの種別を参照して、前記複数のプログラムのうちの改竄の有無を検証すべきものを特定する、ものを含む。
【００１４】
この構成により、各プログラムの機能に応じた、改竄の有無を検証するべきトリガを検出したときにだけ、改竄検証がなされるため、改竄検証にかかる時間を効率的に短縮することができる。
【００１５】
また、本発明の情報端末は、前記検証確率記憶部が、数値の異なる前記検証確率毎に、当該プログラム改竄の有無を検証すべき検証タイミングを識別する情報である検証種別を記憶し、前記検証対象判定手段が、前記カウンタが前記検証種別により識別される前記検証タイミングを検出した時点で、前記検証確率記憶部に記憶した前記検証確率と前記検証タイミングの種別を参照して、前記複数のプログラムのうちの改竄の有無を検証すべきものを特定する、ものを含む。
【００１６】
この構成により、共通の検証確率各を有するプログラムの機能に応じた、改竄の有無を検証するべきトリガを検出したときにだけ、改竄検証がなされるため、改竄検証にかかる時間を効率的に短縮することができる。
【００１７】
また、本発明の情報端末は、前記カウンタが、前記検証タイミングを検出した回数を前記検証種別毎にカウントし、前記検証確率記憶部が、前記複数のプログラム毎に、数値ｒ／ｎ（ｒ、ｎは整数）で表される前記検証確率を記憶し、前記検証対象判定手段が、前記検証種別により識別されるいずれか１つの前記検証タイミングを前記カウンタがｎ回カウントする間に、前記複数のプログラムのうちの、数値ｒ／ｎで表される前記検証確率が割り当てられ、かつ、前記検証種別により識別される前記検証タイミングが割り当てられたものを、ｒ回特定する、ものを含む。
【００１８】
この構成により、各プログラムの機能に応じた、改竄の有無を検証するべきトリガを検出したときにだけ、改竄検証がなされるため、かつ、検証タイミングを検証確率から算出される回数だけカウントすれば、確実にかつ短期間でそのプログラムの改竄の有無を検出することができるため、改竄検証にかかる時間を効率的に短縮することができる。
【００１９】
また、本発明の情報端末は、前記検証対象判定手段が、前記検証確率記憶部に記憶されている、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムの個数が、ｎ／ｒ以下である場合、前記カウンタがｎ回の前記検証タイミングを検出したそれぞれの時点で、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムを一つずつ特定する、ものを含む。
【００２０】
この構成により、検証タイミングを検出した一つの時点で改竄検証が行われるプログラムの数を均等化することができるため、当該時点での改竄の検証にかかる時間もまた均等化することができる、検証タイミングを検出した一つの時点で極端に改竄の検証にかかる時間が長くなることを防ぐことができる。
【００２１】
また、本発明の情報端末は、前記検証対象判定手段が、前記検証確率記憶部に記憶されている、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムの個数が、ｎ／ｒより多い場合、前記カウンタがｎ回の前記検証タイミングを検出したそれぞれの時点で、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムを少なくとも一つ特定する、ものを含む。
【００２２】
この構成により、検証タイミングを検出した一つの時点で改竄検証が行われるプログラムの数を均等化することができるため、当該時点での改竄の検証にかかる時間もまた均等化することができる、検証タイミングを検出した一つの時点で極端に改竄の検証にかかる時間が長くなることを防ぐことができる。
【００２３】
また、本発明の情報端末は、前記検証対象判定手段が、前記検証確率記憶部に記憶されている、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムの個数が、ｎ／ｒより多いｍ×ｎ（ｍは整数）個である場合、前記カウンタがｎ回の前記検証タイミングを検出したそれぞれの時点で、数値ｒ／ｎの前記検証確率が割り当てられた前記複数のプログラムのうちのｒ×ｍ個を重複させないように特定する、ものを含む。
【００２４】
この構成により、検証タイミングを検出した一つの時点で改竄検証が行われるプログラムの数を均等化することができるため、当該時点での改竄の検証にかかる時間もまた均等化することができる、検証タイミングを検出した一つの時点で極端に改竄の検証にかかる時間が長くなることを防ぐことができる。
【００２５】
また、本発明の情報端末は、前記検証確率記憶部が、前記複数のプログラム毎に、当該プログラムの改竄の有無を検証する検証手法を記憶し、前記改竄検証手段が、前記検証確率記憶部に記憶した前記検証手法を参照して、検証すべきものとして特定したプログラムの改竄の有無を当該プログラムに割り当てられた前記検証手法により検証する、ものを含む。
【００２６】
この構成により、プログラムの重要性に応じて、そのプログラムの検証方法を設定することができるため、安全性と起動時間を適宜調整することができる。
【００２７】
また、本発明の情報端末は、前記検証確率記憶部が、数値の異なる前記検証確率毎に、当該プログラムの改竄の有無を検証する検証手法を記憶し、前記改竄検証手段が、前記検証確率記憶部に記憶した前記検証手法を参照して、検証すべきものとして特定したプログラムの改竄の有無を当該プログラムに割り当てられた前記検証手法により検証する、ものを含む。
【００２８】
この構成により、特定の検証確率を割り当てられたプログラムに、一律に共通の検証手法を設定することができるため、検証手法の設定を簡便に行うことができる。
【００２９】
また、本発明の情報端末は、前記プログラム起動手段が、前記改竄検証手段がプログラムの改竄有りと判定した場合、前記プログラム記憶部に記憶した前記複数のプログラムのうちの、少なくとも前記改竄検証手段が改竄有りと判定したプログラムのブートを中止する、ものを含む。
【００３０】
また、本発明の情報端末は、前記プログラム起動手段が、前記改竄検証手段がプログラムの改竄有りと判定した場合、前記プログラム記憶部に記憶した前記複数のプログラムのうちの所定のものを起動する、ものを含む。
【００３１】
また、本発明の情報端末は、前記プログラム起動手段が、前記改竄検証手段がプログラムの改竄有りと判定した場合、当該プログラムに割り当てられた前記検証確率に応じて前記プログラム記憶部に記憶した前記複数のプログラムを起動する、ものを含む。
【００３２】
また、本発明の情報端末は、前記プログラム起動手段が、前記改竄検証手段がプログラムの改竄有りと判定した場合、前記プログラム記憶部に記憶した前記複数のプログラムのうちの、エマージェンシーモードを実行するための所定のプログラムを起動する、ものを含む。
【００３３】
この構成により、改竄有りと判定されたプログラムの重要性に応じて、最適なモードによりＯＳを起動することができる。
【００３４】
また、本発明の情報端末は、前記ＣＰＵを前記検証対象判定手段、前記改竄検証手段、前記プログラム起動手段として機能させるための第１のブートプログラムを記憶するＲＯＭを備えるものを含む。
【００３５】
この構成により、改竄される恐れのないブートプログラムによって、プログラム記憶部に記憶された各種プログラムの改竄検証を行うことができるため、各種プログラムを起動する上での安全性が向上する。
【００３６】
また、本発明の情報端末は、前記プログラム記憶部が、前記ＣＰＵを前記検証対象判定手段、前記改竄検証手段、前記プログラム起動手段として機能させるための前記第２のブートプログラムを記憶し、前記ＣＰＵが、前記ＲＯＭに記憶した前記第１のブートプログラムを実行して前記プログラム記憶部に記憶した前記第２のブートプログラムの改竄の有無を検証し、改竄無しと検証すれば、前記プログラム記憶部に記憶した前記第２のブートプログラムを実行する、ものを含む。
【００３７】
この構成により、ブートプログラムの書き換えを可能にし、かつ、その書き換え可能なブートプログラムは第１のブートプログラムによって必ず検証されるため安全性も確保することができる。
【００３８】
また、本発明の情報端末は、少なくとも各種プログラムおよび前記検証対象テーブルの一方、または両方を記憶するサーバと通信を行う通信部を備え、前記プログラム記憶部が、前記通信部により受信した前記各種プログラムを記憶し、前記検証確率記憶部が、前記通信部により受信した前記検証対象テーブルを記憶する、ものを含む。
【００３９】
また、本発明の情報端末は、前記通信部が、前記改竄検証手段による検証した結果を前記サーバに送信する、ものを含む。
【００４０】
本発明のクライアントサーバシステムは、本発明の情報端末と、少なくとも一つのプログラムおよび前記検証対象テーブルの一方、または両方を記憶するサーバと、を含んで構成されるものである。
【００４１】
また、本発明のクライアントサーバシステムは、本発明の情報端末と、少なくとも一つのプログラムおよび前記検証対象テーブルの一方、または両方を記憶するサーバと、を含んで構成されるクライアントサーバシステムであって、前記サーバが、前記情報端末から受信した前記検証した結果に応じて、前記少なくとも一つのプログラムを起動するよう指示する制御信号を前記情報端末にに送信し、前記情報端末が、前記制御信号を受信すると、前記プログラム記憶部に記憶した前記複数のプログラムのうちの、前記少なくとも一つのプログラムを起動する、ものである。
【００４２】
この構成により、サーバがリモートコントロールしようとしているプログラムに改竄が無いと情報端末（クライアント）が判定した場合に、サーバがリモートコントロールを実施するため、より安全なリモートコントロールを実現することができる。
【００４３】
本発明のプログラムは、コンピュータを、本発明の情報端末が有する前記検証対象判定手段、前記改竄検証手段、前記プログラム起動手段として機能させるためのものである。
【発明の効果】
【００４４】
本発明の情報端末、クライアントサーバシステムおよびプログラムによれば、各種プログラム毎に改竄の有無を検証すべき優先順位を設定してＯＳを起動するまでの起動時間の短縮を図りつつも、各種プログラムに生じた改竄を確実に検出することができる。
【発明を実施するための最良の形態】
【００４５】
以下、本発明の実施の形態の情報端末について説明する。まず、本発明の実施の形態の情報端末におけるハードウェアの構成を、図１に示す本発明の実施の形態の情報端末におけるハードウェアの構成図を参照して説明する。本発明の実施の形態の情報端末は、ＣＰＵ１１、ブートＲＯＭ１２、不揮発メモリ１３、保護メモリ１４を含んで構成される。ブートＲＯＭ１２は、読み出し専用記憶装置であり、情報端末に電源が投入されたときに最初に実行されるべきプログラムや、プログラムの改竄の有無を検証するための各種改竄検証プログラム（検証対象判定機能、改竄検証機能、結果判定機能、プログラム起動機能。各プログラムの機能は後述する）を記憶している。不揮発メモリ１３は、本発明の実施の形態の情報端末による処理を管理するプログラム（図１では、ＰＧ１、ＰＧ２、ＰＧ３。アプリケーションと称されることもある）を記憶している。保護メモリ１４は、ハードウェア的に保護されたメモリ、またはデータを暗号化して記憶するメモリであり、後述する検証対象テーブルを記憶している。不揮発メモリ１３の一部に暗号化してデータを書き込む構成によって、保護メモリ１４を実現してもかまわない。ＣＰＵ１１は、ブートＲＯＭ１２に記憶されたプログラムを読み出し、また、保護メモリ１４から読み出した検証対象テーブルを参照して不揮発メモリ１３に記憶されたプログラムを読み出し、それらの読み出したプログラムを実行する。以下、本発明の実施の形態の情報端末に電源が投入されてからのＣＰＵ１１による処理について説明する。
【００４６】
電源が投入された情報端末において、ＣＰＵ１１に電力の供給が開始されると、ＣＰＵ１１はまず、マザーボード上にあるブートＲＯＭ１２に記憶されたＩＰＬ（Initial Program Loader）を参照して、不揮発メモリ１３および保護メモリ１４から最初に読み出して起動すべきプログラムの先頭アドレスを読み出す。ＣＰＵ１１は、読み出した先頭アドレスを基に、不揮発メモリ１３に格納された各種プログラム（ＰＧ１、ＰＧ２、ＰＧ３）を読み出し、それらのプログラムの改竄の有無を検証し、改竄されていないことが検証されればそのプログラムを実行することによってＯＳを起動する。
【００４７】
ＣＰＵ１１は、不揮発メモリ１３に格納された各種プログラムの改竄の有無を検証するために各種プログラム（ＰＧ１、ＰＧ２、ＰＧ３）を読み出すにあたって、保護メモリ１４に記憶された検証対象テーブルを参照した後、ブートＲＯＭ１２に記憶されたプログラムの改竄の有無を検証するための各種改竄検証プログラムを実行して、次に説明する検証対象判定処理、改竄検証処理、結果判定処理、およびプログラム起動処理を実行する。［１．検証対象判定処理］、［２．改竄検証処理］、［３．結果判定処理］、および［４．プログラム起動処理］の処理の流れを、図２に示す、本発明の実施の形態の情報端末による改竄検証の流れを説明するフローチャートを参照して説明する。
【００４８】
［１．検証対象判定処理］ＣＰＵ１１は、不揮発メモリ１３に記憶されたプログラム（ＰＧ１、ＰＧ２、ＰＧ３）毎に「検証フラグ」、「重要度」、「検証確率」、「検証値」、「アドレス」などの情報が記憶された検証対象テーブルを保護メモリ１４から読み出し（ステップ２０１）、その検証対象テーブルの情報を参照して不揮発メモリ１３に記憶されたプログラム（ＰＧ１、ＰＧ２、ＰＧ３）のうちの改竄の有無を検証すべきものを特定する（ステップ２０２）。ＣＰＵ１１は、改竄の有無を検証すべきプログラムを特定するために上記「検証確率」を参照しており、「検証確率」に従った頻度で、その「検証確率」が割り当てられたプログラムを改竄の有無を検証すべきものとして特定する。例えば、検証対象テーブルには、ＰＧ１、ＰＧ２、ＰＧ３にそれぞれ割り当てられた「検証確率」は、「１」、「１／２」、「１／２」である。ＣＰＵ１１は、ＰＧ１については、本発明の実施の形態の情報端末に電源が投入されれば必ず（１００％）改竄の有無を検証すべきプログラムとしてＰＧ１を特定し、また、ＰＧ２、ＰＧ３については、本発明の実施の形態の情報端末に電源が投入されれば１／２の確率（５０％）で改竄の有無を検証すべきプログラムとしてＰＧ２、ＰＧ３を特定する。なお、「検証確率」が「１」以外である場合にＣＰＵ１１に上記の検証対象判定処理を実行させるプログラムの一例としては、次のようなものが考えられる。すなわち、電源が投入されると乱数を発生させ、その値と「検証確率」に応じて改竄の有無を検証すべきプログラムであるか否かを判定し、改竄の有無を検証すべきと判定されたプログラムは「検証フラグ」を「未」から「済」にして検証対象テーブルを更新し、以降は、「検証フラグ」が「未」であるプログラムのみ、改竄の有無を検証すべきか否かを判定する、ものが考えられる（より詳細な検証対象判定処理は、後述する第１実施形態にて説明する。）。
【００４９】
［２．改竄検証処理］ＣＰＵ１１は、［１．検証対象判定処理］にて改竄の有無を検証すべきものとして特定されたプログラムがあれば（ステップ２０３、Ｙ）、そのプログラムが格納されている先頭アドレスを示す「アドレス」を参照して不揮発メモリ１３から読み出し（ステップ２０４）、所定のハッシュ関数（例えば、ＳＨＡ型ハッシュ関数、ＭＤ型ハッシュ関数）や所定の暗号化処理（例えば、デジタル署名を利用した暗号化処理、ＨＭＡＣアルゴリズム）を用いて、そのプログラムの固有の値を算出する。ＣＰＵ１１は、算出した値と、検証対象テーブルのうちの「検証値」と、を比較し、一致すれば、不揮発メモリ１３から読み出したプログラムには改竄無し、一致しなければ改竄有りと判定する（ステップ２０５）。なお、検証対象テーブルの「検証値」を算出するために用いられたハッシュ関数または暗号化処理と、［２．改竄検証処理］にて固有の値を算出するために用いるハッシュ関数または暗号化処理と、は同じものである必要がある。
【００５０】
［３．結果判定処理］ＣＰＵ１１は、［２．改竄検証処理］にて改竄有りと判定されたプログラムがあれば（ステップ２０６、Ｙ）、そのプログラムを起動するか否かを「重要度」を基に判定する（ステップ２０７）。ここでは、ＣＰＵ１１は、［２．改竄検証処理］にて改竄有りと判定されたプログラムに「６」以下の「重要度」（「重要度」は、ここでは十段階で表現されており、「１」から「１０」に値が大きくなるにつれて重要性が高くなるものとする。）が割り当てられていれば、そのプログラムを起動する。ＣＰＵ１１は、［２．改竄検証処理］にて不揮発メモリ１３から読み出したＰＧ１に改竄有りと判定した場合、ＰＧ１に割り当てられた「重要度」が「６」より大きい数値「１０」であることから、ブートを中止する（全起動中止モード）、情報端末を起動させる上で必要不可欠な所定のプログラムのみを起動する（エマージェンシーモード）、あるいは、当該プログラムのみを実行しないまたは当該プログラムに関連するプログラムのみを実行しない（一部起動中止モード）、などの処理を行うよう判定する。このとき、改竄有りと判定されたプログラムの「重要度」の値に応じて、全起動中止モード、エマージェンシーモード、一部起動中止モードしてもよい（例えば、「重要度」が「１０」であれば全起動中止モード、「重要度」が「９」であればエマージェンシーモード、「重要度」が「８」「７」であれば一部起動中止モード。）。一方、ＣＰＵ１１は、［２．改竄検証処理］にて不揮発メモリ１３から読み出したＰＧ２に改竄有りと判定した場合、ＰＧ２に割り当てられた「重要度」が「６」以下の数値「５」であることから、そのプログラムを含む他のプログラムを起動する（強制起動モード）。なお、ここでは、検証対象テーブルのうちの「重要度」の大小を基に、［２．改竄検証処理］にて改竄有りと判定されたプログラムを起動するか否かを判定する構成について説明したが、「重要度」と同様に、値が大きくなるにつれてその値が割り当てられたプログラムの重要性が高くなる「検証確率」の大小を基に、同プログラムを起動するか否かを判定する構成であっても構わない。
【００５１】
［４．プログラム起動処理］ＣＰＵ１１は、不揮発メモリ１３に記憶されたプログラム（ＰＧ１、ＰＧ２、ＰＧ３）のうち、［１．検証対象判定処理］にて改竄の有無を検証すべきものとして特定されなかったプログラム、［２．改竄検証処理］にて改竄無しと判定されたプログラム、および「３．結果判定処理」にて起動すべきと判定されたプログラム、それぞれを、各プログラムが格納されている先頭アドレスを示す「アドレス」を参照して不揮発メモリ１３から読み出し、実行する（ステップ２０８、２０９）。なお、［３．結果判定処理］にて起動すべきでない判定されたプログラムがあった場合には、ＣＰＵ１１は、［３．結果判定処理］で判定された、ブートを中止する、あるいは、当該プログラムのみを実行しないまたは当該プログラムに関連するプログラムを実行しない、などのモードにて処理を行う。
【００５２】
以上、本発明の実施の形態の情報端末は、プログラム毎に割り当てられた検証確率に基づいて当該プログラムの改竄の有無を検証するか否かを判定する構成によって、高い検証確率が割り当てられたプログラムは検証が行われる頻度は高く、一方で、低い検証確率が割り当てられた重要性の低いプログラムは長期的にみればいずれ検証が行われ、全てのプログラムに生じる改竄を必ず発見することができるため、ＯＳを起動する上での安全性を維持することができる。また、従来の手法では、優先順位の低いプログラムがプログラムを改竄しようとする第三者による改竄対象になり得たが、本発明の実施の形態の情報端末では、どのプログラムの検証がいつの時点で行われるかを第三者が特定することは難しく、また、改竄したプログラムも必ず検証されるため、改竄しようとする第三者の意欲を削ぐという意味でも、安全性が向上することになる。
【００５３】
また、本発明の実施の形態の情報端末は、検証確率を適宜設定することによって、改竄の有無を検証するプログラムの数を効率的に減らしてその検証にかかる時間を短縮し、その結果、ＯＳを起動するまでにかかる起動時間を短縮することができる。
【００５４】
（第１実施形態）
以下、ブートＲＯＭ１２に記憶された各種プログラム（検証対象判定機能、改竄検証機能、結果判定機能、プログラム起動機能）および保護メモリ１４に記憶された検証対象テーブルについて、図３に示す、本発明の第１実施形態の情報端末のハードウェアの構成図を参照して、より詳細に説明する。
【００５５】
検証対象テーブルは、先に説明した「検証フラグ」、「重要度」、「検証確率」、「検証値」、「アドレス」などの情報に加え、さらに、「検証種別」、「検証手法」を情報として含む。「検証種別」は、情報端末にプログラムの改竄の有無を検証させるトリガの種別を表す情報である。先に説明した例では、不揮発メモリ１３に記憶されたプログラム（ＰＧ１、ＰＧ２、ＰＧ３）は全て、電源が投入されたことをトリガとして改竄の有無を検証されるように設定されており、ＣＰＵ１１は、そのトリガを検出する度に、不揮発メモリ１３に記憶されたプログラムのなかから、「検証確率」に従った頻度で改竄の有無を検証すべきものを特定した。本発明の第１実施形態の情報端末では、不揮発メモリ１３に記憶されたプログラム（ＰＧ１、ＰＧ２、ＰＧ３）毎に異なるトリガ（トリガの種別としては、例えば、ＯＳを起動した後のある特定のアプリケーションを起動したことや、情報端末の電源を落とす操作がなされたことや、バックグラウンド処理として特定のアプリケーションを起動したことや、前回の検証から所定の時間が経過したこと、などが挙げられる）を設定可能にしておき、ＣＰＵ１１は、あるトリガを検出したとき、そのトリガが「検証種別」として割り当てられたプログラムを「検証確率」に従った頻度で特定する。
【００５６】
例えば、ＣＰＵ１１は、本発明の実施の形態の情報端末に電源が投入されたときに、不揮発メモリ１３に記憶されたプログラム（ＰＧ１、ＰＧ２、ＰＧ３）毎に割り当てられた「検証種別」（図３では、トリガ１、トリガ２。ここでは、トリガ１は、情報端末の電源を落とす操作がなされたことであり、トリガ２は、特定のアプリケーションを起動したことであるとする。）を読み出しておく。ＣＰＵ１１は、「検証種別」で特定されるトリガ２を検出すると［１．検証対象判定処理］に移行して、そのトリガ２が割り当てられたプログラム（図３ではＰＧ２、ＰＧ３）の「検証確率」「１／２」を参照し、特定のアプリケーションが起動されれば１／２の確率で改竄の有無を検証すべきプログラムとしてＰＧ２、ＰＧ３を特定する。このとき、ＣＰＵ１１は、内部のカウンタにトリガ１、２、３…が生じた回数をそのトリガ毎にカウントするようにすれば、カウンタがカウントした総数（そのトリガにより特定される事象が起きた総数）に対して、その総数の半数回（５０％）は改竄の有無を検証すべきプログラムとしてＰＧ２を特定すればよい。また、ＣＰＵ１１は、「検証種別」で特定されるトリガ１を検出すると［１．検証対象判定処理］に移行して、そのトリガ１が割り当てられたプログラム（図３ではＰＧ１）の「検証確率」「１」を参照し、情報端末の電源を落とす操作がなされれば必ず改竄の有無を検証すべきプログラムとしてＰＧ１を特定する。なお、カウンタは、全てのプログラムの検証が終了したときに、リセットする。
【００５７】
さらに、本発明の第１実施形態の情報端末では、不揮発メモリ１３に記憶されたプログラム（ＰＧ１、ＰＧ２、ＰＧ３）毎に、［２．改竄検証処理］にて当該プログラムの固有の値を算出するために用いる所定のハッシュ関数や所定の暗号化処理に関する情報を検証手法として記憶させている。図１では、ＰＧ１には「検証手法」として、暗号化処理としてデジタル署名が、ハッシュ関数としてＳＨＡ−２型ハッシュ関数が、それぞれ指定されており、また、ＰＧ２、ＰＧ３には「検証手法」として、暗号化処理としてＨＭＡＣが、ハッシュ関数としてＳＨＡ−１型ハッシュ関数が、それぞれ指定されている。このように、暗号化処理とハッシュ関数の組合せによって、本発明の第１実施形態の情報端末がＯＳを起動する上での安全性と起動時間を調整することができる。なお、検証対象テーブルの「検証値」を算出するために用いられたハッシュ関数または暗号化処理と、「検証手法」により特定されるハッシュ関数または暗号化処理と、は同じものである必要がある。
【００５８】
検証対象テーブルの「検証手法」によって、［２．改竄検証処理］にて用いるハッシュ関数や暗号化処理を指定することについて説明したが、次のような点で指定することも考えられる。すなわち、不揮発メモリ１３に記憶されたプログラム（ＰＧ１、ＰＧ２、ＰＧ３）毎に、ハッシュ関数の引数として用いる当該プログラムのデータ範囲に関する情報を「検証対象範囲」として記憶させることも考えられる（「検証対象範囲」としては、プログラムが格納されたメモリの先頭のアドレスから最後尾のアドレスまでを範囲としたり、またはプログラムが格納されたメモリの先頭のアドレスからあるデータサイズ分を範囲としたり、またはプログラムが格納されたメモリの任意のアドレス（例えば、タイムスタンプを含むヘッダ部分に相当する領域）を指定したり、などが考えられる）。このように、「検証対象範囲」を調整することによって、本発明の第１実施形態の情報端末がＯＳを起動する上での安全性と起動時間を調整することができる（「検証対象範囲」を広くすれば安全性が高まり、逆に狭くすれば起動時間を短縮することができる）。さらには、ＣＰＵ１１がＣＰＵ特権モードで［２．改竄検証処理］を行う当該プログラムのデータ範囲に関する情報を「モード検証対象範囲」として記憶させる、ことも考えられる。このように、「モード検証対象範囲」を調整することによって、本発明の第１実施形態の情報端末がＯＳを起動する上での安全性と起動時間を調整することができる（「モード検証対象範囲」を広くすればＣＰＵ特権モードで改竄検証する範囲が増える結果安全性が高まり、逆に狭くすればＣＰＵ通常モードで改竄検証する範囲が増える結果起動時間を短縮することができる）。なお、検証対象テーブルの「検証値」を算出するために用いられた「検証対象範囲」または「モード検証対象範囲」と、［２．改竄検証処理］にて固有の値を算出するために用いる「検証対象範囲」または「モード検証対象範囲」と、は同じものである必要がある。
【００５９】
ところで、これまで、ＣＰＵ１１は、あるトリガを検出したとき、そのトリガが「検証種別」として割り当てられたプログラムを「検証確率」に従った頻度で特定する、と説明してきた。この手法では、あるトリガが「検証種別」として割り当てられたプログラムが検証されるべきものとして特定されるか否かの確率は、そのトリガを検出した各時点において、独立している。このため、ＣＰＵ１１は、例えば「検証確率」として「１／２」が割り当てられたあるプログラムのトリガを２度検出したからといって、必ずしも、２回に一度当該プログラムを検証されるべきものとして特定するとは限らない。ここからは、あるプログラムが検証されるべきものとして過去に特定されたか否かに応じて、今後そのプログラムが検証されるべきものとして特定されるであろう確率（条件付確率）を調整する手法について、図３を参照して説明する。
【００６０】
ＣＰＵ１１は、トリガ２を初めて検出した第１の時点では、そのトリガ２が「検証種別」として割り当てられたプログラムＰＧ２、ＰＧ３を「検証確率」の「１／２」に従った頻度で、検証されるべきものとして特定する。ＣＰＵ１１は、第１の時点において、ＰＧ２を検証されるべきプログラムとして特定せず、ＰＧ３を検証されるべきプログラムとして特定したものとすると、検証対象テーブルの「条件付確率」を次のように更新する。
【００６１】
すなわち、ＣＰＵ１１は、検証されるべきプログラムとして特定されたなかったプログラムの「検証確率」においては、その「検証確率」の分母の値を「１」減少させた数値を「条件付確率」として記憶させ、一方、検証されるべきプログラムとして特定されたプログラムの「検証確率」においては、その「検証確率」の分子の値および分母の値を「１」減少させた数値を「条件付確率」として記憶させる。
【００６２】
その後、ＣＰＵ１１は、トリガ２を検出した２回目の時点（第２の時点）では、上記「条件付確率」に従った頻度で検証されるべきプログラムを特定し、検証されるべきプログラムとして特定されたなかったプログラムの「条件付確率」においては、その「条件付確率」の分母の値を「１」減少させた数値を「条件付確率」として記憶させ、一方、検証されるべきプログラムとして特定されたプログラムの「条件付確率」においては、その「条件付確率」の分子の値および分母の値を「１」減少させた数値を「条件付確率」として記憶させる。以降、ＣＰＵ１１は、トリガ２の検出、「条件付確率」に基づく検証されるべきプログラムの特定、「条件付確率」の更新、の処理を繰り返し行い、トリガ２を検出した回数をカウントするカウンタが「検証確率」の分母の値の整数倍になると、その「検証確率」が割り当てられたプログラムの「条件付確率」をリセット（図３では、「---」により表記）する。
【００６３】
この一連の処理を図３のＰＧ２、ＰＧ３に適用すると、第１の時点において検証されるべきプログラムとして特定されなかったＰＧ２は、「検証確率」の分母の値を「１」減少させた数値である「１」に「条件付確率」が更新され、一方、第１の時点において検証されるべきプログラムとして特定されたＰＧ３は、「検証確率」の分子の値および分母の値を「１」減少させた数値である「０」に「条件付確率」が更新される。ＣＰＵ１１は、第２の時点では、ＰＧ２を検証されるべきプログラムとして特定し、一方、ＰＧ３を検証されるべきプログラムとして特定する。さらに、ＣＰＵ１１は、トリガ２を検出した２回目の時点では、カウンタがＰＧ２、ＰＧ３の「検証確率」の分母の値である「２」と一致することから、ＰＧ２、ＰＧ３の「条件付確率」をリセットする。なお、この一連の処理は、「１／２」の「検証確率」にのみ適用されるものではなく、「１／３」、「２／３」、「３／５」などの様々な数値の検証確率に適用することもできる。
【００６４】
上述した「条件付確率」は、あるプログラムが検証されるべきものとして過去に特定されたか否かに応じて、今後そのプログラムが検証されるべきものとして特定されるであろう確率（条件付確率）を調整するものであった。以降では、図４（ａ）に示す、本発明の第１実施形態の情報端末における検証対象テーブルのように、同一の「検証種別」でかつ同じ数値の「検証確率」が割り当てられた複数のプログラムがある場合に、その複数のプログラムのうちのどのプログラムが検証されるべきものとして過去に特定されたかに応じて、今後その複数のプログラムが検証されるべきものとして特定されるであろう確率（条件付確率）を調整する手法について説明する。
【００６５】
図４（ａ）に示す、「検証種別」として「トリガ２」が割り当てられかつ「検証確率」として「１／２」が割り当てられたＰＧ２、ＰＧ３、ＰＧ４、ＰＧ５を、ＣＰＵ１１は、次に説明するような処理を行ってそれらのプログラムのうちの検証されるべきものを特定する。すなわち、ＣＰＵ１１は、同一の「検証種別」でかつ同じ数値の「検証確率」が割り当てられた複数のプログラムがある場合、それら複数のプログラムをいくつかのグループに区分ける。１つのグループを構成するプログラムの個数は、複数のプログラムの個数を「検証確率」の分母の値によって除算した数になる。図４（ａ）では、「検証種別」として「トリガ２」、「検証確率」として「１／２」がそれぞれ割り当てられたプログラムが４個あり、「検証確率」の分母の値が「２」であることから、１つのグループを構成するプログラムの個数は２になる。ＣＰＵ１１は、保護メモリ１４から検証対象テーブルを読み出したときに、同一の「検証種別」でかつ同じ数値の「検証確率」が割り当てられた複数のプログラムがあれば、１つのグループを構成するプログラムの個数を算出し、それらの複数のプログラムを少なくとも２つのグループのいずれかに割り当てる。図４（ａ）では、ＰＧ２とＰＧ４をグループ１（Ｇ１）に、ＰＧ３とＰＧ５をグループ２（Ｇ２）に割り当てている。
【００６６】
ＣＰＵ１１は、トリガ２を初めて検出した第１の時点では、そのトリガ２が「検証種別」として割り当てられたグループのうちの、「検証確率」の分子の値の数である「１」個を、検証されるべきプログラムを含むグループとしてランダムに特定する。ＣＰＵ１１は、第１の時点において、Ｇ１を検証されるべきプログラムを含むものとして特定せず、Ｇ２を検証されるべきプログラムを含むものとして特定したとすると、検証対象テーブルの「条件付確率」を次のように更新する。
【００６７】
すなわち、ＣＰＵ１１は、検証されるべきプログラムを含むグループとして特定されたなかったグループＧ１においては、Ｇ１の各プログラムの「検証確率」の分母の値を「１」減少させた数値を「条件付確率」として記憶させ、一方、検証されるべきプログラムを含むグループとして特定されたグループＧ２においては、Ｇ２の各プログラムの「検証確率」の分子の値および分母の値を「１」減少させた数値を「条件付確率」として記憶させる。
【００６８】
その後、ＣＰＵ１１は、トリガ２を検出した２回目の時点（第２の時点）では、上記「条件付確率」に従った頻度で検証されるべきプログラムを含むグループを特定し、検証されるべきプログラムを含むグループとして特定されたなかったプログラムの「条件付確率」においては、その「条件付確率」の分母の値を「１」減少させた数値を「条件付確率」として記憶させ、一方、検証されるべきプログラムを含むグループとして特定されたプログラムの「条件付確率」においては、その「条件付確率」の分子の値および分母の値を「１」減少させた数値を「条件付確率」として記憶させる。以降、ＣＰＵ１１は、トリガ２の検出、「条件付確率」に基づく検証されるべきプログラムを含むグループの特定、「条件付確率」の更新、の処理を繰り返し行い、トリガ２を検出した回数をカウントするカウンタが「検証確率」の分母の値の整数倍になると、その「検証確率」が割り当てられたプログラムの「条件付確率」をリセットする。
【００６９】
なお、トリガ２を検出した回数をカウントするカウンタが「検証確率」の分母の値の整数倍になると（つまり、あるグループの全てのプログラムの検証が終わると）、ＣＰＵ１１は、複数のプログラムを再度グループ分けを行うようにすることにより、プログラムを改竄しようとする第三者によって複数のプログラムが検証される時点を特定され難くすることもできる。また、情報端末の電源が落とされたときに、上記「条件付確率」およびプログラムを区分けしていたグループをリセットするようにしてもよい。
【００７０】
このように、複数のプログラムを上記グループに区分けし、グループ単位で、そのグループに含まれるプログラムを検証されるべきものとして特定することにより、「検証確率」の分母の値分の回数トリガが発生すれば、その「検証確率」が割り当てられたプログラムの改竄の有無を洩れなく検証することができ、かつ、検証されるべきプログラムとして特定されるプログラムの数がトリガが発生した各時点において最小になることによって、その各時点における改竄の有無の検証にかかる時間を最小化し、その結果、改竄の有無の検証にかかる総時間を短縮することができる。
【００７１】
なお、図４（ａ）では、「検証確率」として「１／２」がそれぞれ割り当てられたプログラムの数（４個）が「検証確率」の分母の値（「２」）で割り切ることができたが、割り切れない場合も想定される。図４（ｂ）では、ある「検証確率」を割り当てられたプログラムの数が「検証確率」の分母の値で割り切れない場合の、ＣＰＵ１１によるグループ区分けの処理について説明する。図４（ｂ）では、「検証種別」として「トリガ２」、「検証確率」として「２／３」がそれぞれ割り当てられたプログラムが５個（ＰＧ２、ＰＧ３、ＰＧ４、ＰＧ５、ＰＧ６）ある。ＣＰＵ１１は、プログラムの個数「５」を「検証確率」の分母の値が「３」で除算した数「１．６７」よりも大きく最も近い整数「２」を、１つのグループを構成するプログラムの個数として設定する。ＣＰＵ１１は、５個のプログラムを、２個、２個、１個のプログラムで構成されるグループＧ１、Ｇ２、Ｇ３のいずれかに区分けする。図４（ｂ）では、ＰＧ２とＰＧ４をグループ１（Ｇ１）に、ＰＧ３とＰＧ５をグループ２（Ｇ２）に、ＰＧ６をグループ３（Ｇ３）に、それぞれ割り当てている。なお、図４（ｂ）において、Ｇ３はＰＧ６とＰＧ７から構成されるように記載しているが、ＰＧ７は、グループを構成するプログラムの数が不足しているときに仮想的に割り当てられたプログラムであり、不揮発メモリ１３に実際に記憶されているプログラムではない。
【００７２】
ＣＰＵ１１は、トリガ２を初めて検出した第１の時点では、そのトリガ２が「検証種別」として割り当てられたグループのうちの、「検証確率」の分子の値の数である「２」個を、検証されるべきプログラムを含むグループとしてランダムに特定する。ＣＰＵ１１は、第１の時点において、Ｇ１を検証されるべきプログラムを含むものとして特定せず、Ｇ２およびＧ３を検証されるべきプログラムを含むものとして特定したとすると、検証対象テーブルの「条件付確率」を次のように更新する。
【００７３】
すなわち、ＣＰＵ１１は、検証されるべきプログラムを含むグループとして特定されたなかったグループＧ１においては、Ｇ１の各プログラムの「検証確率」の分母の値を「１」減少させた数値を「条件付確率」として記憶させ、一方、検証されるべきプログラムを含むグループとして特定されたグループＧ２およびＧ３においては、Ｇ２およびＧ３の各プログラムの「検証確率」の分子の値および分母の値を「１」減少させた数値を「条件付確率」として記憶させる。
【００７４】
その後、ＣＰＵ１１は、トリガ２を検出した２回目の時点（第２の時点）では、上記「条件付確率」に従った頻度で、検証されるべきプログラムを含むグループを同じく２つ特定し、検証されるべきプログラムを含むグループとして特定されたなかったプログラムの「条件付確率」においては、その「条件付確率」の分母の値を「１」減少させた数値を「条件付確率」として記憶させ、一方、検証されるべきプログラムを含むグループとして特定されたプログラムの「条件付確率」においては、その「条件付確率」の分子の値および分母の値を「１」減少させた数値を「条件付確率」として記憶させる。以降、ＣＰＵ１１は、トリガ２の検出、「条件付確率」に基づく検証されるべきプログラムを含む２つのグループの特定、「条件付確率」の更新、の処理を繰り返し行い、トリガ２を検出した回数をカウントするカウンタが「検証確率」の分母の値の整数倍になると、その「検証確率」が割り当てられたプログラムの「条件付確率」をリセットする。
【００７５】
このように、複数のプログラムを上記グループに区分けし、グループ単位で、そのグループに含まれるプログラムを検証されるべきものとして特定することにより、「検証確率」の分母の値分の回数トリガが発生すれば、その「検証確率」が割り当てられたプログラムの改竄の有無を洩れなく検証することができ、かつ、検証されるべきプログラムとして特定されるプログラムの数がトリガが発生した各時点において最小になることによって、その各時点における改竄の有無の検証にかかる時間を最小化し、その結果、改竄の有無の検証にかかる総時間を短縮することができる。
【００７６】
ところで、［３．結果判定処理］にて、ＣＰＵ１１は、［２．改竄検証処理］にて不揮発メモリ１３から読み出したプログラムに改竄有りと判定した場合、そのプログラムに割り当てられた「重要度」の値または「検証確率」の値に応じて、ブートを中止する（全起動中止モード）、情報端末を起動させる上で必要不可欠な所定のプログラムのみを起動する（エマージェンシーモード）、あるいは、当該プログラムのみを実行しないまたは当該プログラムに関連するプログラムのみを実行しない（一部起動中止モード）、若しくは、そのプログラムを含む他のプログラムを起動する（強制起動モード）などのモードを一意に選択し、［４．プログラム起動処理］にてそのモードで実行することを説明した。
【００７７】
本発明の第１実施形態の情報端末では、図５の本発明の第１実施形態の検証対象テーブルに示すように、検証対象テーブルは、各プログラム毎に、当該プログラムに改竄有りと判定された場合に、当該プログラムを含むの起動モードに関する情報「起動モード」を保持している。ＣＰＵ１１は、改竄有りと判定されたプログラムの「起動モード」を［３．結果判定処理］にて参照し、［４．プログラム起動処理］にてその「起動モード」にて特定されるモードで実行する。なお、ここでは、検証対象テーブルに、プログラム毎に「起動モード」が設定される構成としたが、当該プログラムの属性に関する情報（例えば、システムプログラム、仮想マシンプログラム、アプリケーションプログラム）を検証対象テーブルに追加し、その属性毎に上記「起動モード」を割り当てる構成でもよい。
【００７８】
検証対象テーブルが「起動モード」を保持する構成であれば、プログラムに改竄が有った場合の情報端末による対処方法をプログラム毎に検証対象テーブルを作成した管理者が定めることができるため、管理者の意向を詳細に反映させることができる。一方、改竄有りと判定されたプログラムに割り当てられた「重要度」の値または「検証確率」の値に応じて「起動モード」を選択する構成は、同じ「重要度」の値または「検証確率」の値を有する複数のプログラムのグループ単位で改竄が有った場合の情報端末による対処方法を一律に設定できるため、情報端末利用者が意向を反映させ易い構成と言える。
【００７９】
以上、本発明の第１実施形態の情報端末によれば、検証対象テーブルに様々な情報を保持させることによって、ＯＳを起動する上での安全性または起動時間を細かに調整することができる。
【００８０】
なお、本発明の第１実施形態の情報端末の検証対象テーブルでは、各プログラム毎に「検証種別」、「検証手法」、「起動モード」を設定する構成について説明したが、「検証確率」が同じの複数のプログラムから構成されるグループ単位で、共通の「検証種別」、「検証手法」、「起動モード」を設定する構成であっても構わない。
【００８１】
また、検証対象テーブルの「重要度」に関して、あるプログラムが改竄された回数に応じてそのプログラムに割り当てられた「重要度」を調整するようにしてもよい。例えば、ＣＰＵ１１は、あるプログラムに改竄が有ることを判定する度に、そのプログラムに割り当てられた「重要度」を「１」増加させる。これにより、ＯＳを起動する上での安全性を向上することができる。
【００８２】
（第２実施形態）
次に、本発明の第２実施形態の情報端末について説明する。図６に、本発明の第２実施形態の情報端末のハードウェア構成図を示す。本発明の第２実施形態の情報端末は、ブート用不揮発メモリ１５を追加されていることが本発明の第１実施形態の情報端末とは異なる。以下、ブート用不揮発メモリ１５の機能、およびブート用不揮発メモリ１５を用いてＣＰＵ１１が行う処理について、詳細に説明する。
【００８３】
本発明の第１実施形態の情報端末では、ＣＰＵ１１は、ブートＲＯＭ１２上に展開された改竄検証プログラム（検証対象判定機能、改竄検証機能、結果判定機能、プログラム起動機能から構成される）を実行し、不揮発メモリ１３に記憶されたプログラムを起動させることによって、ＯＳを起動するものであった。本発明の第２実施形態の情報端末では、ＣＰＵ１１は、ブートＲＯＭ１２上に展開された改竄検証プログラムを実行し、不揮発メモリ１３に記憶されたプログラムを起動する点は共通しているが、ブートＲＯＭ１２上に展開された改竄検証プログラムが検証の対象とするプログラムは不揮発メモリ１３に記憶されたプログラムのうちの改竄検証プログラム（ＰＧ１）のみである。本発明の第２実施形態の情報端末は、ＣＰＵ１１が、不揮発メモリ１３に記憶された改竄検証プログラム（ＰＧ１）に改竄無しと判定すれば、その改竄検証プログラムをブート用不揮発メモリ１５に展開し、以後の改竄検証をブート用不揮発メモリ１５に展開された改竄検証プログラムによって行うものである。なお、ブート用不揮発メモリ１５に改竄検証プログラムを展開した後の処理は、第１実施形態にてＣＰＵ１１が検証対象判定処理、改竄検証処理、結果判定処理、およびプログラム起動処理を実行するためにデータを読み出していた記憶装置が、ブートＲＯＭ１２からブート用不揮発メモリ１５に置き換わるのみであるため、説明を省略する。
【００８４】
電源が投入された本発明の第２実施形態の情報端末において、ＣＰＵ１１に電力の供給が開始されると、ＣＰＵ１１はまず、まず、マザーボード上にあるブートＲＯＭ１２に記憶されたＩＰＬ（Initial Program Loader）を参照して、不揮発メモリ１３および保護メモリ１４から最初に読み出して起動すべきプログラムの先頭アドレスを読み出す。ＣＰＵ１１は、読み出した先頭アドレスを基に、不揮発メモリ１３に格納された改竄検証プログラム（ＰＧ１）を読み出し、また、保護メモリ１４に記憶された検証対象テーブルのＰＧ１に割り当てられた情報を参照し、ブートＲＯＭ１２に展開されたプログラムの改竄の有無を検証するための各種改竄検証プログラム（検証対象判定処理、改竄検証処理、結果判定処理、およびプログラム起動処理）を実行する。なお、改竄検証プログラムＰＧ１に割り当てられた「検証確率」は「１」に、「検証種別」は少なくとも電源が投入されたことをトリガとして、それぞれ設定される必要がある。ＣＰＵ１１は、ブートＲＯＭ１２に展開された改竄検証プログラムを実行してＰＧ１を検証し、改竄無しと判定すれば、そのＰＧ１をブート用不揮発メモリ１５に展開する。以降、ＣＰＵ１１は、不揮発メモリ１３に記憶された各種プログラム（ＰＧ２、ＰＧ３）を読み出し、ブート用不揮発メモリ１５に展開された改竄検証プログラムを実行して改竄検証を行う。
【００８５】
ブートＲＯＭに記憶された改竄検証プログラムは書き換えることができないため、改竄検証プログラムを更新するためにはブートＲＯＭを取り替える必要があったが、本発明の第２実施形態の情報端末によれば、不揮発メモリに記憶された改竄検証プログラムを容易に更新することができ、新しい改竄検証プログラムで改竄検証を行うことができる。
【００８６】
（第３実施形態）
次に、本発明の第３実施形態の情報端末について説明する。図７に、本発明の第３実施形態の情報端末（クライアント）およびサーバのシステム構成図を示す。本発明の第３実施形態の情報端末は、通信回路１６を備え、サーバ２と通信を行う。本発明の第３実施形態では、サーバが、クライアントにあるプログラムを送信して、そのプログラムをクライアント上でリモートコントロールすることを想定しており、サーバは、リモートコントロールに先立って、クライアントにそのプログラムの改竄検証を行わせ、改竄無しとクライアントから通知されれば、そのプログラムを実行する。以下、クライアント１およびサーバ２が行う処理について、詳細に説明する。なお、通信回路１６としては、ＬＡＮカード、ＵＳＢ、ＩｒＤＡ、Ｂｌｕｅｔｏｏｔｈなどの通信機能を実現する回路が考えられる。
【００８７】
ＯＳを起動した情報端末（クライアント）１は、不揮発メモリ１３に記憶されたプログラムのうちの通信回路１６を機能させるプログラムを起動し、サーバ２との通信を確立する。その後、情報端末１は、サーバから検証対象テーブルと各種プログラム（ＰＧ１１、ＰＧ１２、ＰＧ１３）とを受信し、検証対象テーブルを保護メモリ１４に、各種プログラムを不揮発メモリ１３にそれぞれ記憶する。なお、情報端末１は、検証対象テーブルを保護メモリ１４に記憶する際、不揮発メモリ１３に記憶した各種プログラムそれぞれの先頭アドレスを検証対象テーブルの「アドレス」に記憶する。また、検証対象テーブルや各種プログラムを不揮発メモリ１３に記憶するのであれば、ＳＤカードやＵＳＢメモリなどの外部記憶装置から読み取った検証対象テーブルや各種プログラムを不揮発メモリ１３に記憶するようにしても構わない。
【００８８】
その後、情報端末１は、あるトリガ（例えば、ＯＳを起動した後のある特定のアプリケーションを起動したことや、情報端末の電源を落とす操作がなされたことや、バックグラウンド処理として特定のアプリケーションを起動したことや、前回の検証から所定の時間が経過したこと、など）を検出すると、不揮発メモリ１３に記憶した各種プログラム（ＰＧ１１、ＰＧ１２、ＰＧ１３）を読み出し、また、保護メモリに記憶した検証対象テーブルを参照して、各種プログラム（ＰＧ１１、ＰＧ１２、ＰＧ１３）の改竄の有無を検証する。情報端末１による改竄の有無を検証する処理は第１実施形態あるいは第２実施形態で説明した通りであるため、ここでの説明を省略する。情報端末１は、各種プログラム（ＰＧ１１、ＰＧ１２、ＰＧ１３）の改竄検証の結果を表すデータをサーバ２に送信する。なお、ここでいう改竄検証の結果とは、［２．改竄検証処理］による判定結果を指す。
【００８９】
サーバ２は、リモートコントロールしようとする各種プログラム（ＰＧ１１、ＰＧ１２、ＰＧ１３）に改竄が無いことをクライアント１から通知されれば、クライアント１にそれら各種プログラムを起動する制御データを送信し、クライアント１のリモートコントロールを開始する。
【００９０】
以上、本発明の第３実施形態の情報端末およびサーバによれば、サーバがリモートコントロールしようとしているプログラムに改竄が無いとクライアントが判定した場合に、サーバがリモートコントロールを実施するため、より安全なリモートコントロールを実現することができる。
【産業上の利用可能性】
【００９１】
本発明の情報端末、クライアントサーバシステムおよびプログラムによれば、各種プログラム毎に改竄の有無を検証すべき優先順位を設定してＯＳを起動するまでの起動時間の短縮を図りつつも、各種プログラムに生じた改竄を確実に検出することができるという効果を奏し、セキュアブート（プログラムの改竄の有無を検証する処理）を実施する情報端末の分野において有用である。
【図面の簡単な説明】
【００９２】
【図１】本発明の実施の形態の情報端末におけるハードウェアの構成図
【図２】本発明の実施の形態の情報端末による改竄検証の流れを説明するフローチャート
【図３】本発明の第１実施形態の情報端末のハードウェアの構成図
【図４】（ａ）本発明の第１実施形態の情報端末における検証対象テーブルの一例  （ｂ）本発明の第１実施形態の情報端末における検証対象テーブルの他例
【図５】本発明の第１実施形態の検証対象テーブル
【図６】本発明の第２実施形態の情報端末のハードウェア構成図
【図７】本発明の第３実施形態の情報端末（クライアント）およびサーバのシステム構成図
【符号の説明】
【００９３】
１  情報端末（クライアント）
１１  ＣＰＵ
１２  ブートＲＯＭ
１３  不揮発メモリ
１４  保護メモリ
１５  ブート用不揮発メモリ
１６  通信回路
２  サーバ
【図１】
2009009372.tif 000003
【図２】
2009009372.tif 000004
【図３】
2009009372.tif 000005
【図４】
2009009372.tif 000006
【図５】
2009009372.tif 000007
【図６】
2009009372.tif 000008
【図７】
2009009372.tif 000009