IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特開2024-7617プロセッサ回路、バージョン管理方法およびバージョン管理プログラム
<>
  • 特開-プロセッサ回路、バージョン管理方法およびバージョン管理プログラム 図1
  • 特開-プロセッサ回路、バージョン管理方法およびバージョン管理プログラム 図2
  • 特開-プロセッサ回路、バージョン管理方法およびバージョン管理プログラム 図3
  • 特開-プロセッサ回路、バージョン管理方法およびバージョン管理プログラム 図4
  • 特開-プロセッサ回路、バージョン管理方法およびバージョン管理プログラム 図5
  • 特開-プロセッサ回路、バージョン管理方法およびバージョン管理プログラム 図6
  • 特開-プロセッサ回路、バージョン管理方法およびバージョン管理プログラム 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024007617
(43)【公開日】2024-01-19
(54)【発明の名称】プロセッサ回路、バージョン管理方法およびバージョン管理プログラム
(51)【国際特許分類】
   G06F 21/57 20130101AFI20240112BHJP
   G06F 9/445 20180101ALI20240112BHJP
   G06F 21/79 20130101ALI20240112BHJP
【FI】
G06F21/57
G06F9/445
G06F21/79
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022108795
(22)【出願日】2022-07-06
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100107515
【弁理士】
【氏名又は名称】廣田 浩一
(72)【発明者】
【氏名】吉川 昌男
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AE51
5B376DA05
(57)【要約】
【課題】ソフトウェアのバージョンを管理するカウンタが設けられるメモリの容量を抑える。
【解決手段】プロセッサ回路は、起動するソフトウェアのバージョンを管理するプロセッサ回路であって、第1カウンタの第1カウンタ値と第2カウンタの第2カウンタ値とを保持する不揮発性メモリと、前記ソフトウェアのバージョンを上げるときに前記第1カウンタ値を更新して前記第2カウンタ値を維持し、前記ソフトウェアのバージョンを下げるときに前記第1カウンタ値を維持して前記第2カウンタ値を更新し、起動する前記ソフトウェアのバージョンが前記第1カウンタ値と前記第2カウンタ値との差で示されるバージョン確認用のチェック値と等しいときに前記ソフトウェアを起動する起動制御部と、を有する。
【選択図】図1
【特許請求の範囲】
【請求項1】
起動するソフトウェアのバージョンを管理するプロセッサ回路であって、
第1カウンタの第1カウンタ値と第2カウンタの第2カウンタ値とを保持する不揮発性メモリと、
前記ソフトウェアのバージョンを上げるときに前記第1カウンタ値を更新して前記第2カウンタ値を維持し、前記ソフトウェアのバージョンを下げるときに前記第1カウンタ値を維持して前記第2カウンタ値を更新し、起動する前記ソフトウェアのバージョンが前記第1カウンタ値と前記第2カウンタ値との差で示されるバージョン確認用のチェック値と等しいときに前記ソフトウェアを起動する起動制御部と、を有する
プロセッサ回路。
【請求項2】
前記第1カウンタ値および前記第2カウンタ値を保持する前記不揮発性メモリは、複数ビットの各々の値を一度のみ書き込み可能であり、
前記起動制御部は、前記ソフトウェアのバージョンを1つ上げるときに、前記第1カウンタの複数ビットの1つに値を書き込み、
前記チェック値は、前記第1カウンタにおいて値が書き込まれたビット数と前記第2カウンタにおいて値が書き込まれたビット数との差で示される
請求項1に記載のプロセッサ回路。
【請求項3】
前記起動制御部は、起動する前記ソフトウェアのバージョンが前記チェック値より大きいとき、前記チェック値と起動する前記ソフトウェアのバージョンとが等しくなるまで、前記第1カウンタ値を更新する
請求項1または請求項2に記載のプロセッサ回路。
【請求項4】
前記起動制御部は、起動する前記ソフトウェアのバージョンが、前記チェック値より小さいとき、前記ソフトウェアの起動を停止する
請求項1または請求項2に記載のプロセッサ回路。
【請求項5】
前記起動制御部は、前記第2カウンタのカウンタ値を、認証処理が成功したことに基づいて更新する
請求項1または請求項2に記載のプロセッサ回路。
【請求項6】
前記不揮発性メモリは、前記第1カウンタ値を保持する第1不揮発性メモリと前記第2カウンタ値を保持する第2不揮発性メモリとを含み、
前記第1不揮発性メモリは、複数のビットの各々の値を一度のみ書き込み可能であり、
前記第2不揮発性メモリは、複数のビットの各々の値を複数回書き換え可能である
請求項1に記載のプロセッサ回路。
【請求項7】
前記第1カウンタは、セキュリティ機能を含むセキュリティチップに搭載される
請求項1または請求項2に記載のプロセッサ回路。
【請求項8】
第1カウンタの第1カウンタ値と第2カウンタの第2カウンタ値とを保持する不揮発性メモリを有し、起動するソフトウェアのバージョンを管理するプロセッサ回路によるバージョン管理方法であって、
前記ソフトウェアのバージョンを上げるときに前記第1カウンタ値を更新して前記第2カウンタ値を維持し、
前記ソフトウェアのバージョンを下げるときに前記第1カウンタ値を維持して前記第2カウンタ値を更新し、
起動する前記ソフトウェアのバージョンが前記第1カウンタ値と前記第2カウンタ値との差で示されるバージョン確認用のチェック値と等しいときに前記ソフトウェアを起動する
バージョン管理方法。
【請求項9】
第1カウンタの第1カウンタ値と第2カウンタの第2カウンタ値とを保持する不揮発性メモリを有し、起動するソフトウェアのバージョンを管理するプロセッサ回路が実行するバージョン管理プログラムであって、
前記ソフトウェアのバージョンを上げるときに前記第1カウンタ値を更新して前記第2カウンタ値を維持し、
前記ソフトウェアのバージョンを下げるときに前記第1カウンタ値を維持して前記第2カウンタ値を更新し、
起動する前記ソフトウェアのバージョンが前記第1カウンタ値と前記第2カウンタ値との差で示されるバージョン確認用のチェック値と等しいときに前記ソフトウェアを起動する
処理を前記プロセッサ回路に実行させるバージョン管理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサ回路、バージョン管理方法およびバージョン管理プログラムに関する。
【背景技術】
【0002】
ファームウェアをロールバック攻撃から保護するために、ファームウェアのバージョンをOTP(One Time Programmable)メモリに格納し、バージョンを増加方向のみ更新可能にする手法が知られている。例えば、ファームウェアのバージョンは、OTPメモリにメジャーバージョンとして保持され、不揮発性メモリにマイナーバージョンとして保持される(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2021-179982号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、OTPメモリを使用してファームウェアのバージョンを管理することで、ファームウェアをロールバック攻撃から保護する場合、ファームウェアを古いバージョンに戻すことは容易でない。このため、例えば、ファームウェアに問題が発生したときにバージョンを切り替えながら試験を実施することは容易でなく、ファームウェアのデバッグ効率が低下してしまう。
【0005】
例えば、OTPメモリにバージョンを管理する複数のカウンタを設け、バージョンの管理に使用するカウンタを切り替えることで、ファームウェアを古いバージョンに容易に戻すことが可能になる。しかしながら、この場合、想定される切替え回数以上のカウンタを設けなくてはならず、OTPメモリの容量が増加してしまう。
【0006】
1つの側面では、本発明は、ソフトウェアのバージョンを管理するカウンタが設けられるメモリの容量を抑えることを目的とする。
【課題を解決するための手段】
【0007】
一つの観点によれば、プロセッサ回路は、起動するソフトウェアのバージョンを管理するプロセッサ回路であって、第1カウンタの第1カウンタ値と第2カウンタの第2カウンタ値とを保持する不揮発性メモリと、前記ソフトウェアのバージョンを上げるときに前記第1カウンタ値を更新して前記第2カウンタ値を維持し、前記ソフトウェアのバージョンを下げるときに前記第1カウンタ値を維持して前記第2カウンタ値を更新し、起動する前記ソフトウェアのバージョンが前記第1カウンタ値と前記第2カウンタ値との差で示されるバージョン確認用のチェック値と等しいときに前記ソフトウェアを起動する起動制御部と、を有する。
【発明の効果】
【0008】
ソフトウェアのバージョンを管理するカウンタが設けられるメモリの容量を抑えることができる。
【図面の簡単な説明】
【0009】
図1】一実施形態におけるプロセッサ回路が搭載されるマザーボートの一例を示すブロック図である。
図2図1のカウンタを使用してファームウェアのバージョンの更新を管理する例を示す説明図である。
図3図1のプロセッサ回路によるファームウェアの更新動作の一例を示すフロー図である。
図4】別の実施形態におけるプロセッサ回路が搭載されるマザーボートの一例を示すブロック図である。
図5図4のカウンタを使用してファームウェアのバージョンの更新を管理する例を示す説明図である。
図6】上述した実施形態におけるカウンタの別の例を示す構成図である。
図7】別の一実施形態におけるプロセッサ回路が搭載されるマザーボートの一例を示すブロック図である。
【発明を実施するための形態】
【0010】
以下、図面を参照して、実施形態が説明される。
【0011】
図1は、一実施形態におけるプロセッサ回路が搭載されるマザーボートの一例を示す。図1に示すプロセッサ回路10は、例えば、CPU(Central Processing Unit)等である。プロセッサ回路10は、ファームウェア22が格納されるファームウェア格納領域20とともにマザーボード100に搭載される。ファームウェア22は、ソフトウェアの一例である。
【0012】
プロセッサ回路10およびファームウェア格納領域20は、それぞれがチップの形態でマザーボード100に搭載されてもよく、1チップに集積された形態でマザーボード100に搭載されてもよい。例えば、マザーボード100は、サーバ、スーパーコンピュータまたはPC(Personal Computer)等の情報処理装置に搭載され、情報処理装置の機能を実現する。
【0013】
ファームウェア格納領域20に保持されるファームウェア22は、プロセッサ回路10に搭載されるCPUコア等により実行される。特に限定されないが、例えば、ファームウェア格納領域20は、フラッシュメモリ等の電気的に書き換え可能なメモリ内に割り当てられ、更新するファームウェアを上書き可能である。なお、ファームウェア格納領域20は、プロセッサ回路10が実行するOS(Operating System)およびアプリケーションプログラムの一方または両方が格納されるメモリ内に割り当てられてもよい。
【0014】
プロセッサ回路10は、バージョン格納部12、バージョン検証部14および書き込み制御部16を有する。バージョン検証部14および書き込み制御部16は、起動制御部の一例である。バージョン格納部12は、ファームウェア22のバージョンの管理に使用されるカウンタ12a、12bを有する。例えば、バージョン格納部12は、オンチップのOTP(One Time Programmable)メモリ内に設けられる。バージョン格納部12は、不揮発性メモリの一例である。カウンタ12aは、第1カウンタの一例であり、カウンタ12bは、第2カウンタの一例である。
【0015】
例えば、OTPメモリは、複数のE-fuseの各々にビット情報を記憶するため、OTPメモリの各ビット(E-fuse)に書き込んだ情報を書き換えることができない。すなわち、OTPメモリは、複数ビットの各々の値を一度のみ書き込み可能である。この実施形態のOTPメモリは、"1"が書き込まれたビットの値を"0"に戻すことができない。このため、例えば、カウンタ12aでは、バージョンが増加される毎に、"1"を保持するビットの数が増加される。
【0016】
そして、カウンタ12aのカウンタ値CNTaおよびカウンタ12bのカウンタ値CNTbは、"1"にセットされているビットの数により示される。また、バージョン確認用のチェック値は、カウンタ値CNTa、CNTbの差(CNTa-CNTb)により示される。チェック値は、起動可能なファームウェア22のバージョンを示す。カウンタ12a、12bの使用例については、図2で説明される。カウンタ値CNTaは、第1カウンタ値の一例であり、カウンタ値CNTbは、第2カウンタ値の一例である。
【0017】
バージョン検証部14は、ファームウェア格納領域20に保持されているファームウェア22の起動時に、起動するファームウェア22のバージョンとバージョン格納部12に保持されているバージョンのチェック値とを比較する。そして、バージョン検証部14は、ファームウェア22のバージョンとカウンタ値CNTa、CNTbの差との比較に基づいて、ファームウェアの通常の起動処理、バージョンアップ処理、またはエラー処理(起動の停止)のいずれを実施するかを判定する。
【0018】
バージョン検証部14は、起動するファームウェア22のバージョンがカウンタ値CNTa、CNTbの差より大きい場合、カウンタ12aのカウンタ値CNTaを増加させる指示を書き込み制御部16に発行する。バージョン検証部14は、起動するファームウェア22のバージョンがカウンタ値CNTa、CNTbの差に等しい場合、ファームウェア22の起動処理をプロセッサ回路10に実施させる。バージョン検証部14は、起動するファームウェア22のバージョンがカウンタ値CNTa、CNTbの差より小さい場合、エラーの発生をプロセッサ回路10のエラー処理部等に通知する。
【0019】
書き込み制御部16は、カウンタ12a、12bの書き込み動作を制御する。書き込み制御部16は、バージョン検証部14からの指示に基づいて、カウンタ12aのカウンタ値CNTaを更新する書き込み動作を実施する。また、書き込み制御部16は、ファームウェア22のバージョンを下げるロールバック処理を実施する場合、カウンタ12bの書き込み用の専用の手順に基づいて、カウンタ12bの書き込み動作を実施し、カウンタ値CNTaを更新する。例えば、カウンタ12bの書き込み用の専用の手順は、パスワード認証または公開鍵認証等である。なお、カウンタ12bの書き込み用の専用の手順は、パスワード認証または公開鍵認証等に限定されず、生体認証等でもよい。カウンタ12bの書き込み用の専用の手順を採用することで、ファームウェア22のロールバックに対するセキュリティを担保することができる。
【0020】
例えば、バージョン検証部14および書き込み制御部16の動作は、プロセッサ回路10が実行するバージョン管理プログラムにより実現される。そして、バージョン管理プログラムの実行によりバージョン管理方法が実現される。また、エラー処理部は、プロセッサ回路10が実行するエラー処理プログラムにより実現されてもよい。なお、バージョン検証部14、書き込み制御部16およびエラー処理部の1つまたは複数は、ハードウェアにより実現されてもよい。
【0021】
図2は、図1のカウンタ12a、12bを使用してファームウェアのバージョンの更新を管理する例を示す。図2に示す動作は、バージョン検証部14および書き込み制御部16により実施されるバージョン管理方法の例を示す。また、図2に示す動作は、プロセッサ回路10が実行するバージョン管理プログラムによる動作の例を示す。
【0022】
カウンタ12a、12bのカウンタ値CNTa、CNTbは、最下位ビットから上位ビットに向けてビット値が"1"ずつセットすることで増加される。ビット値の"1"から"0"への書き換えはできない。バージョン格納部12に設定されたファームウェアのバージョンのチェック値は、カウンタ値CNTa、CNTbの差(CNTa-CNTb)で示される。カウンタ値CNTa、CNTbの先頭に示す「4'b」または「5'b」は、2進数の4ビットまたは2進数の5ビットをそれぞれ示す。
【0023】
図2(A)は、ファームウェアのバージョン(チェック値)を増加させる場合のカウンタ12a、12bの動作の例が示される。図2(A)では、ファームウェア22のバージョンは、状態A0から状態A4にかけて、"0"から"4"に順次更新される。カウンタ12bのカウンタ値CNTbが"0"に維持されるため、カウンタ値CNTaはチェック値を示す。そして、カウンタ値CNTaと、起動するファームウェア22とが一致した場合、ファームウェア22が起動される。
【0024】
図2(B)は、ファームウェア22のバージョンのアップ後に問題が発生し、バージョン(チェック値)を1つ前にロールバックする場合のカウンタ12a、12bの動作の例が示される。バージョン(チェック値)を戻す場合、ファームウェア22を起動する前に、現在のバージョンと戻した後のバージョンとの差の分の値だけカウンタ12bのカウンタ値CNTbが加算される。
【0025】
なお、図2(B)の初期状態B0では、カウンタ値CNTaは、「4'b0111=3」であるため、起動可能なファームウェア22のバージョンは"3"である。この例では、バージョンを1つ前に戻すため、カウンタ値CNTbは、状態B0の「4'b0000」から状態B1の「4'b0001」に"1"増加される。カウンタ値CNTbが"1"増加することにより、起動可能なファームウェア22のバージョンは"2"になる。
【0026】
上述したように、カウンタ値CNTbの更新は、セキュリティを担保するためにパスワード認証または公開鍵認証方式等を使用して、ロールバック専用の状態に遷移させて行われる。なお、セキュリティが担保された試験または装置のデバッグを目的とする専用の状態が用意されている場合、その手順に従ってカウンタ値CNTbが更新されてもよい。
【0027】
この後、バージョン="3"のファームウェア22を起動する場合、カウンタ値CNTaは、状態B1の「4'b0111」から"1"増加され、状態B2の「4'b1111」に更新される。これにより、バージョン格納部12に保持されるチェック値は"3"に戻り、バージョン="3"のファームウェア22が起動可能になる。
【0028】
図2(C)は、カウンタ12a、12bのビット数が図2(B)より1ビット多い場合のカウンタ12a、12bの動作の例が示される。図2(C)の状態C0~C2は、カウンタ12a、12bのビット数が異なることを除き、図2(B)の状態B0~B2と同様である。カウンタ12a、12bのビット数を1ビット増やすことで、バージョンを1つ前に戻す場合にも、起動可能なファームウェア22のバージョンは、その後"4"まで更新可能になる。
【0029】
なお、バージョン(チェック値)を戻した場合、カウンタ値CNTa、CNTbで表現可能なチェック値の最大値は小さくなる。例えば、図2(B)に示す4ビットのカウンタ12aでは、バージョンを"4"に設定することはできない。図2(C)に示す4ビットのカウンタ12aでは、バージョンを"5"に設定することはできない。このため、カウンタ12a、12bのビット数は、想定されるファームウェアの運用状況を考慮して、最大のバージョン数および最大のロールバック数に合わせて設計される。図2では、カウンタ12a、12bのビット数を4ビットまたは5ビットとしているが、カウンタ12a、12bのビット数は、ファームウェア22のバージョンの最大の更新数に応じた任意の値に設定することができる。
【0030】
図3は、図1のプロセッサ回路10によるファームウェアの更新動作のフローの一例を示す。プロセッサ回路10は、マザーボード100が搭載される装置が起動されたことに基づいて、図3に示すファームウェアの起動処理を開始する。
【0031】
まず、ステップS10において、書き込み制御部16は、カウンタ12bの書き込み用の専用の手順を受信したか否かを判定する。書き込み制御部16は、専用の手順を受信した場合、処理をステップS12に移行し、専用の手順を受信しない場合、通常のファームウェアの起動処理を実施するために、処理をステップS14に移行する。
【0032】
ステップS12において、書き込み制御部16は、専用の手順により認証処理等を行い、認証処理が成功したことに基づいてカウンタ12bのカウンタ値CNTbを指示された値に更新し、図3に示す処理を終了する。なお、カウンタ12bが更新された後、マザーボード100が搭載される装置は再起動される。これにより、カウンタ12bの更新後に図3に示す処理が再び、実施される。
【0033】
ステップS14において、バージョン検証部14は、起動するファームウェア22のバージョンをファームウェア格納領域20から読み出す。次に、ステップS16において、バージョン検証部14は、読み出したバージョンとカウンタ12a、カウンタ12bから読み出したカウンタ値CNTa、CNTbの差(CNTa-CNTb;チェック値)とを比較する。
【0034】
次に、ステップS18において、バージョン検証部14は、読み出したバージョンが差(CNTa-CNTb)より大きい場合、バージョン格納部12に保持されるチェック値を起動するファームウェア22のバージョンに合わせるため、処理をステップS20に移行する。バージョン検証部14は、読み出したバージョンが差(CNTa-CNTb)と等しい場合、ファームウェア格納領域20から読み出されるファームウェア22が起動可能であるため、処理をステップS22に移行する。バージョン検証部14は、読み出したバージョンが差(CNTa-CNTb)より小さい場合、ファームウェア22の起動処理のエラーを検出し、ファームウェア22の起動を停止させるために、処理をステップS24に移行する。
【0035】
ステップS20において、バージョン検証部14は、起動するファームウェア22のバージョンとチェック値(CNTa-CNTb)との差を書き込み制御部16に通知する。書き込み制御部16は、受信した差に基づいて、チェック値(CNTa-CNTb)がファームウェア22のバージョンと等しくなるまでカウンタ12aのカウンタ値CNTaを増加させる。ステップS20の後、処理はステップS22に移行される。ステップS22において、バージョン検証部14は、バージョンの管理処理を完了し、ファームウェア22の起動をプロセッサ回路10に指示し、図3に示す処理を終了する。そして、ファームウェア22が起動された後、例えば、OSが起動される。
【0036】
ステップS24において、バージョン検証部14は、プロセッサ回路10にファームウェア22の起動を停止させる。また、バージョン検証部14は、エラーの発生と、マザーボード100が搭載される装置の起動を停止する指示とをプロセッサ回路10のエラー処理部等に出力し、図3に示す処理が終了する(起動の失敗)。これにより、不正なバージョンのファームウェア22が起動されることを抑止することができる。
【0037】
以上、この実施形態では、書き込み制御部16は、不揮発性メモリであるバージョン格納部12に設けられた2つのカウンタCNTa、CNTbの一方をバージョンを上げるときに更新し、他方をバージョンを下げるときに更新する。これにより、2つのカウンタCNTa、CNTbによりバージョンの上げ下げを複数回実施することができる。この結果、ファームウェア等のソフトウェアのバージョンを管理するメモリの容量を抑えることができる。
【0038】
カウンタ値CNTaを増加させることでバージョンを上げることができ、カウンタ値CNTbを増加させることでバージョンを下げることができる。このため、例えば、OTPメモリに設けたカウンタ12a、12bのカウンタ値CNTa、CNTbの差であるチェック値を利用して、バージョンアップとバージョンダウンとを容易に管理することができる。例えば、起動するファームウェア22のバージョンがチェック値より大きいとき、チェック値と起動するファームウェア22のバージョンとが等しくなるまで、カウンタ値CNTaを更新することで、容易にバージョンアップすることができる。
【0039】
バージョン検証部14は、起動するファームウェア22のバージョンが差(CNTa-CNTb)より小さい場合、ファームウェア22の起動処理のエラーを検出し、ファームウェア22の起動を停止させる。これにより、不正なバージョンのファームウェア22が起動されることを抑止することができる。
【0040】
バージョンをロールバックするときに使用するカウンタ値CNTbは、認証処理等のカウンタ12bの書き込み用の専用の手順に基づいて更新されるため、ファームウェアのバージョン管理におけるセキュリティの担保と運用性とを両立することができる。ここで、運用性とは、例えば、ファームウェアに問題が発生したときに迅速にバージョンをロールバックして試験を実施できること、それにより、ファームウェアのデバッグ効率の低下が抑制できることなどを含む。これに対して、ファームウェアのロールバックを実施するために、装置の交換が発生する場合、迅速なロールバックは困難である。
【0041】
なお、マザーボード100が搭載されるサーバ等の装置は、ネットワークに接続されることが多く、ネットワークを介してサイバー攻撃を受けるおそれがある。このような場合にも、ファームウェア22の不正なロールバック等を抑止することができ、装置がコンピュータウイルスに感染するなどの不具合の発生の可能性を低減することができる。この結果、マザーボード100が搭載されるサーバ等の装置の信頼性が低下することを抑制することができる。
【0042】
図4は、別の実施形態におけるプロセッサ回路が搭載されるマザーボートの一例を示す。図1と同様の要素については、同じ符号を付し、詳細な説明は省略する。図4に示すプロセッサ回路10Aは、例えば、CPU等であり、ファームウェア22が格納されるファームウェア格納領域20とともにマザーボード100Aに搭載される。
【0043】
マザーボード100Aは、図1のプロセッサ回路10の代わりにプロセッサ回路10Aが搭載されることを除き、図1のマザーボード100の構成と同様である。プロセッサ回路10Aは、図1のバージョン格納部12の代わりにバージョン格納部12Aを有することを除き、図1のプロセッサ回路10の構成と同様である。
【0044】
バージョン格納部12Aは、図1のカウンタ12bの代わりにカウンタ12cが搭載されることを除き、図1のバージョン格納部12と同様である。カウンタ12cは、カウンタ値CNTcを生成する。バージョン格納部12Aは、不揮発性メモリの一例である。カウンタ値CNTaを保持するカウンタ12aは、第1不揮発性メモリの一例である。カウンタ値CNTcを保持するカウンタ12cは、第2不揮発性メモリの一例である。
【0045】
例えば、カウンタ12cは、複数のビットの各々の値を複数回書き換え可能なフラッシュメモリ等の不揮発性メモリを使用して設けられる。このため、カウンタ12cは、通常の2進カウンタとして動作可能であり、カウンタ値CNTcは2進数で示される。したがって、"1"にセットされているビットの数によりカウンタ値CNTbが示される図1のカウンタ12bに比べて、使用するビット数を節約することができる。すなわち、カウンタ12cに使用するメモリ資源を、図1に比べてさらに低減することができる。例えば、"0"から"4"までをカウントする場合、図1のカウンタ12bは4ビットを使用するが、カウンタ12cは、3ビットの使用で済む。また、カウンタ12cは、4ビットを有する場合、"0"から"15"までカウント可能である。
【0046】
カウンタ12cにフラッシュメモリ等の不揮発性メモリを使用する場合、"1"が書き込まれたビットの値を"0"に戻すことができる。しかしながら、カウンタ12cへの書き込みは、書き込み制御部16により、パスワード認証または公開鍵認証等のカウンタ12cの書き込み用の専用の手順を使用して実施される。このため、不正な値がカウンタ12cに書き込まれることを抑止することができ、ファームウェアの不正なロールバックを抑止することができる。なお、カウンタ12cの書き込み用の専用の手順は、パスワード認証または公開鍵認証等に限定されない。
【0047】
図5は、図4のカウンタ12a、12cを使用してファームウェアのバージョンの更新を管理する例を示す。図2と同様の動作については、詳細な説明は省略する。図5(A)は、ファームウェア22のバージョンのアップ後に問題が発生し、バージョンを2つ前にロールバックする場合のカウンタ12a、12cの動作の例が示される。図2(B)と同様に、バージョンを戻す場合、ファームウェア22を起動する前に、現在のバージョンと戻すバージョンとの差の分の値だけカウンタ12cのカウンタ値CNTcが加算される。
【0048】
この例では、バージョンを2つ前に戻すため、カウンタ値CNTcは、状態A0の「4'b0000」から状態A1の「4'b0010」に"2"増加される。これにより、カウンタ値CNTa、CNTcの差は、"1"になり、バージョン="1"のファームウェア22の起動が可能になる。なお、初期状態A0では、カウンタ値CNTaは、「5'b00111」="3"であるため、起動可能なファームウェア22のバージョンは"3"である。
【0049】
図4のプロセッサ回路10Aによるファームウェアの更新動作のフローは、図3と同じである。このため、カウンタ12aのカウンタ値CNTaは、ファームウェア22の通常の起動時において、ファームウェア22のバージョンがカウンタ値CNTa、CNTcの差であるチェック値より大きい場合、更新される。また、カウンタ12aは、OTPメモリが使用されるため、増加方向のみしか更新されない。このため、例えば、悪意を持ってカウンタ12aが更新された場合にも、現在のバージョンより大きな値への更新のみであり、更新後に装置は起動できなくなる。さらに、カウンタ値CNTcは、図3のステップS12でのみ更新可能であるため、カウンタ12cのカウンタ値CNTcは、ファームウェア22の通常の起動時にいかなる条件においても更新が禁止される。したがって、ファームウェアのバージョンに関する装置のセキュリティを担保することができる。
【0050】
この後、バージョン="2"のファームウェア22を再度起動する場合、カウンタ値CNTaは、状態A1の「5'b00111」から状態A2の「5'b01111」に更新される。これにより、バージョン格納部12に保持されるバージョンは"2"に設定される。さらに、バージョン="3"のファームウェア22を再度起動する場合、カウンタ値CNTaは、状態A2の「5'b01111」から状態A3の「5'b11111」に更新される。これにより、バージョン格納部12に保持されるバージョンは"3"に設定される。図5においても、カウンタ12a、12cのビット数は、想定されるファームウェアの運用状況を考慮して、最大のバージョンおよび最大のロールバック数に合わせて設計される。
【0051】
図6は、上述した実施形態におけるカウンタの別の例を示す。図6(A)は、図1のカウンタ12a(OTP)のビット数を96ビットとし、図1のカウンタ12b(OTP)のビット数を32ビットとしている。これにより、ロールバック可能なバージョンを最大で"32"にすることができる。また、最大数のロールバックを実施した場合にも、"64"までのバージョンに対応させることができる。
【0052】
図6(B)は、図4のカウンタ12a(OTP)のビット数を96ビットとし、図4のカウンタ12c(フラッシュメモリ)のビット数を6ビットとしている。カウンタ12cは、カウンタ値CNTcが2進数で表現されるため、カウンタ12bで実現可能なロールバックと同等、あるいはそれ以上の"0"~"63"まで設定することができる。このため、メモリ資源を削減することが可能になる。
【0053】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、2つのカウンタCNTa、CNTcによりバージョンの上げ下げを複数回実施することができ、ファームウェア等のソフトウェアのバージョンを管理するメモリの容量を抑えることができる。カウンタ12a、12cのカウンタ値CNTa、CNTcの差であるチェック値を利用して、バージョンアップとバージョンダウンとを容易に管理することができる。
【0054】
さらに、この実施形態では、カウンタ12cが、通常の2進カウンタとして動作可能なフラッシュメモリ等の不揮発性メモリを使用して設けられるため、図1のカウンタ12bに比べて、使用するビット数を節約することができる。この結果、カウンタ12cに使用するメモリ資源を、図1に比べてさらに低減することができる。
【0055】
図7は、別の一実施形態におけるプロセッサ回路が搭載されるマザーボートの一例を示す。図1と同様の要素については、同じ符号を付し、詳細な説明は省略する。図7に示すマザーボード100Bは、CPU10Bと、ファームウェア格納領域20と、セキュリティに関する各種機能を含むTPM(Trusted Platform Module)30とを有する。マザーボード100Aは、図1のプロセッサ回路10の代わりにCPU10Bが搭載され、新たにTPM30が搭載されることを除き、図1のマザーボード100と同様である。なお、この実施形態では、マザーボード100Bは、プロセッサ回路として動作する。以下では、マザーボード100Bは、プロセッサ回路100Bとも称される。
【0056】
CPU10Bは、図1のバージョン格納部12の代わりにバージョン格納部12Bを有することを除き、図1のプロセッサ回路10と同様である。バージョン格納部12Bは、カウンタ値CNTbを生成するカウンタ12b(オンチップのOTPメモリ)のみが搭載される。バージョン格納部12Bは、不揮発性メモリの一例である。
【0057】
この実施形態では、カウンタ12aは、セキュリティ機能を含むセキュリティチップであるTPM30に搭載される。このため、バージョン検証部14は、ファームウェア格納領域20に保持されているファームウェア22の起動時に、TMP30内のカウンタ12aに保持されたカウンタ値CNTaとバージョン格納部12のカウンタ12bに保持されたカウンタ値CNTbとを読み出して比較する。図7のCPU10Bによるファームウェアの更新動作は、図2および図3と同じである。
【0058】
図7に示すように、例えば、TPM30がマザーボード100Bに搭載済みの場合、TPM30を利用してカウンタ12aを実現できるため、カウンタ12aを設ける資源を削減することができる。このように、カウンタ12a(OTP)をバージョン検証部14からアクセス可能な任意の場所に搭載することができるため、ファームウェア22のバージョンの検証方法をマザーボード100Bに組み込む障壁を低くすることができる。
【0059】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、2つのカウンタCNTa、CNTbによりバージョンの上げ下げを複数回実施することができ、ファームウェア等のソフトウェアのバージョンを管理するメモリの容量を抑えることができる。カウンタ12a、12bのカウンタ値CNTa、CNTbの差であるチェック値を利用して、バージョンアップとバージョンダウンとを容易に管理することができる。
【0060】
さらに、この実施形態では、TPM30がマザーボード100Bに搭載済みの場合、TPM30を利用してカウンタ12aを実現でき、カウンタ12aを設ける資源を削減することができる。カウンタ12a(OTP)をバージョン検証部14からアクセス可能な任意の場所に搭載することができるため、ファームウェア22のバージョンの検証方法をマザーボード100Bに組み込む障壁を低くすることができる。
【0061】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【0062】
10、10A、10B プロセッサ回路
12、12A、12B バージョン格納部
12a、12b、12c カウンタ
14 バージョン検証部
16 書き込み制御部
20 ファームウェア格納領域
22 ファームウェア
30 TPM
100、100A、100B マザーボード
CNTa、CNTb、CNTc カウンタ値
図1
図2
図3
図4
図5
図6
図7