(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023182388
(43)【公開日】2023-12-26
(54)【発明の名称】情報処理装置
(51)【国際特許分類】
G06F 21/57 20130101AFI20231219BHJP
【FI】
G06F21/57 350
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022095964
(22)【出願日】2022-06-14
(71)【出願人】
【識別番号】509186579
【氏名又は名称】日立Astemo株式会社
(74)【代理人】
【識別番号】110002572
【氏名又は名称】弁理士法人平木国際特許事務所
(72)【発明者】
【氏名】井手口 恒太
(72)【発明者】
【氏名】山内 克哉
(72)【発明者】
【氏名】片岡 幹雄
(72)【発明者】
【氏名】藤井 康広
(72)【発明者】
【氏名】森田 伸義
(57)【要約】
【課題】セキュアブート用の暗号アルゴリズムが危殆化した場合に、別の暗号アルゴリズムに移行可能な情報処理装置を提供する。
【解決手段】プログラムの演算処理を行う演算部と、第一制御プログラムと、第一制御プログラムの署名検証を実行する第一起動プログラムと、を記憶する記憶部と、を有し、第一起動プログラムは、複数の署名検証方式を実行可能であり、該複数の署名検証方式から第一制御プログラムの署名種類に対応した署名検証方式を判定し、署名検証方式にて署名検証を実行した結果を取得する処理を実行する。
ことを特徴とする
【選択図】
図2
【特許請求の範囲】
【請求項1】
プログラムの演算処理を行う演算部と、
第一制御プログラムと、前記第一制御プログラムの署名検証を実行する第一起動プログラムと、を記憶する記憶部と、を有し、
前記第一起動プログラムは、複数の署名検証方式を実行可能であり、該複数の署名検証方式から前記第一制御プログラムの署名種類に対応した署名検証方式を判定し、前記署名検証方式にて署名検証を実行した結果を取得する処理を実行する、
ことを特徴とする情報処理装置。
【請求項2】
請求項1に記載の情報処理装置であって、
前記記憶部は、
前記第一制御プログラムと、前記第一起動プログラムと、を記憶する第一記憶領域と、
前記第一制御プログラムと異なる種類の署名種類を有する第二制御プログラムと、複数の署名検証方式を実行可能であり、該複数の署名検証方式から前記第二制御プログラムの前記署名種類に対応した署名検証方式にて署名検証を実行する第二起動プログラムと、を記憶する第二記憶領域と、を有する、
ことを特徴とする情報処理装置。
【請求項3】
請求項1に記載の情報処理装置であって、
前記署名検証は、前記第一起動プログラムによって実行される、
ことを特徴とする情報処理装置。
【請求項4】
請求項2に記載の情報処理装置であって、
前記第二制御プログラムが前記第二記憶領域に格納された後、実行する記憶領域が前記第一記憶領域から前記第二記憶領域に切り替えられ、
前記第一記憶領域は、前記第二制御プログラムと同一の制御プログラムであって前記第二制御プログラムの署名とは異なる種類の署名を有する第三制御プログラムを格納する、
ことを特徴とする情報処理装置。
【請求項5】
請求項2に記載の情報処理装置であって、
前記第一制御プログラムの署名および前記第二制御プログラムの署名の優先度を比較し、優先度の低い署名を有する方の制御プログラムを削除する、
ことを特徴とする情報処理装置。
【請求項6】
請求項2に記載の情報処理装置であって、
前記第二制御プログラムを受信する場合、前記第一制御プログラムの署名の第一優先度および前記第二制御プログラムの署名の第二優先度を比較し、前記第一優先度の方が前記第二優先度よりも低いときまたは前記第一優先度と第二優先度が同じときにのみ前記第二制御プログラムを前記第二記憶領域に格納する、
ことを特徴とする情報処理装置。
【請求項7】
請求項2に記載の情報処理装置であって、
前記第二制御プログラムを受信する場合、前記第一制御プログラムの第一ソフトウェアバージョン情報および前記第二制御プログラムの第二ソフトウェアバージョン情報を比較し、前記第一ソフトウェアバージョン情報の方が前記第二ソフトウェアバージョン情報より古いときにのみ前記第二制御プログラムを前記第二記憶領域に格納する、
ことを特徴とする情報処理装置。
【請求項8】
請求項2に記載の情報処理装置であって、
前記第一起動プログラムと前記第二起動プログラムは、書換不可であり、
前記第一制御プログラムは、前記第二起動プログラムもしくは前記第二制御プログラムの実行時のみ書換可能であり、
前記第二制御プログラムは、前記第一起動プログラムもしくは前記第一制御プログラムの実行時のみ書換可能である、
ことを特徴とする情報処理装置。
【請求項9】
請求項5に記載の情報処理装置であって、
前記第三制御プログラムを受信する場合、前記第二制御プログラムの署名検証方式の第二優先度および前記第三制御プログラムの署名検証方式の第三優先度を比較し、前記第二優先度の方が低いときもしくは前記第二優先度と前記第三優先度が同じときにのみ前記第三制御プログラムを前記第一記憶領域に格納する、
ことを特徴とする情報処理装置。
【請求項10】
請求項4に記載の情報処理装置であって、
前記制御プログラムの削除は、
前記第一起動プログラムが第二制御プログラムを削除し、
前記第二起動プログラムが第一制御プログラムを削除する、
ことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理装置に関し、特にセキュアブート時に制御プログラムの署名検証を行う情報処理装置に関する。
【背景技術】
【0002】
自動車、家電、医療機器等に搭載される組み込みシステムでは、攻撃者によって、不正にソフトウェアやファームウェアが書き換えられた場合、甚大な被害に繋がることが懸念されている。このような脅威への対策として、ECU起動時に、改ざんされていないプログラムのみを起動できるセキュアブート技術が検討されている。
【0003】
セキュアブートの一手法として、特許文献1では、クライアント装置の起動時に、サーバー装置から得られる情報に基づいて実行対象プログラムの正当性を検証してから、そのプログラムを実行する技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
通常、セキュアブート時に使用されるプログラム検証用の暗号アルゴリズムはECU毎に固定されている。従って、将来的に量子計算機の技術進展等によって暗号解読技術が進化して暗号アルゴリズムが危殆化してしまうと、セキュアブートそのものが脆弱となり、セキュリティ上非常に大きな問題となる。
【0006】
特許文献1の技術によれば、通常ブート用プログラムと暗号化OSでは異なる暗号アルゴリズムを用いており、その時点で高速な暗号アルゴリズムを選択すればよいことが示唆されていることから、複数の検証方式を備えているといえるが、起動用の通常ブート用プログラムは1つであり、やはりこれが危殆化するとセキュリティ上大きな問題となる。
【0007】
本発明は、以上の問題に鑑みなされたものであり、セキュアブート用の暗号アルゴリズムが危殆化した場合に、別の暗号アルゴリズムに移行可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明に係る情報処理装置の一例は、プログラムの演算処理を行う演算部と、第一制御プログラムと、第一制御プログラムの署名検証を実行する第一起動プログラムと、を記憶する記憶部と、を有し、第一起動プログラムは、複数の署名検証方式を実行可能であり、該複数の署名検証方式から第一制御プログラムの署名種類に対応した署名検証方式を判定し、該署名検証方式にて署名検証を実行した結果を取得する処理を実行する。
【発明の効果】
【0009】
本発明によれば、セキュアブート用の暗号アルゴリズムが危殆化した場合に、別の暗号アルゴリズムに容易に移行することにより、セキュリティ上の安全性を担保することが可能になる。
本発明に関連する更なる特徴は、本明細書の記述、添付図面から明らかになるものである。また、上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【0010】
【
図1】本発明の一実施例に係る情報処理装置のハードウェア構成を示す図。
【
図2】ブートローダプログラム及び制御プログラムが格納されたROMの機能構成を示すブロック図。
【
図3】シングルバンク構成時の実施例に係るブートローダプログラムの処理フローを示す図。
【
図4】シングルバンク構成時の実施例に係るプログラム更新の処理フローを示す図。
【
図5】ダブルバンク構成時の実施例1に係るブートローダプログラムの処理フローを示す図。
【
図6】ダブルバンク構成時の実施例1に係るプログラム更新の処理フローを示す図。
【
図7】ダブルバンク構成時の実施例2に係るブートローダプログラムの処理フローを示す図。
【
図8】ダブルバンク構成時の実施例2に係るプログラム更新の処理フローを示す図。
【
図9】ダブルバンク構成時の実施例3に係るブートローダプログラムの処理フローを示す図。
【
図10】ダブルバンク構成時の実施例3に係るプログラム更新の処理フローを示す図。
【
図11】ダブルバンク構成時の実施例4に係るブートローダプログラムの処理フローを示す図。
【発明を実施するための形態】
【0011】
以下、本発明の実施形態について、実施例を用い、図面を参照しながら詳細に説明する。
【0012】
まず、本発明に係る情報処理装置1のハードウェア構成を説明する。情報処理装置1は、データの読み出しが可能な記憶装置であるROM(Read Only Memory)12、データの書き込みと読み出しの両方が可能であるRAM(Random Access Memory)13、データを基に車両制御に必要なパラメータの演算を行うCPU(Central Processing Unit)11、及び演算結果を通信用のプロトコルに変換して送信を行う通信モジュール10を保有している。
【0013】
また、情報処理装置1は、たとえば車両に搭載され、車両を制御する装置である。ただし、情報処理装置1は車両に搭載されないものであってもよく、車両以外の対象を制御する装置であってもよい。
【0014】
情報処理装置1は、通信路2を介して更新プログラム管理サーバ3及びプログラム検証実行モジュール4と接続されている。通信路2は、物理的には複数の通信バスを含んでもよく、各通信バスの規格はすべて同一でもよいし異なっていてもよい。これら通信バスの規格はCAN(登録商標)、LIN(登録商標)、FlexRay(登録商標)、イーサネット(登録商標)などである。
【0015】
更新プログラム管理サーバ3は、情報処理装置1からの要求に応じて、または制御プログラムの更新の必要性が生じた場合に、情報処理装置1に更新プログラムを送信する。プログラム検証実行モジュール4は、情報処理装置1内のブートローダプログラムからの要求に応じて、制御プログラムの署名検証を行い、その結果を情報処理装置1に送信する。プログラム検証実行モジュールは、例えば暗号処理および鍵管理デバイスが備えるべき特性を定義した、国際規格などの認定を取得しているデバイスであるHSM(ハードウェア暗号モジュール)により構成される。
【0016】
情報処理装置1は通信路2を通過したデータを受信する。すると、受信に応じて、受信データがRAM13に展開される。そして、書き込まれたRAM13のデータとROM12の読み出しデータを基に、CPU11が演算を行う。また、情報処理装置1には予めプログラムが組み込まれており、CPU11が当該プログラムを実行することによって以下の実施の形態で説明する処理を実行することが可能になる。
【0017】
図2は、本発明の実施例に係るROM12に格納されたプログラムの機能構成を示した機能ブロック図である。
図2(a)はプログラム格納領域が1つのシングルバンク構成であり、
図2(b)はプログラム格納領域が2つのダブルバンク構成である。
【0018】
図2(a)に示すように、シングルバンク構成のROM12は、制御プログラム121及びブートローダプログラム122を有する。制御プログラム121は、情報処理装置1に搭載された機能を発揮させるためのプログラムであり、例えばOS(Operation System)であるが、これに限定されない。ブートローダプログラム122は、情報処理装置1の起動時に制御プログラム121の署名検証を行い、制御プログラム121が改ざんされていないかどうか判定するセキュアブート処理を実行するためのプログラムである。
【0019】
シングルバンク構成のROM12に格納される制御プログラム121は、プログラム受信機能121a、プログラム展開機能121b、及びリセット機能121cを有する。プログラム受信機能121aによって更新プログラム管理サーバ3から更新プログラムを受信する。プログラム展開機能121bによって受信したプログラムをバンク0内に展開する。リセット機能121cによって、更新プログラムを受信・展開した後、プログラムを実行可能な状態にする。
【0020】
ブートローダプログラム122は、署名方式確認機能122a、署名検証機能122b、プログラム制御機能122c、及び暗号アルゴリズム記憶機能122dを有する。署名方式確認機能122aによって、制御プログラム121の署名方式を確認できる。署名検証機能122bによって、制御プログラム121の署名検証を行うことができる。プログラム制御機能122cによって制御プログラム121の実行及び削除を行う。暗号アルゴリズム記憶機能122dによって、複数の暗号アルゴリズムを記憶することができる。
【0021】
なお、暗号アルゴリズムとしてはAESやトリプルDESなどの共通鍵暗号方式、RSAや楕円曲線暗号などの公開鍵暗号公式などいずれの手法であっても良い。また、本明細書においては署名検証を例として説明するが、MAC(Message Authentication Code)検証に対しても本発明は好適に適用できる。
【0022】
図2(b)は、ダブルバンク構成のROM12のプログラム構成を示している。ダブルバンク構成のROM12がシングルバンク構成のROM12と異なる点は、プログラムを格納する領域としてバンク0及びバンク1の2領域を有する点と、バンク切替・リセット機能121dを有する点である。バンク切替・リセット機能121dによって、バンク0とバンク1のどちらに格納されている制御プログラム121を実行するかを切り替える。シングルバンク構成とダブルバンク構成との処理や効果の違いの詳細については後述する。
【0023】
〈シングルバンク構成時の実施例〉
図3及び
図4は、
図2(a)に示すシングルバンク構成のROM12を採用した場合に行われる処理を説明するフローチャートである。なお、以下の説明では、ダブルバンク構成時も含めて、処理開始時にはバンク0に制御プログラムとして署名方式Aのプログラム1が格納されていることを前提とする。
【0024】
まず、情報処理装置1を起動させた際に実行されるセキュアブート処理を示す
図3について説明する。ステップS301において、CPU11からの指令によってバンク0のブートローダプログラム122を起動する。そして、ステップS302において、署名方式確認機能122aによってプログラム1の署名方式を確認する。この署名方式の確認方法については既知の技術を採用可能であるため、説明を省略する。そして、ステップS303において、署名検証機能122bによって署名方式Aをプログラム1に適用し、署名検証を行う。なお、この署名検証処理については、
図1に示すプログラム検証実行モジュール4により実行されてその結果を受け取る方式でもよいし、ブートローダプログラム122自体が実行する方式でもよい。
【0025】
そして、ステップS304において、署名検証機能122bによって署名検証が成功したか判定される。署名検証が失敗した場合にはプログラム1が改ざんされた可能性があるとして処理を終了する。署名検証が成功した場合には、ステップS305において、プログラム制御機能122cによってプログラム1の実行を開始する。
【0026】
上記のように、本実施例においてはブートローダプログラム122に暗号アルゴリズム記憶機能122dを付与することによって、セキュアブート時に必要な暗号アルゴリズムを複数用意することが可能になる。したがって、ある暗号アルゴリズムが危殆化した場合には、機器自体を交換することなく、容易に別の暗号アルゴリズムに移行することが可能になる。
【0027】
図4は、プログラム1に更新の必要性が生じた場合の更新処理を示すフローチャートである。プログラムに更新の必要性が生じた場合とは、例えばプログラムに機能を追加する場合、バグを修正するパッチを充てる場合、プログラムに脆弱性が発見された場合等である。
【0028】
まず、ステップS401において、ブートローダプログラム122のプログラム制御機能122cによってプログラム1の読み込みを停止し、バンク0を書き換え可能な状態にする。そして、ステップS402において、プログラム受信機能121aによって更新プログラム管理サーバ3から更新用のプログラム2を受信し、プログラム展開機能121bによってバンク0上に展開する。なお、プログラム2の署名方式については署名方式Aの他、暗号アルゴリズム記憶機能122dによって記憶されたその他の署名方式を採用できる。また、プログラム受信については、例えばOTA(Over The Air)方式で受信できる。
【0029】
ステップS403において、再びブートローダプログラム122を起動させ、対応する署名方式で署名検証を行う。ステップS404において、検証が成功したか否か判定し、検証が失敗すれば処理を終了する。検証が成功した場合には、ステップS405において、リセット機能121cによってバンク0をリセットして実行可能な状態にする。そして、ステップS406において、再びブートローダプログラム122を起動し、署名検証が通った場合にプログラム制御機能122cによってプログラム2の実行を開始する。
【0030】
上記のように、プログラム更新時においても、複数の暗号アルゴリズムを適用可能であることにより、例えば署名方式Aが危殆化し、かつプログラム更新の必要性が生じた場合に、別の危殆化していない署名方式を適用し、セキュリティ上の安全性を確保することができる。
【0031】
〈ダブルバンク構成時の実施例1〉
続いて、
図5から
図11を用いて、
図2(b)に示すダブルバンク構成のROM12を採用した場合の処理について説明する。
図5は、ダブルバンク構成のROM12を有する情報処理装置1を起動させた際に実行されるセキュアブート処理を示すフローチャートである。
【0032】
この時の処理については、ステップS301からステップS305まではシングルバンク構成時の処理と同一であるため、説明を省略する。ダブルバンク構成を採用した場合には、ステップS501及びS502が追加される。
【0033】
ステップS305においてプログラム1の実行が開始された後、ステップS501において、バンク0のプログラム制御機能122cによって、バンク1のバッファ(プログラムが展開される領域)にプログラムデータがあるか否か判定される。そして、プログラムデータがある場合には、ステップS502において、当該プログラムデータが削除される。なお、この削除処理は実行されなくてもよい。
【0034】
次に、プログラム1に更新の必要性が生じた場合の更新処理について
図6を用いて説明する。なお、本実施例においては、ブートローダプログラム122は書換不可であり、制御プログラム121は、他方のバンクの制御プログラム121またはブートローダプログラム122の実行時にのみ書換可能である。
【0035】
まず、ステップS601において、バンク0のプログラム受信機能121aによって更新プログラム管理サーバ3から更新用のプログラム2を受信する。ステップS602において、プログラム展開機能121bによってプログラム2をバンク1のバッファ上に展開する。なお、本実施例においても、プログラム2の署名方式については署名方式Aの他、暗号アルゴリズム記憶機能122dによって記憶されたその他の署名方式を採用できる。
【0036】
ステップS603において、再びブートローダプログラム122を起動させ、対応する署名方式で署名検証を行う。ステップS604において、検証が成功したか否か判定し、検証が失敗すれば処理を終了する。検証が成功した場合には、ステップS605及びS606において、バンク切替・リセット機能121dによって動作領域をバンク0からバンク1に切り替える切り替え命令を発行し、さらにバンク1をリセットして実行可能な状態にする。そして、ステップS607において、プログラム制御機能122cによってプログラム2の実行を開始する。
【0037】
本実施例においても、シングルバンク構成時と同様に、プログラム更新時においても、複数の暗号アルゴリズムを適用可能であることにより、例えば署名方式Aが危殆化し、かつプログラム更新の必要性が生じた場合に、別の危殆化していない署名方式を適用し、セキュリティ上の安全性を確保することができる。
【0038】
さらに、ダブルバンク構成を採用することにより、更新プログラム受信時に採用するOTAの仕組みを頑強にすることが可能になり、また、バンク0のデータをそのまま残しておくことにより、動作領域をバンク1からバンク0に戻すロールバック処理を行うことが可能になる。さらに、更新用のプログラム2をプログラム1と同じものにしておくことで、冗長性も確保することが可能になる。
【0039】
〈ダブルバンク構成時の実施例2〉
次に、実施例2に係るダブルバンク構成のROM12を有する情報処理装置1が実行する処理について
図7及び
図8を用いて説明する。なお、実施例1においては、処理開始時にはバンク1にはプログラムデータがあってもなくてもどちらでもよいと説明したが、以下の実施例においては、処理開始時には、バンク0には署名方式Aのプログラム1が格納されており、バンク1には署名方式Aとは異なる署名方式Bを有しかつプログラム1と同じ内容のプログラムが格納されていることを前提とする。
【0040】
図7は、実施例2に係るダブルバンク構成のROM12を有する情報処理装置1を起動させた際に実行されるセキュアブート処理を示すフローチャートである。
図7に示すように、本実施例においては、
図5で示した、実施例1に係るセキュアブート処理からステップS501とS502が削除された処理となっている。すなわち、本実施例においてはシングルバンク構成のROMを有する情報処理装置1が行うセキュアブート処理と同一の処理を実行する。前述のようにバンク1に格納されているプログラムはプログラム1と同じ内容でかつ異なる署名方式Bを有するものであるが、これにより、例えばプログラム1の署名方式Aが危殆化し、かつ署名方式Bが危殆化していない場合に、すぐに動作領域をバンク0からバンク1に切り替えて、セキュリティ上の安全性を確保することが可能になる。
【0041】
次に、バンク0に格納されたプログラム1の更新処理について
図8を用いて説明する。
【0042】
本実施例においては、まず
図6に示すステップS601からS607までは実施例1で実行される処理と同一である。
【0043】
本実施例においては実施例1に加えてステップS801からS805が追加される。
図6においてバンク1のプログラム2に係る処理が開始された後、ステップS801において、バンク1の制御プログラム121のプログラム受信機能121aによって新たに更新用のプログラム3を受信する。このプログラム3は、バンク1に格納されていたプログラム2と同一の内容かつ異なる署名方式を有するものである。
【0044】
ステップS802において、プログラム展開機能121bによってバンク0にプログラム3を展開する。ステップS803において、署名検証機能122bによってプログラム3の署名検証を行う。上述の通り、この署名はプログラム2の署名方式Bとは異なる署名方式である。
【0045】
ステップS804において、署名の検証が成功したか否か判定し、署名検証が失敗した場合には処理を終了する。署名検証が成功した場合には、ステップS805に移行する。ここで、実施例1においては、更新したプログラムの署名検証が成功した場合には動作領域のバンクを切り替えていたが、本実施例においてはステップS805に示すようにバンクを切り替えず、バンク1のプログラム2の実行を継続する。上述の通り、プログラム3はプログラム2と同一の内容かつ異なる署名方式であるため、例えばプログラム2の署名方式が危殆化し、かつプログラム3の署名方式が危殆化していない場合に、動作領域をバンク1からバンク0に切り替えることで、プログラム2と同一の処理を行いつつセキュリティ上の安全性を確保することが可能になる。
【0046】
〈ダブルバンクの実施例3〉
次に、実施例3に係るダブルバンク構成のROM12を有する情報処理装置1が実行する処理について
図9及び
図10を用いて説明する。
【0047】
図9は、実施例3に係るダブルバンク構成のROM12を有する情報処理装置1を起動させた際に実行されるセキュアブート処理を示すフローチャートである。
図9に示すように、本実施例においては、
図7で示した、実施例2に係るセキュアブート処理に加えてステップS901及びS902が追加されている。
【0048】
本実施例においては、ステップS305においてプログラム1の実行を開始した後、ブートローダプログラム122の署名方式確認機能122aによってさらにバンク0のプログラム1の署名方式Aの世代とバンク1に格納されているプログラムの署名方式Bの世代を検証する。
【0049】
ここで、署名方式の世代について説明する。上述のように、セキュアブートに用いられる暗号としては例えばRSA暗号や楕円曲線暗号が用いられることが多い。しかしながら、これらの暗号は量子計算機が実現すると容易に解読されることが判明している。そのため、量子計算機を用いても容易に解読できない耐量子計算機暗号の実用化が進められている(例えば格子暗号)。この場合において、格子暗号の世代はRSA暗号及び楕円曲線暗号の世代より新しいといえる。このように、ある世代Aの暗号を解読可能な技術が実現した場合に、次の世代Bにおいて、当該技術を用いても容易に解読できない暗号が実現したとき、世代Bは世代Aより新しい、と定義される。換言すると、古い世代の署名方式は、新しい世代の署名方式に比べて危殆化しやすい、あるいはすでに危殆化している。
【0050】
したがって、ステップS901においてバンク1のプログラム2の署名方式Bの世代を確認し、その世代が署名方式Aよりも古い世代であれば、すでに危殆化している可能性が高く、セキュリティ上の脆弱性が生じている。したがって、署名方式Bの世代が署名方式Aの世代よりも古い場合には、ステップS902に移行し、プログラム2を削除する。
【0051】
次に、本実施例におけるプログラム更新処理について
図10を用いて説明する。本実施例におけるプログラムの更新処理は、署名方式の世代を考慮することによる処理であるステップS1001からS1007が追加されている。以下ではこれらの追加した処理について説明する。
【0052】
ステップS602でバンク1にプログラムを展開した後、ステップS1001においてバンク0の署名方式確認機能122aによって署名方式Bの世代を確認する。署名方式Bの世代がプログラム1の署名方式Aよりも古い場合には、ステップS1004において上述と同様の理由によりプログラム2を削除し、処理を終了する。
【0053】
署名方式Bの世代が署名方式Aの世代よりも新しい世代かあるいは同じ世代の場合には、ステップS1002~S1003において署名検証機能122bによりプログラム2の署名検証を実行する。その後のステップS605からS802までは実施例2と同様である。
【0054】
ステップS802においてバンク0に再びプログラム3を展開した後、ステップS1005においてプログラム3の署名方式Cの世代を、プログラム2の署名方式Bの世代と比較する。そして、署名方式Cの世代が署名方式Bの世代より古い場合には、ステップS1007においてプログラム3を削除し、ステップS805においてプログラム2の実行を継続する。
【0055】
署名方式Cの世代が署名方式Bの世代より新しい世代かあるいは同じ世代の場合には、ステップS1006において、バンク0のブートローダプログラム122の署名検証機能122bによって署名方式Cでプログラム3の署名検証を行う。
【0056】
ステップS804において、署名検証が失敗した場合には、処理を終了する。署名検証が成功した場合には、ステップS805に移行し、バンク1のプログラム2の実行を継続する。
【0057】
以上のように、本実施例によれば、署名方式の世代も考慮してプログラム更新を行う。これにより、すでに危殆化した署名方式を有するプログラムを実行してしまう危険性を排除することが可能になる。
【0058】
〈ダブルバンクの実施例4〉
最後に、実施例4に係るダブルバンク構成のROM12を有する情報処理装置1が実行する処理について
図11を用いて説明する。本実施例においては、プログラムを更新する処理は実施例2または3と同様であるが、情報処理装置1を起動する際のセキュアブート処理が異なる。
【0059】
図11は、実施例3に係るダブルバンク構成のROM12を有する情報処理装置1を起動させた際に実行されるセキュアブート処理を示すフローチャートである。
図11に示すように、本実施例においては、
図7で示した、実施例2に係るセキュアブート処理に加えてステップS1101が追加されている。
【0060】
本実施例においては、バンク0のブートローダ起動後、プログラム制御機能122cによって、バンク0に格納されたプログラム1のバージョンと、バンク1に格納されたプログラムのバージョンとを比較する。そして、バンク0に格納されたプログラム1のバージョンが、バンク1に格納されたプログラムのバージョンより古い場合にはその後の処理を行わず、バンク0に格納されたプログラム1のバージョンが、バンク1に格納されたプログラムのバージョンより新しいか同じバージョンの場合にのみステップS302に移行してバンク0に格納されたプログラム1の署名検証を行う。その後の処理は上記の実施例と同様である。
【0061】
本実施例によれば、バージョンが古く、例えば脆弱性に問題がある制御プログラムを実行することを防止できる。
【0062】
以上で説明した本発明の実施例によれば、以下の作用効果を奏する。
(1)本発明の一実施例に係る情報処理装置は、プログラムの演算処理を行う演算部と、第一制御プログラムと、第一制御プログラムの署名検証を実行する第一起動プログラムと、を記憶する記憶部と、を有し、第一起動プログラムは、複数の署名検証方式を実行可能であり、該複数の署名検証方式から第一制御プログラムの署名種類に対応した署名検証方式を判定し、署名検証方式にて署名検証を実行した結果を取得する処理を実行する。
上記構成により、セキュアブート用の暗号アルゴリズムが危殆化した場合に、別の暗号アルゴリズムに容易に移行することにより、セキュリティ上の安全性を担保することが可能になる。
【0063】
(2)記憶部は、第一制御プログラムと、第一起動プログラムと、を記憶する第一記憶領域と、第一制御プログラムと異なる種類の署名種類を有する第二制御プログラムと、複数の署名検証方式を実行可能であり、該複数の署名検証方式から第二制御プログラムの署名種類に対応した署名検証方式にて署名検証を実行する第二起動プログラムと、を記憶する第二記憶領域と、を有する。これにより、更新プログラム受信時に採用するOTAの仕組みを頑強にすることが可能になり、また、バンク0のデータをそのまま残しておくことにより、動作領域をバンク1からバンク0に戻すロールバック処理を行うことが可能になる。さらに、更新用のプログラム2をプログラム1と同じものにしておくことで、冗長性も確保することが可能になる。
【0064】
(3)署名検証は、第一起動プログラムによって実行される。これにより、署名検証を行うHSM等の機器を追加することなく、簡便に署名検証を実行できる。
【0065】
(4)第二制御プログラムが第二記憶領域に格納された後、実行する記憶領域が第一記憶領域から第二記憶領域に切り替えられ、第一記憶領域は、第二制御プログラムと同一の制御プログラムであって第二制御プログラムの署名とは異なる種類の署名を有する第三制御プログラムを格納する。これにより、第二制御プログラムと第三制御プログラムとの冗長性を確保することが可能になる。
【0066】
(5)第一制御プログラムの署名および第二制御プログラムの署名の優先度を比較し、優先度の低い署名を有する方の制御プログラムを削除する。これにより、制御プログラム同士の世代やバージョンを比較し、世代やバージョンが古く、危殆化した署名方式を有する、もしくは脆弱化したプログラムを実行してセキュリティ上の脆弱性が生じる恐れを防止できる。
【0067】
(6)第二制御プログラムを受信する場合、第一制御プログラムの署名の第一優先度および第二制御プログラムの署名の第二優先度を比較し、第一優先度の方が第二優先度よりも低いときまたは第一優先度と第二優先度が同じときにのみ第二制御プログラムを第二記憶領域に格納する。これにより、(5)と同様に、危殆化した署名方式を有するプログラムを実行してセキュリティ上の脆弱性が生じる恐れを防止できる。
【0068】
(7)第二制御プログラムを受信する場合、第一制御プログラムの第一ソフトウェアバージョン情報および第二制御プログラムの第二ソフトウェアバージョン情報を比較し、第一ソフトウェアバージョン情報の方が第二ソフトウェアバージョン情報より古いときにのみ第二制御プログラムを第二記憶領域に格納する。これにより、(5)と同様に、脆弱化したプログラムを実行してセキュリティ上の脆弱性が生じる恐れを防止できる。
【0069】
(8)第一起動プログラムと第二起動プログラムは、書換不可であり、第一制御プログラムは、第二起動プログラムもしくは第二制御プログラムの実行時のみ書換可能であり、第二制御プログラムは、第一起動プログラムもしくは第一制御プログラムの実行時のみ書換可能である。これにより、書換時以外には動作領域ではないバンクにアクセスすることができないため、データの誤書込みをする危険性を排除できる。
【0070】
(9)第三制御プログラムを受信する場合、第二制御プログラムの署名検証方式の第二優先度および第三制御プログラムの署名検証方式の第三優先度を比較し、第二優先度の方が低いときもしくは第二優先度と第三優先度が同じときにのみ第三制御プログラムを第一記憶領域に格納する。これにより、(5)と同様の効果を奏する。
【0071】
(10)制御プログラムの削除は、第一起動プログラムが第二制御プログラムを削除し、第二起動プログラムが第一制御プログラムを削除する。これにより、メモリ容量を削減することが可能になる。
【0072】
なお、本発明は、上記の実施例に限定されるものではなく、様々な変形が可能である。例えば、上記の実施例は、本発明を分かりやすく説明するために詳細に説明したものであり、本発明は、必ずしも説明した全ての構成を備える態様に限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能である。また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、削除したり、他の構成を追加・置換したりすることが可能である。
【符号の説明】
【0073】
1 情報処理装置、11 CPU(演算部)、12 ROM(記憶部)、121 制御プログラム、122 ブートローダプログラム(起動プログラム)