(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023178546
(43)【公開日】2023-12-18
(54)【発明の名称】情報処理装置および情報処理装置の制御方法
(51)【国際特許分類】
H04L 9/10 20060101AFI20231211BHJP
G06F 21/60 20130101ALI20231211BHJP
G06F 11/14 20060101ALI20231211BHJP
【FI】
H04L9/10 A
G06F21/60 320
G06F11/14 602J
【審査請求】未請求
【請求項の数】17
【出願形態】OL
(21)【出願番号】P 2022091290
(22)【出願日】2022-06-06
(71)【出願人】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】100126240
【弁理士】
【氏名又は名称】阿部 琢磨
(74)【代理人】
【識別番号】100124442
【弁理士】
【氏名又は名称】黒岩 創吾
(72)【発明者】
【氏名】佐々木 英史
(57)【要約】 (修正有)
【課題】RAMに記憶されたデータがストレージに記憶されていない状態で、書き込み専用レジスタにセットされた1つの暗号鍵が破損しても、暗号HWが正常に書き込みデータを暗号化してストレージに反映する情報処理装置及び情報処理装置の制御方法を提供する。
【解決手段】画像形成装置において、ストレージ制御処理を実行するSOC(System on Chip)120は、暗号化HWにおいて複数のレジスタのうち第1レジスタに記憶された鍵情報に基づくエラーが生じることによって、暗号化HWにおいてデータの暗号化に用いる鍵情報を複数のレジスタのうち第2レジスタに記憶された鍵情報に切り替える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
プロセッサと、
一時的にデータを保持する揮発性のメモリと、
鍵情報を用いて暗号化されたデータを記憶する不揮発性のメモリと、を有する情報処理装置であって、
同一の鍵情報を複数のレジスタに保持し、前記鍵情報を用いてデータを暗号化する暗号化装置と、
前記プロセッサから受け付けたデータを前記暗号化装置に送信し、前記暗号化装置から暗号化されたデータを受け付けて、前記暗号化されたデータを前記不揮発性のメモリに記憶させる制御装置と、を有し、
前記プロセッサは、前記暗号化装置において前記複数のレジスタのうち第1レジスタに記憶された前記鍵情報に基づくエラーが生じることによって、前記暗号化装置においてデータの暗号化に用いる鍵情報を前記複数のレジスタのうち第2レジスタに記憶された前記鍵情報に切り替えることを特徴とする情報処理装置。
【請求項2】
前記揮発性のメモリは、前記鍵情報のエラー情報を記憶し、
前記プロセッサは、前記第1レジスタに記憶された前記鍵情報に基づくエラーが生じたか否かを、前記揮発性のメモリに記憶されたエラー情報を確認する事で判断することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記プロセッサは、前記第1レジスタに記憶された前記鍵情報に基づくエラーが生じたと判断すると、次に用いる前記鍵情報が記憶された前記第2レジスタを検出することを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記プロセッサは、前記第1の鍵情報を用いて、ダミーデータの書き込み処理を実行することによって、前記鍵情報に基づくエラーが生じたか否かを判断することを特徴とする請求項3に記載の情報処理装置。
【請求項5】
前記プロセッサは、次に用いる前記鍵情報が記憶された前記第2レジスタを検出した後、前記鍵情報が記憶された前記複数のレジスタのうち読み出しエラーが生じたレジスタの数を計算することを特徴とする請求項3に記載の情報処理装置。
【請求項6】
ユーザに通知を行う通知手段を有し、
前記プロセッサは、前記鍵情報に基づくエラーが生じたレジスタの数が、所定の数を超えることによって、前記通知手段に前記情報処理装置の再起動の要求を通知させることを特徴とする請求項1に記載の情報処理装置。
【請求項7】
前記情報処理装置の電力を制御する電力制御手段を有し、
前記プロセッサは、前記鍵情報に基づくエラーが生じたレジスタの数が、所定の数を超えることによって、前記電力制御に前記情報処理装置の再起動を実行させることを特徴とする請求項1に記載の情報処理装置。
【請求項8】
前記所定の数は、前記暗号化装置において前記鍵情報を記憶する全てのレジスタであることを特徴とする請求項6に記載の情報処理装置。
【請求項9】
前記暗号化装置は、前記情報処理装置の起動時に、前記暗号化装置の前記複数のレジスタに前記同一の鍵情報を記憶することを特徴とする請求項1に記載の情報処理装置。
【請求項10】
前記情報処理装置が第1電力状態から前記第1電力状態よりも消費電力の低い第2電力状態に移行する際に、前記プロセッサは、前記鍵情報が記憶された前記複数のレジスタのうち読み出しエラーが生じたレジスタの数を計算することを特徴とする請求項3に記載の情報処理装置。
【請求項11】
ユーザに通知を行う通知手段を有し、
前記プロセッサは、前記鍵情報に基づくエラーが生じたレジスタの数が、所定の数を超えることによって、前記通知手段に前記情報処理装置の再起動の要求を通知させることを特徴とする請求項10に記載の情報処理装置。
【請求項12】
用紙に画像データを印刷するプリンタを有し、
前記データは、前記画像データであることを特徴とする請求項1に記載の情報処理装置。
【請求項13】
前記データは、ファクシミリデータであることを特徴とする請求項1に記載の情報処理装置。
【請求項14】
前記プロセッサと、前記暗号化装置と、前記制御装置は、1つのSOCに含まれることを特徴とする請求項1に記載の情報処理装置。
【請求項15】
プロセッサと、一時的にデータを保持する揮発性のメモリと、鍵情報を用いて暗号化されたデータを記憶する不揮発性のメモリと、同一の鍵情報を複数のレジスタに保持し、前記鍵情報を用いてデータを暗号化する暗号化装置と、前記プロセッサから受け付けたデータを前記暗号化装置に送信し、前記暗号化装置から暗号化されたデータを受け付けて、前記暗号化されたデータを前記不揮発性のメモリに記憶させる制御装置と、を有する情報処理装置の制御方法であって、
前記暗号化装置において前記複数のレジスタのうち第1レジスタに記憶された前記鍵情報に基づくエラーを検出するステップと、
前記暗号化装置においてデータの暗号化に用いる鍵情報を前記複数のレジスタのうち前記鍵情報を記憶する第2レジスタを検出するステップと、
前記鍵情報の読み出し先の設定を前記第2レジスタに切り替えるステップと、を有することを特徴とする情報処理装置の制御方法。
【請求項16】
請求項15に記載の制御方法を、コンピュータに実行させるためのプログラム。
【請求項17】
請求項16に記載のプログラムを格納したコンピュータで読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置および情報処理装置の制御方法に関する。
【背景技術】
【0002】
従来の情報処理装置では、ユーザデータを暗号化してデータファイルとして保存し、また、利用時にはデータファイルを復号してユーザデータを抽出するものが知られている。情報処理装置におけるユーザデータの暗号化・復号処理は、目的に応じた種々の改良・改善が行われてきた。
【0003】
例えば、特許文献1では、1つのユーザデータを複数の暗号鍵によって暗号化し、複数の暗号文を結合したデータファイルを生成している。データファイルからユーザデータを抽出する際、ユーザから指定された復号鍵でそれぞれの暗号文の復号を試みる。データファイルを形成する時に利用した暗号鍵と関連付けられた復号鍵があればユーザデータが抽出できる。これにより、復号鍵を複数人で共有する必要がなくなり、ユーザデータをよりセキュアに管理することができる。
【0004】
ユーザデータをよりセキュアに暗号化・復号するために、更なる工夫も考えられている。例えば、ユーザデータを格納するストレージとCPUとが通信する時の電気信号を直接覗き見る事で、ユーザデータを盗み出す攻撃手法が広く知られている。これに対して、ユーザデータの暗号化/復号を行う暗号HWをCPUと共に1つの半導体チップ、すなわち、SOC(System on Chip)内に収める対策がある。これにより、SOC内では平文のデータが、SOC外には暗号化済みデータを送受信する構成となる。
【0005】
また、近年は、改ざんされたアプリケーションがCPUに備えられた分岐予測機能や投機実行機能などを改ざんし、他のプログラムを動いている際のレジスタ情報やメモリ情報を覗き見る攻撃手法も知られている。改ざんされたアプリケーションによって復号に用いる復号鍵を漏洩すると、暗号化したユーザデータが復号され、外部へ流出するリスクが生じる。これに対して、アプリケーションが起動する前に暗号鍵や復号鍵を事前に暗号HW上のレジスタに完了させ、アプリケーション動作中には暗号HW上の暗号鍵や復号鍵を保持するレジスタに直接アクセスしない対策がある。特に、暗号HW上の暗号鍵や復号鍵を保持するレジスタをCPUからは書き込み専用レジスタと設計する対策がある。具体的には、暗号鍵や復号鍵を管理する暗号HW上のレジスタを書き込み専用レジスタとし、かつ、アプリケーションが起動する前に暗号鍵や復号鍵を書き込み専用レジスタに1つセットする構成である。これにより、改ざんされたアプリケーションが暗号HW上のレジスタから暗号鍵や復号鍵を読み出すことを困難にできる。
【先行技術文献】
【特許文献】
【0006】
【発明の概要】
【発明が解決しようとする課題】
【0007】
近年の情報処理装置において、ストレージへのデータ読み書きはRAMへのデータ読み書きよりも遅い。そのため、ストレージへの読み書き要求があった場合には、一度RAMに記憶し、RAMに記憶したデータを読み出してストレージに記憶する。
【0008】
アプリケーションが起動する前に暗号鍵を書き込み専用レジスタに1つセットする構成では、RAMに記憶したデータを読みだして、セットされた暗号鍵を用いて読み出したデータを暗号化してストレージに記憶させる。
【0009】
RAMに記憶されたデータがストレージに記憶されていない状態で、書き込み専用レジスタに1つセットされた暗号鍵が破損してしまうと、暗号HWは正常に書き込みデータを暗号化できない。このような場合には、RAMに記憶されたデータをストレージに反映できなくなってしまう。
【0010】
本発明は、RAMに記憶されたデータがストレージに記憶されていない状態で、書き込み専用レジスタにセットされた1つの暗号鍵が破損しても、暗号HWが正常に書き込みデータを暗号化して、ストレージに反映することを提供することを目的とする。
【課題を解決するための手段】
【0011】
本発明は、プロセッサと、一時的にデータを保持する揮発性のメモリと、鍵情報を用いて暗号化されたデータを記憶する不揮発性のメモリと、を有する情報処理装置であって、同一の鍵情報を複数のレジスタに保持し、前記鍵情報を用いてデータを暗号化する暗号化装置と、前記プロセッサから受け付けたデータを前記暗号化装置に送信し、前記暗号化装置から暗号化されたデータを受け付けて、前記暗号化されたデータを前記不揮発性のメモリに記憶させる制御装置と、を有し、前記プロセッサは、前記暗号化装置において前記複数のレジスタのうち第1レジスタに記憶された前記鍵情報に基づくエラーが生じることによって、前記暗号化装置においてデータの暗号化に用いる鍵情報を前記複数のレジスタのうち第2レジスタに記憶された前記鍵情報に切り替えることを特徴とする。
【発明の効果】
【0012】
本発明によれば、RAMに記憶されたデータがストレージに記憶されていない状態で、書き込み専用レジスタにセットされた1つの暗号鍵が破損しても暗号HWが正常に書き込みデータを暗号化可能な情報処理装置を提供することが可能である。
【図面の簡単な説明】
【0013】
【
図5】暗号HW制御初期化処理(Bootrom)のフローチャート
【
図7】最適crypt_keyレジスタ算出のフローチャート
【
図8】利用不可crypt_keyレジスタ数算出のフローチャート
【発明を実施するための形態】
【0014】
添付図面を参照して本発明の各実施例を詳しく説明する。なお、以下の実施例は特許請求の範囲に係る発明を限定するものではなく、また各実施例で説明されている特徴の組み合わせのすべてが本発明の解決手段に必須のものとは限らない。本実施形態では、情報処理装置の一例として画像処理装置を用いて説明するがこれに限らない。複合機やプリンタ等の画像形成装置以外の情報処理装置に対しても適用ができる。自動販売機や冷蔵庫、スマートフォンなど、他の情報処理装置に対しても好適できる。また、本実施形態では情報処理装置のOSの1例として、広く普及しているLinux(登録商標)を用いて説明する。一般的に「暗号鍵」は、広義と狭義で用いられる。共通鍵方式では、暗号化および復号で共通して用いられる鍵の意味で、広義の「暗号鍵」が用いられる。一方、公開鍵方式では、復号に用いる公開鍵とは別に存在する、暗号化に用いる秘密鍵の意味で、狭義の「暗号鍵」が用いられる。本実施例では、共通鍵による暗号化方式をベースに説明しているが、公開鍵方式等別の暗号化技術に対しても適用可能である。また、本発明は暗号化に用いるアルゴリズムを特定のアルゴリズムに限定するものではない。
【0015】
(実施例1)
図1は、ハードウェア構成図である。
図1(A)を用いてハードウェア構成全体について、
図1(B)を用いてSOC120の詳細について、それぞれ説明する。
【0016】
図1(A)を用いて、画像形成装置の構成について説明する。
【0017】
画像形成装置102は、ネットワークハブ103を介して、データ処理装置101やDHCPサーバ104と接続されている。
【0018】
ネットワークハブ103は、データ処理装置101、画像形成装置102、DHCPサーバ104間のネットワーク通信を行うためのハブである。本実施例では、単一のネットワークハブに関連するデバイスを、ローカルネットワーク接続する形態で説明をしているが、そのほかのネットワーク構成を用いてもよい。
【0019】
データ処理装置101(例えばPC)は、PDL(Print Description Language)データを生成し、当該PDLデータを画像形成装置102に送信する。DHCPサーバ104は、DHCP(Dynamic Host Configuration Protocol)に基づいてネットワーク設定情報の取得要求を受け取り、ネットワーク設定情報を応答するためのサーバである。
【0020】
画像形成装置102(例えばレーザープリンタ)は、データ処理装置101からPDLデータを受信し、当該画像データに基づいて用紙に画像形成を行う装置である。なお、画像形成装置102は、スキャナ機能やFAX機能等を有する複合機であってもよい。
【0021】
画像形成装置102は、コントローラ110、UIパネル111、プリントエンジン112、電源ユニット113、電源スイッチ114で構成される。
【0022】
コントローラ110は、データ処理装置101から送信されたPDLデータを受信し、印刷用のビットマップデータを生成し、当該ビットマップデータをプリントエンジン112に送信するコントローラボードである。
【0023】
UIパネル111は、ユーザインタフェイスであり、利用者に様々な情報を伝える表示部や、利用者から様々な操作を受け付ける操作部を有する。例えば、物理的なボタンの他にタッチパネル等を備えてもいてもよい。また、LED(Light Emitting Diode)によって、画像形成装置102内で発生したエラーや警告を、光の点灯・点滅によって利用者へ報知する機能を備えていてもよい。あるいは、ブザー等によって、画像形成装置102内で発生したエラーや警告を、音によって利用者へ報知する機能を備えていてもよい。
【0024】
プリントエンジン112は、コントローラ110から受信したビットマップデータに基づいて、電子写真方式でトナーを用いてシートに画像形成を行うプリントエンジンである。画像形成は、トナーを記録材として用いる電子写真方式以外に、例えばインクを記録材として用いるインクジェット方式等でもよい。また、プリントエンジン112は複数色の記録材を備え、PDLデータをカラー印刷ができても良い。あるいは、プリントエンジン112は複数の給紙段を備えて、PDLデータで指定された給紙段からシートを給紙できてもよい。
【0025】
電源ユニット113は、画像形成装置102を構成する各構成要素へ電力を供給するための電力ユニットである。各パーツを動作させるのに必要な電圧を生成し、供給する役割を担う。電源スイッチ114は、利用者からの電源投入・切断指示を受け付けるためのスイッチである。画像形成装置102がOFF状態において、利用者が電源スイッチ114を押下すると、当該電源スイッチ押下イベントが電源ユニット113へ通知され、電源ユニット113は画像形成装置102を構成する各パーツへ電力供給を開始する。
【0026】
コントローラ110は、SOC120、FlashROM122、RAM123、SRAM133、NIC124、パネルI/F125を備える。コントローラ110は、更に、エンジンI/F126、RIP部128、内蔵ストレージ部130も備える。加えて、コントローラ110は、RealTimeClock134とWatchDogTimer135も備える。コントローラ110は更に、これらの各要素を接続する、バス131を備える。
【0027】
SOC120は、後述するCPU121や暗号HW151などを含む集積回路である。SOC120の詳細については、
図1(B)を用いて後述する。
【0028】
FlashROM(Flash Read Only Memory)122は、Bootrom171やSALT値172等を保持する不揮発メモリである。Bootrom171は、CPU121がリセット解除されたことをトリガーに実行する初期プログラムである。SALT値172は、暗号鍵を生成するのに利用する乱数である。
【0029】
RAM(Random Access Memory)123は、CPU121が各種プログラムを動作する際に一時的な情報を格納するための揮発メモリである。SRAM(Static Random Access Memory)133は画像形成装置102に通電中、内容を保持する揮発メモリである。
【0030】
NIC124は、画像形成装置102外のデバイスとネットワークによって相互接続し、双方間のデータ通信すなわちデータの送信や受信を中継するネットワークインタフェイスコントローラである。なお、有線接続をする通信手段のほかに、無線接続をする通信手段を用いてもよい。
【0031】
パネルI/F125は、UIパネル111とコントローラ110とを相互に接続し、双方間のデータ通信すなわちデータの送信や受信を中継するためのインタフェイスである。エンジンI/F126は、プリントエンジン112とコントローラ110とを相互に接続し、双方間のデータ通信すなわちデータの送信や受信を中継するためのインタフェイスである。
【0032】
RIP部128は、中間データをビットマップデータに変換し、RAM123に展開(記憶)する。RAM123に展開(記憶)されたビットマップデータはRAM123から読み出されて内臓ストレージ部130に記憶される。なお、ここでは、CPU121とは独立した専用のRIP部128がビットマップに変換する形態で説明を行っているが、RIP部128を設けなくてもよい。その場合には、CPU121が、データ処理装置101から受信したPDLデータをビットマップデータへの直接変換処理までを行う。
【0033】
内蔵ストレージ部130は、初期プログラムから起動するOS(Operating System)を保持する不揮発性記憶領域である。例えば、eMMC(embedded MMC)やハードディスク、ソリッドステートドライブ等によっても実現できる。内蔵ストレージ部130は、大容量の記憶領域を比較的安価に確保できる。そこで、内蔵ストレージ部130に、OSのプログラムとOSが使うデータを格納する。
【0034】
本実施例においては、内蔵ストレージ部130上にLinux Kernel161を保持する。また、内蔵ストレージ部130上に、後述する暗号鍵の検証で用いるために、一時的なダミーデータを書き込み・読み込むための領域として、ダミーデータ162を割り当てる。その他、内蔵ストレージ部130上には、Linux Kernel161上で動作する各種アプリケーションなども保持する。
【0035】
RealTimeClock134は、画像形成装置102内の時刻情報を不揮発に管理するためのハードチップである。電源ユニット113から独立した電源として、電池駆動することで、画像形成装置102の電源切断後であっても時刻情報を定期的に更新するなどの機能を有する。
【0036】
WatchDogTimer135は、画像形成装置102が正常動作できているかを検証するためのハードチップである。CPU121から定期的な要求を受け付け、当該要求が来なくなったタイミングで異常発生と判断する。例えば、CPU121が異常状態に陥り、正常な処理が出来なくなったことを検出できる。異常発生と判断した場合、WatchDogTimer135は、画像形成装置102全体を再起動させても良い。
【0037】
次に、
図1(B)を用いて、SOC120の詳細について説明する。
【0038】
SOC120は、バス131と接続するバス141を有する。SOC120を構成する各部品は、バス131とバス141を介して、SOC内外の構成部品と相互通信できる。
【0039】
CPU121は、種々のプログラムを実行するための中央処理演算装置である。FlashROM122に含まれるBootrom171の内容や、Bootrom171やLinux Kernel161の内容をRAM123上にコピーした内容に含まれるプログラムを実行する。
【0040】
内蔵ストレージコントローラ142は、内蔵ストレージ部130を制御するためのコントローラチップである。内蔵ストレージコントローラ142は、CPU121からのデータの読み込み要求に応じて、内蔵ストレージ部130に対してデータの読み込みを要求する。内蔵ストレージコントローラ142は、読み込んだデータに対して、暗号HW151にデータの復号処理を要求する。内蔵ストレージコントローラ142は、復号したデータをCPU121へ通知する。また、内蔵ストレージコントローラ142は、CPU121からのデータの書き込みの要求に応じて、暗号HW151に対しデータの暗号化を要求する。内蔵ストレージコントローラ142は、暗号化したデータを、内蔵ストレージ部130に対してデータ書き込みを要求する。
【0041】
個体識別情報レジスタ143は、それぞれの製品個体毎に割り付けられる個体を識別する事のできる個体識別情報を保持するレジスタである。個体識別情報は、工場生産時点で割り振られるものであり、変更不可能な値である。
【0042】
暗号HW151は、内蔵ストレージコントローラ142と協調動作し、CPU121からの要求に基づいてデータの暗号化や復号を行うためのチップである。データの暗号化・復号を演算する暗号化・復号演算部152や、暗号HWレジスタ153等で構成される。
【0043】
暗号化・復号演算部152は、暗号HWレジスタ153の内容に基づいて、内蔵ストレージ部130から要求されたデータの暗号化・復号のための種々の計算を行う演算部である。暗号HWレジスタ153は、データの暗号化・復号に必要となる各種パラメータを保持するためのレジスタである。暗号HWレジスタ153の詳細については、
図3で後述する。なお、暗号HW151への鍵情報の設定は、画像形成装置102の起動時に行い、それ以外のタイミングでは行わない。鍵情報の設定の仕方の具体例も
図3で後述する。
【0044】
【0045】
本実施例では、ソフトウェアは大きく分けてBootrom171と、Linux Kernel 161とに分かれる。Bootrom171は更に、ROM実行部200と、RAM実行部210とに分かれる。
【0046】
ROM実行部200には、CPU初期化部201,リソース初期化部202、プログラムロード部203が含まれる。
【0047】
RAM実行部210には、CPU初期化部211,リソース初期化部212、Bootrom起動シーケンス制御部213、Linux起動制御部214が含まれる。Bootrom起動シーケンス制御部213は、電源ユニット制御部221,UIパネル制御部222、内蔵ストレージ制御部223、暗号HW制御部224を制御する。
【0048】
Linux Kernel161には、CPU初期化部241,リソース管理部242,ドライバ制御部243、サービス制御部244が含まれる。ドライバ制御部243には、電源ユニット制御部251,UIパネル制御部252、内蔵ストレージ制御部253,暗号HW制御部254が含まれる。ドライバ制御部243には更に、プリントエンジン制御部255,RIP制御部256,RealTimeClock制御部257,WatchDogTimer制御部258、NIC制御部259が含まれる。サービス制御部244には、ユーザインタフェイスサービス261,ストレージ管理サービス262,PDL印刷サービス263、時刻制御サービス264、電力制御サービス265、ネットワークサービス266が含まれる。それぞれの初期化部、制御部の詳細については、
図4、
図5で後述する。
【0049】
図3は、暗号HWレジスタ153の構成図である。暗号HWレジスタ153が有するレジスタ群の構成について
図3(A)に示す。available_keyレジスタ310の構成について
図3(B)に示す。
【0050】
statusレジスタ301は、暗号HW151が設定する、エラーが発生しているかなどの、暗号HW151の状態が記録するステータス情報を示すレジスタである。statusレジスタ301は、CPU121からは読み出しのみが許可されている。
【0051】
keyregレジスタ302は、暗号HW151が暗号化・復号に利用する暗号鍵のレジスタ番号を指定するためのレジスタである。本実施例においては、0~7の値が指定できる。keyregレジスタ302は、CPU121からは読み出しも書き出しも許可されている。
【0052】
encdecレジスタ303は、暗号HW151が暗号化・復号処理で動作するモードを指定するための動作モード指定をするレジスタである。0が指定された場合、暗号HW151はencode、つまり、暗号化するモードとして動作する。1が指定された場合、暗号HW151はdecode、つまり、復号するモードとして動作する。encdecレジスタ303は、CPU121からは読み出しも書き出しも許可されている。
【0053】
tweakレジスタ304は、暗号化あるいは復号する際に用いられる、各要素に特徴をつけるための調整値(Tweak値)を格納するレジスタである。本実施例においては、ストレージ上で先頭からのアドレス(Offset値)をセクタ番号で表した値で指定するものとする。これにより、同一のデータを別セクタで暗号化をした場合、異なる暗号化結果が得られる。tweakレジスタ304は、CPU121からは書き込みのみが許可されている。
【0054】
available_keyレジスタ310は、各暗号鍵が暗号化・復号に利用可能であるか否かを示すための、利用可否フラグの2次元配列(テーブル)を示すレジスタである。available_keyレジスタ310は、CPU121からは読み出しも書き出しも許可されている。
【0055】
説明を簡略にするために、本実施例では、暗号化で利用した暗号鍵と、復号で利用した暗号鍵を組み合わせた64通りについて、利用可能であるかを示すフラグを2次元配列で表現する。
【0056】
図3(B)に、それぞれの組み合わせ(要素)が、レジスタ上でどのように配置・表現されるのかを示す。例えば、available_key[3][4]に保持される要素は、(+18h+4h=)+1Chのオフセット位置に配置される。available_key[3][4]は、crypt_key3レジスタ323を使って暗号化したデータを、crypt_key4レジスタ324で復号できたか否かを意味する。available_keyレジスタ310に含まれる他要素についても同様である。
【0057】
available_keyレジスタ310上で0として記憶されている要素は「OK」、つまり、利用可能な暗号鍵の組み合わせを示す。available_keyレジスタ310上で1として記憶されている要素は「NG(エラー情報)」、つまり、利用不可能な暗号鍵の組み合わせを示す。
【0058】
なお、説明を簡略化するために、本実施例では各暗号鍵が利用可能であるかを示すための利用可否フラグの2次元配列(テーブル)を、暗号HWレジスタ153上のレジスタへ備える構成を用いて説明している。なお、別の形態として、RAM123やSRAM133上に当該利用可否フラグを示す情報を保持する形でもよい。
【0059】
暗号鍵を保持するcrypt_key0~7レジスタ320~327は、暗号HW151が利用する暗号鍵を保持するためのレジスタである。crypt_key0~7レジスタ320~327は、CPU121からは書き込みのみが許可されている。なお、暗号HW151が複数の暗号化方式に対応させ、どの暗号化アルゴリズムや鍵長に用いて、データの暗号化/復号をするのかを示すレジスタを別に設けていても良い。
【0060】
以下、内蔵ストレージ部130に含まれるデータの暗号化/復号をするための初期化処理を含めたシステム起動シーケンスについて
図4以後を使って説明する。
【0061】
また、本実施例では以後、「エラー報知要求crypt_keyレジスタ数閾値」「許容利用不可組合せ数閾値」という閾値を用いて、判断・分岐する箇所がある。これらの閾値は、プログラム内部で予め決められた静的な閾値でもよいし、ユーザ設定やシステム内外の状況に基づいて決定する動的な閾値等でもよい。これらの閾値の意味や扱いについての詳細は後述する。
【0062】
(Bootrom処理)
図4は、Bootrom起動時のフローチャートである。
【0063】
最初に、ROM実行部200として実行される初期化処理について説明する。当該処理は、FlashROM122に含まれるBootrom171内の、特にRAM実行部210部分をRAM123上に読み出してCPU121が実行する処理である。
【0064】
CPU初期化部201は、割り込みなどCPU121に関連する初期化処理を実行する(S401)。リソース初期化部202は、FlashROM122やRAM123などのリソースへアクセスするための初期化処理を実行する(S402)。
【0065】
プログラムロード部203は、リソース初期化部202によってアクセス可能となったRAM123上に、FlashROM122からBootrom171の内容を読み出し、当該読み出したBootrom171を起動する(S403)。
【0066】
次に、RAM実行部210として実行される初期化処理について説明する。内蔵ストレージ部130に含まれるLinux Kernel161をRAM123上に読み出してCPU121が実行する処理である。
【0067】
CPU初期化部211は、割り込みなどCPU121に関連する初期化処理を実行する(S411)。リソース初期化部212は、FlashROM122やRAM123などのリソースへアクセスするための初期化処理を実行する(S412)。なお、リソース初期化部212は、セマフォやミューテックスなどのより複雑なリソース資源を管理するための初期化処理を実行してもよい。
【0068】
Bootrom起動シーケンス制御部213は、各種ハードウェアの初期化をするための制御部の起動シーケンスを制御するための制御部である。電源ユニット制御部221は、電源ユニット113と電源スイッチ114を制御するための初期化処理を実行する(S413)。UIパネル制御部222は、UIパネル111を制御するための初期化処理を実行する(S414)。内蔵ストレージ制御部223は、内蔵ストレージ部130を制御するための初期化処理を実行する(S415)。暗号HW制御部224は、暗号HW151を制御するための初期化処理を実行する(S416)。当該暗号HW制御初期化処理に関しては、
図5を用いて後述する。
【0069】
Linux起動制御部214は、内蔵ストレージ部130からRAM123にLinux Kernel161を読み込み、起動する(S417)。
【0070】
図5は、暗号HW制御初期化処理(Bootrom)のフローチャートである。
図5のフローチャートは、CPU121によって実行される。なお、
図5における変数は一例である。
【0071】
暗号HW制御部224は、FlashROM122からSALT値172を読み出す(S501)。SALT値172は、デバイス固有の、不揮発的に記憶されている乱数値である。SALT値172の生成方法については外部から提供された乱数値を用いる等、種々の方法を用いることができる。本実施例においてはSALT値172の生成処理に関する詳細は、割愛する。
【0072】
暗号HW制御部224は、SOC120に含まれる個体識別情報レジスタ143から、個体識別情報を読み出す(S502)。個体識別情報は、SOC120を生産するタイミングなどでそれぞれの個体毎にユニークに割り当てられる値である。
【0073】
暗号HW制御部224は、SALT値172や個体識別情報レジスタ143の内容に基づき、暗号鍵を生成する(S511)。暗号鍵を生成するロジックについては種々の方法を適用する事ができる。本実施例においては暗号鍵の生成処理に関する詳細は、割愛する。なお、この暗号鍵は、起動毎に同じ値に基づき、同じ値が生成される。
【0074】
暗号HW制御部224は、変数Nを0で初期化する(S512)。暗号HW制御部224は、変数Nが暗号鍵を保持するcrypt_key0~7のレジスタ数である8未満であるかを判定する(S513)。変数Nが8未満であれば、暗号HW制御部224は、当該暗号鍵を、crypt_keyNレジスタにセットする(S514)。すなわち、暗号HW制御部224は、変数N=0であれば、crypt_key0レジスタ320,変数N=1であればcrypt_keyレジスタ321に、生成した暗号鍵をセットする。暗号HW制御部224は、暗号HW制御部224は、変数Nに1を加算する(S515)。
【0075】
そして、再び変数Nが8未満であるかの判定を行う。一連の処理を繰り返す事で、暗号HW制御部224は、crypt_key0~7レジスタに、同一の暗号鍵をセットする。
【0076】
次に、暗号HW制御部224は、crypt_keyレジスタを検証する(S521)。すなわち、それぞれのcrypy_keyが利用できるか否かの判定処理を行う。当該処理については、
図6で後述する。なお暗号HW制御部224はkeyregレジスタ302に0をセットし、初期化しておく。(S522)
次に暗号HW制御部224は、最適crypy_keyレジスタを検出する(S523)。すなわち、暗号化/復号に適用するのに最も適切であるcrypy_keyレジスタを検出する。当該処理については、
図7で後述する。
【0077】
次に暗号HW制御部224は、利用不可crypt_keyレジスタ数を算出する(S524)。すなわち、利用できないcrypy_keyレジスタの数を算出する。当該処理については、
図8で後述する。
【0078】
暗号HW制御部224は、利用不可crypt_keyレジスタ数が、エラー報知要求crypt_keyレジスタ数閾値未満であるかを判断する(S532)。
【0079】
エラー報知要求crypt_keyレジスタ数閾値以上である場合、暗号HW制御部224は、UIパネル111を介して、暗号HW151に関する致命的なエラーが発生したことをユーザへ報知する(S533)。ユーザへの報知例を、
図9に示す。
図9に示すエラー画面は、起動失敗をユーザに報知する画面である。
【0080】
暗号HW制御部224は、電源スイッチ114が押下されたことを電源ユニット113と電源ユニット制御部221経由で確認する(S534)。電源スイッチ114が押下されていなければ、再び電源スイッチ114押下のイベントを待つ。電源スイッチ114が押下されたら、暗号HW制御部224は、システムを終了する(S535)。つまり、当該表示が行われた場合には、システム起動は途中で停止し、電源スイッチ114押下による電源切断を待つ。
【0081】
エラー報知要求crypt_keyレジスタ数閾値未満である場合、暗号HW制御部224はkeyregレジスタ302に当該最適crypt_keyレジスタをセットする(S551)。そして、当該処理を終了する。
【0082】
以上の処理により、暗号HW制御部224は、利用可能なcrypt_keyレジスタ数が閾値未満であればエラー画面を表示して、システムを終了する。閾値以上である場合、暗号HW制御部224は、最も利用に適しているcrypt_keyレジスタを算出し、keyregレジスタへセットする。当該処理で利用した個々の処理の詳細を、
図6~8で説明する。
【0083】
図6は、crypt_keyレジスタ検証のフローチャートである。
図6は、CPU121によって実行される。なお
図6において変数は一例である。
【0084】
暗号HW制御部224は、available_keyレジスタ310の全要素に0(OK)をセットする(S601)。暗号HW制御部224は、変数iに0をセットする(S611)。暗号HW制御部224は、変数iがcrypt_keyレジスタ数8未満であるかを判定する(S612)。変数iがcrypt_keyレジスタ数8未満である場合、暗号HW制御部224は、keyregレジスタ302に変数iを設定する(S621)。暗号HW制御部224は、encdecレジスタ303に、0(enc)をセットする(S622)。暗号HW制御部224は、tweakレジスタ304に、ダミーデータ162が内蔵ストレージ部130上に位置するオフセットをセクタ番号としてセットする(S623)。
【0085】
暗号HW制御部224は、内蔵ストレージ制御部223に対してダミーデータ162上にダミーデータの書き込みを要求する(S624)。これにより、内蔵ストレージ制御部223からの要求に基づいて、暗号HW151がダミーデータを暗号化し、暗号化したダミーデータを当該セクタ番号上のデータとして記録する。この際、暗号化に際して何らかの問題があれば、暗号HW151は、statusレジスタ301にエラーを記録する。暗号HW制御部224は、statusレジスタ301にエラーが記録されているかを判定する(S625)。
【0086】
statusレジスタ301にエラーが記録されている場合、暗号HW制御部224は、現在keyregレジスタにセットしている鍵レジスタを暗号化に使った組み合わせについて一律、1(NG)をセットする(S631)。
【0087】
つまり、S621から始まるダミーデータの読み込み・復号テストは行わずに、該当するcrypt_keyレジスタを使って暗号化したダミーデータの結果は、全てを復号に失敗したものとして扱う。例えば、ダミーデータの暗号化にcrypt_key5を使っている場合、available_keyレジスタ310の[5][0]、[5][1]…[5][7]の全てに、1(NG)がセットされる。そして、暗号HW制御部224は、変数iに1を加算して(S618)、再び変数iがcrypt_keyレジスタ数8未満であるかを判定する(S612)。
【0088】
statusレジスタ301にエラーが記録されていない場合、暗号HW制御部224は、変数jに0をセットする(S651)。暗号HW制御部224は、変数jがcrypt_keyレジスタ数8未満であるかを判定する(S652)。
【0089】
変数jがcrypt_keyレジスタ数8未満である場合、暗号HW制御部224は、keyregレジスタ302に変数jを設定する(S661)。暗号HW制御部224は、encdecレジスタ303に、1(dec)をセットする(S662)。暗号HW制御部224は、tweakレジスタ304に、ダミーデータ162が内蔵ストレージ部130上に位置するオフセットをセクタ番号としてセットする(S663)。暗号HW制御部224は、内蔵ストレージ制御部223に対してダミーデータ162上にダミーデータの読み込みを要求する(S664)。
【0090】
これにより、内蔵ストレージ制御部223は当該セクタ番号上のデータを暗号化したダミーデータを読み取り、暗号HW151は暗号化されたデータを復号して元のダミーデータを抽出する。復号に際して何らかの問題があれば、暗号HW151は、statusレジスタ301にエラーを記録する。暗号HW制御部224は、statusレジスタ301にエラーが記録されているかを判定する(S671)。
【0091】
statusレジスタ301にエラーが記録されている場合、available_keyレジスタ310上の、該当する要素について、1(NG)をセットする(S673)。
【0092】
statusレジスタ301にエラーが記録されていない場合、暗号HW制御部224は、書き込んだダミーデータと読み込んだダミーデータの内容が一致するかを検証する(S672)。内容が一致しない場合、暗号HW制御部224は、available_keyレジスタ310上の、該当する要素について、1(NG)をセットする(S673)。
【0093】
そして、暗号HW制御部224は、変数jに1を加算して(S674)、再び変数jがcrypt_keyレジスタ数8未満であるかを判定する(S652)。
【0094】
以上の処理によって、crypt_key0レジスタ320からcrypt_key7レジスタ327に記録された暗号鍵を用いてダミーデータを暗号化や復号できるかを検証する。そして、その検証結果がavailable_keyレジスタ310の各要素にセットされる。
【0095】
図7は、最適crypt_keyレジスタ算出のフローチャートである。本フローチャートは、CPU121によって実行される。
【0096】
暗号HW制御部224は、最小利用不可回数をcrypt_keyレジスタ数+1(すなわち9)とする(S701)。暗号HW制御部224は、keyregレジスタの内容を読み出し、最適crypt_keyの初期値とする(S702)。
【0097】
暗号HW制御部224は、変数iに0をセットする(S711)。暗号HW制御部224は、変数iがcrypt_keyレジスタ数8未満であるかを判定する(S712)。
【0098】
変数iがcrypt_keyレジスタ数8未満である場合、暗号HW制御部224は、利用不可回数を0とする(S721)。暗号HW制御部224は、変数jに0をセットする(S731)。暗号HW制御部224は、変数jがcrypt_keyレジスタ数8未満であるかを判定する(S712)。
【0099】
変数jがcrypt_keyレジスタ数8未満である場合、暗号HW制御部224は、available_keyレジスタ310の[i][j]要素が1(NG)であるかを判定する(S722)。available_keyレジスタ310の[i][j]要素が1(NG)である場合、暗号HW制御部224は、利用不可回数に1を加算する(S742)。
【0100】
そして、暗号HW制御部224は、変数jに1を加算して(S743)、再び変数jがcrypt_keyレジスタ数8未満であるかを判定する(S732)。
【0101】
変数jがcrypt_keyレジスタ数8以上である場合、暗号HW制御部224は、最小利用不可回数と利用不可回数を比較する(S751)。暗号HW制御部224は、最小利用不可回数よりも利用不可回数のほうが小さい場合、最小利用不可回数を最小利用不可回数で更新する(S752)。同時に、暗号HW制御部224は、最適crypt_keyを当該鍵レジスタとする(S753)。
【0102】
そして、暗号HW制御部224は、変数iに1を加算して(S754)、再び変数iがcrypt_keyレジスタ数8未満であるかを判定する(S712)。
【0103】
変数iがcrypt_keyレジスタ数8以上である場合、暗号HW制御部224は最適crypt_keyを本処理の戻り値とし、処理を終了する(S761)。
【0104】
以上の処理によって、暗号HW制御部224は、avaible_keyレジスタ310の内容に基づき、最も利用できる可能性が高い暗号鍵が保持されているcrypt_keyレジスタがどれかを検出する。ただし、全てのcrypt_keyレジスタが利用できない場合には、当該処理を開始した時点の設定のままとなる。
【0105】
図8は、利用不可crypt_keyレジスタ数算出のフローチャートである。本フローチャートは、CPU121によって実行される。
【0106】
暗号HW制御部224は、利用不可crypt_keyレジスタ数を0とする(S801)。暗号HW制御部224は、変数iに0をセットする(S811)。暗号HW制御部224は、変数iがcrypt_keyレジスタ数8未満であるかを判定する(S812)。
【0107】
変数iがcrypt_keyレジスタ数8未満である場合、暗号HW制御部224は、利用不可組合せ数を0回とする(S812)。利用不可組合せ数は、i番目のcrypt_keyで暗号化したデータが、いくつのcrypt_keyで復号できない組み合わせの数を意味する。
【0108】
暗号HW制御部224は、変数jに0をセットする(S822)。暗号HW制御部224は、変数jがcrypt_keyレジスタ数8未満であるかを判定する(S823)。変数jがcrypt_keyレジスタ数8未満である場合、暗号HW制御部224は、available_keyレジスタ310の[i][j]要素が1(NG)であるかを判定する(S831)。available_keyレジスタ310の[i][j]要素が1(NG)である場合、暗号HW制御部224は、利用不可組合せ数に1を加算する(S832)。
【0109】
そして、暗号HW制御部224は、変数jに1を加算して(S833)、再び変数jがcrypt_keyレジスタ数8未満であるかを判定する(S823)。
【0110】
変数jがcrypt_keyレジスタ数8以上である場合、暗号HW制御部224は、利用不可組合せ数が許容利用不可組合せ数閾値以上であるか判定する(S841)。許容利用不可組合せ数閾値は、例えば全crypt_keyレジスタ数8の50%である4などを指定することができる。この場合、i番目のcrypt_keyレジスタを用いて書き込んだデータに対して、4つ以上のcrypt_keyレジスタで読み込みに失敗した場合、当該i番目のcrypt_keyレジスタは利用不可であると判断される。利用不可組合せ数が許容利用不可組合せ数閾値以上の場合、暗号HW制御部224は、利用不可crypt_keyレジスタ数に1を加算する(S842)。
【0111】
そして、暗号HW制御部224は、変数iに1を加算して(S843)、再び変数iがcrypt_keyレジスタ数8未満であるかを判定する(S823)。
【0112】
変数iがcrypt_keyレジスタ数8以上である場合、暗号HW制御部224は、利用不可crypt_keyレジスタ数を本処理の戻り値とし、処理を終了する(S851)。
【0113】
(Kernel処理)
図10は、Kernel起動時のフローチャートである。本フローチャートは、CPU121によって実行される。
【0114】
Bootrom171のLinux起動制御部214からの要求に基づき、Linux起動シーケンス制御部231が起動し、更に種々の初期化部・制御部が起動される。
【0115】
Linux起動シーケンス制御部231は、CPU初期化部241を起動する。CPU初期化部241は、割り込みなどCPU121に関連する初期化処理を実行する(S1001)。Linux起動シーケンス制御部231は、リソース管理部242を起動する。リソース管理部242は、FlashROM122やRAM123などのリソースへアクセスするための初期化処理を実行する(S1002)。
【0116】
Linux起動シーケンス制御部231は、ドライバ制御部243を起動する。ドライバ制御部243は、各制御部を起動することでハードウェアの初期化を行う。具体的には、RealTimeClock制御部257を起動し、RealTimeClock134に関する制御を初期化する(S1003)。WatchDogTimer制御部258を起動し、WatchDogTimer135に関する制御を初期化する(S1004)。
【0117】
電源ユニット制御部251を起動し、電源ユニット113や電源スイッチ114に関する制御を初期化する(S1005)。UIパネル制御部252を起動し、UIパネル111に関する制御を初期化する(S1006)。暗号HW制御部254を起動し、暗号HW151に関する制御を初期化する(S1007)。内蔵ストレージ制御部253を起動し、内蔵ストレージコントローラ142や内蔵ストレージ部130に関する制御を初期化する(S1008)。プリントエンジン制御部255を起動し、プリントエンジン112に関する制御を初期化する(S1009)。RIP制御部256を起動し、RIP部129に関する制御を初期化する(S1010)。NIC制御部259を起動し、NIC124に関する制御を初期化する(S1011)。
【0118】
Linux起動シーケンス制御部231は、サービス制御部244を起動する。サービス制御部244は、各サービスを起動し、ユーザに各種機能を提供する。具体的には、時刻制御サービスを起動し、RealTimeClock制御部257を介して、時刻情報を設定・管理する機能を提供する(S1021)。電力制御サービス265を起動し、電源ユニット制御部251を介して、システム全体の電力状態を管理する機能を提供する(S1022)。ストレージ管理サービスを起動し、内蔵ストレージ部130に含まれるデータをパーティションやファイルシステムを用いて管理する機能を提供する(S1023)。ユーザインタフェイスサービス261を起動し、UIパネル制御部252を介して、UIパネル111に各種情報を表示し、ユーザからの入力を受け付ける機能を提供する(S1024)。
【0119】
Linux起動シーケンス制御部231は、暗号HW制御部254に対して、電力制御サービス265に対するコールバック関数(CB関数)登録を要求する(S1031)。これにより、電力制御サービス265は他サービスや他制御部から電力制御に関する要求があった場合に、当該要求があった旨を暗号HW制御部254へ伝達できる。当該コールバック関数の詳細については、
図11で後述する。
【0120】
Linux起動シーケンス制御部231は、暗号HW制御部254に対して、ストレージ管理サービス262に対するコールバック関数(CB関数)登録を要求する(S1032)。これにより、ストレージ管理サービス262は他サービスや他制御部から内蔵ストレージ部130からの読み込み・書き込みあるいはエラー報知の要求があった場合に、当該要求があった旨を暗号HW制御部254へ伝達できる。当該コールバック関数の詳細については、
図12で後述する。
【0121】
なお、本実施例では電力制御サービス265やストレージ管理サービス262が暗号HW制御部254に対してコールバック実行要求を行い、これを受けて暗号HW制御部254が所定の動作を実行する形態で説明をした。これ以外に、電力制御サービス265やストレージ管理サービス262が、直接コールバック関数に含まれる所定の処理を実行することで実現することもできる。
【0122】
Linux起動シーケンス制御部231は、PDL印刷サービス263を起動し、PDLデータの解釈やRIP制御部256での印刷画像形成、プリントエンジン制御部255での印字を行う機能を提供する(S1041)。Linux起動シーケンス制御部231は、ネットワークサービス266を起動し、ネットワークハブ103やNIC124を介して、データ処理装置101からのPDLデータを受信したりする機能を提供する(S1042)。
【0123】
以下、
図11~15を用いて、各種サービスからの要求に応じて暗号HW制御部254がコールバック関数を実行する処理について説明する。当該説明では、既に
図6~
図8で説明済みの内容と同じ処理を行う部分がある。説明が重複するため、当該処理を実行する主体を暗号HW制御部224から暗号HW制御部254へ置き換えることとして、説明は割愛する。
【0124】
以後、電力制御処理とストレージ制御処理について、詳細について述べる。
【0125】
(電力制御処理)
図11は、電力制御処理の一部のフローチャートである。当該処理は、電力制御サービス265の機能として、CPU121によって実行される。
【0126】
電力制御サービス265は、他サービスからのイベントを受け付ける(S1101)。本実施例においてイベントは、先入先出方式(FIFO)で管理されるイベントキューとして扱うものとする。他サービスから要求されたイベントは、該当するサービスがそれぞれもつイベントキューの最後尾に追加される。そして、各サービスはイベントキューの再先頭に登録されているイベントがあれば、イベント待ちを完了し、当該イベントに応じた処理を実行する。以後の説明でも同様とする。
【0127】
イベントを受け付けたら、電力制御サービス265は、各サービスに対して当該電源制御に関するイベントが発生したことの通知を行い、サービス停止要求をする(S1102)。当該サービス停止要求を受けて、ネットワークサービス266は、ネットワーク通信を停止する(S1151)。PDL印刷サービス263は、新たな印刷ジョブの生成を停止する(S1152)。時刻制御サービス264は、時刻補正のための処理を停止する(S1153)。ユーザインタフェイスサービス261は、電源制御処理が開始したことをユーザへ報知するとともに、新たな操作の受付を停止する(S1154)。
【0128】
ストレージ管理サービス262は、ストレージへのアクセス要求の受付を停止する(S1155)。より具体的には、ストレージ管理サービス262は、外部からの新たな書き込み・読み込み要求の受付を停止する(S1161)。ストレージ管理サービス262は、キャッシュDB181上の全キャッシュデータを内蔵ストレージ部130へ反映する(S1162)。より具体的には、ストレージ管理サービス262は、キャッシュDB181上に保持しているキャッシュデータそれぞれに対するFlushイベントを、ストレージ管理サービス262が管理するイベントキューへ追加する。ストレージ管理サービス262は、イベント待ちの中で、イベントキューに保持しているFlushイベントを受領し処理する事で、キャッシュデータの内容を暗号化して内蔵ストレージ部130に記録する。Flushイベントに対する具体的な処理の詳細は、
図14のフローチャートを用いて後述する。なお、キャッシュデータは、例えば、PDLデータや、ファクシミリデータ等である。
【0129】
本実施例を適用する事で(基本的に)Flush処理で必要な暗号鍵を少なくとも1つ以上は正常な状態で維持できる。これにより、システム電源切断・システム再起動あるいは通常電力モードより消費電力が低い省電力モード移行をする際に、キャッシュDB181上のキャッシュデータの内容を暗号化した上で、内臓ストレージ部130に記録することを保証できる。
【0130】
電力制御サービス265は、各制御部に対して当該電源制御に関するイベントが発生したことの通知を行い、制御停止要求をする(S1103)。各制御部は、制御部と関連付けられるハードウェアを電力切断可能な状態へ移行したり、通電を停止したりする。
【0131】
電力制御サービス265は、他サービスからのイベント種別に応じて処理を分岐する(S1111)。システム電源切断イベントであれば、電力制御サービス265はコントローラボードの電源切断処理を実行する(S1121)。また、システム再起動イベントであれば、電力制御サービス265はコントローラボードの再起動処理を実行する(S1122)。当該処理の詳細については、電源ユニット113からコントローラ110に供給される電力を制御する一般的な画像形成装置の電力制御に関する処理と同等であるため、説明は省略する。なお、再起動処理に関しては、電力制御サービス265からWatchDogTimer135を制御する事で、システムを再起動してもよい。また、S1121、S1122が実行された後は、新たなイベントを検知する必要はないため、処理を終了する。
【0132】
電力制御サービス265が受信したイベント種別がシステム省電力モード移行であった場合、電力制御サービス265はコールバック理由を省電力モード突入に設定する(S1131)。そして、電力制御サービス265は暗号HW制御部254が提供する電源制御CB関数を呼び出し、後述の
図12のフローチャートを実行する(S1132)。電力制御サービス265は、復帰トリガーを検出するために省電力モード突入処理を実行する(S1133)。S1133において省電力モード突入処理が実行されると画像形成装置102は、省電力状態になる。省電力状態では、システム内外からの復帰トリガーを検出するまで待つ(S1134)。例えばユーザがUIパネル111を操作したことを復帰トリガーとして検知してもよい。あるいは、RealTimeClock134が所定の時刻となったことを復帰トリガーとして検知してもよい。NIC124が外部からのデータを受信したことを復帰トリガーとして検知してもよい。プリントエンジン112に備えられた各種センサーによって、ユーザがトナー交換用ドアなどを操作したことを復帰トリガーとして検知してもよい。
【0133】
省電力状態において復帰トリガーを検出すると、電力制御サービス265は、通常の電力状態へ復帰するために省電力モード復帰処理を実行する(S1141)。電力制御サービス265は、各制御部に対して当該電源制御に関するイベントが発生したことの通知を行い、制御再開要求をする(S1144)。各制御部は制御対象となっているハードウェアへの通電を停止したり、電力切断可能な状態へ移行したりする。また、電力制御サービス265は、各サービスに対して当該電源制御に関するイベントが発生したことの通知を行い、サービス再開要求をする(S1145)。電力制御サービス265はコールバック理由を省電力モード復帰に設定した上で(S1142)、暗号HW制御部254が提供する電源制御CB関数を呼び出し、後述の
図12のフローチャートを実行する(S1143)。
【0134】
以上の処理により、電力制御サービス265が他サービスから電力制御に関するイベントを受信した場合に、暗号HW制御部254に対して当該イベントが発生したことを伝達できる。なお、本実施例では説明を割愛しているが、省電力状態を複数の段階に分ける構成としてもよい。
【0135】
図12は、暗号HW制御部254が提供する電力制御CB関数のフローチャートである。また、
図13は、手動再起動要求時の警告画面である。当該処理は、暗号HW制御部254の機能として、CPU121によって実行される。
【0136】
暗号HW制御部254は、
図6で前述したcrypt_keyレジスタ検証処理を実行する(S1201)。暗号HW制御部254は、
図8で前述した利用不可crypt_keyレジスタ数の算出を行う(S1203)。暗号HW制御部254は、利用不可crypt_leyレジスタ数に応じて処理を分岐する(S1211)。利用不可crypt_keyレジスタ数が0である場合、暗号HW151上の暗号鍵を保持したレジスタは全て利用可能であることから、暗号HW制御部254は処理を終了する。利用不可crypt_keyレジスタ数が0ではない場合、暗号HW制御部254はコールバック理由に応じて処理を分岐する(S1231)。
【0137】
コールバック理由が省電力モード復帰である場合、暗号HW制御部254は、利用不可crypt_leyレジスタ数が、エラー報知要求レジスタ閾値未満であるかを判別する(S1241)。
【0138】
エラー報知要求鍵レジスタ閾値未満である場合、crypt_key0レジスタ320からcrypt_key7レジスタ327のうち少なくとも一部が正常ではない状況ではある。よって、ユーザが任意のタイミングでシステムを再起動することで暗号HW151をリカバリすることが望ましい状態である。暗号HW制御部254は、ユーザインタフェイスサービス261に対して、暗号HW警告報知(手動再起動要求)を通知する(S1242)。ユーザインタフェイスサービス261は当該通知に基づいて、UIパネル111を介して、
図13(A)に示す再起動を促す警告をユーザへ報知する。この場合、ステータスメッセージ1301のように、その他のユーザ操作の邪魔にならない部分へ情報を報知したり、再起動ボタン1302を表示したりする。
【0139】
エラー報知要求鍵レジスタ閾値未満以上である場合、crypt_key0レジスタ320からcrypt_key7レジスタ327のうち大部分が正常ではない状況ではある。よって、ユーザが即座にシステムを再起動することで暗号HW151をリカバリすることが望ましい状態である。暗号HW制御部254は、ユーザインタフェイスサービス261に対して、暗号HWエラー報知(手動再起動要求)を通知する(S1252)。ユーザインタフェイスサービス261はUIパネル111を介して、当該通知に基づいて、
図13(B)に示す再起動を促すエラーをユーザへ報知する。この場合、ポップアップによってエラーを表示する事で、ユーザが再起動以外は操作できなくする。
【0140】
ユーザインタフェイスサービス261は、再起動ボタン1302や再起動ボタン1311が押下されたことを検知すると、電力制御サービス265に対して、システム再起動を要求するイベントを発行する。
【0141】
本実施例では、システムが省電力モードから復帰するタイミングにおいて、暗号HW制御部254は、ユーザに手動での再起動指示を要求しつつ、システムを継続動作する。システムが省電力モードから復帰するタイミングでは、ユーザが画像形成装置を何らかの目的で利用したいという意図がある可能性が高い。そのため、暗号HW制御部254は、制限付きであってもシステムの継続動作を試みる。ただし、crypt_key0レジスタ320~crypt_key7レジスタ327に含まれる暗号鍵が想定以上に破損している場合には、全ての暗号鍵が破損する前に復旧が必要となるため、ユーザに対しては、再起動を強く要請する画面を表示する。そのために、ユーザからの再起動指示以外の操作は受け付けないことが望ましい。
【0142】
コールバック理由が省電力モード突入である場合、暗号HW制御部254は、電力制御サービス265に対して、システム再起動を要求するイベントを発行する(S1261)。システムが省電力モードへ移行するタイミングでは、ユーザは画像形成装置を何らかの目的で利用する意図が無い可能性が高い。省電力突入タイミングでシステムを再起動する事で、ユーザの利便性を害する事なく、crypt_key0レジスタ320~crypt_key7レジスタ327に含まれる暗号鍵の復旧を試みる。再起動後、暗号HW151および暗号HWレジスタ153が物理的・電気的に破損していなければ、当該レジスタには同一の正常な暗号鍵が再度セットされている。
【0143】
なお、本実施例では、画像形成装置102に組み込まれているUIパネル111を、ユーザに対するエラーや警告を報知する手段及びユーザからの再起動指示を受領する手段、つまり、ユーザインタフェイスとして用いた。しかしながら、例えば、UIパネル111以外のユーザインタフェイスを備えた構成等であってもよい。
【0144】
例えば、画像形成装置102は、NIC124を介してデータ処理装置101に対してエラーや警告要求を送信したり、再起動指示を受信したりする構成にも拡張できる。この際、エラーや警告要求を受信したデータ処理装置101は、データ処理装置101に備えられた出力手段によって、エラーや警告を報知する。また、データ処理装置101に備えられた入力手段によって再起動指示を受け付けたら、画像形成装置102に対して再起動要求を伝達することができる。このように、ユーザインタフェイスが画像形成装置102に物理的に組み込まれていなくても適用できる。ユーザインタフェイスの具体的な構成については、本構成に限定しない。
【0145】
(ストレージ制御処理)
図14は、暗号HW制御部254が提供するストレージ制御処理のフローチャートの一部である。本フローチャートは、CPU121によって実行される。
【0146】
当該処理は、ストレージ管理サービス262の機能として、CPU121によって実行される。なお、ストレージ管理サービス262が行うべき機能は多岐にわたるため本実施例の説明に関連する部分を説明する。
【0147】
ストレージ管理サービス262は、他サービスからのイベントを受け付ける(S1401)。ストレージ管理サービス262は、他サービスからのイベント種別に応じて処理を分岐する(S1402)。
【0148】
イベント種別がWriteイベントである場合、ストレージ管理サービス262は、書き込もうとしているデータが、キャッシュDB181上にキャッシュデータとして記録されているのかを確認する(S1410)。キャッシュデータとして記録されていない場合、ストレージ管理サービス262はキャッシュDB181にキャッシュデータを追加できる空き領域があるかを確認する(S1462)。
【0149】
キャッシュデータを追加できる空き領域が無ければ、ストレージ管理サービス262は、コールバック理由をWrite要求に設定する(S1411)。そして、暗号HW制御部254が提供する暗号制御CB関数を呼び出し、実行する(S1412)。CPU121による暗号制御CB関数の実行は、後述の
図15で説明する。
【0150】
そして、ストレージ管理サービス262は内蔵ストレージ制御部253に対してデータの書き込み処理を要求する(S1413)。具体的には、CPU121が内蔵ストレージコントローラ142に書き込み指示を出す。そして、内蔵ストレージコントローラ142が、暗号HW151に書き込みデータを暗号化させる。そして、内蔵ストレージコントローラ142が暗号化されたデータを内蔵ストレージ部130に書き込む。
【0151】
S1410においてキャッシュデータとして記録されている場合、ストレージ管理サービス262は、書き込もうとしてデータの内容で、当該キャッシュデータを更新する(S1414)。そして、ストレージ管理サービス262は、キャッシュDB181の管理情報を更新する処理を実行する(S1491)。キャッシュDB181の管理情報には、当該対象となっているデータが内蔵ストレージ部130上で存在するオフセット位置情報、最後にアクセスされた時刻情報、アクセス回数情報などを管理する。
【0152】
イベント種別がFlushイベントである場合、ストレージ管理サービス262は、コールバック理由をWrite要求に設定した上で(S1411)、暗号HW制御部254が提供する暗号制御CB関数を呼び出す(S1412)。そして、ストレージ管理サービス262は内蔵ストレージ制御部253に対してデータの書き込み処理を要求する(S1413)。
【0153】
これにより、ストレージ管理サービス262は、キャッシュDB181上の管理情報の状態にかかわらず、書き込もうとしているデータを内蔵ストレージ部130上に必ず反映する。
【0154】
イベント種別がReadイベントである場合、ストレージ管理サービス262は、読み込もうとしているデータが、キャッシュDB181上にキャッシュデータとして記録されているのかを確認する(S1420)。キャッシュDB181上にキャッシュデータとして記録されていない場合、ストレージ管理サービス262は、コールバック理由をRead要求に設定した上で(S1421)、暗号HW制御部254が提供する暗号制御CB関数を呼び出す(S1422)。そして、ストレージ管理サービス262は内蔵ストレージ制御部253に対してデータの読み込み処理を要求する(S1423)。
【0155】
キャッシュDB181上にキャッシュデータとして記録されている場合、ストレージ管理サービス262は、キャッシュDB181上のキャッシュデータに記録している内容を、読込結果とする(S1424)。そして、ストレージ管理サービス262は、キャッシュDB181の管理情報を更新する処理を実行する(S1491)。
【0156】
前述の通り、内蔵ストレージ制御部253に対してデータの読み書き処理を要求した場合、暗号HW151がデータの暗号化・復号処理を実行し、必要に応じてStatusレジスタ301にエラーを記録する。
【0157】
ストレージ管理サービス262は、コールバック理由をステータス確認に設定した上で(S1431)、暗号HW制御部254が提供する暗号制御CB関数を呼び出す(S1432)。ストレージ管理サービス262は、暗号制御CB関数の戻り値によって処理を分岐する(S1433)。
【0158】
暗号制御CB関数の戻り値が2(エラー発生中)であれば、ストレージ管理サービス262は、コールバック理由を代替暗号鍵セット要求に設定した上で(S1441)、暗号HW制御部254が提供する暗号制御CB関数を呼び出す(S1442)。ストレージ管理サービス262は、暗号制御CB関数の戻り値によって処理を分岐する(S1443)。
【0159】
暗号制御CB関数の戻り値が3(警告報知要求)であれば、ストレージ管理サービス262は、ユーザインタフェイスサービス261に対して、暗号HW警告報知(手動再起動要求)を通知する(S1451)。また、暗号制御CB関数の戻り値が4(エラー報知要求)であれば、ストレージ管理サービス262は、ユーザインタフェイスサービス261に対して、暗号HW警告報知(手動再起動要求)を通知する(S1452)。警告またはエラーを表示する一連の流れについてはすでに説明済みであるため、割愛する。
【0160】
暗号制御CB関数の戻り値が1(エラー未発生中)であれば、ストレージ管理サービス262は、イベント種別に応じて処理を分岐する(S1461)。
【0161】
イベント種別がFlushイベント以外であれば、ストレージ管理サービス262はキャッシュDB181にキャッシュデータを追加できる空き領域があるかを確認する(S1462)。キャッシュデータを追加できる空き領域が無ければ、ストレージ管理サービス262は、キャッシュDB181に記憶されているキャッシュデータの中から、フラッシュしても良い対象を探索する(S1463)。例えば、最もアクセス頻度の低いキャッシュデータや、あるいは最後にアクセスしてから最も時間が経過したキャッシュデータなどを、最もフラッシュしても良いキャッシュデータと判断できる。
【0162】
ストレージ管理サービス262は、当該フラッシュ対象のキャッシュデータに対するFlush要求を行う(S1464)。この処理は、先に
図11においても説明した通り、ストレージ管理サービス262が管理しているイベントキューの最後尾に、該当するキャッシュデータのFlushイベントを追加する事で行う。当該イベントは、当該CB関数の一連の処理が終わった後、S1401でのイベント待ちでイベントキューから受領され、イベント種別がFlushイベントである一連の処理を開始するトリガーとなる。
【0163】
キャッシュデータを追加できる空き領域があれば、ストレージ管理サービス262は、読み込みもしくは書き込み対象となったデータを、キャッシュDB上にキャッシュデータとして記録する(S1481)。ストレージ管理サービス262は、キャッシュDBに新たなキャッシュが登録できる空き領域があるかを検証する(S1482)。空き領域がなければ、ストレージ管理サービス262は、フラッシュ対象キャッシュデータの探索を行い(S1483)、当該キャッシュデータのFlush要求を行う(S1484)。
【0164】
イベント種別がFlushイベントであれば、ストレージ管理サービス262はキャッシュDB181から、フラッシュ対象となったキャッシュデータを削除する(S1471)。
【0165】
そして、ストレージ管理サービス262は、キャッシュDB181の管理情報を更新する処理を実行する(S1491)。
【0166】
以上の実施例で示した通り、ストレージ管理サービス262はReadイベントもしくはWriteイベントを受け付けると、キャッシュDB181上に該当するキャッシュデータが存在するかを確認する。キャッシュデータがあれば、ストレージ管理サービス262は、内蔵ストレージ部130へアクセスせずに、当該キャッシュデータを使って応答する。
【0167】
RAM123に対するアクセスは、内蔵ストレージ部130に対するアクセスよりも十分高速である。そのため、本実施例のような構成をする事で、内蔵ストレージ部130部のアクセス性能を隠蔽することができる。
【0168】
しかし、その一方で、キャッシュDB181上のキャッシュデータ内のデータと、内蔵ストレージ部130上に記憶している内容は、Flush処理が行われない限りは常に乖離し続けることになる。キャッシュDB181を格納しているRAM123の内容は、システムの電源切断や再起動によって揮発する。もしくは、RAM123の内容を保持したまま、システムが省電力状態に入った場合に、想定していない電源切断をしても揮発してしまう。そのため、RAM123の内容、すなわち、キャッシュDB181が揮発する前に、内蔵ストレージ部130に反映しなければならない。そして、キャッシュデータ内のデータを内蔵ストレージ部130に反映するには、暗号HW151が正常動作できることを保証しなければならない。
【0169】
以上の一連の処理によって、ストレージ管理サービス262は暗号HW151で発生しているエラーを検知し、必要に応じて、ユーザインタフェイスサービス261に警告もしくはエラー表示を要求する事ができる。これにより、暗号HWレジスタ153内の全ての暗号に用いる情報が利用不可となる前に、一部でも破損したことを検知したら、速やかに再起動によって復旧するべく、ユーザへエラーや警告を報知できる。
【0170】
図15は、暗号HW制御部254が提供する暗号制御CB関数のフローチャートである。当該処理は、暗号HW制御部254の機能として、CPU121によって実行される。
【0171】
暗号HW制御部254は、コールバック理由に応じて処理を分岐する(S1511)。コールバック理由がwrite要求である場合、暗号HW制御部254はencdecレジスタ303に0(enc)をセットする(S1512)。また、コールバック理由がread要求である場合、暗号HW制御部254はencdecレジスタ303に1(dec)をセットする。暗号HW制御部254は、コールバック理由がread要求もしくはwrite要求であれば、データ格納一のオフセット情報をtweakレジスタ304に書き込む(S1513)。そして、暗号HW制御部254は、戻り値に0(設定完了)をセットし、処理を完了する。
【0172】
コールバック理由がステータス確認である場合、暗号HW制御部254は、statusレジスタ301にエラーが記録されたかに応じて処理を分岐する(S1521)。statusレジスタ301にエラーが記録されていない場合、暗号HW制御部254は、戻り値に1(エラー未発生中)をセットし、処理を完了する(S1532)。また、statusレジスタ301にエラーが記録されている場合、暗号HW制御部254は、戻り値に1(エラー発生中)をセットし、処理を完了する(S1533)。
【0173】
コールバック理由が代替鍵セットである場合、暗号HW制御部254は、keyregレジスタ302で指定されている鍵レジスタ番号を読み出し、変数tとする(S1541)。暗号HW制御部254は、available_keyレジスタ310のうち、添え字[変数t][0~7]に該当する箇所に対して、1(NG)をセットする(S1542)。すなわち、変数t=4であれば、available_keyレジスタ310の[4][0]、[4][1]、[4][2]…[4][7]に相当する要素に対して、1(NG)がセットする。同様に、暗号HW制御部254は、available_keyレジスタ310のうち、添え字[0~7][変数t]に該当する箇所に対して、1(NG)をセットする(S1543)。
【0174】
暗号HW制御部254は、
図7に示すように最適crypy_keyレジスタを検出する(S1551)。そして、その結果をkeyregレジスタ302にセットする(S1552)。
【0175】
次に
図8に示すように暗号HW制御部254は、利用不可crypt_keyレジスタ数を算出する(S1561)。暗号HW制御部254は、利用不可crypt_keyレジスタ数が、エラー報知要求crypt_keyレジスタ数閾値未満であるかを判定する(S1562)。利用不可crypt_keyレジスタ数が、エラー報知要求crypt_keyレジスタ数閾値未満であれば、暗号HW制御部254は、戻り値に3(警告報知要求)をセットし、処理を完了する(S1563)。また、エラー報知要求crypt_keyレジスタ数閾値以上であれば、暗号HW制御部254は、戻り値に4(エラー報知要求)をセットし、処理を完了する(S1564)。
【0176】
以上の処理により、暗号HW制御部254はエラー時に利用していた暗号鍵を格納していたレジスタは除外し、それ以外の中から新たな暗号鍵が格納されているレジスタを代替の暗号鍵として検出し、keyregレジスタ302へセットすることができる。同時に、戻り値によって、ユーザインタフェイスサービス261に対して間接的に警告ないしエラー表示の要求を行う。
【0177】
ここで、本実施例においては、statusレジスタ301にエラーが記録されている時点で、keyregレジスタ302で指定されている鍵レジスタ番号は、一律利用不可であることを前提として説明をしたが本構成に限らない。
【0178】
例えば、暗号HW制御部254は、encdecレジスタ303を参照し、エラーが発生した原因が書き込み(暗号化)によるものか、読み込み(復号)によるものかを判断してもよい。当該判断に基づき、暗号HW制御部254は、available_keyレジスタ310の相当する要素に1(NG)をセットする構成としても良い。
【0179】
あるいは、statusレジスタ301にエラーが記録されていることを検知した都度、暗号HW制御部254は、それぞれの暗号鍵が保持されているレジスタが利用可能であるかを検証しなおす構成としても良い。当該検証処理は、
図6に示すcrypt_key検証のフローチャートを実行することによって実現できる。これらの変形については、本発明の趣旨を逸脱しない限りで適用可能である。
【0180】
本実施例に開示したとおり、暗号HW151上で暗号化・復号に利用する暗号鍵を保持するレジスタを多重化し、一部のレジスタが破損しても残りのレジスタで縮退動作できる。特に、データの暗号化・復号をするタイミング及びシステムが省電力状態に突入・復帰するタイミングで、利用可能な暗号鍵を保持するレジスタ数を判定し、ユーザへ再起動要求を報知したり、自動的に再起動したりできるようになる。
【0181】
以上により、ストレージ上のデータを暗号化・復号するための暗号HWを備えた情報処理装置において、一定数以上の暗号鍵が常時利用可能な状態となり、システムの正常な動作が保証できる。
【0182】
(その他の実施形態)
以上、本発明の様々な例と実施形態を示して説明したが、本発明の趣旨と範囲は、本明細書内の特定の説明に限定されるものではない。
【0183】
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
【符号の説明】
【0184】
121 CPU
123 RAM
151 暗号HW
153 暗号HWレジスタ
181 キャッシュDB