(57)【要約】【課題】フラッシュメモリに関連した自己診断の結果がＮＧとなった場合であっても、フラッシュメモリに格納されたプログラムや秘密情報をセキュアな状態で好適に自動修復し、安全性とユーザの利便性を両立したより堅牢な仕組みを提供する。【解決手段】本情報処理装置は、格納する情報の特徴に応じて複数の領域に分割したフラッシュメモリを備える。本情報処理装置は、各領域に格納されたデータの不具合を、各領域ごとに異なる手法で検知し、検知した不具合を、各領域ごとに異なる手法で修復する。【選択図】  図１１
2019057156.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
格納する情報の特徴に応じて複数の領域に分割したフラッシュメモリと、
各領域に格納されたデータの不具合を、各領域ごとに異なる手法で検知する検知手段と、
前記検知手段によって検知された不具合を、各領域ごとに異なる手法で修復する修復手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記フラッシュメモリは、チップに内蔵されたフラッシュメモリであり、
前記検知手段によって検知された不具合を、前記チップの内部で修復可能か否かを判定する判定手段をさらに備え、
前記修復手段は、前記判定手段によって前記不具合を前記チップの内部で修復可能と判定されると、前記フラッシュメモリの当該領域における過去に格納された情報を用いて、該領域の情報を修復することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記判定手段によって前記不具合を前記チップの内部で修復可能と判定される、前記フラッシュメモリの領域は、リングバッファであることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記リングバッファには、情報の書込みを開始する位置に開始フラグが書き込まれ、情報の書込みが終了した位置に終了フラグが書込まれ、
前記検知手段は、前記開始フラグ及び前記終了フラグが正常に書き込まれているか否かを判断することによって、前記フラッシュメモリのうち、前記リングバッファの領域の不具合を検知することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記フラッシュメモリの分割された領域には、前記リングバッファとして、前記情報処理装置がシャットダウンする際に、次回起動後の状態を確定するために必要なパラメータが格納されるパラメータ領域が含まれることを特徴とする請求項３又は４に記載の情報処理装置。
【請求項６】
前記フラッシュメモリの分割された領域には、前記情報処理装置の個体別にユニークな秘密情報が格納される秘密情報領域が含まれ、
前記検知手段は、誤り検出符号を用いて前記秘密情報領域の不具合を検知することを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
前記修復手段は、前記秘密情報領域の不具合を修復する際に、前記フラッシュメモリが内蔵されたチップとは異なるチップに保持された秘密情報を認証しつつ利用することによって、該秘密情報領域に格納された認証情報を修復することを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記秘密情報領域は、前記秘密情報を格納する第１領域と、該第１領域の情報を修復すべく前記異なるチップから受信した秘密情報を格納する第２領域とを含むことを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記秘密情報領域に格納された秘密情報を、認証情報とともに前記異なるチップに格納するバックアップ手段をさらに備えることを特徴とする請求項７又は８に記載の情報処理装置。
【請求項１０】
前記フラッシュメモリの分割された領域には、前記検知手段及び前記修復手段の処理に関連するプログラムがデジタル署名を付与して格納されるプログラム領域が含まれ、
前記検知手段は、前記デジタル署名を用いて前記プログラム領域の不具合を検知することを特徴とする請求項１乃至９の何れか１項に記載の情報処理装置。
【請求項１１】
前記修復手段は、前記プログラム領域の不具合を修復する際に、前記フラッシュメモリが内蔵されたチップとは異なるチップに保持されたプログラムを、デジタル署名を用いて認証しつつ利用することによって、該プログラム領域に格納されたプログラムを修復することを特徴とする請求項１０に記載の情報処理装置。
【請求項１２】
前記プログラム領域は、前記プログラムを格納する第３領域と、該第３領域のプログラムを修復すべく前記異なるチップから受信したプログラムを格納する第４領域とを含むことを特徴とする請求項１１に記載の情報処理装置。
【請求項１３】
情報処理装置であって、
第１制御回路と、
前記第１制御回路によって制御されるとともに、格納する情報の特徴に応じて複数の領域に分割した内蔵フラッシュメモリを備える第２制御回路と、
前記内蔵フラッシュメモリの各領域に格納されたデータの不具合を、各領域ごとに異なる手法で検知する検知手段と、
前記検知手段によって検知された不具合を、各領域ごとに異なる手法で修復する修復手段と
を備えることを特徴とする情報処理装置。
【請求項１４】
前記検知手段及び前記修復手段は、前記内蔵フラッシュメモリの領域に応じて、前記第２制御回路のみで実現されるか、又は、前記第１制御回路及び前記第２制御回路で実現されるかが切り替えられることを特徴とする請求項１３に記載の情報処理装置。
【請求項１５】
前記第１制御回路及び前記第２制御回路は、同一のボードに実装され、
前記ボードと接続された外部記憶装置に、個体別にユニークな秘密情報から生成された暗号鍵で暗号化されたマジックナンバーを格納する手段をさらに備え、
前記検知手段及び前記修復手段は、前記ボードの故障により交換されると、前記外部記憶装置に格納された前記マジックナンバーを用いて処理を実行することを特徴とする請求項１３又は１４に記載の情報処理装置。
【請求項１６】
格納する情報の特徴に応じて複数の領域に分割したフラッシュメモリを備える情報処理装置の制御方法であって、
検知手段が、各領域に格納されたデータの不具合を、各領域ごとに異なる手法で検知する検知工程と、
修復手段が、前記検知工程で検知された不具合を、各領域ごとに異なる手法で修復する修復工程と
を含むことを特徴とする情報処理装置の制御方法。
【請求項１７】
第１制御回路と、前記第１制御回路によって制御されるとともに、格納する情報の特徴に応じて複数の領域に分割した内蔵フラッシュメモリを備える第２制御回路と、を備える情報処理装置の制御方法であって、
検知手段が、前記内蔵フラッシュメモリの各領域に格納されたデータの不具合を、各領域ごとに異なる手法で検知する検知工程と、
修復手段が、前記検知工程で検知された不具合を、各領域ごとに異なる手法で修復する修復工程と
を含むことを特徴とする情報処理装置の制御方法。
【請求項１８】
格納する情報の特徴に応じて複数の領域に分割したフラッシュメモリを備える情報処理装置の制御方法における各工程をコンピュータに実行させるためのプログラムであって、前記制御方法は、
検知手段が、各領域に格納されたデータの不具合を、各領域ごとに異なる手法で検知する検知工程と、
修復手段が、前記検知工程で検知された不具合を、各領域ごとに異なる手法で修復する修復工程と
を含むことを特徴とするプログラム。
【請求項１９】
第１制御回路と、前記第１制御回路によって制御されるとともに、格納する情報の特徴に応じて複数の領域に分割した内蔵フラッシュメモリを備える第２制御回路と、を備える情報処理装置の制御方法における各工程をコンピュータに実行させるためのプログラムであって、前記制御方法は、
検知手段が、前記内蔵フラッシュメモリの各領域に格納されたデータの不具合を、各領域ごとに異なる手法で検知する検知工程と、
修復手段が、前記検知工程で検知された不具合を、各領域ごとに異なる手法で修復する修復工程と
を含むことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、その制御方法、及びプログラムに関するものである。
【背景技術】
【０００２】
近年、フラッシュメモリ（Ｆｌａｓｈ Ｍｅｍｏｒｙ）の大容量化、低価格化、及び高速化が進み、書き換え可能な不揮発性メモリの利点から情報処理装置である印刷装置などの組み込み機器に広く利用されている。例えば、フラッシュメモリは、各種メモリカード類やｅＭＭＣ（組み込み型マルチメディアカード）、ＳＳＤ（ソリッドステートドライブ）などの汎用デバイス形態、ＡＳＩＣ（カスタムチップ）に内蔵されたマルチチップ形態や組み込み形態として利用されている。特に、後者のＡＳＩＣ内蔵タイプは、フラッシュメモリに格納されたプログラムや秘密情報が盗聴や改ざんに強いことからセキュリティチップに用いられ、各種セキュリティ認証を取得したチップも徐々に増えつつある。
【０００３】
一方でフラッシュメモリの欠点としては、寿命やデータ保持期間の制約などフラッシュメモリ特有の性格に起因する事象や瞬断や静電ノイズなど自然災害・人為的な事象に起因するセクタ不良やデータ欠損や化けの可能性が挙げられる。ここで、格納データの一部欠損や化けについては、それが人工的な改ざんなのか否かを判定することは難しい。別途判定プログラムを組み込み解析する必要があり、一般的なセキュリティレベルにおいてこれらは混在された形で判定されるのが通常である。
【０００４】
特許文献１には、システムの起動時にプログラムの正真性（完全性）を確認し、改ざん（故障時も含まれる）検知を行う方法が提案されている。具体的には、起動時においてフラッシュメモリに格納されたプログラム領域のハッシュ値が計算され、予め保持している値と比較されることで正真性の判定が行われている。判定の結果、改ざん（故障）ありと判定されると別デバイスであるＲＯＭ（リード・オンリー・メモリ）から起動される仕組みである。これによりプログラムの改ざんや故障があってもシステムは通常起動が可能であり、安全性とユーザの利便性の両立を図ることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１５−６９４０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記従来技術には以下に記載する課題がある。例えば、上記従来技術では、記憶デバイスを冗長化して搭載する必要がある。これは、ＡＳＩＣにフラッシュメモリを内蔵したチップである場合、チップ内部にフラッシュメモリとマスクＲＯＭ（ＭａｓｋＲＯＭ）を搭載する必要があり、チップ単価が増大してしまう。また、ＡＳＩＣ内部に組み込まれるマスクＲＯＭのサイズは小規模であり、サイズの大きい複雑なプログラムを搭載することが一般的に困難である。さらに、市場トラブル等で既存プログラムの改善や修復がなされた場合にデグレードして不整合が生じるなどの課題がある。また、ＡＳＩＣがセキュリティチップの場合、個体別にユニークな秘密情報をフラッシュメモリ内に保持しており、当該秘密情報が無い状態で起動した場合にはＨＤＤ（ハードディスクドライブ）やＳＳＤに格納された既存データを正常に読み取ることができない。
【０００７】
本発明は、上述の問題に鑑みて成されたものであり、フラッシュメモリに関連した自己診断の結果がＮＧとなった場合であっても、フラッシュメモリに格納されたプログラムや秘密情報をセキュアな状態で好適に自動修復し、安全性とユーザの利便性を両立したより堅牢な仕組みを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、情報処理装置であって、格納する情報の特徴に応じて複数の領域に分割したフラッシュメモリと、各領域に格納されたデータの不具合を、各領域ごとに異なる手法で検知する検知手段と、前記検知手段によって検知された不具合を、各領域ごとに異なる手法で修復する修復手段とを備えることを特徴とする。
【０００９】
また、本発明は、情報処理装置であって、第１制御回路と、前記第１制御回路によって制御されるとともに、格納する情報の特徴に応じて複数の領域に分割した内蔵フラッシュメモリを備える第２制御回路と、前記内蔵フラッシュメモリの各領域に格納されたデータの不具合を、各領域ごとに異なる手法で検知する検知手段と、前記検知手段によって検知された不具合を、各領域ごとに異なる手法で修復する修復手段とを備えることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、フラッシュメモリに関連した自己診断の結果がＮＧとなった場合であっても、フラッシュメモリに格納されたプログラムや秘密情報をセキュアな状態で好適に自動修復し、安全性とユーザの利便性を両立したより堅牢な仕組みを提供することができる。
【図面の簡単な説明】
【００１１】
【図１】一実施形態に係るメインコントローラのシステム構成例を示す図。
【図２】一実施形態に係るＳＡＴＡブリッジ構成の接続例を示す図。
【図３】一実施形態に係るＳＡＴＡホスト制御部及びブリッジ制御部の内部構成例を示す図。
【図４】一実施形態に係る内蔵フラッシュメモリの領域構成例と各領域での検証手法を示す図。
【図５】一実施形態に係るＳＡＴＡブリッジ制御部との拡張コマンド例を示す図。
【図６】一実施形態に係るＳＡＴＡブリッジ制御部内部のセキュリティに関係するＦＳＭを示す図。
【図７】一実施形態に係るＳＡＴＡホスト制御部のインストールと起動シーケンス処理を示す図。
【図８】一実施形態に係るＳＡＴＡブリッジ制御部の起動シーケンスを示す図。
【図９】一実施形態に係る秘密情報のバックアップ処理フローを示す図。
【図１０】一実施形態に係るパラメータ書込み不良時の自己修復処理フローを示す図。
【図１１】一実施形態に係る秘密情報不良検知時の自己修復フローを示す図。
【図１２】一実施形態に係る秘密情報及びプログラム更新処理フローを示す図。
【図１３】一実施形態に係るコントロールボード故障交換時の自動修復処理フローを示す図。
【発明を実施するための形態】
【００１２】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念及び下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確立されるのであって、以下の個別の実施形態によって限定されるわけではない。
【００１３】
＜第１の実施形態＞
＜情報処理装置の構成＞
以下では、本発明の第１の実施形態について説明する。まず、図１を参照して、本実施形態に係る情報処理装置の一例として印刷装置の構成について説明する。ここでは、主に当該印刷装置に設けられるメインコントローラ１２０のシステム構成例について説明する。図１に示すように、メインコントローラ１２０は、メインＣＰＵ１０１、メモリ制御部１０２、フラッシュメモリ１０３、ＤＲＡＭ１０４、ＬＡＮ−ＩＦ制御部１０５、及びＲｅａｄｅｒ−ＩＦ部１０８を備える。さらに、メインコントローラ１２０は、画像処理部１１０、ＳＡＴＡホスト制御部１１１、ＳＡＴＡブリッジ制御部１１２、パネルＩＦ部１１５、及びビデオ出力ＩＦ部１１７を備える。
【００１４】
メインＣＰＵ（中央処理演算器）１０１は、システム制御や各種演算処理を行う。メモリ制御部１０２は、各種メモリデバイスへの入出力制御やＤＭＡ（ダイレクト・メモリ・アクセス）制御を行う。フラッシュメモリ１０３は、書き換え可能な不揮発性メモリであり、システム全体の制御プログラムや制御パラメータ等が格納される。ＤＲＡＭ（ダイナミック・ランダム・アクセス・メモリ）１０４は、ＤＤＲ（Ｄｏｕｂｌｅ−Ｄａｔａ−Ｒａｔｅ）メモリに代表される揮発性の書き換え専用メモリである。プログラムの作業領域や印刷データの格納領域、各種テーブル情報の格納領域等に用いられる。
【００１５】
ここで、メモリ制御部１０２と各種メモリデバイスとの関係は、簡略化して表現したものであって、一般的には独立に制御される。また、そのＩＦ（インタフェース）はメモリデバイスが搭載されるストレージデバイスとしての各種ＩＦを有していることを想定しているのであって特定のＩＦに限定しているわけではない。例えば、ｅＭＭＣ、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）、ＳＰＩ（Ｓｅｒｉａｌ  Ｐｅｒｉｐｈｅｒａｌ  Ｉｎｔｅｒｆａｃｅ）などであっても構わない。
【００１６】
ＬＡＮ−ＩＦ制御部１０５は、印刷装置に接続されるローカル・エリア・ネットワーク１０６との入出力制御を行う。一般的にはＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）プロトコルに対応する。ネットワークケーブルを介して外部ＨＯＳＴコンピュータ１０７などのネットワーク対応機器と接続され、ネットワーク経由でのプリントを行うことができる。Ｒｅａｄｅｒ−ＩＦ制御部１０８は、スキャナ装置１０９との通信制御を行う。スキャナ装置１０９によってスキャンした入力画像データを印字させることでコピー機能を実現する。画像処理部１１０は、ＬＡＮ−ＩＦ制御部１０５、Ｒｅａｄｅｒ−ＩＦ制御部１０８を介して取り込んだ画像データに対して各種画像処理を行う。
【００１７】
ＳＡＴＡホスト制御部１１１は、ＳＡＴＡ規格に準拠したＩＦを有するデバイスとのデータ入出力制御を行う。ＳＡＴＡブリッジ制御部１１２は、上流側としてＳＡＴＡホスト制御部１１１にデバイスとして接続され、下流側としては複数のＨｏｓｔ−ＩＦを有し、外部記憶装置としてのＨＤＤ又はＳＳＤ１１３、１１４と接続される。ＳＡＴＡブリッジ制御部１１２では、ＲＡＩＤ制御やデータ暗号化など付加価値としての機能が搭載されている。本実施形態では、ＳＡＴＡホスト制御部１１１とＳＡＴＡブリッジ制御部１１２は、それぞれ独立したＡＳＩＣ（特定用途向け集積回路）としてメインコントローラ１２０に搭載されていることを前提として説明を行う。
【００１８】
パネルＩＦ部１１５は、パネル装置１１６との通信制御を行う。ここでは図示しないがＵＩ（ユーザ・インタフェース）として、パネル装置１１６上の液晶画面表示やボタン等を操作することにより印刷装置の各種設定及び状態の確認を行うことができる。
【００１９】
ビデオ出力ＩＦ部１１７は、印字部１１８とのコマンド／ステータスの通信制御や印刷データの転送を行う。印字部１１８は、ここでは図示しないが印刷装置本体と給紙系及び排紙系から構成され、主にビデオ出力ＩＦ部１１７からのコマンド情報に従い、印刷データを記録媒体（紙、シート等）に印刷する。
【００２０】
メインバス１１９はバスコントローラを含み、制御バス、データバス及び任意ブロック間のローカルバスを便宜的にまとめて表現したものである。代表例としてＰＣＩｅ（ＰＣＩ Ｅｘｐｒｅｓｓ）やＡＳＩＣの内部バスなども含まれる。
【００２１】
＜接続構成＞
次に、図２を参照して、ＳＡＴＡブリッジ構成としての接続例について説明する。メインＡＳＩＣ（第１制御回路）２０１は、ＳＡＴＡホスト制御部１１１を含むメインコントローラ１２０のシステム全体を制御する中心的なＡＳＩＣである。ＳＡＴＡホスト制御部１１１は、ＳＡＴＡ−ＩＰ（Ｉｎｔｅｌｌｅｃｔｕａｌ  Ｐｒｏｐｅｒｔｙ）２０２をホストＩＦとして有する。サブＡＳＩＣ（第２制御回路）は、ＳＡＴＡブリッジ制御部１１２そのものであり、メインコントローラ１２０上に独立したＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）として実装されている。
【００２２】
ＳＡＴＡブリッジ制御部１１２は３個のＳＡＴＡ−ＩＰ２０３〜２０５を持つ。ブリッジ構成での上流側はＳＡＴＡ−ＩＰ（Ｈｏｓｔ）２０２がＨ−Ｈｏｓｔ−ＩＦ２０６を介してＳＡＴＡ−ＩＰ（Ｄｅｖｉｃｅ）２０３と接続される。一方、下流側はＳＡＴＡ−ＩＰ（Ｈｏｓｔ１）２０４がＢ−Ｈｏｓｔ１−ＩＦ２０７を介してＨＤＤ／ＳＳＤ１１３と接続され、ＳＡＴＡ−ＩＰ（Ｈｏｓｔ２）２０５がＢ−Ｈｏｓｔ２−ＩＦ２０８を介してＨＤＤ／ＳＳＤ１１４と接続されている。ここで、ＳＡＴＡ−ＩＰ２０２〜２０５とは、ＳＡＴＡリンク層及び物理層から構成される。また、ＳＡＴＡ−ＩＰ２０２〜２０５は、各種ＳＡＴＡレジスタの設定に応じてＳＡＴＡ−ＩＦ２０６〜２０８で接続されるＳＡＴＡデバイスに対して物理的な（電気信号としての）ＳＡＴＡ規格のコマンド発行やステータス受信を行う。
【００２３】
また、メインＡＳＩＣ２０１やＳＡＴＡブリッジ制御部１１２（サブＡＳＩＣ）はコントローラボード上で接続され、さらにメインＡＳＩＣ２０１には、フラッシュメモリ１０３が接続されている。ここで、フラッシュメモリ１０３のデバイスとしては、ｅＭＭＣやＳＡＴＡ−Ｆｌａｓｈ（ＳＡＴＡ−ＩＦを有するメモリデバイス）、ＳＳＤなどのようなものを想定している。本実施形態では、一例として、フラッシュメモリ１０３にｅＭＭＣを利用するものとして説明を行う。なお、本実施形態ではＳＡＴＡホスト制御部１１１とブリッジ制御部１１２との間のＩＦを１個、ＳＡＴＡブリッジ制御部１１２とＨＤＤ／ＳＳＤ１１３、１１４との間のＩＦを２個として説明するが、各ＩＦの数は任意の個数の接続形態であっても構わない。
【００２４】
＜内部構成＞
次に、図３を参照して、ＳＡＴＡホスト制御部１１１及びＳＡＴＡブリッジ制御部１１２の内部構成例について説明する。ＳＡＴＡホスト制御部１１１は、図２に示した構成に加えて、ＨＣＰＵ３０１、メモリ制御部３０２、フラッシュメモリ３０３、ＳＲＡＭ３０４、割り込み制御部３０５、レジスタＨ３０６、ＤＡＭＣ３０７、及びバスブリッジ回路３０９を備える。各部はＨバス３０８を介して接続される。
【００２５】
ＨＣＰＵ３０１は、ＳＡＴＡコマンド発行処理、送受信データの転送処理及びステータス受信処理等、ＳＡＴＡコントローラとしての全般的な制御を行う。メモリ制御部３０２は、フラッシュメモリ３０３やＳＲＡＭ（スタティック・ランダム・アクセス・メモリ）３０４との入出力制御を行う。フラッシュメモリ３０３には、ブートプログラムやＳＡＴＡコントローラとしての制御プログラムが格納されている。
【００２６】
ＳＲＡＭ３０４にはＨＣＰＵ３０１の作業領域、各種制御テーブルやパラメータ格納領域及びデータバッファなどに使用される。ここで、ＳＲＡＭ３０４は１ポートＲＡＭ、２ポートＲＡＭ、ＦＩＦＯ（Ｆｉｒｓｔ−ＩＮ  Ｆｉｒｓｔ−ＯＵＴ）メモリ等の制御を簡略化して記載しているのであって、それぞれ独立に制御され複数個所にＳＲＡＭが存在しても構わない。
【００２７】
割り込み制御部３０５は、ＨＣＰＵ３０１に対する割り込み信号の入力や出力処理、割り込み信号に対するマスク処理などを行う。レジスタＨ３０６は、各種制御パラメータを一時的に記憶するためのレジスタである。ＤＭＡＣ（ダイレクト・メモリ・アクセス・コントローラ）３０７は、ここでは図示しないがＨＣＰＵ３０１によって所定のレジスタに転送元及び転送先の先頭アドレス及びサイズが設定され、起動が掛けられると所定のメモリ間でデータ転送を行う。
【００２８】
Ｈバス３０８はバスコントローラ含み、制御バス、データバス及び任意ブロック間のローカルバスを便宜的にまとめて表現したものである。バスブリッジ回路３０９は、メインバス１１９とＨバス３０８間のバスプロトコルを相互に変換するバスブリッジ回路である。ＨＣＰＵ３０１は、メインバス１１９を介してフラッシュメモリ（ｅＭＭＣ）１０３にアクセスすることが可能である。
【００２９】
ＳＡＴＡブリッジ制御部１１２は、図２に示した構成に加えて、ＢＣＰＵ３１０、メモリ制御部３１１、内蔵フラッシュメモリ３１２、ＳＲＡＭ３１３、レジスタＢ３１４、及び他の機能ブロックを備える。ＢＣＰＵ３１０は、ＳＡＴＡコマンド発行処理、送受信データの転送処理及びステータス受信処理等ＳＡＴＡコントローラとしての全般的な制御を行う。メモリ制御部３１１は、フラッシュメモリ３１２やＳＲＡＭ３１３との入出力制御を行う。内蔵フラッシュメモリ３１２には、ブートプログラムやＳＡＴＡコントローラとしての制御プログラム及び制御パラメータなど各種制御データなどが格納されている。例えば、本実施形態ではＳＡＴＡブリッジ制御部はセキュリティチップを想定しており、フラッシュメモリはチップに内蔵されており、暗号鍵生成の元データや認証ＩＤなど秘密情報も格納されている。
【００３０】
ＳＲＡＭ３１３にはＢＣＰＵ３１０の作業領域、各種制御テーブルやパラメータ格納領域及びデータバッファなどに使用される。ここで、ＳＲＡＭ３１３は１ポートＲＡＭ、２ポートＲＡＭ、ＦＩＦＯメモリ等の制御を簡略化して記載しているのであって、それぞれ独立に制御され複数個所にＳＲＡＭが存在しても構わない。レジスタＢ３１４は、各種制御パラメータなどを一時的に記憶するためのレジスタである。
【００３１】
他の機能ブロック３１５は、ＳＡＴＡブリッジ制御部１１２としての他の機能ブロック、例えばＲＡＩＤ処理やデータ暗号化処理等をまとめて示したものであるが、本発明の本質とは関係しないので説明を省略する。Ｂバス３１７はバスコントローラ含み、制御バス、データバス及び任意ブロック間のローカルバスを便宜的にまとめて表現したものである。また、図２で説明したようにＳＡＴＡホスト制御部１１１のＳＡＴＡ−ＩＰ（Ｈｏｓｔ）２０２とＳＡＴＡブリッジ制御部１１２のＳＡＴＡ−ＩＰ（Ｄｅｖｉｃｅ）２０３とは、Ｈ−Ｈｏｓｔ−ＩＦ２０６を介して接続される。さらに、ＳＡＴＡ−ＩＰ（Ｈｏｓｔ１／２）２０４及び２０５は、Ｂ−Ｈｏｓｔ１／２−ＩＦ２０７及び２０８を介して、ＨＤＤ／ＳＳＤ１１３、１１４に接続されている。
【００３２】
＜内蔵フラッシュメモリ＞
次に、図４を参照して、内蔵フラッシュメモリ３１２におけるデータ領域の構成例について説明する。本実施形態によれば、内蔵フラッシュメモリ３１２の領域を、当該領域に格納する情報の特徴、例えばその性質や重要度に応じて領域分割し、領域ごとに（格納する情報の特徴ごとに）適したセキュリティレベルを実現する暗号化や認証方法を適用する。図４（ａ）に示すように、内蔵フラッシュメモリ３１２は、データ構成として、ローダー領域４０１、プログラム領域４０２、秘密情報領域４０３、及びパラメータ領域４０４を含んで構成される。
【００３３】
ローダー領域４０１は、フラッシュメモリに格納されるプログラムの一部をＳＲＡＭ３１３にロードするためのブート用プログラムの格納領域である。プログラム領域４０２は、ブート用プログラムを除く他のプログラムの格納領域であり、自己テスト（自己診断）や認証などセキュリティに関連する関数群、ＳＡＴＡ制御やその他機能制御（例えばＲＡＩＤなど）関数群などのプログラムが格納されている。また、プログラム領域４０２は、更新用として領域１（４０５）と領域２（４０６）との２つの領域を含んで構成される。
【００３４】
秘密情報領域４０３は、暗号鍵を生成する元データや各種セキュリティに関係するデータ格納領域である。秘密情報領域４０３に格納されるデータは、チップ個体別にユニークな情報であり、本データの喪失は、既存データの復号が不可能になることを意味するものであり、重要な情報である。本実施形態では、秘密情報領域４０３もプログラム領域４０２と同様に２つの領域４０７、４０８が更新用に確保されている。
【００３５】
パラメータ領域４０４は、システムをシャットダウンする際に次回起動後の状態を確定するためのステート情報等が格納される領域である。例えば、２台のＨＤＤでミラーリング処理を実施していた場合のステート位置やどちらのドライブがマスターとなっていたかなどの情報が保存されているので、次回起動時には前回の状態から制御を開始することができる。パラメータ領域４０４の内部構成は、４０９に示すように小さな領域に分割（図ではＮ等分された例を示す。）され、リングバッファ形式で順次利用される。
【００３６】
本実施形態では、上記分割された各領域のセキュリティレベルについて、その格納される情報の特徴に応じて、異なる暗号化や認証方法が適用される。また、分割された各領域に格納される情報の特徴や種別に応じて、各領域に適切な内部自己テストの手法や更新（修復）の検証方法が適用される。図４（ｂ）は、各領域に応じたチップ内部自己テストや更新（修復）時の検証方法を示した表４１０である。プログラム領域４０１に格納されるプログラムは、プログラムのハッシュ値を計算し、作成者の持つ秘密鍵で暗号化して署名するデジタル署名を付与したものを、検証者のもつ公開鍵で復号して正真性が検証される。秘密鍵の暗号化では、例えば、素因数分解の困難性を利用した公開鍵暗号方式であるＲＳＡ暗号が用いられてもよい。
【００３７】
秘密情報領域４０３に格納される秘密情報は、通常運用時の内部自己テストではＥＤＣ（誤り検出符号）で故障の有無が検証される。一方、更新（修復）時には、秘密情報のハッシュ値が計算され、作成者の持つ共通鍵で符号化されるメッセージ認証コードで正真性が検証される。メッセージ認証コードには、例えば、対象ファイルのハッシュ値を共通鍵で符号化して改ざんを検知する方式であるＨＭＡＣが用いられてもよい。
【００３８】
パラメータ領域４０４は、Ｎ等分された各部分領域にパラメータを記録する際に、記録開始を示す開始フラグを先頭の所定領域に、記録完了を示す終了フラグを末尾の所定領域に書込むことで対象部分領域へのパラメータ書込みが正常に実施されたかが検証される。例えば、フラッシュメモリは初期化するとデフォルト値はオールＦｈであるが、開始フラグと終了フラグが正常に書込み完了したならば、各フラグの領域（例えば、サイズ４バイト）にオール０ｈを書き込むようにするとよい。次回起動時にこれらのフラグを読み取ることで前回の書込み処理が正常実施されたかを判断することができる。さらに、各フラグのサイズを１ビットではなく、多ビット化しておけば、書込み処理時の瞬断や静電ノイズ等の不測の事態が発生しても、次回起動時に誤判断する可能性を低く（ほぼゼロ）抑えることができる。
【００３９】
このように、本実施形態によれば、内蔵フラッシュメモリ３１２の領域を、格納する情報の特徴に応じて分割するとともに、各領域において、最適な自己テスト（自己診断）、修復、暗号化、及び認証、などの手法を適用する。これにより、プログラムや秘密情報の盗聴や改ざんに強くするとともに、瞬断や静電ノイズなどに起因するセクタ不良やデータ欠損などが発生した場合にも、チップコストを抑えた状態で好適に情報を修復することができる。
【００４０】
＜コマンド＞
次に、図５を参照して、ＳＡＴＡブリッジ制御部１１２を上位であるＳＡＴＡホスト制御部１１１から制御するためのコマンド群の一例を説明する。いずれのコマンドもＳＡＴＡ規格で提供されているベンダーユニークコマンドを利用したＳＡＴＡ規格コマンド外のコマンドである。以下、これらのコマンドを拡張コマンドと称する。
【００４１】
ＳＡＴＡブリッジ制御部１１２は、ＳＡＴＡ−ＩＦを介して全てインバンドにて制御される。図５（ａ）の表５０１に示す拡張コマンド群は、ＳＡＴＡブリッジ制御部１１２の初期インストール時及び各サブＡＳＩＣでユニークに生成される秘密情報領域４０３をチップ外に出力するために使用される拡張コマンドである。図５（ｂ）の表５１１に示す拡張コマンド群は、サブＡＳＩＣ内の自己テストでＮＧとなりエラーステートに遷移した場合で、秘密情報領域４０３の自己修復時に使用される拡張コマンド及びプログラム領域４０２の自動修復時に使用される拡張コマンドである。表５０１及び表５１１の拡張コマンド処理の詳細については、他の図を参照しながら説明するので、ここでは省略する。
【００４２】
＜状態遷移＞
次に、図６を参照して、ＳＡＴＡブリッジ制御部１１２（サブＡＳＩＣ）内のＦＳＭ（Ｆｉｎｉｔｅ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅ：有限ステートマシン）について説明する。セキュリティに関係するＦＳＭであるという意味で、以下ではＳＦＳＭと称する。
【００４３】
ＳＡＴＡブリッジ制御部１１２のＳＦＳＭは、初期インストール以前は電源が投入された後に、状態１の電源オフステート６０１から状態２の電源オンステート６０２に遷移する。ここで、初期インストールとは、初回起動時において、認証情報や暗号情報に関わる情報をＳＡＴＡブリッジ制御部１１２にインストールする処理を示す。状態２までの遷移において、エラーがなければ、続いて状態３の起動時自己テストステート６０３に遷移する。起動時自己テストで問題がなければ状態０のノンセキュアステート６０４に遷移する。この時点では、まだ初期インストールが完了していないことが前提なのでノンセキュアな状態であり、この状態ではＨＤＤへの保存データに暗号化は掛らない。
【００４４】
次に、状態０のノンセキュアステート６０４から状態８の秘密情報入力ステート６０５に遷移し、各種認証処理に用いられる認証ＩＤなどの秘密情報のインストール及び暗号鍵生成の元データとなるチップ個体別にユニークな秘密情報の生成が行われる。それらの生成が完了すると、状態５のＣｏｎｆｉｇステート６０７に遷移する。この時点でノンセキュアな状態からセキュアな状態へモードが切り替わる。
【００４５】
初期インストール完了後に状態５のステートで再起動を掛けると、再び状態１の電源オフステート６０１から状態２の電源オンステート６０２を経て、起動時自己テストステート６０３に遷移する。起動時自己テスト結果が正常ならば状態４の暗号鍵生成ステートに遷移し、秘密情報領域４０３から暗号鍵の生成を実行した後、状態５のＣｏｎｆｉｇステート６０７に遷移する。
【００４６】
その後、状態５から状態６の認証ステート６０８に遷移し、ＳＡＴＡブリッジ制御部１１２（サブＡＳＩＣ）によるＳＡＴＡホスト制御部１１１（メインＡＳＩＣ）の認証及びその逆のメインＡＳＩＣによるサブＡＳＩＣの認証が実行される。相互認証が成功すると状態７のＵｓｅｒステート６０９に遷移することができる。この状態７の時点で、ＨＤＤ（又はＳＳＤ）へのデータ書込み・読み出しが可能となり、ＨＤＤ（又はＳＳＤ）に格納されるデータは暗号化され、読み出し時は復号化される。また、状態７まで辿り着く資格がある者のみが、状態６の認証ステート６０８を経て状態１１の秘密情報出力ステート６１０に遷移することで秘密情報領域４０３の出力が可能となる。
【００４７】
また、状態５のＣｏｎｆｉｇステート６０７において、状態６の認証ステートを経て状態１２のプログラム更新ステート６１６に遷移することでプログラムの更新処理を実行可能となる。ここで、状態４、状態８、状態６、状態１１、状態１２のそれぞれの状態において以下の状態９Ａ〜状態９Ｅの条件自己テストＡ〜Ｅに遷移して、認証処理で使用される秘密情報領域４０３の正真性検証及び乱数器とハッシュ関数の機能検証が実施される。状態９Ａは条件自己テストステートＡ６１１を示し、状態９Ｂは条件自己テストステートＢ６１２を示し、状態９Ｃは条件自己テストステートＣ６１３を示し、状態９Ｄは条件自己テストステートＤ６１４を示し、状態９Ｅは条件自己テストステートＥ６１５を示す。条件自己テストＡ〜Ｅ（６１１〜６１５）において検証に失敗すると状態１０のＥｒｒｏｒステート６１７に落ち込んでしまう。
【００４８】
ここで、例えばセキュリティ認証としてＦＩＰＳ認証（Ｆｅｄｅｒａｌ  Ｉｎｆｏｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄｉｚａｔｉｏｎ：暗号モジュール試験）を取得する場合を想定する。この場合、一端、状態１０のＥｒｒｏｒステート６１７に遷移すると、その不具合（故障なら修理後）の解消後でない限り、ＨＤＤ（又はＳＳＤ）への既存保管データのアクセスを禁止する認証要件が課せられることになる。
【００４９】
＜ＳＡＴＡホスト制御部の処理手順＞
次に、図７を参照して、ＳＡＴＡブリッジ制御部１１２に対して初回起動時におけるインストール処理及び起動処理を行わせる際のＳＡＴＡホスト制御部１１１の処理手順について説明する。
【００５０】
Ｓ７０１で、初回の電源投入が行われる。ここで、各コントローラボードに実装されたＳＡＴＡブリッジ制御部１１２（サブＡＳＩＣ）は、初回電源ＯＮ時にはまだノンセキュアな状態である。Ｓ７０２で、ＳＡＴＡホスト制御部１１１のＨＣＰＵ３０１は、図５（ａ）の表５０１のＩｎｓｔａｌｌ−Ｓｅｃｒｅｔ−Ｉｎｆｏコマンド５０２をＨ−Ｈｏｓｔ−ＩＦ２０６を介してＳＡＴＡブリッジ制御部１１２に対して発行し、インストール処理を開始する。
【００５１】
このインストール処理では、ＳＡＴＡホスト制御部１１１とＳＡＴＡブリッジ制御部１１２との間の各種認証ＩＤ情報やサブＡＳＩＣ個体別にユニークな暗号鍵生成の元データとなる秘密情報領域４０３が生成される。ここでは図示しないが、秘密情報領域４０３は、他の機能ブロック３１５に含まれる真正乱数発生器により擬似乱数器に与えられるシード値を秘密情報として生成する。従って、秘密情報の一部が欠損してしまうと同一サブＡＳＩＣでも同一秘密情報を生成することはできない。
【００５２】
次に、Ｓ７０３で、ＨＣＰＵ３０１は、表５０１のＧｅｔ−Ｓｔａｔｕｓコマンド５０３を発行し、ＳＡＴＡブリッジ制御部１１２の内部ステータスを取得する。Ｓ７０４で、ＨＣＰＵ３０１は、Ｓ７０３で取得した内部ステータスに基づいて、Ｓ７０２のインストール処理が成功したかどうかを判定する。ここで、Ｓ７０３とＳ７０４との間をループする矢印は、Ｇｅｔ−Ｓｔａｔｕｓコマンド５０３を定期的に発行するポーリング処理を実施していることを表現している。本実施形態では、Ｇｅｔ−Ｓｔａｔｕｓコマンド５０３を用いたポーリング方式でＳＡＴＡブリッジ制御部（サブＡＳＩＣ）１１２の内部スタータスを取得する方法で説明するが、ステータスの取得方法をポーリング方式に限定するものではない。他の方法としてＳＡＴＡ−ＩＦ以外にサイドバンド信号として割り込み信号を設け、チェックポイントとなるタイミングで、ＢＣＰＵ３１０からＨＣＰＵ３０１やメインＣＰＵ１０１に割り込みを発行する方法でも構わない。
【００５３】
Ｓ７０４での判定が成功（ＹＥＳ）の場合にはＳ７０５に進み、ＨＣＰＵ３０１は、ＳＡＴＡブリッジ制御部１１２の内部ステートを確認し、図６で示した状態５のＣｏｎｆｉｇステート６０７に遷移し、セキュアな状態に移行する。続いて、Ｓ７０６で、ＨＣＰＵ３０１は、一連の相互認証コマンドをＳＡＴＡブリッジ制御部１１２に対して発行する。具体的には、表５０１の拡張コマンド番号のＣ０ｈ〜Ｃ４ｈ（５０４〜５０８）を発行し、一般的な認証方法であるチャレンジ・レスポンス方式によって、ＳＡＴＡホスト制御部１１１とＳＡＴＡブリッジ制御部１１２との間でお互いの相手に対する認証を実施する。但し、ＳＡＴＡ規格では、基本的にホストからの一方向通信であるので、コマンド発行は必ずＨＣＰＵ３０１から発行しなければならない。
【００５４】
相互認証のコマンド発行後、Ｓ７０７で、ＨＣＰＵ３０１は、Ｇｅｔ−Ｓｔａｔｕｓコマンド５０３のポーリング処理で逐次ＳＡＴＡブリッジ制御部１１２のステータスを取得し、Ｓ７０８で、相互認証が成功したかどうかを判定する。Ｓ７０３及びＳ７０４と同様に、Ｓ７０７とＳ７０８との間をループする矢印は、Ｇｅｔ−Ｓｔａｔｕｓコマンド５０３を定期的に発行するポーリング処理を実施していることを表現している。
【００５５】
Ｓ７０８での判定が成功（ＹＥＳ）の場合には、Ｓ７０９に進み、ＨＣＰＵ３０１は、ＳＡＴＡブリッジ制御部１１２の内部ステートがＵｓｅｒステートであることを確認する。即ち、図６の状態７のＵｓｅｒステート６０９に遷移したことを意味する。前述したように、状態７のＵｓｅｒステート６０９のときのみ、ＨＤＤ（又はＳＳＤ）へのデータアクセス（書込み・読み出し）が可能となる。
【００５６】
次に、Ｓ７１０で、ＨＣＰＵ３０１は、メインＣＰＵ１０１にＳＡＴＡ系が起動完了してアクセス可能となったことを通知し、通常運用を開始する。ここで、Ｓ７０４及びＳ７０８の判定で失敗（ＮＯ）した場合には、Ｓ７１１に進む。Ｓ７１１で、ＨＣＰＵ３０１は、エラー処理を実施する。エラー処理の内容として自己修復可能な範囲か否かを判断し、可能な範囲で通常運用まで復帰できる努力を行うが、それらの詳細は他の図で説明するので、ここでは概要のみの説明に留めて置くことにする。また、以下の本実施形態でのＨＣＰＵ３０１側の起動シーケンスについては、Ｓ７０３〜Ｓ７１１までのフロー処理を意味するものとして説明を省略することにする。
【００５７】
＜ＳＡＴＡブリッジ制御部の処理手順＞
次に、図８を参照して、ＳＡＴＡブリッジ制御部１１２の２回目以降の起動時における処理手順について説明する。但し、既に初期インストール処理は完了し、セキュアに運用可能な状態での起動シーケンスであることを前提とする。
【００５８】
Ｓ８０１で、ＳＡＴＡブリッジ制御部１１２（サブＡＳＩＣ）が電源ＯＮされ、ＢＣＰＵ３１０自身のブート処理が完了すると、ＢＣＰＵ３１０は、図６の状態３の起動時自己テストステート６０３に状態を遷移させ、検証を実施する。ここでの検証内容は、パラメータ領域４０４で前回分のフラッシュメモリへの書込み開始・完了フラグ状態の検証が実施される。また、プログラム領域４０２の領域１（４０５）のデジタル署名検証、暗号機能検証として暗号エンジン（例えばＡＥＳ：Ａｄｖａｎｃｅｄ  Ｅｙｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）や乱数器、ハッシュ関数の機能的テスト（既知解テスト）が実施される。
【００５９】
Ｓ８０２の判定結果が成功（ＹＥＳ）の場合には、Ｓ８０５に進み、ＢＣＰＵ３１０は、暗号鍵の生成処理を実行する。また、図６の状態４の暗号鍵生成ステート６０６で説明したように、ＢＣＰＵ３１０は条件自己テストＡ６１１を実行する。ここで、条件自己テストとは、暗号関連機能を利用する場合、その直前にそれらの機能が正常であるかどうかを検証するものであり、秘密情報領域４０３の領域１（４０７）のＥＤＣ検証、乱数器、及びハッシュ関数の機能的テスト（既知解テスト）が実施される。
【００６０】
Ｓ８０６の判定で暗号鍵の生成に成功（ＹＥＳ）すると、Ｓ８０７に進み、ＢＣＰＵ３１０は、Ｃｏｎｆｉｇステートに遷移してＳＡＴＡホスト制御部１１１からの認証要求が受付可能な状態となる。ＳＡＴＡブリッジ制御部１１２の内部的には、図６で説明した状態５のＣｏｎｆｉｇステート６０７に遷移し、ノンセキュアな状態からセキュアな状態へモードが切り替わる。続いて、Ｓ８０８で、ＢＣＰＵ３１０は、ＨＣＰＵ３０１からの相互認証系コマンド（表５０１の拡張コマンド番号のＣ０ｈ〜Ｃ４ｈ（５０４〜５０８））を受信すると相互認証処理を実行する。図７で説明したようにチャレンジ＆レスポンス認証であるが詳細説明は本発明には関係しないので省略する。また、その過程は図６の状態６の認証ステート６０８に遷移し、条件自己テストＣ６１３が実行される。
【００６１】
Ｓ８０９で、ＢＣＰＵ３１０は、相互認証処理が成功したか否かを判定し、成功すると、Ｓ８１０に進む。Ｓ８１０で、ＢＣＰＵ３１０は、通常運用を開始し、本フローチャートを終了する。具体的には、図６の状態７のＵｓｅｒステート６０９に遷移し、ＨＤＤ（又はＳＳＤ）への書込み及び読み出し処理の受付を開始する。
【００６２】
一方、Ｓ８０２において起動時の自己テストが失敗（ＮＯ）したと判定した場合には、Ｓ８０３に進み、ＢＣＰＵ３１０は、内部修復可能かを判断し、その判断結果が修復可能（ＹＥＳ）ならばＳ８０４に進む。Ｓ８０４で、ＢＣＰＵ３１０は、内部自動修復処理を実行し、Ｓ８０５に進む。なお、Ｓ８０４についての詳細な内容説明は、図１０を用いて後述するので省略する。一方、Ｓ８０３において内部修復不能（ＮＯ）と判断された場合には、Ｓ８１３に進む。Ｓ８０６において暗号鍵の生成に失敗（ＮＯ）した場合には条件自己テストＡ６１１の検証に失敗したとして、Ｓ８１３に進む。また、Ｓ８０９において相互認証に失敗（ＮＯ）の場合には、Ｓ８１１に進む。さらに、Ｓ８１１で、ＢＣＰＵ３１０は、（条件）自己テストエラーによるものか否かの判定を行う。Ｓ８１１の判定が自己テストエラーではない（ＮＯ）場合には、Ｓ８１２に進み、ＢＣＰＵ３１０は、エラー処理を実行して、処理をＳ８０７に戻す。エラー処理としては発生要因コードの設定とＣｏｎｆｉｇステートへ遷移する。その後、エラー発生要因コードは、Ｇｅｔ−Ｓｔａｔｕｓコマンド５０３によるステータス取得時の判定に利用され、その判定結果からリトライを継続するか、タイムアップで諦めるかなどの判断は上位ＨＣＰＵ３０１の処理に依存する。Ｓ８１１で自己テストエラー（ＹＥＳ）であれば、Ｓ８１３に進む。
【００６３】
Ｓ８１３で、ＢＣＰＵ３１０は、自己テストエラーとしてのエラー処理を実行する。エラー処理としては発生要因コードの設定と図６で説明した状態１０のＥｒｒｏｒステート６１７に遷移する。その後、Ｇｅｔ−Ｓｔａｔｕｓコマンド５０３によるステータス取得から上位ＨＣＰＵ３０１が自動修復するか、タイムアップで諦めるかなどの判断は、上位ＨＣＰＵ３０１の処理に依存する。
【００６４】
＜バックアップ処理＞
次に、図９を参照して、ＳＡＴＡホスト制御部１１１における内蔵フラッシュメモリ３１２の秘密情報領域４０３の格納された情報のバックアップ処理の処理手順について説明する。図７で説明したＳ７０３〜Ｓ７１１までの起動シーケンスを経て、ＨＣＰＵ３０１は通常運用開始状態に移行し、ここまで正常起動（Ｓ９０１）したことを前提とする。
【００６５】
Ｓ９０２で、ＨＣＰＵ３０１は、秘密情報取得に対する認証処理を実行する。具体的には、ＨＣＰＵ３０１は、図５（ａ）で示したＲｅｑｕｅｓｔ−ＣＨＡ−Ｃ３コマンド５０８及びＳｅｎｄ−ＲＥＳ−Ｃ３コマンド５０９をＳＡＴＡブリッジ制御部１１２に送信してチャレンジ＆レスポンス形式で認証処理を実施する。
【００６６】
Ｓ９０３で、ＨＣＰＵ３０１は、Ｇｅｔ−Ｓｔａｔｕｓコマンド５０３を用いて秘密情報取得認証の結果ステータスを取得し、Ｓ９０４で認証に成功したか否かの判断を行う。ここで、Ｓ９０３とＳ９０４との間をループする矢印は、Ｇｅｔ−Ｓｔａｔｕｓコマンド５０３を定期的に発行するポーリング処理を実施していることを表現している。Ｓ９０４での判定結果が成功（ＹＥＳ）した場合、Ｓ９０５に進み、ＨＣＰＵ３０１は、Ｅｘｐｏｒｔ−ＣＳＰコマンド５１０を発行して秘密情報の要求を行い、そのステータスを待つ。
【００６７】
次に、Ｓ９０７で、ＨＣＰＵ３０１は、ＢＣＰＵ３１０からのステータスが成功（ＹＥＳ）で取得完了した場合、Ｓ９０８に進む。Ｓ９０８で、ＨＣＰＵ３０１は、ＳＡＴＡブリッジ制御部１１２から取得した秘密情報のハッシュ値を計算し、取得したメッセージ認証コードを復号した値と比較することで正真性の確認を行う。ここで、メッセージ認証コードを用いる場合には、予めインストール処理時に共通鍵を共有していることを前提としている。さらに、ＨＣＰＵ３０１は、取得した秘密情報を所定位置にバックアップする処理を実行する。本実施形態では、フラッシュメモリ（ｅＭＭＣ）１０３に格納することにするが、特にバックアップ先を限定するものではない。
【００６８】
一方、Ｓ９０４で秘密情報取得の認証に失敗（ＮＯ）した場合には、Ｓ９１１に進む。Ｓ９１１で、ＨＣＰＵ３０１は、エラー処理を実行する。エラー処理内容としてはリトライ処理などが考えられるが本発明の本質とは関係しないので説明を省略する。ここで、取得した秘密情報には、秘密情報本体データとそれのメッセージ認証コード（ＨＭＡＣ）が含まれる。本実施形態では、秘密情報の検証方法としてメッセージ認証コードを前提として説明するが、これに限定されるわけではなく別の手法（ハッシュ値のみやデジタル署名など）でも構わない。一般的に信頼性が高い（セキュリティレベルが高い）方法であると検証や更新処理にはそれなりの時間を要する。つまり、これらの処理は、信頼性と処理に必要とする時間とがトレードオフの関係にあり、適用する製品又は適用する格納情報に付加したい各領域に格納する情報へ付与するセキュリティレベルに応じて決定すべき内容である。
【００６９】
＜自己修復処理（パラメータ領域）＞
次に、図１０を参照して、内蔵フラッシュメモリ３１２のパラメータ領域４０４への書込み不良検知時の自己修復処理フローについて説明する。図８で説明したＳ８０４のＢＣＰＵ３１０側の処理にあたる。
【００７０】
Ｓ１００１で、ＢＣＰＵ３１０は、電源ＯＮ時の起動時自己テストを実行する。Ｓ１００２で、ＢＣＰＵ３１０は、自己テストの実行結果が成功（ＹＥＳ）したか否かを判断し、成功した場合には、Ｓ１００６に進む。Ｓ１００６で、ＢＣＰＵ３１０は、図８で説明した起動シーケンス（Ｓ８０５に遷移）を経て通常運用状態まで処理を進めて、上位ＨＣＰＵ３０１からのアクセス待ちに入る。
【００７１】
一方、Ｓ１００２で自己テストに失敗（ＮＯ）したと判断するとＳ１００３に進み、ＢＣＰＵ３１０は、その失敗原因がフラッシュメモリへの書込み不良であるか否かを判断する。具体的には、図４（ｂ）で説明したパラメータ領域４０４での書込み開始及び完了フラグを確認し、カレント（対象領域）の開始及び完了フラグの片方又は両方が未書込み状態を検知した場合には、書込み不良であると判断してＳ１００４に進む。
【００７２】
Ｓ１００４で、ＢＣＰＵ３１０は、パラメータ領域４０４のリングバッファ４０９をカレントに最も近い順に遡り、開始及び完了フラグが書込み完了状態(両フラグがオールＦｈ)の過去のパラメータ領域を探索する。続いて、Ｓ１００５で、ＢＣＰＵ３１０は、代替となるパラメータ領域の発見に成功（ＹＥＳ）したか否かを判断し、成功するとＳ１００６に進み、それらのパラメータ領域の情報を用いて起動する。
【００７３】
一方、Ｓ１００３の判定で起動時自己テストの失敗原因が書込み不良ではない場合（ＮＯ）やＳ１００５での過去パラメータ領域の探索に失敗（ＮＯ）した場合には、Ｓ１００７に進む。Ｓ１００７で、ＢＣＰＵ３１０は、エラー処理を実行する。ここでも、具体的にはエラー要因のセットとエラーステートへの遷移を行う。実際の製品運用では、上位ＨＣＰＵ３０１がＧｅｔ−Ｓｔａｔｕｓコマンド５０３で取得したステータス内容でどのようなエラーハンドリングをするかという問題であり、本発明の本質とは関係ないので詳細な説明は省略する。
【００７４】
＜自己修復処理（秘密情報領域）＞
次に、図１１を参照して、秘密情報不良検知時の自己修復フローについて説明する。
【００７５】
任意のタイミングであるＳ１１０１で、ＨＣＰＵ３０１は、サブＡＳＩＣ内部のステータスを取得し、Ｓ１１０２で正常かどうかを判定する。Ｓ１１０２で異常（ＮＯ）であった場合には、Ｓ１１０３に進み、ＨＣＰＵ３０１は、修復可能かの判定を行う。Ｓ１１０３での判定において修復可能（ＹＥＳ）の場合には、Ｓ１１０４に進む。Ｓ１１０４で、ＨＣＰＵ３０１は、エラー要因コードから条件自己テストＸ（Ｘ：Ａ〜Ｅ（６１１〜６１６））での秘密情報領域のＥＤＣ検出エラーとして判断し、修復作業の準備を開始する。まず、Ｓ１１０５で、ＨＣＰＵ３０１は、図５（ｂ）のＣｈａｎｇｅ−Ｔｏ−ＮｏＳｅｃｕｒｅコマンド５１２を発行する。これにより、ＳＡＴＡブリッジ制御部（サブＡＳＩＣ）１１２の内部状態を状態１０のＥｒｒｏｒステート６１７から状態０のノンセキュアステート６０４に一時的に離脱させる。
【００７６】
次に、Ｓ１１０６で、ＨＣＰＵ３０１は、図５（ｂ）のＥｒａｓｅ−Ｓｅｃｒｅｔ−Ｉｎｆｏコマンド５１２を発行して、ＳＡＴＡブリッジ制御部（サブＡＳＩＣ）１１２内にインストールされた秘密情報領域４０３に格納された認証ＩＤや秘密情報を破棄させる。続いて、Ｓ１１０７で、ＨＣＰＵ３０１は、再インストール処理を実行する。インストール処理については図７のインストール処理Ｓ７０２と同じ処理であるので説明を省略する。
【００７７】
次に、Ｓ１１０８で、ＨＣＰＵ３０１は、ＳＡＴＡブリッジ制御部（サブＡＳＩＣ）１１２に更新したい秘密情報の準備を行う。具体的には、フラッシュメモリ（ｅＭＭＣ）１０３に格納した秘密情報＋メッセージ認証コードを読み出して、メインメモリであるＤＲＡＭ１０４に格納する。続いて、Ｓ１１０９で、ＨＣＰＵ３０１は、図５（ｂ）のＲｅｑｕｅｓｔ−ＣＨＡ−Ｃ４コマンド５１４とＳｅｎｄ−ＲＥＳ−Ｃ４コマンド５１５を発行して、チャレンジ＆レスポンス認証方式にて秘密情報取得のための認証を行う。この場合、ＢＣＰＵ３１０がＨＣＰＵ３０１側を認証する意味である。その後、Ｓ１１１０で、ＨＣＰＵ３０１は、ステータスを取得し、Ｓ１１１１でその結果が成功（ＹＥＳ）であるか否かを判断し、成功であるならば、Ｓ１１１２に進む。
【００７８】
Ｓ１１１２で、ＨＣＰＵ３０１は、図５（ｂ）のＩｍｐｏｒｔ−ＣＳＰコマンド５１６を発行して、付随データとして準備した秘密情報＋メッセージ認証コードをＳＡＴＡブリッジ制御部（サブＡＳＩＣ）１１２へ渡す。これを受け取ったＢＣＰＵ３１０側の処理は図１２を用いて後述する。続いて、Ｓ１１１３で、ＨＣＰＵ３０１は、ステータスを取得し、その確認結果、Ｓ１１１４で修復成功（ＹＥＳ）ならば、Ｓ１１１５に進む。Ｓ１１１５で、ＨＣＰＵ３０１はステータスを確認し、その結果Ｓ１１１６において起動ＯＫ（ＹＥＳ）ならば、Ｓ１１１７から通常運用を開始する。
【００７９】
一方、Ｓ１１０２のステータス確認で、正常（ＹＥＳ）であれば、Ｓ１１１５に進む。以後は、説明した内容と同じなので省略する。また、Ｓ１１０２のステータス確認が異常（ＮＯ）で、且つＳ１１０３での判定で修復不可（ＮＯ）である場合とＳ１１１１で秘密情報の受け入れ認証に失敗（ＮＯ）した場合には、Ｓ１１１８に進む。さらに、Ｓ１１１４での修復処理に失敗（ＮＯ）した場合や、Ｓ１１１６でのステータス確認で起動ＯＫとならなかった（ＮＯ）場合には、Ｓ１１１８に進む。Ｓ１１１８で、ＨＣＰＵ３０１は、エラー処理を実行し、本フローチャートの処理を終了する。エラー処理については、本発明の本質とは関係ないので説明を省略する。
【００８０】
＜自己修復処理（プログラム領域）＞
プログラム領域４０２の更新処理フローは、図１１を用いて説明した秘密情報領域４０３の自己修復処理と使用する拡張コマンドが異なるだけで、処理フローは基本的に同じであるため図示しない。但し、プログラム更新の場合、そのバックアップデータはフラッシュメモリ（ｅＭＭＣ）１０３にデジタル署名を付与して保存されていることを前提としている。
【００８１】
＜更新処理（秘密情報領域及びプログラム領域）＞
次に、図１２を参照して、秘密情報領域４０３及びプログラム領域４０２に格納された情報の更新処理フローについて説明する。
【００８２】
Ｓ１２０１で、ＢＣＰＵ３１０は、データ更新系（秘密情報とプログラム）の認証コマンドのいずれかを受信する。具体的には、チャレンジ＆レスポンス認証方式のチャレンジ乱数を要求するＲｅｑｕｅｓｔ−ＣＨＡ−Ｃ＊コマンドである。図５（ｂ）のＲｅｑｕｅｓｔ−ＣＨＡ−Ｃ４コマンド５１４、Ｒｅｑｕｅｓｔ−ＣＨＡ−Ｃ６コマンド５１７がこれにあたる。さらに、これらのチャレンジ乱数値に対するレスポンス応答の拡張コマンドは、Ｓｅｎｄ−ＲＥＳ−Ｃ４コマンド５１５、Ｓｅｎｄ−ＲＥＳ−Ｃ６コマンド５１８である。
【００８３】
次に、Ｓ１２０２で、ＢＣＰＵ３１０は、チャレンジ乱数を生成し、Ｓ１２０３でＲｅｑｕｅｓｔ−ＣＨＡ−Ｃ＊コマンドのステータス応答として生成したチャレンジ乱数値を送信する。その後、Ｓ１２０４で、ＢＣＰＵ３１０は、ＨＣＰＵ３０１からのレスポンスであるＳｅｎｄ−ＲＥＳ−Ｃ＊コマンドを受信すると、Ｓ１２０５で、レスポンス値を検証して認証成功かどうかの判定を行う。Ｓ１２０５での判定が成功（ＹＥＳ）した場合には、Ｓ１２０６に進み、それが秘密情報の更新なのかの判定を行う。
【００８４】
Ｓ１２０６での判定結果が秘密情報更新であった場合には、Ｓ１２０７に進む。Ｓ１２０７で、ＢＣＰＵ３１０は、秘密情報の更新コマンドの受信を待つ。その後、秘密情報の更新コマンドである図５（ｂ）のＩｍｐｏｒｔ−ＣＳＰコマンド５１６を受信した場合には、Ｓ１２０８においてメッセージ認証コード（ＨＭＡＣ）による受け入れ検証を実行する。ここで、秘密情報の受信データは、秘密情報領域４０３の領域２（４０８）に格納される。Ｓ１２０９において受け入れ検証に成功（ＹＥＳ）すると、Ｓ１２１０に進む。
【００８５】
一方、Ｓ１２０６でプログラムの更新である場合（ＮＯ）には、秘密情報の更新と同様にＳ１２１１でプログラム更新のコマンドを待つ。その後、プログラムの更新コマンドである図５（ｂ）のＵｐｄａｔｅ−Ｐｒｏｇｕｒａｍコマンド５１９である場合には、Ｓ１２１２においてデジタル署名（ＲＳＡ＋Ｈａｓｈ）による受け入れ検証を実行する。ここで、更新プログラムの受信データは、プログラム領域４０２の領域２（４０８）に格納される。Ｓ１２１３で受け入れ検証に成功（ＹＥＳ）すると、Ｓ１２１０に進む。
【００８６】
Ｓ１２１０で、ＢＣＰＵ３１０は、更新処理を実行する。次回からの秘密情報やプログラムの利用時は各領域２のものが使用されることになる。ここで、Ｓ１２０５での更新許可認証に失敗（ＮＯ）した場合と、Ｓ１２０９で秘密情報の更新受け入れ検証に失敗（ＮＯ）した場合、Ｓ１２１３でプログラムの更新受け入れ検証に失敗（ＮＯ）した場合のいずれかでは、Ｓ１２１４に進む。Ｓ１２１４で、ＢＣＰＵ３１０は、エラー処理を実行する。具体的にはエラー要因のセットとエラーステートへの遷移を行う。ここでも、実際の製品運用では、上位ＨＣＰＵ３０１がＧｅｔ−Ｓｔａｔｕｓコマンド５０３で取得したステータス内容でどのようなエラーハンドリングをするかという問題であり、本発明の本質とは関係ないので詳細な説明は省略する。
【００８７】
以上説明したように、本実施形態に係る情報処理装置は、格納する情報の特徴に応じて複数の領域に分割したフラッシュメモリを備える。本情報処理装置は、各領域に格納されたデータの不具合を、各領域ごとに異なる手法で検知し、検知した不具合を、各領域ごとに異なる手法で修復する。また、一形態として、本情報処理装置は、第１制御回路（メインＡＳＩＣ）と、第１制御回路によって制御されるとともに、格納する情報の特徴に応じて複数の領域に分割した内蔵フラッシュメモリを備える第２制御回路（サブＡＳＩＣ）とを備える。これにより、フラッシュメモリに関連した自己診断の結果がＮＧとなった場合であっても、フラッシュメモリに格納されたプログラムや秘密情報をセキュアな状態で好適に自動修復し、安全性とユーザの利便性を両立したより堅牢なシステムを提供することができる。また、自己修復する際には、フラッシュメモリの格納情報の重要度に応じて分割された領域ごとに、そのセキュリティレベルに応じて最適な自己修復処理を切り替えて実行することができる。
【００８８】
＜第２の実施形態＞
以下では、本発明を実施するための第２の実施形態について図面を用いて説明する。上記第１の実施形態で記載したようにＳＡＴＡホスト制御部１１１を含むメインＡＳＩＣとＳＡＴＡブリッジ制御部１１２のサブＡＳＩＣは共にコントローラボードに実装されていることを想定している。この場合、ＳＡＴＡブリッジ制御部（サブＡＳＩＣ）１１２は正常でもコントローラボード上のメインＡＳＩＣやその他の部品が出荷後に故障してしまうと、基本的にボード交換となってしまう。交換されたサブＡＳＩＣは物理的に異なるものであって、このチップの初期インストールの有無には関わらず個体別にユニークな秘密情報は異なる。従って、その場合既にＨＤＤ又はＳＳＤ１１３、１１４に格納してある既存データを正常に読み取ることができなくなってしまうことを意味する。本発明は、サブＡＳＩＣの故障以外にも故障ボード交換時に秘密情報の更新（自動修復機能）により、既存のＨＤＤ又はＳＳＤ１１３、１１４のユーザデータを守る用途にも利用できる。
【００８９】
＜自己修復処理（ボード故障交換時）＞
以下では、図１３を参照して、本実施形態に係るコントロールボード故障交換時の自動修復処理フローについて説明する。図１３を説明する前に、ここでは図示しないが幾つかの前提条件を記載する。まず、フラッシュメモリ（ｅＭＭＣ）１０３に秘密情報を格納する際に書込みを示すフラグを設ける。Ｇｅｔ−Ｓｔａｔｕｓコマンド５０３によるポーリング処理時にＳＡＴＡブリッジ制御部（サブＡＳＩＣ）１１２の内部状態（例えば、ＲＡＩＤ情報など）を同じくフラッシュメモリ（ｅＭＭＣ）１０３に保存しておく。フラッシュメモリ（ｅＭＭＣ）１０３は、コントローラボードにソケット化や子ボード化されて分離できる。初期インストール時にＨＤＤ（又はＳＳＤ）の一部のアドレスにマジックナンバーを記録しておく。個体別にユニークな秘密情報から生成された暗号鍵で暗号化されたマジックナンバーは、同一暗号鍵でない限り復号して正常に読み取ることはできない。以上のことを前提とした上で図１３のフローチャートの説明を実施する。
【００９０】
Ｓ１３０１で、ＨＣＰＵ３０１は、起動後にステータスを取得し、Ｓ１３０２でセキュアな状態か否かを判定する。セキュアな状態とは、図６で説明した状態５のＣｏｎｆｉｇステート６０７に遷移している場合であり、インストールが完了し、起動時自己テストを経て秘密情報から暗号鍵を生成した後に遷移するステートである。Ｓ１３０２での判定でセキュアな状態ならば、Ｓ１３０３に進み、ＨＣＰＵ３０１は、相互認証処理を実施し、Ｓ１３０４での認証判定により成功（ＹＥＳ）ならば、Ｓ１３０５に進む。ここで、Ｓ１３０４の自身に戻るループはステータスをポーリングしていることを簡略化して表現している。
【００９１】
Ｓ１３０５で、ＨＣＰＵ３０１は、ＨＤＤ（又はＳＳＤ）から初期インストール時に書き込んだマジックナンバーを読み出す。続いて、Ｓ１３０６で、ＨＣＰＵ３０１は、例えばフラッシュメモリ（ｅＭＭＣ）１０３に予め保存してあるマジックナンバーと上記読み取り値とを比較することで正規の暗号鍵とペアのＨＤＤ（又はＳＳＤ）かの判定をすることができる。Ｓ１３０６の判定が成功（ＹＥＳ）ならば、ＨＣＰＵ３０１はＳ１３０７で起動シーケンス処理を実施し、Ｓ１３０８にて通常運用を開始する。
【００９２】
一方、Ｓ１３０２の判定でＮＯの場合は、ノンセキュアな状態と判断し、Ｓ１３０９に進み、ＨＣＰＵ３０１は、インストール処理を実行する。Ｓ１３１０で取得したステータスがセキュアな状態に遷移（ＹＥＳ）すると、次にＳ１３１１に進む。Ｓ１３１１で、ＨＣＰＵ３０１は、フラッシュメモリ（ｅＭＭＣ）１０３に秘密情報がバックアップされているかの判定を行う。ここでは図示しないが、前提条件で記載したようにバックアップ領域に秘密情報の書込み有りを示すフラグ値を確認する。
【００９３】
Ｓ１３１１での判定結果がバックアップ有り（ＹＥＳ）ならば、Ｓ１３１２に進む。Ｓ１３１２で、ＨＣＰＵ３０１は、前提条件で記載した予めバックアップしている内部状態を、ここでは図示しないがＳＡＴＡブリッジ制御部（サブＡＳＩＣ）１１２へのセットアップ系拡張コマンドにより再設定処理を行う。続いて、Ｓ１３１３で、ＨＣＰＵ３０１は、秘密情報の認証及び更新処理を実行する。秘密情報の認証・更新については、既に図１１及び図１２で説明した処理を簡略化して表している。
【００９４】
その後、Ｓ１３１３でのステータスによる更新判定により、成功（ＹＥＳ）ならばＳ１３１５に進む。Ｓ１３１５で、ＨＣＰＵ３０１は、相互認証処理を実行する。相互認証処理も既に図７及び図８で説明したので内容は省略する。Ｓ１３１６において相互認証が成功（ＹＥＳ）したならば、Ｓ１３１７に進む。Ｓ１３１７で、ＨＣＰＵ３０１は、初期インストール時にＨＤＤ又はＳＳＤの所定の位置に格納してあるマジックナンバーを読み出す。Ｓ１３１８で、ＨＣＰＵ３０１は、読み取り値と予め保存してあるマジックナンバーとを比較することで正規の暗号鍵とペアのＨＤＤ（又はＳＳＤ）かどうかの判定を行う。Ｓ１３１８の判定でマジックナンバー読み取りに成功（ＹＥＳ）すると、既に説明したＳ１３０７、Ｓ１３０８へと進み、通常運用を開始する。
【００９５】
一方、Ｓ１３０６でのマジックナンバー読み取り判定で失敗（ＮＯ）である場合には、Ｓ１３１１に進み、ＨＣＰＵ３０１は、パラメータの再設定や秘密情報の認証・更新処理を実施する。Ｓ１３１１以降は既に説明したので省略する。また、Ｓ１３１０、Ｓ１３１１、Ｓ１３１４、Ｓ１３１６、及びＳ１３１８の判定において失敗（ＮＯ）である場合には、Ｓ１３１９に進む。Ｓ１３１９で、ＨＣＰＵ３０１は、エラー処理を実行する。エラー処理については、一連の処理のリトライ処理など製品運用上のエラーハンドリングをどうするかの問題であり、本発明の本質と関係しないので詳細説明は省略する。
【００９６】
以上説明したように、本実施形態によれば、ＳＡＴＡブリッジ制御部１１２（サブＡＳＩＣ）以外の部品や回路が故障してボード交換となった場合でも、交換ボードに搭載されるサブＡＳＩＣのインストール処理の有無に関わらず自動修復できる。これによって、故障前に接続されていたＨＤＤ又はＳＳＤに保存されている既存データを救済可能となる。
【００９７】
＜その他の実施形態＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９８】
１０１：メインＣＰＵ、１０２：メモリ制御部、１０３：フラッシュメモリ、１０４：ＤＲＡＭ、１０５：ＬＡＮ−ＩＦ部、１０６：ネットワーク、１０７：外部ＨＯＳＴコンピュータ、１０８：Ｒｅａｄａｅｒ−ＩＦ部、１１０：画像処理部、１１１ＳＡＴＡホスト制御部、１１２：ＳＡＴＡブリッジ制御部、１１３、１１４：ＨＤＤ／ＳＤＤ、１１５：パネルＩＦ部、１１６：パネル装置、１１７：ビデオ出力ＩＦ部、１１８：印字部、１１９：メインバス、１２０：メインコントローラ
【図１】
2019057156.tif 000003
【図２】
2019057156.tif 000004
【図３】
2019057156.tif 000005
【図４】
2019057156.tif 000006
【図５】
2019057156.tif 000007
【図６】
2019057156.tif 000008
【図７】
2019057156.tif 000009
【図８】
2019057156.tif 000010
【図９】
2019057156.tif 000011
【図１０】
2019057156.tif 000012
【図１１】
2019057156.tif 000013
【図１２】
2019057156.tif 000014
【図１３】
2019057156.tif 000015