(57)【要約】      （修正有）【課題】安全性が確認されていない通常ファームによる、一時展開されているアップデート用ファームウェアへのアップデートを防止する。【解決手段】複数のファームウェアを含む情報処理装置であって、第１ファームウェアにより、ダウンロードしたファームウェアを一時展開して記憶し、その記憶されている一時展開されたファームウェアを使用して前記第１ファームウェアを更新するために第２ファームウェアを起動する。第２ファームウェアの起動中に、前記第２ファームウェアの改ざんを検知し、第２ファームウェアの改ざんを検知しない場合、前記第１ファームウェアの改ざんを検知し、第１ファームウェアの改ざんを検知しない場合に、記憶されている前記一時展開されたファームウェアを使用して前記第１ファームウェアを更新する。【選択図】図５
2020053002.tif 000002
【特許請求の範囲】
【請求項１】
複数のファームウェアを含む情報処理装置であって、
第１ファームウェアにより、ダウンロードしたファームウェアを一時展開して記憶する記憶手段と、
前記記憶手段に記憶されている一時展開されたファームウェアを使用して前記第１ファームウェアを更新するために第２ファームウェアを起動する起動手段と、
前記第２ファームウェアの起動中に、前記第２ファームウェアの改ざんを検知する第１検知手段と、
前記第１検知手段が前記第２ファームウェアの改ざんを検知しない場合、前記第１ファームウェアの改ざんを検知する第２検知手段と、
前記第２検知手段が前記第１ファームウェアの改ざんを検知しない場合に、前記記憶手段に記憶されている前記一時展開されたファームウェアを使用して前記第１ファームウェアを更新する第１更新手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記第２検知手段により前記第１ファームウェアの改ざんが検知されると、前記記憶手段に記憶された前記一時展開されたファームウェアを破棄し、前記第２ファームウェアに含まれる前記第１ファームウェアの更新プログラムに従って前記第１ファームウェアを更新する第２更新手段を、更に有することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記ファームウェアのダウンロードは、前記情報処理装置がバックグラウンドで実行することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記第１検知手段及び前記第２検知手段による検知は、ＢＩＯＳ（Basic Input Output System）の改ざんの検知、及びローダの改ざんを検知を含むことを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記記憶手段に記憶されている一時展開されたファームウェアを使用して前記第１ファームウェアを更新するための日時を設定する設定手段を、更に有し、
前記起動手段は前記設定手段により設定された前記日時になると前記第２ファームウェアを起動することを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記第１更新手段或いは前記第２更新手段により前記第１ファームウェアが更新された後、前記情報処理装置は、前記第１ファームウェアで起動した後、バックグラウンドで前記第２ファームウェアを更新するプログラムを起動して前記第２ファームウェアを更新することを特徴とする請求項２に記載の情報処理装置。
【請求項７】
前記ファームウェアのダウンロードは、外部から前記ファームウェアを受信することにより行われることを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記ファームウェアのダウンロードは、前記情報処理装置に接続されたメモリから前記ファームウェアを受信することにより行われることを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項９】
前記第２検知手段は、前記第１ファームウェアを起動した後、バックグラウンドで前記第１ファームウェアの改ざんを検知することを特徴とする請求項１に記載の情報処理装置。
【請求項１０】
複数のファームウェアを含む情報処理装置を制御する制御方法であって、
第１ファームウェアにより、ダウンロードしたファームウェアを一時展開して記憶する記憶工程と、
前記記憶工程で記憶されている一時展開されたファームウェアを使用して前記第１ファームウェアを更新するために第２ファームウェアを起動する起動工程と、
前記第２ファームウェアの起動中に、前記第２ファームウェアの改ざんを検知する第１検知工程と、
前記第１検知工程が前記第２ファームウェアの改ざんを検知しない場合、前記第１ファームウェアの改ざんを検知する第２検知工程と、
前記第２検知工程が前記第１ファームウェアの改ざんを検知しない場合に、前記記憶工程で記憶されている前記一時展開されたファームウェアを使用して前記第１ファームウェアを更新する第１更新工程と、
を有することを特徴とする制御方法。
【請求項１１】
コンピュータを、請求項１乃至９のいずれか１項に記載の情報処理装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置とその制御方法、及びプログラムに関する。
【背景技術】
【０００２】
デジタル複合機のファームウェアは、不具合の修正や機能追加のために、市場にリリースされた後、ユーザ先でもしばしばアップデートされる。デジタル複合機のファームウェアのアップデートは、顧客にとっては機器のダウンタイムとなるので、できるだけアップデート時間を短縮してダウンタイムを削減することが望まれている。そのために、通常、起動中にバックグラウンドで予めアップデートに必要なファームウェアをダウンロードして、一時展開しておき、再起動時に、その一時展開した新ファームウェアに差し替えて起動する方法が考えられている。これにより、最小限のダウンタイムでファームウェアを更新することができる。また、ダウンタイムとなるファームウェアの更新を、ユーザがデジタル複合機を使用しない時間帯（例えば、深夜）等に設定することも実施されている。
【０００３】
一方、このようなファームウェアを配信する側では、改ざんされて不正にアップデートされないように、配信するファームウェアの署名暗号化を行って配信している。従って、デジタル複合機のファームウェアのアップデートに際しては、起動時にバックグラウンドでダウンロードして一時展開する際に、ダウンロード後に改ざんされていないことをチェックした後、復号化して一時展開を行う。従って、事前にバックグラウンドでダウンロードして一時展開を実施する場合で、ファームウェアの更新時刻を別途設定した場合は、その設定された時刻まで、復号化された展開済ファームウェアがデバイス内に置かれることになる。従って、この一時展開後から、ファームウェアの更新時刻までの間に、悪意を持ってデジタル複合機にアクセスしたり、ＨＤＤ等の記憶装置を取り換えられたりすると、ファームウェアのチェックなしで、不正なファームウェアにアップデートされるおそれがある。そのため特許文献１では、ファームウェアを一時展開した後に、その一時展開した領域のハッシュ値を取得する。そして、アップデートする前に、その一時展開した領域のハッシュ値を再度計算して、以前のハッシュ値と比較することで改ざんを検知し、不正なアップデートを防止する方法が提案されている。
【０００４】
一方、ファームウェアのアップデートの場面に限らず、ソフトウェアの脆弱性をついて、ソフトウェアを改ざんし、コンピュータを悪用する攻撃が問題となっている。そういった攻撃対策として、例えば特許文献２には、耐タンパーモジュールを用いてプログラムのハッシュ値を計算して保存しておき、起動するたびにプログラムのハッシュ値を再計算して検証することで改ざんを検知する方法が提案されている。
【０００５】
また、特別なハードウェアを必要とする耐タンパーモジュールを使用せず、起動時に順次プログラムを起動していく際に、次のプログラムの正解値を保持しておき、正解値が一致するかどうかで、各プログラムの改ざん検知を行う方法も考えられる。このような順次プログラムを起動する際に各プログラムの改ざんを検知する方法では、基本的にはそのときに起動するプログラムだけが、改ざん検知を行って起動される。以下、説明の簡略化のために、このような起動時の改ざん検知の仕組みをセキュアブートと呼ぶ。このセキュアブートの仕組みは、近年のセキュリティ機能の需要の高まりからデジタル複合機のファームウェアのアップデートにも適用されつつある。
【０００６】
デジタル複合機のファームウェアのアップデートでは、通常のファームウェアを更新するためのアップデート用のファームウェアが存在し、そのアップデート用ファームウェアによってアップデート処理を実行する。以下、説明の簡略化のために、アップデート用ファームをｓａｆｅファーム、通常ファームはｓｔｄファームと記載する。ｓｔｄファームとｓａｆｅファームの起動を切り替える際には再起動を行うので、前述のセキュアブートが適用されている場合、それぞれのファームウェアの起動時にセキュアブートの処理が行われることになる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１５−１３２９２３号公報
【特許文献２】特開２００８−２４４９９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
デジタル複合機のバックグラウンドアップデートでは、ｓｔｄファームによる通常起動中に、バックグラウンドで予めアップデートに必要なファームウェアをダウンロードして一時展開しておく。その後、アップデートに設定された時刻に達したときに、再起動してセキュアブートによるｓａｆｅファームの起動を行い、一時展開した新ファームウェアを使用してアップデートする。このとき、事前に新ファームウェアの一時展開を実施したｓｔｄファームが、前回の起動のときのセキュアブートによる改ざん検知処理以降に、侵入されてメモリの改ざんが行われたり、破壊が行われたりしたかどうかのチェックは実施していない。よって、ファームウェアをアップデートするタイミングでは、ｓｔｄファームの安全性は確認されていない。従って、安全性が確認されていないｓｔｄファームによって、一時展開されているファームウェアによるアップデートが実行されることになる。
【０００９】
本発明の目的は、上記従来技術の問題点の少なくとも一つを解決することにある。
【００１０】
本発明の目的は、一時展開されているファームウェアのアップデートの際に、その一時展開を実施したファームウェアの改ざんを検知することにより、安全性が確認されていないファームウェアによるアップデートを防止することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するために本発明の一態様に係る情報処理装置は以下のような構成を備える。即ち、
複数のファームウェアを含む情報処理装置であって、
第１ファームウェアにより、ダウンロードしたファームウェアを一時展開して記憶する記憶手段と、
前記記憶手段に記憶されている一時展開されたファームウェアを使用して前記第１ファームウェアを更新するために第２ファームウェアを起動する起動手段と、
前記第２ファームウェアの起動中に、前記第２ファームウェアの改ざんを検知する第１検知手段と、
前記第１検知手段が前記第２ファームウェアの改ざんを検知しない場合、前記第１ファームウェアの改ざんを検知する第２検知手段と、
前記第２検知手段が前記第１ファームウェアの改ざんを検知しない場合に、前記記憶手段に記憶されている前記一時展開されたファームウェアを使用して前記第１ファームウェアを更新する第１更新手段と、を有することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、一時展開されているファームウェアのアップデートの際に、その一時展開を実施したファームウェアの改ざんを検知することにより、改ざんされた可能性のあるプログラムによるアップデートを防止できるという効果がある。
【００１３】
本発明のその他の特徴及び利点は、添付図面を参照とした以下の説明により明らかになるであろう。なお、添付図面においては、同じ若しくは同様の構成には、同じ参照番号を付す。
【図面の簡単な説明】
【００１４】
添付図面は明細書に含まれ、その一部を構成し、本発明の実施形態を示し、その記述と共に本発明の原理を説明するために用いられる。
【図１】実施形態に係る情報処理装置のハードウェア構成を説明するブロック図。
【図２】実施形態に係る情報処理装置が有するファームウェアモジュールの構成を説明するブロック図。
【図３】実施形態に係る情報処理装置で実行される、一般的なバックグラウンドでのアップデート処理を説明するフローチャート。
【図４】実施形態に係る情報処理装置１００によるセキュアブートの処理を説明するフローチャート。
【図５】本発明の実施形態における、セキュアブート設定時のバックグラウンドアップデートのフローチャートである。
【図６】実施形態に係るエラーコードの表示例を示す図。
【図７】本発明の他の実施形態に係る情報処理装置におけるセキュアブート設定時のバックグラウンドアップデート処理を説明するフローチャート。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。尚、実施形態に係る情報処理装置として複合機（デジタル複合機／ＭＦＰ／Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）を例に説明する。しかしながら適用範囲は複合機に限定はせず、情報処理装置であればよい。
【００１６】
図１は、実施形態に係る情報処理装置１００のハードウェア構成を説明するブロック図である。
【００１７】
ＣＰＵ１１０を含む制御部１５０は、情報処理装置１００全体の動作を制御する。ＣＰＵ１１０は、フラッシュメモリ１１９に記憶された制御プログラムをＲＡＭ１１２に展開し、その展開したプログラムを実行することにより読取制御や印刷制御、ファームアップデート制御などの各種制御処理を実行する。またフラッシュメモリ１１９は、ワークエリア、またユーザデータ領域としても用いられる。ＲＯＭ１９１はリードオンリーメモリで、情報処理装置１００のＢＩＯＳ（Basic Input Output System）、固定パラメータ等を格納している。ＲＡＭ１１２は、ＣＰＵ１１０の主メモリ、ワークエリア等の一時記憶領域として用いられる。ＳＲＡＭ１１３は不揮発メモリであり、情報処理装置１００で必要となる設定値や画像調整値などを記憶しており、電源を再投入してもデータが消えないようになっている。ＨＤＤ１１８は、ファームアップデート用のファイル格納領域を備え、画像データやユーザデータ等も記憶する。
【００１８】
操作部Ｉ／Ｆ１１５は、操作部１２０と制御部１５０とを接続する。操作部１２０には、タッチパネル機能を有する表示部やキーボードなどが備えられている。プリンタＩ／Ｆ１１６は、プリンタエンジン１２１と制御部１５０とを接続する。プリンタエンジン１２１内に含む図示しないＲＯＭにはプリンタエンジンファーム１３１が格納されている。プリンタエンジン１２１で印刷すべき画像データはプリンタＩ／Ｆ１１６を介して制御部１５０からプリンタエンジン１２１に転送され、プリンタエンジン１２１において記録媒体上に印刷される。スキャナＩ／Ｆ１１７は、スキャナエンジン１２２と制御部１５０とを接続する。スキャナエンジン１２２内に含む図示しないＲＯＭにはスキャナエンジンファーム１３２が格納されている。スキャナエンジン１２２は、原稿上の画像を読み取って画像データを生成し、スキャナＩ／Ｆ１１７を介して制御部１５０に入力する。ネットワークＩ／ＦカードＮＩＣ１１４は、制御部１５０（情報処理装置１００）をＬＡＮ１３０に接続する。ＮＩＣ１１４は、ＬＡＮ１３０上の外部装置（例えば、外部サーバ１５０やＰＣ１６０）に画像データや情報を送信したり、逆にアップデートファームや各種情報を受信したりする。外部サーバ１５０はインターネット上に存在するケースもある。ＰＣ１６０上に存在する図示しないＷｅｂブラウザから情報処理装置１００の操作を行うこともある。
【００１９】
集積回路１１１は、ある一連の関連のある複数の集積回路のことを示す。ＲＴＣ１７０はＲｅａｌＴｉｍｅＣｌｏｃｋ（リアルタイムクロック）であり、計時専用のチップである。外部電源１４０が接続されていなくとも、図示しない内蔵電池から電源供給を受けるため、スリープ時も動作することができる。これにより、集積回路１１１に対して一部の電源供給が行われる状態においては、スリープからの復帰が実現できる。逆に、集積回路１１１に電源供給がまったく行われないシャットダウン状態の場合には、ＲＴＣ１７０は動作することができない。ＣＰＵ１８１は、組み込み制御部１８０のソフトウェアプログラムを実行し、情報処理装置１００の中で一部の制御を行う。ＲＡＭ１８２はランダムアクセスメモリで、ＣＰＵ１８１が情報処理装置１００を制御する際に、プログラムや一時的なデータの格納などに使用される。ＬＥＤ１９０は必要に応じて点灯し、ソフトウェアやハードウェアの異常を外部に伝えるために利用される。
【００２０】
図２は、実施形態に係る情報処理装置１００が有するファームウェアモジュールの構成を説明するブロック図である。
【００２１】
通信管理部２０１は、ネットワーク１３０に接続されるＮＩＣ１１４を制御して、ネットワーク１３０を介して外部とデータの送受信を行う。ＵＩ制御部２０２は、操作部Ｉ／Ｆ１１５を介して操作部１２０への入力を受け取り、入力に応じた処理や画面出力を行う。ブートプログラム２０３は、情報処理装置１００の電源を入れると組み込み制御部１８０のＣＰＵ１８１で実行されるプログラムで、起動に関わる処理を行う他にＢＩＯＳ２０５の改ざん検知を行うＢＩＯＳ改ざん検知部２０４を有する。ＢＩＯＳ２０５は、ブートプログラム２０３の実行後にＣＰＵ１１０で実行されるプログラムで、起動に関わる処理を行う他にローダ２０７の改ざん検知を行うローダ改ざん検知部２０６を有する。
【００２２】
ローダ２０７は、ＢＩＯＳ３０３の処理が終わった後にＣＰＵ１１０で実行されるプログラムで、起動に関わる処理を行う他にカーネル２１３の改ざん検知を行うカーネル改ざん検知部２０８を有する。
【００２３】
ｓｔｄパーティション２０９とｓａｆｅパーティション２１０はともに、フラッシュメモリ１１９内に構成されるパーティションである。ｓｔｄパーティション２０９は、通常起動用ファームであるｓｔｄファーム２１１を含む。ｓａｆｅパーティション２１０は、アップデート起動用ファームであるｓａｆｅファーム２１２を含む。ｓｔｄファーム２１１は、カーネル２１３と、通常起動用プログラム２１５を含んでいる。カーネル２１３は、ローダ２０７の処理が終わった後にＣＰＵ１１０で実行されるプログラムで、起動に関わる処理を行う他に、通常起動用プログラム２１５の改ざん検知を行うプログラム改ざん検知部２１４を有する。
【００２４】
通常起動用プログラム２１５は、ＣＰＵ１１０で実行されるプログラムであり、情報処理装置１００で各機能を提供する複数のプログラムを有している。これらプログラムは、例えばスキャナＩ／Ｆ１１７やプリンタＩ／Ｆ１１６を制御するプログラムや起動プログラムなどである。カーネル２１３によって通常起動用プログラム２１５の中から起動プログラムが呼び出されて起動処理を行う。また通常起動用プログラム２１５は、ｓａｆｅファームアップデート用プログラム（更新プログラム）２１６を含む。ｓａｆｅファームアップデート用プログラム２１６は、ｓａｆｅファーム２１２をアップデートする機能を備える。またｓｔｄファーム２１１は、ファームウェアのダウンロードを行うファームウェアダウンロード用プログラム２２０、バックグラウンドでのファームウェアの一時展開を行うバックグラウンドダウンロード用プログラム２２０アップデート用プログラム２２１も含む。
【００２５】
ｓａｆｅファーム２１２は、カーネルＢ２１７と、ｓｔｄファームアップデート用プログラム２１９を有する。カーネルＢ２１７は、ローダ２０７の処理が終わった後にＣＰＵ１１０で実行されるプログラムで、起動に関わる処理を行う他に、ｓｔｄファームアップデート用プログラム２１９の改ざん検知を行うプログラム改ざん検知部Ｂ２１８を有する。ｓｔｄファームアップデート用プログラム２１９は、ｓｔｄファーム２１１と、図１で説明したプリンタエンジンファーム１３１とスキャナエンジンファーム１３２をアップデートする機能を備える。情報処理装置１００として、例えば図示しないフィニッシャなどのスキャナエンジンやプリンタエンジン以外の構成が接続された場合も同様になる。
【００２６】
情報処理装置１００は起動モードを切り替えながらアップデートを実現するが、起動モードとは、ｓｔｄファーム２１１での起動と、ｓａｆｅファーム２１２での起動を指す。またそれぞれ、起動モードの切り替えを行う機能を備え、ローダ２０７がＳＲＡＭ１１３に保存される起動モードの情報に応じてｓｔｄファーム２１１とｓａｆｅファーム２１２の起動を行う。
【００２７】
ＨＤＤ１１８には、ダウンロードしたファームウェアを一時的に配置するダウンロード領域２２２、ダウンロードしたファームウェアを一時的に展開する一時展開領域２２３がある。
【００２８】
次に本実施形態の前提となる、一般的なバックグラウンドでのアップデート処理の概要を図３のフローチャートを参照して説明する。
【００２９】
図３は、実施形態に係る情報処理装置で実行される、一般的なバックグラウンドでのアップデート処理を説明するフローチャートである。即ち、ここでは後述するプログラムの改ざんを検知するセキュアブートが設定されていない場合で説明する。このフローチャートで示す処理は、ＣＰＵ１１０が、フラッシュメモリ１１９に記憶されているプログラムをＲＡＭ１１２に展開して実行することにより達成される。
【００３０】
ｓｔｄパーティション２０９のｓｔｄファーム２１１が起動している通常起動状態で、ＣＰＵ１１０はＳ３０１において、外部サーバ１５０もしくは操作部１２０からの指示により、ファームウェアのアップデート指示を受信する。このとき、ＣＰＵ１１０がフラッシュメモリ１１９のｓｔｄファーム２１１に含まれるファームウェアダウンロード用プログラム２２０に対してアップデート指示を通知する。このアップデート指示時に応じてＣＰＵ１１０は、アップデート対象となる新ファームウェアのファームウェア情報を取得し、ファームウェアダウンロード用プログラム２２０を実行して、フラッシュメモリ１１９内のファームウェア情報格納領域に保存する。次にＳ３０２に進みＣＰＵ１１は、操作部１２０に認証画面を表示する。そしてＳ３０３でＣＰＵ１１０は、その認証画面を介してユーザの認証が確認されるとＳ３０４に進み、そうでないときはこの処理を終了する。
【００３１】
Ｓ３０４でＣＰＵ１１０は、外部サーバ１５０から新しいファームウェアをＨＤＤ１１８のダウンロード領域２２２にバックグラウンドでダウンロードする。この新しいファームウェアとは、フラッシュメモリ１１９のｓｔｄパーティション２０９、ｓａｆｅパーティション２１０に格納される新しいバージョンの各プログラムである。尚、このとき、ユーザ認証の必要のないファームウェアの場合は、Ｓ３０２、Ｓ３０３はスキップしてよい。ここでダウンロードされたファームウェアは改ざん防止のために署名暗号化されている。よってダウンロード完了後、Ｓ３０５に進みＣＰＵ１１は、バックグラウンドダウンロード用プログラム２２０とアップデート用プログラム２２１を実行し、ダウンロード領域２２２にダウンロードされた新ファームウェアを復号して一時展開領域２２３に一時展開する。ここで行うファームウェアの一時展開とは、最終的にフラッシュメモリ１１９に展開されるべきファームウェアの展開を予めＨＤＤ１１８上で行うことである。後に実施する情報処理装置１００の再起動時に、予めＨＤＤ１１８の一時展開領域２２３に展開しておいた展開データをフラッシュメモリ１１９上の領域へコピーして差し替える。これにより、ｓａｆｅファーム２１２の起動中に復号化、展開、適用を行うアップデートに比べダウンタイムを短縮することができる。
【００３２】
次にＳ３０６に進みＣＰＵ１１０は、フラッシュメモリ１１９内の適用時刻（アップデート日時）情報の格納領域を参照し、ファームウェアの適用時刻の設定が行われていれば、Ｓ３０６において適用時刻に達したかどうかを判定する。この適用時刻の設定は、予め所定の時刻が設定されていてもよいし、ファームウェアのアップデートを受信した際に外部サーバ１５０から設定したり、ユーザが操作部１２０から設定してもよい。Ｓ３０６で適用時刻に達していた場合はＳ３０７に進みＣＰＵ１１０は、操作部１２０に認証画面を表示する。そしてＳ３０８でユーザの認証が確認されるとＳ３０９に進みＣＰＵ１１０は、ｓａｆｅファーム２１２による再起動を指示する。尚、ここでも、ユーザ認証の必要のないファームウェアの場合は、Ｓ３０７，Ｓ３０８はスキップしてよい。
【００３３】
Ｓ３１０でＣＰＵ１１０は、ｓａｆｅファーム２１２による再起動処理の実行中にｓｔｄファームアップデート用プログラム２１９によって、一時展開領域２２３に展開済の新ファームウェアのうち、ｓｔｄパーティション２０９の新ｓｔｄファームを、フラッシュメモリ１１９にコピーして旧ファームウェアと差し替える。続いてＳ３１１に進みＣＰＵ１１０は、そのコピーされた新しいｓｔｄパーティション２０９のｓｔｄファームによって通常起動する。次にＳ３１２に進みＣＰＵ１１０は、ｓｔｄパーティション２０９の新ｓｔｄファームが起動している状態で、バックグラウンドでｓａｆｅファームアップデート用プログラム２１６を起動する。これによりＳ３１３でＣＰＵ１１０は、ｓａｆｅファーム２１２を、バックグラウンドで新しいバージョンのｓａｆｅファームにアップデートする。ｓｔｄパーティション２０９のｓｔｄファーム２１１の起動時は、ｓａｆｅパーティション２１０に格納されるｓａｆｅファーム２１２は使用されていないので、情報処理装置１００の動作に影響を与えずにアップデートを実行することが可能である。ｓａｆｅファーム２１２のアップデートは、ＨＤＤ１１８の一時展開領域２２３の展開済データのコピーと差し替えで実施してもよいし、ダウンロードされた新ファームウェアの復号化、展開、適用を実施してもよい。
【００３４】
このようにして、セキュアブートが設定されていない場合に、バックグラウンドでのアップデート処理を実行できる。尚、Ｓ３０１、Ｓ３０４において、外部サーバ１５０からファームウェアを取得する例を説明したが、新しいファームウェアの取得方法は他の方法であってもかまわない。例えば、ＵＳＢメモリやＰＣ１６０にファームウェアを格納し、デバイスに接続することでも同様の処理を実施することができる。
【００３５】
図４は、実施形態に係る情報処理装置１００によるセキュアブートの処理を説明するフローチャートである。
【００３６】
このセキュアブートの方法は、ブートプログラム２０３、ＢＩＯＳ２０５、ローダ２０７、通常起動であればｓｔｄファーム２１１内のカーネル２１３と通常起動用プログラム２１５が、改ざん検知を行いながら起動する。アップデート用起動であればローダ２０７以降は、ｓａｆｅファーム２１２内のカーネルＢ３１７とｓｔｄファームアップデート用プログラム２１９が改ざん検知を行いながら起動する。ブートプログラム２０３にはＢＩＯＳ署名検証用の公開鍵、ＢＩＯＳ２０５にはＢＩＯＳ署名とローダ検証用公開鍵、ローダ２０７にはローダ署名とカーネル検証用公開鍵、カーネルＢ検証用公開鍵が含まれているものとする。またカーネル２１３には、カーネル署名と通常起動用プログラム検証用公開鍵、通常起動用プログラム２１５には、通常起動用プログラム署名が含まれているものとする。更にカーネルＢ３１７には、カーネルＢ署名とｓｔｄファームアップデート用プログラム検証用公開鍵が、ｓｔｄファームアップデート用プログラム２１９には、ｓｔｄファームアップデート用署名が含まれているものとする。これらの公開鍵と署名は、予め情報処理装置１００の出荷前にプログラムに対して付与されているものとする。改ざん検知部２０４、２０６、２０８、２１４、２１８が各プログラムを検証し、問題がなければ次のプログラムを起動することで改ざん検知を行いながら情報処理装置１００が起動される。以降では、ＲＯＭ１９１にブートプログラム２０３とＢＩＯＳ２０５、フラッシュメモリ１１９にローダ２０７とｓｔｄファーム２１１とｓａｆｅファーム２１２が保存されているものとして説明する。
【００３７】
情報処理装置１００の電源がオンされるとＣＰＵ１８１は、ＲＯＭ１９１からＲＡＭ１８２にブートプログラム２０３を読み込んで実行する。このときブートプログラム２０３に含まれるＢＩＯＳ改ざん検知部２０４は、フラッシュメモリ１１９からＢＩＯＳ２０５とローダ検証用公開鍵、ＢＩＯＳ署名をＲＡＭ１８２に読み込む。次にＢＩＯＳ改ざん検知部２０４として機能し、Ｓ４０１でＢＩＯＳ検証用公開鍵を用いてＢＩＯＳ署名の検証を行う。ここで署名の検証に失敗した場合はＳ４０３に進み、ＣＰＵ１８１はＬＥＤ１９０を点灯して、エラーの発生を通知して、この処理を終了する。
【００３８】
一方、署名の検証に成功した場合はＳ４０２に進みＣＰＵ１８１は、ＣＰＵ１１０に通電してブートプログラムの処理を終了する。これによりＳ４０２でＣＰＵ１１０は、ＲＯＭ１９１からＢＩＯＳ２０５とローダ検証用公開鍵をＲＡＭ１１２に読み込んでＢＩＯＳ２０５を起動する。これ以降の処理は全てＣＰＵ１１０によって処理されるものとして説明する。
【００３９】
ＢＩＯＳ２０５は起動されると、各種初期化処理を行い、ＢＩＯＳ２０５に含まれるローダ改ざん検知部２０６がフラッシュメモリ１１９からローダ２０７とカーネル検証用公開鍵、ローダ署名をＲＡＭ１１２に読み込む。そしてＳ４０４に進みＣＰＵ１１０はローダ改ざん検知部２０６として機能し、ローダ検証用公開鍵を用いてローダ署名の検証を行い成功したか否か判定する。ここで署名の検証に失敗した場合はＳ４１０に進んでエラー表示を行って、この処理を終了する。
【００４０】
一方、ローダの署名の検証に成功した場合はＳ４０５に進み、ＣＰＵ１１０はローダ改ざん検知部２０６としての処理を終了し、ＢＩＯＳ２０５がＲＡＭ１１２に読み込まれたローダ２０７を起動する。こうしてローダ２０７が起動されると、各種初期化処理を行い、ＳＲＡＭ１１３を参照して起動モード等のフラグの確認を行う。この実施形態では通常起動時の例で説明するため、ここではＳＲＡＭ１１３ではｓｔｄファーム２１１を起動する起動モードが選択されるフラグが立っていることを前提とし、ローダ２０７はｓｔｄパーティション２０９に含まれるｓｔｄファーム２１１の起動を開始する。
【００４１】
そしてＳ４０６に進みＣＰＵ１１０は、ローダ２０７に含まれるカーネル改ざん検知部２０８として機能し、フラッシュメモリ１１９からｓｔｄファーム２１１のカーネル２１３と、通常起動用プログラム検証用公開鍵とカーネル署名をＲＡＭ１１２に読み込む。そしてカーネル改ざん検知部２０８は、そのカーネル検証用公開鍵を用いて、カーネル署名の検証を行い成功したか判定する。署名の検証に失敗した場合はＳ４１０に進むが、そうでないときはＳ４０７に進み、ＣＰＵ１１０はカーネル改ざん検知部２０８としての処理を終了してＳ４０７に進む。Ｓ４０７でＣＰＵ１１０は、ローダ２０７を実行してＲＡＭ１１２に読み込まれたカーネル２１３を起動する。こうしてカーネル２１３が起動されると、各種初期化処理を行う。次にＳ４０８に進みＣＰＵ１１０は、カーネル２１３に含まれるプログラム改ざん検知部２１４として機能し、フラッシュメモリ１１９から通常起動用プログラム２１５と通常起動用プログラム署名をＲＡＭ１１２に読み込む。そしてプログラム改ざん検知部２１４は、通用起動用プログラム検証用公開鍵を用いて、通常起動用プログラム署名の検証を行い成功したか判定する。ここで署名の検証に失敗した場合はＳ４１０に進むが、そうでないときはＣＰＵ１１０は、プログラム改ざん検知部２１４としての処理を終了し、Ｓ４０９で通常起動用プログラム２１５を起動して、この処理を終了する。
【００４２】
一方、Ｓ４０４、Ｓ４０６、Ｓ４０８でそれぞれ、ローダ２０７、ｓｔｄファーム２１１のカーネル２１３、または通常起動用プログラム２１５の署名の検証に失敗し、それらプログラムの改ざんが検知された場合はＳ４１０に進む。Ｓ４１０でＣＰＵ１１０は、それぞれローダ改ざん検知部２０６、カーネル改ざん検知部２０８、プログラム改ざん検知部２１４として機能し、操作部１２０に、例えば図６に示すエラーコードを表示して、この処理を終了する。
【００４３】
また実施形態では、情報処理装置１００が通常起動を開始し改ざんを検知するケースを例としたが、アップデート用起動を開始して改ざんを検知した場合であっても同様に改ざんを検知することが可能である。具体的には、アップデート用起動の処理時は、Ｓ４０５において、ＳＲＡＭ１１３にｓａｆｅファーム２１２を起動する起動モードを選択するフラグが立っている。ローダ２０７は、そのフラグを確認した後、ｓａｆｅパーティション２１０に含まれるｓａｆｅファーム２１２の起動を開始する。ｓｔｄファーム２１１の起動と同じように、ｓａｆｅファーム２１２内のカーネルＢ２１７、ｓｔｄファームアップデート用プログラム２１９の起動を順次進め、改ざんがあった場合は、操作部１２０に図６のエラーコードを表示して処理を終了する。
【００４４】
図６は、実施形態に係るエラーコードの表示例を示す図である。
【００４５】
ユーザは、このエラーコードを担当サービスに連絡することにより、起動時に、どのようなエラー（プログラムの改ざん）が発生しているか確認することができる。
【００４６】
セキュアブートの場合は、基本的にそのとき起動するプログラムのみ改ざん検知を行うため、通常起動時はｓｔｄファーム２１１、アップデート用起動の場合はｓａｆｅファーム２１２のみの改ざん検知を行う。従って、通常起動時にｓａｆｅファーム２１２の改ざん検知は行われず、また、アップデート用起動の場合はｓｔｄファーム２１１の改ざん検知は行われない。
【００４７】
図５は、実施形態に係る情報処理装置１００におけるセキュアブート設定時のバックグラウンドアップデート処理を説明するフローチャートである。このフローチャートで示す処理は、ＣＰＵ１１０が、フラッシュメモリ１１９に記憶されているプログラムをＲＡＭ１１２に展開して実行することにより達成される。尚、前述の図３と共通する処理（Ｓ３０１〜Ｓ３１３）は同じ参照番号を付して、その説明を省略する。
【００４８】
Ｓ３０５でＣＰＵ１１０が、ｓｔｄファーム２１１内のバックグラウンドアップデート用プログラム２２１により新ファームウェアをＲＡＭ１１２に一時展開した後、Ｓ５０１でバックグラウンドアップデートを通知するフラグをＳＲＡＭ１１３にセットする。
【００４９】
そしてＳ３０９で再起動を開始するとＳ５０２に進む。セキュアブート設定時は、図４のセキュアブートの処理に従って、順次、起動するプログラムの改ざん検知を実施しながら再起動する。Ｓ５０２でＣＰＵ１１０は、図４のＳ４０１〜Ｓ４０５のセキュアブートの処理に従ってＢＩＯＳ２０５及びローダ２０７の改ざん検知を実施しながら再起動する。この再起動中に改ざんが検知されるとＳ５０２からＳ５０８に進みＣＰＵ１１０は、操作部１２０に図６のエラーコードを表示して、この処理を終了する。
【００５０】
ＢＩＯＳ２０５及びローダ２０７の改ざんが検知されなければＳ５０３に進み、ローダ２０７はＳＲＡＭ１１３を参照して起動モード等のフラグの確認を行う。バックグラウンドアップデートにおいて、新ファームウェア適用処理の再起動時には、バックグラウンドダウンロード用プログラム２２０アップデート用プログラム２２１によって設定されたｓａｆｅファーム２１２を起動する起動モードが選択されるフラグが立っているものとする。ローダ２０７は、そのフラグを確認後、ｓａｆｅパーティション２１０に含まれるｓａｆｅファーム２１２の起動を開始する。こうしてＳ５０３でＣＰＵ１１０は、ｓａｆｅファーム２１２内のカーネルＢ３１７、ｓｔｄファームアップデート用プログラム２１９の改ざん検知を実施しながら順次起動を進める。ここまでの起動で改ざんが検知されるとＳ５０３からＳ５０８に進みＣＰＵ１１０は、操作部１２０に図６のエラーコードを表示して、この処理を終了する。
【００５１】
Ｓ５０３でｓａｆｅファーム２１２の改ざんが検知されなければＳ５０４に進みＣＰＵ１１０は、バックグラウンドアップデートのフラグがＳＲＡＭ１１３にセットされているかどうか判定する。ここでフラグが立っていなければ、通常起動中に一時展開された新ファームウェアのデータは存在しないものと判断する。そして、その判断に基づいてＳ５０７でＣＰＵ１１０は、ｓａｆｅファーム２１２内のｓｔｄファームアップデート用プログラム２１９を実行して、ダウンロード領域２２２に格納されている新ｓｔｄファームを復号化し、ｓｔｄパーティション２０９に直接展開してｓｔｄファームをアップデートしてＳ５０５に進む。
【００５２】
一方、Ｓ５０４でバックグラウンドアップデートのフラグが立っていた場合はＳ５０５に進みＣＰＵ１１０は、アップデート前の旧ｓｔｄファーム２１１内のカーネル２１３と通常起動用プログラム２１５の改ざん検知を実施する。ここでｓｔｄファーム２１１が改ざんされていると判定すると、通常起動中に行われたＳ３０５での新ファームウェアのバックグラウンドでの復号化と一時展開処理が、不正なプログラムで実施された可能性がある。そのためＳ５０６に進みＣＰＵ１１０は、一時展開領域２２３に展開済の新ｓｔｄファームのデータを破棄してＳ５０７に進む。Ｓ５０７でＣＰＵ１１０は、改ざん検知で問題のなかったｓａｆｅファーム２１２のｓｔｄファームアップデート用プログラム２１９によって、ダウンロード領域２２２に格納されている新ｓｔｄファームを復号化し、ｓｔｄパーティション２０９に直接展開してアップデートする処理を実行してＳ３１１に進む。
【００５３】
またＳ５０５でＣＰＵ１１０は、ｓｔｄファーム２１１が改ざんされていないと判定すると、一時展開領域２２３に展開済の新ｓｔｄファームのデータは問題ないものとしてＳ３１０に進み、図３のバックグラウンドアップデートの処理を実施する。尚、セキュアブート設定時は、Ｓ３１１で新ｓｔｄファームによる起動を行う際にも改ざん検知の処理が行われるが、ここではその説明を省略する。
【００５４】
以上説明したように実施形態によれば、事前にバックグラウンドで新ファームの一時展開を実施した旧ｓｔｄファーム２１１の改ざん検知を、一時展開済の新ｓｔｄファームのデータの適用（アップデート）時に実施する。これにより、改ざんされた可能性のある不正なプログラムで一時展開されたデータによるアップデートを防止することできる。
【００５５】
上述の実施形態では、セキュアブート設定時のバックグラウンドアップデートにおいて、図５のＳ５０６のｓｔｄファーム２１１の改ざん検知の処理で、旧ｓｔｄファーム２１１に含まれる全てのプログラムの改ざん検知処理を実施していた。この改ざん検知処理は、改ざん検知対象となるファームウェアが大きくなるほど処理に時間を要するので、時間短縮のために、チェックが必要なプログラムに限定して改ざん検知処理を実施するようにしても良い。
【００５６】
例えば、バックグラウンドアップデートの場合、Ｓ５０６で、新ファームウェアの一時展開を行うファームウェアダウンロード用プログラム２２１、バックグラウンドアップデート用プログラム２２１に限定して改ざん検知処理を行うことで、改ざん検知にかかる時間を短縮することが可能になる。
【００５７】
また、改ざん検知処理に要する時間を短縮する方法として、事前にバックグラウンドで新ファームの一時展開を実施した旧ｓｔｄファーム２１１の改ざん検知処理を、一時展開済の新ｓｔｄファームのデータの適用（アップデート）直前に、バックグラウンドで実施することも考えられる。
【００５８】
図７は、本発明の他の実施形態に係る情報処理装置１００におけるセキュアブート設定時のバックグラウンドアップデート処理を説明するフローチャートである。ここでは、新ファームの一時展開を実施した旧ｓｔｄファーム２１１の改ざん検知処理をバックグラウンドで実施する場合の処理を示している。このフローチャートで示す処理は、ＣＰＵ１１０が、フラッシュメモリ１１９に記憶されているプログラムをＲＡＭ１１２に展開して実行することにより達成される。尚、図７は、前述の図５のＳ５０１からＳ３０８の間で実行される処理として説明する。従って、前述の図５と共通する処理は省略して示している。尚、このフローチャートで示す処理は、ＣＰＵ１１０が、フラッシュメモリ１１９に記憶されているプログラムをＲＡＭ１１２に展開して実行することにより達成される。
【００５９】
Ｓ３０６でＣＰＵ１１０は、適用時刻に達したかどうかを判定し、適用時刻に達していると判定した場合はＳ７０１に進む。Ｓ７０１でＣＰＵ１１０は、バックグラウンドでアップデート前の旧ｓｔｄファーム２１１内のカーネル２１３と通常起動用プログラム２１５の改ざん検知を実施する。ここで旧ｓｔｄファーム２１１が改ざんされていると判定すると、通常起動中に行われたＳ３０５における新ファームウェアのバックグラウンドでの復号化と一時展開処理が、不正なプログラムで実施された可能性がある。そのためＳ７０１からＳ７０２に進みＣＰＵ１１０は、Ｓ５０１でバックグラウンドアップデートを通知するフラグをＳＲＡＭ１１３にセットしていたフラグを落とす（オフにする）。そしてＳ７０３に進みＣＰＵ１１０は、一時展開領域２２３に展開済の新ｓｔｄファームのデータを破棄してＳ３０８に進む。
【００６０】
その後Ｓ３０９で再起動後した後、Ｓ５０４でバックグラウンドアップデートのフラグが立っていなければＳ５０７に進みＣＰＵ１１０は、改ざん検知で問題の無かったｓａｆｅファーム２１２のｓｔｄファームアップデート用プログラム２１９によって、ダウンロード領域２２２に格納されている新ｓｔｄファームを復号化し、ｓｔｄパーティション２０９に直接展開してアップデートする処理を実行する。
【００６１】
以上説明したように他の実施形態によれば、バックグラウンドで旧ｓｔｄファーム２１１の改ざん検知処理を実施することで、Ｓ３０９で再起動を指示してからＳ３１１においてアップデートされた新ｓｔｄファームによって起動するまでの、情報処理装置１００のアップデート適用によるダウンタイムを短縮できる。
【００６２】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００６３】
本発明は上記実施形態に制限されるものではなく、本発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、本発明の範囲を公にするために、以下の請求項を添付する。
【符号の説明】
【００６４】
１００…情報処理装置、１１０…ＣＰＵ、１１２…ＲＡＭ、１１９…フラッシュメモリ、１２０…操作部、１９０…ＬＥＤ、２０３…ブートプログラム、２０５…ＢＩＯＳ，２０７…ローダ、２１３…カーネル
【図１】
2020053002.tif 000003
【図２】
2020053002.tif 000004
【図３】
2020053002.tif 000005
【図４】
2020053002.tif 000006
【図５】
2020053002.tif 000007
【図６】
2020053002.tif 000008
【図７】
2020053002.tif 000009