(57)【要約】      （修正有）【課題】デバイス起動時の安全性を適切に確保することができるプログラム等を提供する。【解決手段】プログラムは、デバイスを起動する場合に、通常領域と、該通常領域からのアクセスが制限されたセキュア領域とを一時記憶領域に展開し、前記セキュア領域に、前記通常領域において起動が許可されるプログラムを表す参照値を格納し、前記通常領域において前記プログラムを起動する場合、該プログラムを表す検証値を算出し、前記セキュア領域において、前記検証値と前記参照値とを照合することで前記プログラムの起動の可否を判定する処理をデバイスに実行させる。【選択図】図５
2020140665.tif 000002
【特許請求の範囲】
【請求項１】
デバイスを起動する場合に、第１実行領域と、該第１実行領域からのアクセスが制限された第２実行領域とを一時記憶領域に展開し、
前記第２実行領域に、前記第１実行領域において起動が許可されるプログラムを表す参照値を格納し、
前記第１実行領域において前記プログラムを起動する場合、該プログラムを表す検証値を算出し、
前記第２実行領域において、前記検証値と前記参照値とを照合することで前記プログラムの起動の可否を判定する
処理をデバイスに実行させることを特徴とするプログラム。
【請求項２】
前記デバイスを起動する場合に、前記第１実行領域及び第２実行領域の間のアクセスを制御する共有実行領域を前記一時記憶領域に展開し、
前記共有実行領域を介して、前記第２実行領域から前記第１実行領域に、前記プログラムの起動の可否を判定した判定結果を入力する
ことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記プログラムを起動する前に、前記第２実行領域において実行する第２プログラムを起動する
ことを特徴とする請求項１又は２に記載のプログラム。
【請求項４】
前記プログラムを更新する場合、更新前の前記プログラムを表す前記検証値を算出し、
前記第２実行領域において、前記検証値と参照値とを照合することで、前記プログラムの更新の可否を判定し、
前記プログラムの更新を許可すると判定した場合、更新後の前記プログラムから算出された前記検証値に前記参照値を更新する
ことを特徴とする請求項１〜３のいずれか１項に記載のプログラム。
【請求項５】
前記プログラムを更新する場合、前記第１実行領域において、更新する前記プログラムの取得元の認証を行い、
前記取得元の認証に成功した場合、前記第２実行領域において前記プログラムの更新の可否を判定する
ことを特徴とする請求項４に記載のプログラム。
【請求項６】
デバイスを起動する場合に、第１実行領域と、該第１実行領域からのアクセスが制限された第２実行領域とを一時記憶領域に展開する展開部と、
前記第２実行領域に、前記第１実行領域において起動が許可されるプログラムを表す参照値を格納する格納部と、
前記第１実行領域において前記プログラムを起動する場合、該プログラムを表す検証値を算出する算出部と、
前記第２実行領域において、前記検証値と前記参照値とを照合することで前記プログラムの起動の可否を判定する判定部と
を備えることを特徴とするデバイス。
【請求項７】
デバイスを起動する場合に、第１実行領域と、該第１実行領域からのアクセスが制限された第２実行領域とを一時記憶領域に展開し、
前記第２実行領域に、前記第１実行領域において起動が許可されるプログラムを表す参照値を格納し、
前記第１実行領域において前記プログラムを起動する場合、該プログラムを表す検証値を算出し、
前記第２実行領域において、前記検証値と前記参照値とを照合することで前記プログラムの起動の可否を判定する
処理をデバイスに実行させることを特徴とする起動方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、デバイス及び起動方法に関する。
【背景技術】
【０００２】
ＩｏＴ（Internet of Things）機器、パーソナルコンピュータ等のデバイスの起動時に、デバイスが実行するプログラムが予め定められた正当なプログラムであるか否かを検証するセキュアブート技術がある。例えば特許文献１では、セキュアブートを実行可能な情報処理装置等であって、起動するプログラムが検証済みのプログラムであるか否かを示すフラグを保持し、未検証のプログラムのみを検証することで起動時間を短縮する情報処理装置等が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第６３７３８８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、ブートローダとして機能するプログラムに改竄、感染等が発生した場合、適切な検証を行うことができなくなり、安全性に課題があった。
【０００５】
一つの側面では、デバイス起動時の安全性を適切に確保することができるプログラム等を提供することを目的とする。
【課題を解決するための手段】
【０００６】
一つの側面では、プログラムは、デバイスを起動する場合に、第１実行領域と、該第１実行領域からのアクセスが制限された第２実行領域とを一時記憶領域に展開し、前記第２実行領域に、前記第１実行領域において起動が許可されるプログラムを表す参照値を格納し、前記第１実行領域において前記プログラムを起動する場合、該プログラムを表す検証値を算出し、前記第２実行領域において、前記検証値と前記参照値とを照合することで前記プログラムの起動の可否を判定する処理をデバイスに実行させることを特徴とする。
【発明の効果】
【０００７】
一つの側面では、デバイス起動時の安全性を適切に確保することができる。
【図面の簡単な説明】
【０００８】
【図１】デバイスの構成例を示すブロック図である。
【図２】デバイスの機能構成例を示す機能ブロック図である。
【図３】デバイスの起動時の動作手順を示す説明図である。
【図４】デバイスの起動時の判定処理の手順を示す説明図である。
【図５】デバイスが実行する処理手順の一例を示すフローチャートである。
【図６】実施の形態２に係るプログラム更新処理の手順を示す説明図である。
【図７】実施の形態２に係るデバイスが実行する処理手順の一例を示すフローチャートである。
【図８】上述した形態のデバイスの動作を示す機能ブロック図である。
【発明を実施するための形態】
【０００９】
以下、本発明をその実施の形態を示す図面に基づいて詳述する。
（実施の形態１）
図１は、デバイス１の構成例を示すブロック図である。本実施の形態では、ＴＥＥ（Trusted Environment Execution）等の技術を用いて安全性を高めたセキュア領域（第２実行領域）を仮想的に構築し、装置起動時にセキュア領域で実行プログラムの起動の可否を判定するデバイス１について説明する。
【００１０】
デバイス１は、所定の情報処理を行う情報処理装置であり、例えばルータ装置、ＥＣＵ（Electronic Control Unit）、パーソナルコンピュータ等の種々の情報処理装置であり得るが、特にその内容は限定されない。また、例えばデバイス１は、組み込み機器などのＩｏＴ機器であってもよい。デバイス１は、自装置の起動時に後述の処理を行い、起動するプログラムが真正なプログラムであるか否かを検証して起動の可否を判定する。
【００１１】
デバイス１は、制御部１１、主記憶部１２、通信部１３、補助記憶部１４を備える。
制御部１１はデバイス１の動作を制御するＳｏＣ（System on Chip）であり、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro-Processing Unit）、ＧＰＵ（Graphics Processing Unit）等の演算処理装置である。なお、制御部１１は単一のプロセッサであってもよく、複数のプロセッサから構成されてもよい。制御部１１は補助記憶部１４に記憶されているプログラムＰを読み出して実行することにより、後述の処理を行う。主記憶部１２は、ＲＡＭ（Random Access Memory）等の一時記憶領域であり、制御部１１が演算処理を実行するために必要なデータを一時的に記憶する。通信部１３は、通信に関する処理を行うための通信モジュールであり、外部と情報の送受信を行う。
【００１２】
補助記憶部１４はＲＯＭ（Read Only Memory）等の不揮発性メモリであり、デバイス１が処理動作を行う上で必要なプログラムＰ及びその他のデータを記憶している。なお、補助記憶部１４はＳｏＣ（制御部１１）内部の専用メモリであってもよく、制御部１１に接続された外部メモリであってもよい。補助記憶部１４は、リッチＯＳ（Operating System）２１、リッチアプリケーション２２、セキュアＯＳ３１、セキュアアプリケーション３２、ハッシュ値３３を記憶している。リッチＯＳ２１及びリッチアプリケーション２２は、デバイス１の一般的、汎用的な処理を行うためのＯＳ及びアプリケーションとして動作するソフトウェア（プログラム）である。セキュアＯＳ３１及びセキュアアプリケーション３２は、リッチＯＳ２１及びリッチアプリケーション２２が動作する実行領域からのアクセスが制限されたセキュア領域で動作するソフトウェアであって、セキュア領域におけるＯＳ及びアプリケーションとして動作するソフトウェアである。ハッシュ値３３は、通常領域で動作するソフトウェア（プログラム）をハッシュ化したハッシュ値であり、通常領域における実行が許可されるソフトウェアを表す参照値である。
【００１３】
なお、デバイス１は上述のハードウェア要素以外に、デバイス１の内容に応じて、例えばディスプレイ、操作インターフェイス等を備えてもよいことは勿論である。また、デバイス１は外部のネットワークを介して他のコンピュータからプログラムＰをダウンロードし、補助記憶部１４に記憶しても良い。また、デバイス１は、ＣＤ（Compact Disk）−ＲＯＭ、ＤＶＤ（Digital Versatile Disc）−ＲＯＭ等の可搬型記憶媒体１ａを読み取る読取部を備え、可搬型記憶媒体１ａからプログラムＰを読み取って実行するようにしてもよい。あるいはデバイス１は、半導体メモリ１ｂからプログラムＰを読み込んでも良い。
【００１４】
また、本実施の形態では制御部１１がＳｏＣであるものとして説明するが、制御部１１はＳｏＣに限定されず、デバイス１を動作させるプロセッサであれば良い。
【００１５】
図２は、デバイス１の機能構成例を示す機能ブロック図である。図２では、デバイス１内部でソフトウェア（ＯＳ、アプリケーション等）を実行する領域が、ＲＥＥ（Rich Execution Environment）等と呼ばれる通常領域２０と、ＴＥＥ等と呼ばれるセキュア領域３０とに仮想的に分離されている様子を図示している。
【００１６】
通常領域２０は、広く一般的に利用されているリッチＯＳ２１の実行領域であり、セキュア領域３０へのアクセスが制限される以外に、特段の機能制約がない実行領域である。リッチＯＳ２１は、通常領域２０においてＯＳの機能を果たすソフトウェアであり、リッチアプリケーション２２からの要求に応じて各種ＯＳ機能を提供する。制御部１１は、リッチＯＳ２１上でリッチアプリケーション２２を実行することで、デバイス１の一般的、汎用的な処理を実行する。
【００１７】
セキュア領域３０は、セキュリティ機能を隔離する目的で、同一のＳｏＣ上で通常領域２０とは別に提供される独立した実行領域である。セキュア領域３０は、通常領域２０からのアクセスが制限されており、実行可能な機能も限定されている。なお、セキュア領域３０は、ＴＥＥのような称呼に限定されるものではなく、通常領域２０と分離され、セキュリティ上より安全な実行領域であれば、どのような称呼の領域であってもよい。デバイス１は、セキュリティ上保護すべきソフトウェア及びデータをセキュア領域３０に配置すると共に、通常領域２０及びデバイス１の外部からのアクセスを制限することで、安全性を確保する。
【００１８】
上述のように、通常領域２０からセキュア領域３０にはアクセスできないように制限されており、通常領域２０からはセキュア領域３０の存在を認識できない。通常領域２０からセキュア領域３０で実行する処理を呼び出すためには、通常領域２０とセキュア領域３０との間のアクセスを制御するハイパーバイザ４０（共有実行領域）を経由しなければならない。
【００１９】
セキュアＯＳ３１は、セキュア領域３０においてＯＳの機能を果たすソフトウェアであり、セキュアアプリケーション３２からの要求に応じて、セキュリティ機能を中心としたＯＳ機能を提供する。制御部１１は、セキュアＯＳ３１上でセキュアアプリケーション３２を実行することで、セキュリティ上重要な処理を実行する。
【００２０】
本実施の形態では、通常領域２０における起動が許可される各種ソフトウェア（リッチＯＳ２１、リッチアプリケーション２２）のハッシュ値３３がセキュア領域３０に格納されている。デバイス１は起動時に、通常領域２０で起動するリッチＯＳ２１、リッチアプリケーション２２等の各種プログラムのハッシュ値を計算し、セキュア領域３０に予め格納してあるハッシュ値３３と照合し、両者が一致するか否かを判定する。これによりデバイス１は、真正なプログラムのみを通常領域２０で実行可能とする。
【００２１】
図３は、デバイス１の起動時の動作手順を示す説明図である。図３に基づき、デバイス１の起動時の処理動作について説明する。
例えばデバイス１の制御部１１は、電源投入等の所定の動作をトリガとして、補助記憶部１４のブートＲＯＭからブートローダとして機能する起動プログラムを読み出して実行する。読み出した起動プログラムに従い、まず制御部１１は通常領域２０及びセキュア領域３０を主記憶部１２（一時記憶領域）に展開可能とすべく、ハイパーバイザ４０に係るプログラムを読み出して実行する。
【００２２】
次に制御部１１は、セキュアＯＳ３１を読み出して起動し、続いてセキュアアプリケーション３２を読み出して起動する。これにより制御部１１は、セキュア領域３０を主記憶部１２（一時記憶領域）に展開する。
【００２３】
次に制御部１１は、リッチＯＳ２１を読み出して起動し、続いてリッチアプリケーション２２を読み出して起動する。これにより制御部１１は、通常領域２０を主記憶部１２に展開し、デバイス１を起動する。
【００２４】
この場合に制御部１１は、リッチＯＳ２１及びリッチアプリケーション２２の起動動作と並行して、セキュアアプリケーション３２を実行し、通常領域２０側で起動する各種プログラム（リッチＯＳ２１及びリッチアプリケーション２２）が真正なプログラムであるか否か、検証を行う。詳しくは後述するように、制御部１１は、通常領域２０側で起動中のプログラムを検証するためのハッシュ値（検証値）を算出し、セキュア領域３０に格納されているハッシュ値３３（参照値）と照合し、プログラムの起動の可否を判定する。
【００２５】
プログラムの起動を許可しないと判定した場合、例えば制御部１１は、リッチＯＳ２１の起動を停止すると共に、リッチアプリケーション２２を介してユーザに異常を通知する。なお、上記の処理は一例であって、制御部１１は、セキュア領域３０における判定結果に応じて通常領域２０側のプログラムの起動を制御可能であればよい。
【００２６】
図４は、デバイス１の起動時の判定処理の手順を示す説明図である。図４では、通常領域２０において起動するプログラムの起動の可否を判定する判定処理について説明する。
デバイス１の制御部１１は、上述の如く、起動プログラムに従ってリッチＯＳ２１、リッチアプリケーション２２等のプログラムを読み出す。制御部１１はまず、読み出したプログラムのハッシュ値を通常領域２０において算出する。
【００２７】
なお、本実施の形態では通常領域２０で起動するプログラムのハッシュ値を通常領域２０で演算するものとして説明するが、ハッシュ値の演算をセキュア領域３０において行ってもよい。
【００２８】
制御部１１は、算出したハッシュ値を、ハイパーバイザ４０を介して通常領域２０からセキュア領域３０に入力し、プログラムの起動の可否を判定するよう判定依頼を行う。制御部１１はセキュア領域３０において、通常領域２０から入力されたハッシュ値に基づき、通常領域２０側で起動するプログラムの起動の可否を判定する。
【００２９】
具体的には、制御部１１は、セキュアＯＳ３１、セキュアアプリケーション３２等を起動してセキュア領域３０を主記憶部１２（一時記憶領域）に展開する場合に、起動を許可するものとして予め定められたプログラムのハッシュ値３３、すなわちハッシュ値の照合を行うための参照値を補助記憶部１４から読み出し、セキュア領域３０に格納しておく。通常領域２０から判定依頼を受け付けた場合、制御部１１は、通常領域２０から入力されたハッシュ値と、セキュア領域３０に保持してあるハッシュ値３３とを照合し、両者が一致するか否かを判定する。制御部１１は、ハイパーバイザ４０を介して判定結果を通常領域２０に入力する。
【００３０】
制御部１１は、セキュア領域３０から入力された判定結果に応じて後続の処理を行う。具体的には、ハッシュ値が一致すると判定された場合、すなわちプログラムの起動が許可された場合、制御部１１は通常領域２０においてリッチＯＳ２１、リッチアプリケーション２２等のプログラムの起動動作を継続し、最終的にプログラムの起動を完了する。一方で、ハッシュ値が一致しなかったと判定された場合、すなわちプログラムの起動が許可されなかった場合、制御部１１は通常領域におけるリッチＯＳ２１、リッチアプリケーション２２等のプログラムの起動動作を停止する。これにより制御部１１は、ハッシュ値が一致せず、改竄等の虞があるプログラムが実行される事態を防止する。
【００３１】
以上より、デバイス１は通常領域２０とは異なるセキュア領域３０において、通常領域２０で起動するプログラムの起動の可否を判定する。通常領域２０から認識（アクセス）困難なセキュア領域３０で一連の判定処理を行うことで、デバイス１を起動する際の安全性を適切に確保することができる。また、セキュア領域３０はソフトウェア上実現される仮想的な領域であるため、セキュアエレメント等のハードウェアを搭載する必要がなく、セキュアブート機能を実装するための実装面積を削減することができる。
【００３２】
図５は、デバイス１が実行する処理手順の一例を示すフローチャートである。図５に基づき、デバイス１が実行する処理内容について説明する。
デバイス１の制御部１１は、ブートローダとして機能するデバイス１の起動プログラムを補助記憶部１４から読み出して実行する（ステップＳ１１）。制御部１１は起動用プログラムに従ってハイパーバイザ４０を実行する（ステップＳ１２）。
【００３３】
制御部１１は通常領域２０のプログラム（リッチＯＳ２１、リッチアプリケーション２２等）を起動する前に、セキュアＯＳ３１、セキュアアプリケーション３２等のプログラム（第２プログラム）を補助記憶部１４から読み出して実行し、セキュア領域３０を主記憶部１２（一時記憶領域）に展開する（ステップＳ１３）。この場合に制御部１１は、通常領域２０における起動が許可されたプログラムのハッシュ値３３（参照値）を補助記憶部１４から読み出し、セキュア領域３０に格納する。その後、制御部１１はリッチＯＳ２１、リッチアプリケーション２２等のプログラムを補助記憶部１４から読み出して通常領域２０を展開し、プログラムの起動を開始する（ステップＳ１４）。
【００３４】
制御部１１は通常領域２０において起動するプログラムのハッシュ値（検証値）を算出する（ステップＳ１５）。制御部１１は、算出したハッシュ値を、ハイパーバイザ４０を介してセキュア領域３０に入力する（ステップＳ１６）。そして制御部１１はセキュア領域３０において、通常領域２０から入力されたハッシュ値と、セキュア領域３０に予め保持してあるハッシュ値３３とを照合し、通常領域２０におけるプログラムの起動の可否を判定する（ステップＳ１７）。
【００３５】
制御部１１はハイパーバイザ４０を介して、ステップＳ１７の判定結果を通常領域２０に入力する（ステップＳ１８）。制御部１１は、セキュア領域３０で判定した判定結果を参照して、プログラムの起動が許可されたか否かを判定する（ステップＳ１９）。許可されたと判定した場合（Ｓ１９：ＹＥＳ）、制御部１１は通常領域２０におけるプログラムの起動動作を停止せず最終的にプログラム起動を完了させ、一連の処理を終了する。許可されなかったと判定した場合（Ｓ１９：ＮＯ）、制御部１１は通常領域２０におけるプログラムの起動動作を停止、あるいはユーザへの異常通知等を行い（ステップＳ２０）、一連の処理を終了する。
【００３６】
なお、上記ではプログラムの起動の可否を判定するための値としてハッシュ値を用いたが、本実施の形態はこれに限定されるものではない。例えばデバイス１は、公開鍵暗号等を用いてハッシュ値からさらに電子署名の署名値を算出し、署名値を検証することでプログラムの起動の可否を判定するようにしてもよい。また、例えばデバイス１は、プログラム（ソースコード）自体のハッシュ値ではなく、プログラムに付随する識別子（ＩＤ）のハッシュ値を計算するなどしてもよい。すなわち、デバイス１は通常領域２０で起動するプログラムを表す検証値を算出し、起動を許可するプログラムを表す検証用の参照値と照合可能であればよく、そのアルゴリズムは特に限定されない。
【００３７】
また、上記では通常領域２０側でのプログラムの起動と並行してセキュア領域３０における判定処理を行うものとしたが、本実施の形態はこれに限定されるものではなく、セキュア領域３０における判定処理の完了後、通常領域２０側でプログラムの起動を開始するものとしてもよい。
【００３８】
以上より、本実施の形態１によれば、デバイス１を起動する際の安全性を適切に確保することができる。
【００３９】
また、本実施の形態１によれば、ハイパーバイザ４０により通常領域２０とセキュア領域３０との間のアクセスを制御することで、デバイス１の起動時の安全性をより適切に確保することができる。
【００４０】
また、本実施の形態１によれば、通常領域２０におけるプログラム起動を開始する前にリッチＯＳ２１、リッチアプリケーション２２等のプログラム（第２プログラム）を実行してセキュア領域３０を展開する。これにより、通常領域２０においてプログラムを起動する際にはプログラムの起動の可否を判定する環境が整えられることになり、一連の処理を適切に行うことができる。
【００４１】
（実施の形態２）
本実施の形態では、セキュア領域３０において、通常領域２０で実行するプログラムの更新の可否を判定する形態について述べる。なお、実施の形態１と重複する内容については同一の符号を付して説明を省略する。
図６は、実施の形態２に係るプログラム更新処理の手順を示す説明図である。図６に基づき、本実施の形態の概要について説明する。
【００４２】
通常領域２０側で動作するリッチＯＳ２１、リッチアプリケーション２２等のプログラムは、適宜アップデートを行うことがあり得る。本実施の形態では、リッチＯＳ２１、リッチアプリケーション２２等のプログラムの更新を行う場合に、実施の形態１と同様の判定処理を行い、プログラム更新時の安全性を確保する。
【００４３】
デバイス１は外部装置から、プログラムの更新要求を受け付ける。プログラムの更新要求元、すなわち更新プログラムの取得元である外部装置は、クラウド上のサーバ装置、あるいはローカルのパーソナルコンピュータ等であり得る。なお、本実施の形態ではデバイス１が外部からの更新要求を受けてプログラムの更新を行うものとして説明するが、本実施の形態はこれに限定されるものではなく、デバイス１が外部装置（プログラムの取得元）に対して更新要求を行い、能動的にプログラムの更新を行うものとしてもよい。また、例えばデバイス１は、ＵＳＢメモリ等の読取媒体から更新プログラムを直接読み取り、プログラムの更新を行うものとしても良い。
【００４４】
更新要求を受け付けた場合、デバイス１の制御部１１はまず、通常領域２０において、更新要求元の認証を行う。要求元の認証方法は特に限定されないが、例えばユーザによるパスワードの入力、更新要求元との間での電子署名の交換等によって行う。デバイス１はこれらの認証処理に必要な認証用データ（パスワード等）を予め保持しておき、認証用データを参照して要求元の認証を行う。
【００４５】
更新要求元の認証に成功した場合、制御部１１は、更新前のプログラムのハッシュ値を算出し、セキュア領域３０に入力して判定依頼を行う。制御部１１はセキュア領域３０において、予め保持しているハッシュ値３３と入力されたハッシュ値とを照合することで、プログラムの更新の可否を判定する。制御部１１は、判定結果をセキュア領域３０から通常領域２０に入力する。制御部１１は、セキュア領域３０から入力された判定結果に従い、更新が許可された場合はリッチＯＳ２１、リッチアプリケーション２２等のプログラムを更新する。
【００４６】
さらに制御部１１は、更新後のプログラムのハッシュ値を算出し、セキュア領域３０に入力する。制御部１１は、セキュア領域３０に格納してあるハッシュ値３３（参照値）を、更新後のプログラムのハッシュ値（検証値）に更新する。次回のデバイス１の起動時に、制御部１１は更新後のプログラムのハッシュ値３３を参照して、通常領域２０で起動するプログラムの起動の可否を判定する。
【００４７】
一方で、更新要求元の認証に失敗した場合、あるいはセキュア領域３０においてプログラムの更新を許可しないものと判定した場合、制御部１１はプログラムの更新動作を停止する。以上より、通常領域２０側で動作するプログラムの更新時の安全性を適切に確保することができる。
【００４８】
図７は、実施の形態２に係るデバイス１が実行する処理手順の一例を示すフローチャートである。
デバイス１の制御部１１は、デバイス１の外部から、リッチＯＳ２１、リッチアプリケーション２２等の通常領域２０で実行するプログラムの更新要求を受け付ける（ステップＳ２０１）。制御部１１は通常領域２０において、更新要求の要求元の認証を行う（ステップＳ２０２）。制御部１１は、認証に成功したか否かを判定する（ステップＳ２０３）。
【００４９】
認証に成功したと判定した場合（Ｓ２０３：ＹＥＳ）、制御部１１は、更新前のプログラムのハッシュ値（検証値）を算出する（ステップＳ２０４）。制御部１１は、ハイパーバイザ４０を介して、算出したハッシュ値をセキュア領域３０に入力する（ステップＳ２０５）。
【００５０】
制御部１１はセキュア領域３０において、通常領域２０から入力されたハッシュ値と、セキュア領域３０に予め格納してあるハッシュ値３３（参照値）とを照合することで、プログラムの更新の可否を判定する（ステップＳ２０６）。制御部１１はハイパーバイザ４０を介して、判定結果を通常領域２０に入力する（ステップＳ２０７）。
【００５１】
制御部１１は判定結果を参照して、プログラムの更新が許可されたか否かを判定する（ステップＳ２０８）。更新が許可されたと判定した場合（Ｓ２０８：ＹＥＳ）、制御部１１は、通常領域２０で実行するプログラムを更新する（ステップＳ２０９）。また、制御部１１は更新後のプログラムのハッシュ値を算出する（ステップＳ２１０）。制御部１１は、算出したハッシュ値をセキュア領域３０に入力し、セキュア領域３０に格納してあるハッシュ値３３を更新する（ステップＳ２１１）。制御部１１は一連の処理を終了する。
【００５２】
プログラムの更新要求元の認証に失敗したと判定した場合（Ｓ２０３：ＮＯ）、又はプログラムの更新が許可されなかったと判定した場合（Ｓ２０８：ＮＯ）、制御部１１はプログラムの更新処理を停止し（ステップＳ２１２）、一連の処理を終了する。
【００５３】
以上より、本実施の形態２によれば、通常領域２０で実行するプログラムの更新を安全に行うことができる。
【００５４】
また、本実施の形態２によれば、セキュア領域３０で判定処理を行う前に通常領域２０で認証処理を行うことで、より安全にプログラムの更新を行うことができる。
【００５５】
（実施の形態３）
図８は、上述した形態のデバイス１の動作を示す機能ブロック図である。制御部１１がプログラムＰを実行することにより、デバイス１は以下のように動作する。
展開部８１は、デバイス１を起動する場合に、第１実行領域と、該第１実行領域からのアクセスが制限された第２実行領域とを一時記憶領域に展開する。格納部８２は、前記第２実行領域に、前記第１実行領域において起動が許可されるプログラムを表す参照値を格納する。算出部８３は、前記第１実行領域においてプログラムを起動する場合、該プログラムを表す検証値を算出する。判定部８４は、前記第２実行領域において、前記検証値と前記参照値とを照合することで前記プログラムの起動の可否を判定する。
【００５６】
本実施の形態３は以上の如きであり、その他は実施の形態１及び２と同様であるので、対応する部分には同一の符号を付してその詳細な説明を省略する。
【００５７】
今回開示された実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００５８】
１    デバイス
１１  制御部
１２  主記憶部
１３  通信部
１４  補助記憶部
Ｐ    プログラム
２０  通常領域
２１  リッチＯＳ
２２  リッチアプリケーション
３０  セキュア領域
３１  セキュアＯＳ
３２  セキュアアプリケーション
３３  ハッシュ値
【図１】
2020140665.tif 000003
【図２】
2020140665.tif 000004
【図３】
2020140665.tif 000005
【図４】
2020140665.tif 000006
【図５】
2020140665.tif 000007
【図６】
2020140665.tif 000008
【図７】
2020140665.tif 000009
【図８】
2020140665.tif 000010