JP2020187649A - 情報処理装置、制御方法、およびプログラム - Google Patents
情報処理装置、制御方法、およびプログラム Download PDFInfo
- Publication number
- JP2020187649A JP2020187649A JP2019093134A JP2019093134A JP2020187649A JP 2020187649 A JP2020187649 A JP 2020187649A JP 2019093134 A JP2019093134 A JP 2019093134A JP 2019093134 A JP2019093134 A JP 2019093134A JP 2020187649 A JP2020187649 A JP 2020187649A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- programs
- information processing
- program
- sub cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Accessory Devices And Overall Control Thereof (AREA)
- Facsimiles In General (AREA)
Abstract
【課題】複数のブートコードの改竄検知を行う情報処理装置のコストを低減する。【解決手段】情報処理装置(MFP1)は、コントローラ115、126と、プロセッサ101、124と、プロセッサ101、124が実行する複数のプログラムを格納する第1のメモリ112、127と、複数のプログラムのリカバリを行うためのデータを格納する第2のメモリ112と、を備える。コントローラ115、126は、第1のメモリ112、127から複数のプログラムを読み出し、読み出した複数のプログラムの正当性を検証し、複数のプログラムの少なくともいずれかの正当性が確認できなかった場合に、第2のメモリ112に格納されたデータに基づいて、1つの第1のメモリに格納された、正当性が確認できなかったプログラムをリカバリする。【選択図】図1
Description
本発明は、プロセッサが実行するプログラムの正当性を検証する情報処理装置、制御方法、およびプログラムに関する。
従来の画像処理装置(MFP)におけるブートコードの改竄検知方法において、メインCPUが実行するブートコードをメインCPUが起動する前にコントローラが読み出し、コントローラは読み出したブートコードが改竄されていないかを検証する。また、コントローラは読み出したブートコードの改竄を検知した場合、リカバリ用のブートコードをコピーして復旧する、あるいは、メインCPUの動作を停止する方法がある。
例えば、特許文献1には、第一のブートイメージを検証し、改竄を検知した場合、第二のブートイメージを使用し、使用不可能な場合、第三のブートイメージを実行する制御例が示されている。
画像処理装置などの情報処理装置は、メインCPUの他に、別の機能手段を備える場合があり、前記機能手段は、メインCPUとは別のCPUで動作する場合がある。このような場合、それぞれのブートコードの改竄検知処理を行う必要がある。すなわち、メインCPUまたは別のCPUのブートコードが改竄または故障している場合、別のFLASH ROMから起動する、またはリカバリ用のFLASH ROMからデータをコピーする。このため、メインCPUおよび別のCPUのそれぞれにデフォルトのFLASH ROMと、リカバリ用のFLASH ROMとが必要となるため、FLASH ROMが各所に2重に必要となりコストがかさむ課題があった。
本発明は、上述の問題に鑑みて成されたものであり、複数のブートコードの改竄検知を行う情報処理装置のコストを低減することを目的とする。
本発明は、例えば情報処理装置であって、少なくとも1つのコントローラと、複数のプロセッサと、前記複数のプロセッサが実行する複数のプログラムを格納する少なくとも1つの第1のメモリと、前記複数のプログラムのリカバリを行うためのデータを格納する1つの第2のメモリと、を備え、前記少なくとも1つのコントローラは、前記少なくとも1つの第1のメモリから前記複数のプログラムを読み出す読出手段と、前記読出手段で読み出した前記複数のプログラムの正当性を検証する検証手段と、前記検証手段が前記複数のプログラムの少なくともいずれかの正当性が確認できなかった場合に、前記第2のメモリに格納された前記データに基づいて、前記少なくとも1つの第1のメモリに格納された、正当性が確認できなかったプログラムをリカバリするリカバリ手段と、を備えることを特徴とする。
本発明によれば、複数のブートコードの改竄検知を行う情報処理装置のコストを低減することができる。
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものではなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
<第1の実施形態>
以下、本実施形態に係るブートコードの改竄検知処理を実行する情報処理装置(MFP)について説明する。なお、特に断らない限り、本実施形態に係る機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、本発明を適用できることは言うまでもない。
以下、本実施形態に係るブートコードの改竄検知処理を実行する情報処理装置(MFP)について説明する。なお、特に断らない限り、本実施形態に係る機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、本発明を適用できることは言うまでもない。
図1は、本実施形態に係るMFP1の構成を表す図である。図1において、MFP1はメインCPU(Central Processing Unit)101、DRAM(Dynamic Random Access Memory)102、およびネットワークI/F(インタフェース)104を備える。また、MFP1は操作部103、プリンタ部105、スキャナ部106、FAX107、画像処理部111、および電源処理部118を備える。
メインCPU101は、MFP1全体の制御を司るプロセッサである。DRAM102は、メインCPU101で実行されるプログラムを格納すると共に一時的なデータのワークエリアとして機能する。操作部103は、ユーザ操作を受付け、操作部I/F113を介してメインCPU101に受け付けたユーザ操作を通知する。ネットワークI/F104は、有線接続または無線接続を介してLAN130と接続して外部機器と通信を行う。プリンタ部105は、画像データを紙面上に印字する。スキャナ部106は、紙面上の画像を光学的に読み取り電気信号に変換してスキャン画像を生成する。FAX107は、公衆回線110と接続して外部機器とファクシミリ通信を行う。信号バス109は、各モジュールを相互に接続し、通信を可能にする。
公衆回線110は、FAX107と外部機器を相互接続する。画像処理部111は、ネットワークI/F104で受信したプリントジョブをプリンタ部105で印刷するのに適した画像への変換処理、スキャナ部106で読み取ったスキャン画像のノイズ除去や色空間変換、回転、圧縮等の処理を実行する。また、HDD(Hard Disk Drive)125に保管されたスキャン画像の画像処理を実行する。
電源制御部118は、MFP1内の各モジュールの電力供給を制御する。電源線119は、電源制御部118から各モジュールに電力を供給する。電源供給線120は、電源制御部118から商業用AC電源が供給される。
また、図1で、MFP1は、リセット回路122、HDD制御部124、HDD125、サブCPU115、サブCPU2 126、FLASH ROM(FLASH Read Only Memory)112、およびFLASH ROM2 127を備える。
リセット回路122は、システムの電源がONされると所定の遅延時間後にサブCPUへのリセット信号123を「Lo」レベルから「Hi」レベルに遷移する。サブCPUリセット信号123は、リセット回路122から出力されてサブCPU115のリセット端子に接続される。サブCPUリセット信号123が「Hi」レベルになると、サブCPU115はリセットが解除されて起動を開始する。すなわち、リセット回路122は、起動時に後述する改竄検知処理を実行させるトリガとなるリセット信号123をサブCPU115およびサブCPU2 126に送信する。サブCPU115はメインCPU101が実行するブートコード(プログラム)の正当性を検証するためのコントローラである。サブCPU2 126は、HDD制御部124が実行するブートコード(プログラム)の正当性を検証するためのコントローラである。すなわち、サブCPUは、複数のCPUのそれぞれに対して個別に設けられる。
HDD125は、HDD制御部124を介してメインCPU101で実行されるプログラムを格納すると共にプリントジョブやスキャンジョブ等のスプール領域としても利用される。また、スキャン画像を保管し再利用するための領域としても利用される。HDD制御部124は、HDD125のデータ入出力を制御する。
FLASH ROM112は、メインCPU101で実行されるブートコードを含むプログラムを格納すると共にMFP1のデフォルト設定値を記憶するための記憶部(メモリ)である。FLASH ROM127は、HDD制御部124で実行されるブートコードを含むプログラムを格納するための記憶部(メモリ)である。すなわち、FLASH ROMは、複数のCPUのそれぞれに対して個別に設けられる。一例では、FLASH ROM112に格納されたデータは、暗号化されている。操作部I/F113は、操作部103と信号バス109を相互接続する。Serial Peripheral Interface(SPI)バス114は、メインCPU101、FLASH ROM112、サブCPU115を相互接続する。
サブCPU115は、MFP1の起動時に、メインCPU101が起動する前にFLASH ROM112からブートコードを読み出して、正当性を検証する。すなわち、改竄がされていないか、FLASH ROM112の故障などによりデータの変化が発生していないかを検証する。改竄の検知方法としては、例えばブートコードのデジタル署名の公開鍵情報(ハッシュ値を公開鍵暗号化した値)を製造時にサブCPU115内のOTP(One Time Program)304領域に記憶させておく。そして、読み出したブートコードをこの公開鍵情報で復号化して検証を行う。公開鍵暗号の方法としてはRSA2048、ECDSA(Elliptic Curve Digital Signature Algorithm)などを含む。リセット信号117は、サブCPU115のGPIOポートから出力されてメインCPU101のリセット端子に接続される。
サブCPU2 126は、MFP1の起動時に、HDD制御部124が起動する前にFLASH ROM2 127からブートコードを読み出して、正当性を検証する。すなわち、改竄がされていないか、FLASH ROM2 127の故障などによりデータの損失が発生していないかを検証する。改竄の検知方法としては、例えばブートコードのデジタル署名の公開鍵情報(ハッシュ値を公開鍵暗号化した値)を製造時にサブCPU115内のOTP(One Time Program)領域に記憶させておく。そして、読み出したブートコードをこの公開鍵情報で復号化して検証を行う。公開鍵暗号の方法としてはRSA2048、ECDSA(Elliptic Curve Digital Signature Algorithm)などを含む。リセット信号129は、サブCPU2 126のGPIOポートから出力されてHDD制御部124のリセット処理用に接続される。
次に、図2を参照してメインCPU101の構成を説明する。図2において、メインCPU101は、CPUコア201、SPI Master202を備える。CPUコア201は、CPUの基本機能を担っている。SPI Master202は、外部のSPIデバイスと相互に接続してデータの読み書きを行う。
また、メインCPU101は、外部のSPIデバイスと電気的に接続するためにSPIバス206を備える。信号バス209は、メインCPU101内の各モジュールを接続する。「Lo」レベルのリセット信号117が入力された場合、メインCPU101はリセット状態に遷移する。「Hi」レベルのリセット信号117が入力された場合、メインCPU101はリセット解除状態に遷移する。リセット信号117がリセット状態からリセット解除状態に遷移すると、CPUコア201は先ず、FLASH ROM112内に記憶されているメインCPU BIOS501をDRAM102にロードして実行する。
次に、図3を参照してサブCPU115の構成を説明する。図3において、サブCPU115はCPUコア301、SPI Master302、GPIO(General−purpose input/output)303、およびOTP(One Time Programmable)を備える。また、サブCPU115はSRAM305、暗号処理部308、Boot ROM(Read Only Memory)310、およびCrypto RAM311を備える。サブCPU115内のモジュールは、信号バス309によって通信可能に接続される。
CPUコア301は、サブCPU115の基本機能を担っている。SPI Master302は、外部のSPIデバイスと相互に接続してデータの読み書きを行う。本実施形態において、サブCPU115のSPI Master302はバス114およびバス128に接続する。GPIO303は、外部のデバイスと相互に接続してデータの送受信を行う。サブCPU115のGPIO303は、メインCPU101にリセット信号117を送信する。OTPメモリ領域304は、製造時にサブCPU FW(Firmware)のハッシュ値を公開鍵暗号化した値およびTagのアドレスが書き込まれる。この領域に書き込まれたデータは一度書き込まれると二度と書換えることはできない。
SRAM305は、サブCPU115内のワークメモリとして使用される。暗号処理部308は、公開鍵暗号化した値からサブCPU FWのハッシュ値を復号するほか、公開鍵暗号化したメインCPU BIOSのハッシュ値を復号する。Boot ROM310は、サブCPU115のブートコードを記憶する。
GPIO303が出力するリセット信号117が「Lo」レベルの場合、メインCPU101はリセット状態となり、リセット信号117が「Hi」レベルの場合、メインCPU101はリセット解除状態となる。リセット信号117がリセット状態からリセット解除状態に遷移すると、CPUコア301は先ず、Boot ROM310から自身のブートコードを読み出し実行する。Crypto RAM311は、暗号処理部308で利用する機密性の高いデータ等を記憶する。
なお、サブCPU2 126も、サブCPU115と同様の構成を備える。サブCPU2 126のGPIOは、HDD制御部124にリセット信号129を送信する。また、サブCPU2 126のSPI Masterはバス128に接続する。
次に、図4を参照してHDD制御部124およびHDD125の構成を説明する。図4において、HDD制御部124はCPUコア401、SPI Master402、HDD転送制御部1 403、およびHDD転送制御部2 404を備える。HDD制御部124内のモジュールは、内部データバス407によって通信可能に接続される。
CPUコア401は、HDD制御部124を制御するためのCPUの基本機能を担っている。SPI Master402は、外部のSPIデバイスと相互に接続してデータの読み書きを行う。
HDD転送制御部1 403のおよびHDD転送制御部2 404は、CPUコア401の命令により、HDD125の読み書き処理の制御を行う。HDD125の読み出し動作の場合、CPUコア401はHDD転送制御部2 404にHDDの読み出しを設定する。そして、設定されたデータをHDD転送制御部2 404がHDDから読み出し、SATAインタフェースバス408を経由してCPUコア401に送信する。そして、HDD転送制御部2 404、HDD制御部124の内部データバス407、およびHDD転送制御部1 403を経由して、データバス405を介してDRAM102に書き込む動作を行う。
また、HDD125の書き込み動作の場合、CPUコア401はHDD転送制御部2 404にHDD125の書き込みを設定する。その後、データバス405から転送されたデータをHDD転送制御部1 403、HDD制御部124の内部データバス407、HDD転送制御部2 404、およびSATAインタフェースバス408を経由して、HDD125へ書き込み動作を実行する。SPIバス406は、外部のSPIデバイスと電気的に接続する。
CPUコア401に入力されるリセット信号129が「Lo」レベルである場合、HDD制御部124はリセット状態となり、リセット信号129が「Hi」レベルである場合、HDD制御部124はリセット解除状態となる。リセット信号129がリセット状態からリセット解除状態に遷移すると、CPUコア401は先ず、FLASH ROM2 127内に記憶されているHDD制御部CPU BIOSをSPI Master402にロードして実行する。
次に、図5を参照してFLASH ROM112のメモリマップの一例を説明する。図5において、FLASH ROM112のメモリマップは、メインCPU BIOS501、メインCPU BIOS署名502、Tag503、サブCPU FW504、FW署名505、およびROM−ID506を含む。また、FLASH ROM112のメモリマップは、Tag0 507、Tag1 508、リカバリブートコード0 509、およびリカバリブートコード1 510を含む。
メインCPU BIOS501には、メインCPU101で実行されるコードが記憶される。BIOS署名502には、メインCPU BIOSのハッシュ値に対するRSA署名値が格納される。Tag503は、サブCPU FW504の先頭アドレスが記憶されている。Tag503自体のアドレスはOTP304に記憶されている。
サブCPU FW504には、サブCPU115で実行されるコードが記憶されている。FW署名505には、サブCPU FW504、またはサブCPU FW504の先頭の特定部分のECDSA署名値が記憶されている。ROM−ID506は、メインCPU BIOS501の先頭アドレス、サイズおよびメインCPU BIOS署名502のアドレスが記憶されている。
Tag0 507には、リカバリブートコード0 509の先頭アドレスが記憶されている。Tag0 507自体のアドレスはOTP304に記憶されている。Tag1 508には、リカバリブートコード1 510の先頭アドレスが記憶されている。Tag1 508自体のアドレスはOTP304に記憶されている。
次に、図13を参照してFLASH ROM2 127のメモリマップの一例を説明する。図13において、FLASH ROM2 127のメモリマップは、HDD制御部CPU BIOS1301、HDD制御部CPU署名1302、Tag1303、サブCPU FW1304、FW署名1305、およびROM−ID1306を含む。
HDD制御部CPU BIOS1301は、HDD制御部124のCPUコア401によって実行されるコードが記憶される。HDD制御部CPU署名1302には、HDD制御部CPU BIOSのハッシュ値に対するRSA署名値が格納される。Tag1303には、サブCPU FW1304の先頭アドレスが記憶されている。
サブCPU FW1304には、サブCPU2 126によって実行されるコードが記憶されている。FW署名1305には、サブCPU FW1304の先頭の特定部分のECDSA署名値が記憶されている。ROM−ID1306は、HDD制御部CPU BIOS1301の先頭アドレス、サイズおよびHDD制御部CPU署名1302のアドレスが記憶されている。
次に、本実施形態におけるサブCPU115の処理手順を図6のフローチャートを用いて説明する。図6の処理は、MFP1の電源投入時にサブCPU115によって実行される。
まず、S601で、サブCPU115は起動すると直ちにBoot ROM310内のコードを実行し、SPIバス114を介してFLASH ROM112からサブCPU FW504をSRAM305に読み込む。続いて、サブCPU115は処理をS602に進め、暗号処理部308によってFW署名505をOTP304内の公開鍵で復号化して、正解となるハッシュ値を得る。続いてサブCPU 115は処理をS603に進め、暗号処理部308によってサブCPU FW504のハッシュ値を計算する。次にサブCPU115は処理をS604に進め、S602で取得したハッシュ値とS603で計算したハッシュ値を比較し、不一致の場合(S604でNO)は処理を終了する。S602のハッシュ値とS603のハッシュ値とが一致した場合(S604でYES)、サブCPU115は処理をS605に進め、サブCPU FW504をSRAM305に読み込み、サブCPU115はサブCPU FW504を実行する。
次にサブCPU115は処理をS606に進め、ROM−ID506をFLASH ROM112からCrypto RAM311に読み込む。続いてサブCPU115は処理をS607に進め、ROM−ID506からメインCPU BIOS501のアドレスとメインCPU BIOS署名502のアドレスとを得る。次にサブCPU115は処理をS608に進め、メインCPU BIOS署名502をSRAM305に読み込む。続いてサブCPU115は処理をS609に進め、暗号処理部308によってメインCPU BIOS署名502をサブCPU FW504に付属している公開鍵で復号化してハッシュ値を得る。
次にサブCPU115は処理をS610に進め、メインCPU BIOS501をSRAM305に読み込む。次にサブCPU115はS611に進め、暗号処理部308によってメインCPU BIOS501のハッシュ値を計算する。そして、サブCPU115はS612に処理を進め、S609のハッシュ値とS611のハッシュ値とを比較する。S609のハッシュ値とS611のハッシュ値とが一致する場合(S612でYES)、サブCPU115は処理をS618に進める。また、S609のハッシュ値とS611のハッシュ値とが不一致の場合(S612でNO)、サブCPU115は処理をS613に進め、OTP304のリカバリ用Tagを取得する。すなわち、サブCPU115は、S613において、S611で計算したハッシュ値がS609のハッシュ値と一致しないため、メインCPU BIOS501に改竄またはデータの破損が発生したと判定し、リカバリ用Tag0 507を取得する。リカバリ用Tag0 507にはリカバリブートコード0 509の先頭アドレスが記憶されている。
続いて、サブCPU115は処理をS614に進め、再度、暗号処理部308によってメインCPU BIOS署名502をサブCPU FW504に付属している公開鍵で復号化してハッシュ値を得る。次にサブCPU115は処理をS615に進め、リカバリブートコード0 509をSRAM305に読み込む。なお、一例では、S615においてサブCPU115はリカバリブートコード0 509でメインCPU BIOSを上書きすることでメインCPU BIOSのリカバリを行ってもよい。
次にサブCPU115は処理をS616に進め、暗号処理部308によってリカバリブートコード0 509のハッシュ値を計算する。そして、サブCPU115は処理をS617に進め、S614のハッシュ値とS616のハッシュ値とを比較する。S614のハッシュ値とS616のハッシュ値とが一致した場合(S617でYES)は、サブCPU115は処理をS618に進めてGPIO303を制御して「Hi」レベルのリセット信号117を出力する。S614のハッシュ値とS616のハッシュ値とが一致しない場合(S617でNO)、サブCPU115は図6の処理を終了する。
次に、サブCPU2 126の処理手順を図12のフローチャートを用いて説明する。図12の処理は、サブCPU2 126が「Hi」レベルのサブCPUリセット信号123を入力された場合に実行される。
まず、S1201において、サブCPU2 126はHDD制御部CPU BIOS署名1302をFLASH ROM2 127から取得する。続いて、サブCPU2 126はS1202に処理を進め、HDD制御部CPU BIOS署名1302をSRAM305に読み込む。続いてサブCPU2 126は処理をS1203に進め、暗号処理部308によってHDD制御部CPU BIOS署名1302をサブCPU FW1304に付属している公開鍵で復号化してハッシュ値を得る。次にサブCPU2 126は処理をS1204に進め、HDD制御部CPU BIOS1301をSRAM305に読み込む。
次にサブCPU2 126は処理をS1205に進め、暗号処理部308によってHDD制御部CPU BIOS1301のハッシュ値を計算する。そして、サブCPU2 126は処理をS1206に進め、S1203のハッシュ値とS1205のハッシュ値とを比較する。S1203のハッシュ値とS1205のハッシュ値とが不一致の場合(S1206でNO)、サブCPU2 126は、処理をS1207に進めてOTP304のリカバリ用Tag1を取得する。すなわち、S1203のハッシュ値とS1205のハッシュ値とが一致しないため、サブCPU2 126はS1207でHDD制御部CPU BIOS1301に改竄または故障が発生したと判定し、リカバリ用Tag1 508を取得する。リカバリ用Tag1 508にはHDD制御部CPU BIOS1301のリカバリ用のリカバリブートコード1 510の先頭アドレスが記憶されている。
ここで、サブCPU2 126は、HDD制御部CPU BIOS1301に対応するリカバリブートコード1 510を、Inter−Integrated Circuit(I2C)バス128を経由して、FLASH ROM112から取得する。ここで、サブCPU2 126は、不図示のバスによってFLASH ROM112に接続されてもよいし、サブCPU115を介してFLASH ROM112にアクセスしてもよい。そして、サブCPU2 126はS1208に進め、FLASH ROM2 127への上書きによる書き換えを行うことでHDD制御部CPU BIOS1301のリカバリを行う。続いて、サブCPU2 126は処理をS1209に進め、書き換えの完了を確認する。書き換えが完了していない場合は(S1209でNO)、処理をS1208に戻す。一方、書き換えが完了した場合(S1209でYES)は、処理をS1210に進め、暗号処理部308によって署名をサブCPU FW1304に付属している公開鍵で復号化してハッシュ値を得る。
続いて、サブCPU2 126は処理をS1211に進め、FLASH ROM2 127から書き換え後のHDD制御部CPU BIOS1301をSRAM305に読み込む。次にサブCPU2 126は処理をS1212に進め、暗号処理部308によって書き換え後の、HDD制御部CPU BIOS1301のハッシュ値を計算する。そして、サブCPU2 126は処理をS1213に進め、S1210のハッシュ値とS1212のハッシュ値とを比較する。S1210のハッシュ値とS1212のハッシュ値とが一致した場合(S1213でYES)、サブCPU2 126は処理をS1214に進め、GPIO303を制御して「Hi」レベルのリセット信号129を出力する。S1210のハッシュ値とS1212のハッシュ値とが一致しない場合は図12の処理を終了する。
以上説明した様に、本実施形態に係るMFP1は、メインCPU101およびHDD制御部124の構成となるCPUコア401において、起動時に各々のROMのブートコードおよびシステムファームウェアの改竄検知を行う。これによって、検証が不一致の場合、各々のROMのリカバリ用のデータを1つのFLASH ROM112に配置することが可能となる。これにより、1つのFLASH ROMから各領域のリカバリを実行することが可能となり、コストを安価に製造し、かつ、システムのセキュリティを確保することが可能となる。
なお、本実施形態では、正当性が確認できなかった場合に、サブCPUがリカバリブートコードで起動用のプログラムを上書きするものとして説明を行ったが、サブCPUはリカバリブートコードに基づいて誤り訂正を行い、ブートコードの修復を行ってもよい。
<第2の実施形態>
第2の実施形態では、複数のCPUのための複数のブートコードのリカバリ用データを格納する1つのFLASH ROMを、複数のCPUのための複数のブートコードを格納するFLASH ROMとは別個のROMとして備えるMFPについて説明する。なお、特に断らない限り、本実施形態に係る機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、本発明を適用できることは言うまでもない。また、第1の実施形態と同様の構成または処理には同一の参照符号を付し、説明は省略する。
第2の実施形態では、複数のCPUのための複数のブートコードのリカバリ用データを格納する1つのFLASH ROMを、複数のCPUのための複数のブートコードを格納するFLASH ROMとは別個のROMとして備えるMFPについて説明する。なお、特に断らない限り、本実施形態に係る機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、本発明を適用できることは言うまでもない。また、第1の実施形態と同様の構成または処理には同一の参照符号を付し、説明は省略する。
図7は、本実施形態に係るMFP1001の構成を表す図である。図7において、MFP1001は、SPIバス114に接続されたリカバリ用FLASH ROM(FLASH Read Only Memory)131を備える。FLASH ROM131は、メインCPU101およびHDD制御部124の構成となるCPUコア401で実行されるブートコードを含むプログラムのリカバリデータを格納すると共にMFP1のデフォルト設定値を記憶する。
図8は、リカバリ用FLASH ROM 131のメモリマップを示す図である。図8において、リカバリ用FLASH ROM 131のメモリマップは、Tag0 801、Tag1 802、リカバリブートコード0 803、およびリカバリブートコード1 804を含む。
Tag0 801には、リカバリブートコード0 803の先頭アドレスが記憶されている。Tag1 802には、リカバリブートコード1 804の先頭アドレスが記憶されている。リカバリブートコード0 803には、メインCPU101で実行されるコードが記憶されている。リカバリブートコード1 804には、HDD制御部124におけるCPUコア401で実行されるコードが記憶されている。
次に、本実施形態におけるサブCPU115およびサブCPU2 126の処理手順を図9のフローチャートを用いて説明する。図9のフローチャートは、MFP1001の電源投入時に、サブCPU2 126によって実行される。
まず、サブCPU2 126は起動するとS901でBoot ROM310内のコードを実行し、SPIバス128を介してFLASH ROM2 127からサブCPU FW1104をSRAM305に読み込む。次にサブCPU2 126は処理をS902に進め、暗号処理部308によってFW署名1105をOTP304内の公開鍵で復号化して、ハッシュ値を得る。続いてサブCPU2 126は処理をS903に進め、暗号処理部308によってサブCPU FW1104のハッシュ値を計算する。次にサブCPU2 126は処理をS904に進め、S902において復号化で得られたハッシュ値と、S903において計算したハッシュ値を比較する。S902のハッシュ値とS903のハッシュ値とが一致する場合(S904でYES)は処理をS910に進める。
S902のハッシュ値とS903のハッシュ値とが不一致の場合(S904でNO)はS905に処理を進め、OTP304のリカバリ用TAGを取得する。すなわち、S902のハッシュ値とS903のハッシュ値とが一致しないため、サブCPU2 126はサブCPU FWに改竄または故障が発生したと判定し、リカバリ用Tag1 507を取得する。リカバリ用Tag1 508にはリカバリブートコード1 510の先頭アドレスが記憶されている。
続いて、サブCPU2 126は処理をS906に進め、再度、暗号処理部308によって署名をサブCPU FW504に付属している公開鍵で復号化してハッシュ値を得る。次にサブCPU2 126は処理をS907に進め、リカバリ用FLASH ROM131からリカバリブートコード1 510をSRAM305に読み込む。次に、サブCPU2 126は処理をS908に進め、サブCPU2 126の暗号処理部308によってリカバリブートコード1 510のハッシュ値を計算する。そして、サブCPU2 126は処理をS909に進め、S906のハッシュ値とS908のハッシュ値とを比較する。S906のハッシュ値とS908のハッシュ値とが一致しない場合(S909でNO)は図9の処理を終了する。S906のハッシュ値とS908のハッシュ値とが一致する場合(S909でYES)は、サブCPU2 126は処理をS910に進め、GPIO303を制御して「Hi」レベルのリセット信号129を出力する。
以上説明した様に、本実施形態に係るMFP1001は、メインCPU101およびHDD制御部124の構成となるCPUコア401において、各々のROMのブートコードの改竄検知を行う。これによって、検証が不一致の場合、ブートコードのリカバリ処理を行うROMとして、FLASH ROM131を構成することも可能となる。
<第3の実施形態>
第3の実施形態では、複数のCPUのための複数のブートコードを格納するFLASH ROMと、複数のブートコードの正当性を検証するコントローラとの間のインタフェースに応じてリカバリ用データのプロトコル変換を行うMFPについて説明する。なお、特に断らない限り、本発明の機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、本発明を適用できることは言うまでもない。また、第1または第2の実施形態と同様の構成または処理には同一の参照符号を付し、説明は省略する。
第3の実施形態では、複数のCPUのための複数のブートコードを格納するFLASH ROMと、複数のブートコードの正当性を検証するコントローラとの間のインタフェースに応じてリカバリ用データのプロトコル変換を行うMFPについて説明する。なお、特に断らない限り、本発明の機能が実行されるのであれば、単体の機器であっても、複数の機器からなるシステムであっても、本発明を適用できることは言うまでもない。また、第1または第2の実施形態と同様の構成または処理には同一の参照符号を付し、説明は省略する。
本実施形態ではメインCPU101およびHDD制御部124のCPUコア401において、各々のROMのブートコードを検証するサブCPU115とサブCPU2 126の接続インタフェースが異なる場合の処理について説明する。
まず、図10を参照して、本実施形態に係るMFP1101の構成例を説明する。MFP1101は、SPIバス114に接続されたリカバリ用FLASH ROM131を備える。また、サブCPU115は、SPIバスと異なるI2Cバス132に接続し、プロトコル変換を行う。I2Cバス132を介して、サブCPU2 126、FLASH ROM2 127、HDD制御部124の構成となるCPUコア401を相互接続する構成を備える。
図11は、電源投入時にサブCPU2 126によって実行される処理手順の一例を示す。
まず、サブCPU2 126は起動するとS1101でBoot ROM310内のコードを実行し、I2Cバス132を介してFLASH ROM2 127からサブCPU FW1104をSRAM305に読み込む。次にサブCPU2 126は処理をS1102に進め暗号処理部308によってFW署名1105をOTP304内の公開鍵で復号化して、正解となるハッシュ値を得る。続いてサブCPU2 126は処理をS1103に進め、暗号処理部308によってサブCPU FW1104のハッシュ値を計算する。次にサブCPU2 126は処理をS1104に進め、S1102において復号化で得られたハッシュ値とS1103において計算したハッシュ値とを比較する。S1102のハッシュ値とS1103のハッシュ値とが一致する場合(S1104でYES)はサブCPU2 126は処理をS1111に進める。S1102のハッシュ値とS1103のハッシュ値とが不一致の場合(S1104でNO)はS1105に処理を進め、OTP304のリカバリ用TAGを取得する。リカバリ用Tag1 508にはリカバリブートコード1 510の先頭アドレスが記憶されている。
続いて、サブCPU2 126は処理をS1106に処理を進め、再度、暗号処理部308によって署名をサブCPU FW504に付属している公開鍵で復号化してハッシュ値を得る。次にサブCPU115はS1107に処理を進め、リカバリブートコード1 510のインタフェース変換を行い、SPIからI2Cのインタフェース変換を行い、サブCPU2 126にリカバリブートコード1 510を送信する。次にサブCPU2 126は処理をS1108に進め、リカバリブートコード1 510をSRAM305に上書きする。次にサブCPU2 126は処理をS1109に進め、暗号処理部308によってリカバリブートコード1 510のハッシュ値を計算する。そして、サブCPU2 126は処理をS1110に進め、S1106のハッシュ値とS1109のハッシュ値とを比較する。S1106のハッシュ値とS1109のハッシュ値とが一致した場合(S1110でYES)はサブCPU2 126は処理をS1111に進め、GPIO303を制御して「Hi」レベルのリセット信号129を出力する。
以上説明した様に、本実施形態に係るMFP1101は、メインCPU101およびHDD制御部124のCPUコア401において、各々のROMのブートコードの改竄検知を行う。また、検証が不一致におけるブートコードのリカバリ処理において、サブCPU115と各々のFLASH ROMとの間の接続インタフェースにおいて、異なるプロトコルの場合もインタフェース変換を行う。これによって、異なるプロトコルを用いるFLASH ROMを用いたリカバリ対応処理が可能となる。
<その他の実施形態>
上述の各実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読み出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
上述の各実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読み出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
1:MFP、101:メインCPU、112:FLASH ROM、115:サブCPU、117:リセット信号
Claims (17)
- 情報処理装置であって、
少なくとも1つのコントローラと、複数のプロセッサと、前記複数のプロセッサが実行する複数のプログラムを格納する少なくとも1つの第1のメモリと、前記複数のプログラムのリカバリを行うためのデータを格納する1つの第2のメモリと、を備え、
前記少なくとも1つのコントローラは、
前記少なくとも1つの第1のメモリから前記複数のプログラムを読み出す読出手段と、
前記読出手段で読み出した前記複数のプログラムの正当性を検証する検証手段と、
前記検証手段が前記複数のプログラムの少なくともいずれかの正当性が確認できなかった場合に、前記第2のメモリに格納された前記データに基づいて、前記少なくとも1つの第1のメモリに格納された、正当性が確認できなかったプログラムをリカバリするリカバリ手段と、
を備えることを特徴とする情報処理装置。 - 前記少なくとも1つの第1のメモリのいずれかは、前記少なくとも1つのコントローラがロードして実行することで、前記読出手段、前記検証手段、および前記リカバリ手段の少なくともいずれかとして機能させるためのプログラムをさらに格納することを特徴とする請求項1に記載の情報処理装置。
- 前記少なくとも1つの第1のメモリのうちのいずれかが、前記第2のメモリとして機能することを特徴とする請求項1または2に記載の情報処理装置。
- 前記リカバリ手段は、前記第2のメモリに格納された前記データに基づいて、前記正当性が確認できなかったプログラムをリカバリする場合に、前記少なくとも1つの第1のメモリと前記少なくとも1つのコントローラとの間のインタフェースに応じてプロトコル変換を行うことを特徴とする請求項1から3の何れか1項に記載の情報処理装置。
- 前記インタフェースは、Inter−Integrated Circuit(I2C)プロトコルまたはSerial Peripheral Interface(SPI)プロトコルであることを特徴とする請求項4に記載の情報処理装置。
- 前記少なくとも1つのコントローラは、
前記検証手段が前記複数のプログラムの少なくともいずれかの正当性が確認できた場合に、正当性が確認できたプログラムに対応するプロセッサに、前記正当性が確認できたプログラムのロードを促すリセット信号を送信するリセット手段を有することを特徴とする請求項1から5のいずれか1項に記載の情報処理装置。 - 前記検証手段は、プログラムの署名から取得したハッシュ値と、前記プログラムに基づいて計算したハッシュ値とを比較することで前記プログラムの正当性を検証することを特徴とする請求項1から6のいずれか1項に記載の情報処理装置。
- 前記検証手段は、前記プログラムの署名をRSA2048またはElliptic Curve Digital Signature Algorithm(ECDSA)を用いて復号化することで前記署名から前記ハッシュ値を取得することを特徴とする請求項7に記載の情報処理装置。
- 前記複数のプロセッサのそれぞれに対応する個別の第1のメモリが設けられることを特徴とする請求項1から8のいずれか1項に記載の情報処理装置。
- 前記複数のプロセッサのそれぞれに対応する個別のコントローラが設けられることを特徴とする請求項1から9のいずれか1項に記載の情報処理装置。
- 前記リカバリ手段は、前記データで前記正当性が確認できなかったプログラムを上書きすることでリカバリを行うことを特徴とする請求項1から10のいずれか1項に記載の情報処理装置。
- 情報処理装置であって、
前記情報処理装置の全体を制御する第1のプロセッサと、
前記第1のプロセッサが実行する第1のプログラムを格納する第1のメモリと、
記憶部のデータ入出力を制御する第2のプロセッサと、
前記第2のプロセッサが実行する第2のプログラムを格納する第2のメモリと、
コントローラと、
前記第1および第2のプログラムのリカバリを行うためのデータを格納する第3のメモリと、
を備え、
前記コントローラは、
前記第1および第2のメモリから前記第1および第2のプログラムを読み出す読出手段と、
前記読出手段で読み出した前記第1および第2のプログラムの正当性を検証する検証手段と、
前記検証手段が前記第1および第2のプログラムの少なくともいずれかの正当性が確認できなかった場合に、前記第3のメモリに格納された前記データに基づいて、前記第1および第2のプログラムの少なくともいずれかに格納された、正当性が確認できなかったプログラムをリカバリするリカバリ手段と、
を有することを特徴とする情報処理装置。 - 前記第3のメモリは、前記コントローラがロードして実行することで、前記読出手段、前記検証手段、および前記リカバリ手段の少なくともいずれかとして機能させるためのプログラムをさらに格納することを特徴とする請求項12に記載の情報処理装置。
- 情報処理装置の制御方法であって、
複数のプロセッサが実行する複数のプログラムを格納する少なくとも1つの第1のメモリから前記複数のプログラムをロードするロード工程と、
前記ロード工程において読み出した前記複数のプログラムの正当性を検証する検証工程と、
前記検証工程において前記複数のプログラムの少なくともいずれかの正当性が確認できなかった場合に、前記複数のプログラムのリカバリを行うためのデータを格納する1つの第2のメモリに格納された前記データに基づいて、前記少なくとも1つの第1のメモリに格納された、正当性が確認できなかったプログラムをリカバリするリカバリ工程と、
を含むことを特徴とする制御方法。 - 情報処理装置の全体を制御する第1のプロセッサと、
前記第1のプロセッサが実行する第1のプログラムを格納する第1のメモリと、
記憶部のデータ入出力を制御する第2のプロセッサと、
前記第2のプロセッサが実行する第2のプログラムを格納する第2のメモリと、
コントローラと、
前記第1および第2のプログラムのリカバリを行うためのデータを格納する第3のメモリと、
を備える情報処理装置の制御方法であって、
前記第1および第2のメモリから前記第1および第2のプログラムを読み出す読出工程と、
前記読出工程において読み出した前記第1および第2のプログラムの正当性を検証する検証工程と、
前記検証工程において前記第1および第2のプログラムの少なくともいずれかの正当性が確認できなかった場合に、前記第3のメモリに格納された前記データに基づいて、前記第1および第2のプログラムの少なくともいずれかに格納された、正当性が確認できなかったプログラムをリカバリするリカバリ工程と、
を含むことを特徴とする制御方法。 - コンピュータを請求項1から11のいずれか1項に記載の情報処理装置として動作させるためのプログラム。
- コンピュータを請求項12または13に記載の情報処理装置として動作させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019093134A JP2020187649A (ja) | 2019-05-16 | 2019-05-16 | 情報処理装置、制御方法、およびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019093134A JP2020187649A (ja) | 2019-05-16 | 2019-05-16 | 情報処理装置、制御方法、およびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2020187649A true JP2020187649A (ja) | 2020-11-19 |
Family
ID=73221836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019093134A Pending JP2020187649A (ja) | 2019-05-16 | 2019-05-16 | 情報処理装置、制御方法、およびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2020187649A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11893397B2 (en) | 2021-10-01 | 2024-02-06 | Fujitsu Limited | Non-transitory computer-readable recording medium, control method, and information processing device |
-
2019
- 2019-05-16 JP JP2019093134A patent/JP2020187649A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11893397B2 (en) | 2021-10-01 | 2024-02-06 | Fujitsu Limited | Non-transitory computer-readable recording medium, control method, and information processing device |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6226709B2 (ja) | 画像形成装置及びその制御方法、並びにプログラム | |
JP2020177539A (ja) | 情報処理装置、及びその制御方法 | |
US8290159B2 (en) | Data recovery method, image processing apparatus, controller board, and data recovery program | |
JP6362483B2 (ja) | 情報処理装置、情報処理方法及びプログラム | |
US11010153B2 (en) | Information processing apparatus that detects falsification of a program, method of controlling the same, and storage medium | |
JP2018022985A (ja) | 情報処理装置とその制御方法、及びプログラム | |
JP4511264B2 (ja) | 画像形成装置及びその画像形成装置の情報出力方法 | |
JP7170482B2 (ja) | 情報処理装置及びその制御方法、並びにプログラム | |
KR20180002349A (ko) | 화상 형성 장치에서 실행 파일의 위변조를 검증하는 방법 및 이를 이용하는 화상 형성 장치 | |
JP2020187649A (ja) | 情報処理装置、制御方法、およびプログラム | |
JP2009160832A (ja) | プリンタ、複合機、および、印刷制御方法 | |
JP7286381B2 (ja) | 情報処理装置とその制御方法 | |
JP7321795B2 (ja) | 情報処理装置、情報処理方法およびプログラム | |
JP5000346B2 (ja) | 画像処理装置,画像処理方法,プログラム,および記録媒体 | |
JP2009033539A (ja) | 画像形成装置 | |
KR102467636B1 (ko) | 정보 처리장치, 정보 처리장치의 제어방법, 및 기억매체 | |
JP2008171041A (ja) | 画像形成装置、画像形成装置の起動方法、制御装置及び拡張ユニットの起動方法 | |
JP7289641B2 (ja) | 情報処理装置、およびその制御方法 | |
JP2021089607A (ja) | 情報処理装置 | |
JP2006293833A (ja) | 画像処理装置及び画像処理方法並びにプログラム | |
JP5223493B2 (ja) | 情報通信システムとその認証プログラム | |
US20230273798A1 (en) | Information processing apparatus and method for controlling information processing apparatus | |
JP2020154601A (ja) | 情報処理装置とその制御方法、及びプログラム | |
US20230103698A1 (en) | Information processing apparatus and control method therefor | |
JP7465107B2 (ja) | 情報処理装置及び方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20210103 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20210113 |