(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-07-27
(45)【発行日】2022-08-04
(54)【発明の名称】シリコンデバイスファームウェア上のロールバック攻撃を防止するセキュリティシステム、および、方法
(51)【国際特許分類】
G06F 21/57 20130101AFI20220728BHJP
G06F 21/44 20130101ALI20220728BHJP
G09C 1/00 20060101ALI20220728BHJP
H04L 9/32 20060101ALI20220728BHJP
【FI】
G06F21/57 350
G06F21/44
G09C1/00 640E
H04L9/32 200B
G06F21/57 320
(21)【出願番号】P 2021075912
(22)【出願日】2021-04-28
【審査請求日】2021-04-28
(32)【優先日】2020-05-14
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】508197206
【氏名又は名称】新唐科技股▲ふん▼有限公司
(74)【代理人】
【識別番号】110000291
【氏名又は名称】弁理士法人コスモス国際特許商標事務所
(72)【発明者】
【氏名】アロン,モシェ
(72)【発明者】
【氏名】フィッシュマン,アブラハム
(72)【発明者】
【氏名】ベンダー,ベン
(72)【発明者】
【氏名】タバシュニク,ボアズ
(72)【発明者】
【氏名】コーエン,エーヤル
【審査官】松平 英
(56)【参考文献】
【文献】特開2017-021434(JP,A)
【文献】特表2017-528037(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F12/14
21/00-21/88
G09C 1/00-5/00
H04K 1/00-3/00
H04L 9/00-9/40
(57)【特許請求の範囲】
【請求項1】
ロールバック攻撃を防止するコンピュータ制御システムであって、前記攻撃は、前記システムのファームウェアが変化するとき発生し、よって、前記ファームウェアのバージョンを定義し、前記システムは、(i)チップ、(ii)第一、および、第二不揮発性メモリ、および、(iii)ハードウェアデバイス、を有し、
(i)前記チップは、
a.
前記チップに集積されるブートローダー(別称、ブートROMコード)を有し、前記ブートROMコードは、前記チップがオンになるときはいつでも作動するROMコード、および、
b.バージョン識別子(たとえば、バージョン番号)を保存するプログラム可能なヒューズアレイメモリ(たとえば、ワンタイムプログラマブル(OTP)メモリ)、を有し、
(ii)前記第一(別称、アクティブ)、および、第二(別称、リカバリー)不揮発性メモリ(別称、NVM)は、それぞれ、ブータブルファームウェア(別称、ブート上でロードされるファームウェア)のバージョンの第一、および、第二複製を保存し、
第一識別子は前記アクティブNVM中に保存され、且つ、保存時に、前記バージョンを一意に識別し、
前記バージョンの第一複製は前記アクティブNVM中に保存され、前記第一識別子は、少なくとも一つのアクティブメジャー番号およびアクティブマイナー番号を有し、共に、プライベートキーで署名され、
第二識別子は前記リカバリーNVM中に保存され、且つ、保存時に、前記バージョンを一意に識別し、前記バージョンの前記第二複製は前記リカバリーNVM中に保存され、前記第二識別子は、少なくとも一つのリカバリーメジャー番号およびリカバリーマイナー番号を有し、共に、前記プライベートキーで署名され、
(iii)前記ハードウェアデバイスは、ブートアップ後(ブートローダー完了時)、前記ブートROMコードにより提供される第一指令にしたがって、次のシステムリセットまで、少なくとも前記リカバリーNVMをロックし(少なくとも書き込みを無効にする、書込保護を提供する)、前記リカバリーNVMのロックは、前記ブートローダー以外の少なくとも前記リカバリーNVMが書き込み可能ではない(書き込みにアクセス可能ではない)ことを確保するとともに、次のシステムリセット時、前記ブートROMコードにより提供される第二指令に従い、少なくとも前記リカバリーNVMの書き込み保護を解除し、
これにより、前記ファームウェアの新しいバージョンがすでに有効になると、前記ファームウェアの古いバージョンがブートされるのを防止し、
前記の新しいバージョンと古いバージョンに関連するファームウェアイメージ、および、前記第一、第二識別子を、前記プライベートキーで署名し、
前記ブートROMコードが設定されて、少なくとも一つのファームウェアイメージを認証するとともに、前記第一、および、前記第二識別子を認証することを特徴とするロールバック攻撃からシステムを保護する方法。
【請求項2】
ロールバック攻撃からシステムを保護する方法であって、前記攻撃は、前記システム中のファームウェアが変化するとき発生し、よって、バージョンを定義し、本方法は、以下の(I)~(IV)の工程を有し、
(I)システムを提供する工程:
(i)チップはaとbを有し、
a.ROMコード:
前記チップに集積されるブートローダー(別称、ブートROMコード)を有し、前記ブートROMコードは、前記チップがオンになるときはいつでも作動する;および、
b.プログラム可能なヒューズアレイメモリ(たとえば、ワンタイムプログラマブル(OTP)メモリ):バージョン識別子(たとえば、バージョン番号)を保存する;
(ii)第一(別称、アクティブ)、および、第二(別称、リカバリー)不揮発性メモリ(別称、NVM):ブータブルファームウェア(別称、ブート時ロードされるファームウェア)のバージョンの第一、および、第二複製がそれぞれ保存される;
第一識別子は前記アクティブNVM中に保存され、且つ、保存時に、前記バージョンを一意に識別し、前記バージョンの前記第一複製は前記アクティブNVM中に保存され、前記第一識別子は、少なくとも一つのアクティブメジャー番号およびアクティブマイナー番号を有し、両者は、プライベートキーで署名され、
第二識別子は前記リカバリーNVM中に保存され、且つ、保存時に、前記バージョンを一意に識別し、前記バージョンの前記第二複製は前記リカバリーNVM中に保存され、前記第二識別子は、少なくとも一つのリカバリーメジャー番号およびリカバリーマイナー番号を有し、両者は、前記プライベートキーで署名され、
(iii)ハードウェアデバイスは、ブートアップ後(ブートローダー完了時)、前記ブートROMコードにより提供される第一指令にしたがって、少なくとも前記リカバリーNVMを次のシステムリセットまでロックし(別称、少なくとも、書き込みを無効にする、書込保護を提供する)、前記リカバリーNVMのロックは、前記ブートローダー以外の少なくとも前記リカバリーNVMが書き込み可能ではない(書き込みにアクセス可能ではない)ことを確保するとともに、前記ブートローダー以外に、前記ブートROMコードにより提供される第二指令は、次のシステムリセット時、少なくとも前記リカバリーNVMの書き込み保護を解除し、これにより、前記新しいバージョンの前記ファームウェアがすでに有効になると、古いバージョンの前記ファームウェアがブートされるのを防止することができ、
(II)第一バージョンのブータブルファームウェアの複製(別称、第一ファームウェアイメージ)を、前記アクティブ、および、リカバリーNVM中に保存する工程:
前記第一バージョンの少なくとも一つのメジャー番号の第一、および、第二複製を、それぞれ、前記第一、および、第二不揮発性メモリデバイス中に保存し;および
前記OTPメモリの少なくとも一つのビットを前記メジャー番号に等しくなるように(適合するように)プログラムし;
(III)少なくとも一度、前記ファームウェアのマイナーアップデートを実行し、前記アクティブNVM中に保存されるブータブルファームウェアの前記バージョンを、前記ブータブルファームウェアの新しい"マイナー"バージョンで代替し、前記アクティブNVM中に保存される前記識別子を、高いマイナー番号を有する新しい識別子で代替する工程;および、
(IV)ブートが必要な少なくとも一つのリセット後、以下を実行する工程:
a.前記ブートローダーに命令し:
少なくとも、前記アクティブNVMのコンテンツが有効である場合、前記アクティブNVM中の前記識別子が、前記OTP番号より大きいか否か判断し;および
アクティブNVM中のメジャー番号が、前記OTP番号より低い場合、ブートを中止し、
b.前記アクティブNVM(別称、アクティブマイナー)中の前記識別子が、前記リカバリーNVM(別称、リカバリーマイナー)中の前記識別子より大きい場合のみ、それぞれ、操作b1、b2を実行する:
操作b1. 前記ブータブルファームウェアの前記新しいバージョンが、現在前記リカバリーNVM中に保存される前記ブータブルファームウェアの前記バージョンに書き込まれ;
操作b2. 前記リカバリーNVM中の前記識別子がアップデートされて、前記アクティブNVM中の前記識別子の
値に等しくなる
ことを特徴とする方法。
【請求項3】
前記OTPメモリは複数のヒューズを有し、これらのヒューズは、バージョン番号を表示することを特徴とする請求項1に記載のシステム。
【請求項4】
前記OTP(別称、OTPビット)中の複数のビットが用いられて、OTP番号を表し、
OTP番号 =
開始番号 +
計数、
前記複数のビットは一個のnビットのアレイを有し、これにより、nビットインデックスを定義し、それぞれ、前記nビットと関連し、前記nビットは、値"0"を有するビットの("第一")集合、および、1にヒューズされたビットの("第二")集合を有し、
前記計数は、1にヒューズされた前記nビットの("第二")集合に関連する数個のビットインデックス中から、最高インデックスとして決定されることを特徴とする請求項1に記載のシステム。
【請求項5】
前記ハードウェアデバイスは、前記アクティブNVMの読み書きを無効にしないので、前記アクティブNVMはブート後、読み書き可能であることを特徴とする請求項1に記載のシステム。
【請求項6】
前記第一ファームウェアイメージが、前記アクティブ、および、リカバリーNVM中に保存されるとき、前記OTP番号は、両NVM中に保存される前記メジャー番号と等しいことを特徴とする請求項
2に記載のシステム。
【請求項7】
前記ハードウェアデバイスによる前記リカバリーNVMのロックは、さらに、前記リカバリーNVMからの読み取りを無効にすることを有し、前記リカバリーNVMが読み取り可能ではないことを確保することを有することを特徴とする請求項2に記載の方法。
【請求項8】
前記リカバリーNVMのロックは、前記リカバリーNVMを切断する工程を有することを特徴とする請求項2に記載の方法。
【請求項9】
前記ハードウェアデバイスによる前記OTPのロックは、さらに、前記リカバリーNVMからの読み取りを無効にする工程を有し、前記OTPが可読でないことを確保する工程を有することを特徴とする請求項2に記載の方法。
【請求項10】
前記ブートローダーの前記アクティブNVMのコンテンツに対する有効性のテストは、前記アクティブNVMのコンテンツと前記署名された暗号化認証(cryptographic authentication)を有することを特徴とする請求項
2に記載の方法。
【請求項11】
前記認証は、前記プライベートキーとペアであるパブリックキーを使用し、前記プライベートキーではなく、前記パブリックキーが前記OTP中に保存されることを特徴とする請求項
10に記載の方法。
【請求項12】
前記ブートローダーの前記アクティブNVMのコンテンツに対する有効性のテストは、アクティブNVM中のメジャー番号が、前記リカバリーNVM中の前記メジャー番号に等しいか、それより高くなるように確保することを有することを特徴とする請求項2に記載の方法。
【請求項13】
前記ブートローダーの前記アクティブNVMのコンテンツに対する有効性のテストは、少なくとも一つのシステムレベルテストから指示を提供して、少なくとも一つの所定基準を確保することを有することを特徴とする請求項2に記載の方法。
【請求項14】
前記基準は、前記新しいバージョンの前記ブータブルファームウェアが安定してブートされるという判定を有することを特徴とする請求項
13に記載のシステム。
【請求項15】
前記アクティブNVM中のメジャー番号が前記OTP番号に等しい;且つ、
前記ブートローダーにより、前記アクティブNVM中の有効な内容を検証する時かつその時に限り、
前記ブートローダーのブートが成功することを特徴とする請求項2に記載の方法。
【請求項16】
トラストチェーン(chain of trust)が、認証コードを用いて、少なくとも一回、繰り返して実行されて、追加メジャー、および/または、マイナーバージョン番号を有する追加コードレベルを認証し、さらに別のコードレベルを認証することができることを特徴とする請求項2に記載の方法。
【請求項17】
前記アクティブ、および、リカバリーNVMは、二個の別々のメモリデバイスを有することを特徴とする請求項1に記載のシステム。
【請求項18】
前記アクティブ、および、リカバリーNVMは、単一フラッシュデバイス上で、二個のメモリ範囲を有することを特徴とする請求項1に記載のシステム。
【請求項19】
前記開始番号は書き込み保護されることを特徴とする請求項4に記載のシステム。
【請求項20】
さらに、前記アクティブNVMのコンテンツが有効でない場合、前記ブートローダーに、前記アクティブNVMのコンテンツの有効性をテストするように命令するとともに中止させ、これにより、前記ブートの失敗を生じることを有することを特徴とする請求項2に記載の方法。
【請求項21】
前記ブートローダーが、前記アクティブNVM中の前記識別子が前記OTP番号より大きいか否か
、あるいは、前記アクティブNVM内容が有効であるかを判断する前、前記ブートローダーは、前記アクティブNVMのコンテンツの有効性をテストすることを特徴とする請求項
20に記載の方法。
【請求項22】
前記操作b1、b2は、認証コードにより実行されることを特徴とする請求項2に記載の方法。
【請求項23】
前記操作b1、b2は、前記ブートローダーにより実行されることを特徴とする請求項2に記載の方法。
【請求項24】
前記方法は、さらに、少なくとも一回、前記ファームウェアのメジャーアップデートを実行する工程を有し、前記アクティブNVM中に保存されるブータブルファームウェアの前記バージョンを、前記ブータブルファームウェアの新しい"メジャー"バージョンで代替するとともに、前記アクティブNVM中に保存される前記識別子を、高いメジャー番号を有する新しい識別子で代替することを有し;
(vi)ブートが必要な少なくとも一つのリセット後、
a.前記ブートローダーに命令し:
前記アクティブNVMのコンテンツの有効性をテストして、
前記アクティブNVMのコンテンツが有効でない場合、ブートを中止し、これにより、ブートの失敗を生じ、
少なくとも、前記アクティブNVMのコンテンツが有効である場合、前記アクティブNVM中の識別子が、前記OTP番号より大きいか否か判断する;および、
前記アクティブNVM中のメジャー番号が前記OTP番号より小さい場合、ブートを中止し、および、
b.前記アクティブNVM中の識別子が前記OTP番号より大きい場合だけ、それぞれ、下記からなる操作b4、b5、b6を実行する:
操作b4. 前記ブータブルファームウェアの新しいバージョンが、前記リカバリーNVM中に現在保存されるブータブルファームウェアのバージョンに書き込まれる;
操作b5. 前記リカバリーNVM中の前記第二識別子がアップデートされ、前記アクティブNVM中の識別子の値に等しくなる;および
操作b6. 前記ヒューズアレイ中のフリービットが、前記アクティブNVM中の識別子の値にプログラムされて、前記OTP番号が前記アクティブNVM中の識別子に等しく、さらに、前記リカバリーNVMの識別子に等しくなるように確保する、工程を有することを特徴とする請求項2に記載の方法。
【請求項25】
前記操作b4、b5、b6は、認証コードにより実行されることを特徴とする請求項
24に記載の方法。
【請求項26】
前記操作b4、b5、b6は、前記ブートローダーにより実行されることを特徴とする請求項
24に記載の方法。
【請求項27】
前記OTP番号は、前記アクティブメジャー
番号、および、前記リカバリーメジャー番号のそれぞれに、比較参照として用いられることを特徴とする請求項4に記載の方法。
【請求項28】
前記認証は、前記プライベートキーと一対のパブリックキーを使用し、前記プライベートキーではなく、前記パブリックキーが
、ROM中に保存されることを特徴とする請求項
10に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体デバイスに関するものであって、特に、半導体デバイスへの攻撃を防止するシステムと方法に関するものである。
【背景技術】
【0002】
IBMの特許文献US20080175381A1は、セキュリティバージョンデータを保存するヒューズ(fuse)を記述している。この文献は、システム中に用いられて、セキュアデータを暗号化するのに用いられるセキュリティバージョンパラメータを動的にアップデートする方法、および、装置を提供する。IBMシステムは、装置外部のメモリ中に保存されるデータブロックを暗号化する一装置を有し、この装置は、セキュリティバージョンパラメータを保存する第一固定記憶域素子;マスターキーデータを保存する第二固定記憶域素子;外部メモリ中に保存されるセキュアブロックを暗号化し、暗号化されたセキュアブロック、あるいは、このために生成された整合性チェック値の少なくとも一つが、セキュリティバージョンパラメータにより影響される暗号化エンジン;および、第一固定記憶域素子を修正して、前に修正された第一固定記憶域素子を修正しない場合、セキュリティバージョンパラメータをアップデートするメカニズム、を有する。
【0003】
単一OTP設定におけるファームウェアバージョンのグループ化が、https://developer.trustedfirmware.org/w/tf_m/design/secure_storage_service/rollback_protection/ で記述される。
【0004】
上述の公開文献は、ARMプラットフォームセキュリティ機構を記述し、ロールバック防止のガイドライン、および、ロールバックを信頼できる例を提供する。とりわけ、公開文献は、“適当な実施は、各ソフトウェアに一計数を採用する、あるいは、一データベースファイル内にバージョン番号のリストをまとめ、このデータベースファイル自身のバージョンが単一計数を採用する”ことを述べている。
【0005】
以下のリンク:https://www.mylgphones.com/how-to-identify-qfuse-anti-rollback-version-of-lg-kdz-firmware.htmlは、“あなたのスマホの現在のソフトウェアバージョンはZVAであり、QfuseバージョンはARB01である。ZVAからZV6にダウングレードしたいが、ZV6ファームウェアがQfuseバージョンのARB00を有する”ことを述べている。この公開文献はまた“あなたのデバイスの現在のQfuseバージョンより低い抗ロールバック(Qfuse)バージョンのKDZ、あるいは、TOTファームウェアをフラッシュするな”と主張している。
この技術システムのその他の状態は以下で記述されている:
US20140250290A1/en、
WO2014131652A1/en
US20170308705A1/en
https://www.intel.com/content/dam/www/public/us/en/documents/guides/
bootloader-security-features-programmers-guide.pdf
【0006】
不揮発性、リセット不能、埋め込みシステムに用いる計数器の実施方法が、オンライン公開文献で示されている:
https://www.maximintegrated.com/en/design/technical-documents/app-notes/5/5042.html.
【0007】
本明細書中で記述される公開文献、および、特許文献が開示する内容、および、その中で、直接、あるいは、間接的に引用される公開文献と特許文献は、否定や放棄されない限り、参考文献に組み込まれる。組み込まれた内容とここで開示される内容が明らかに不一致である場合、その解釈は、ここで開示される内容が、ある実施形態を記述し、組み込まれた内容は、その他の実施形態を記述することである。組み込まれた内容中の定義は、討論される語彙の一種の可能な定義であると見なされる。
【発明の概要】
【発明が解決しようとする課題】
【0008】
本発明は、ロールバック攻撃を防止するセキュリティシステム、および、方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
ある実施形態は、シリコンデバイスの寿命を延長させるシステム、および、方法を提供する。
【0010】
ある実施形態は、ワンタイムプログラマブルメモリに用いられるセキュアロールバック防止方法、および、システムを提供する。
【0011】
ある実施形態は、寿命延長特徴を提供し、たとえば、OTP中で、一般的に、OTPバージョンビットを保存するバージョン番号デコードプロトコルは、OTP中で、従来のバージョン番号デコードスキームに相対する。
【0012】
ある実施形態は、書込保護されたNVM中に、ファームウェアの追加複本を提供する。
【0013】
ある実施形態は、外部メモリ上の二個の複製を用いたバージョン管理を提供する。
【0014】
ある実施形態によると、安全なロールバック防止システムが提供され、このシステムは、少なくとも二個のうちの各一個の外部不揮発性メモリデバイス上、および、OTP上で、データの複数の複製を用いる。
【0015】
一般的に、一個の内部OTP、および、一個の外部NVM(たとえば、フラッシュ)がある。一個のNVM中の一個のファームウェア複製は、読み書きが開放され、よって、アップデート可能であり、第二のNVM(OTPではない)中のファームウェアのもう一つの複製は、読み取り/書き込みを開放しない。用語"外部"は、一般的に、OTPメモリデバイスを含むシリコンデバイス外部の不揮発性メモリデバイスを有する。二個の"外部フラッシュ"は、同じ回路板/回路にあるが、シリコン上に集積される必要はない。
【0016】
任意で、一部が書込保護される単一の装置を用いてもよい。
【0017】
ある実施形態は、ロールバック防止を保証することにより、メモリ、たとえば、OTPの強化されたセキュリティを提供し、ロールバック防止は、コードのバージョン番号の二重複製を、外部不揮発性メモリデバイス中に保存することを含む。
【0018】
ある実施形態は、OTP空間に制限があっても安全なバージョン管理を提供する。
【0019】
ある実施形態は、OTP、および、フラッシュ上に保存される二個のバージョンの複製を用いた安全な階層的バージョン管理を提供する。階層的バージョン管理において、異なるセキュリティレベルを有するメジャー、および、マイナーバージョン番号を含む、二個以上のバージョンタイプがある。メジャーバージョンはOTP中に保存されるとともに、フラッシュ中で複製され、マイナーバージョンはフラッシュだけにある。OTPバージョンは降級不可、フラッシュバージョンは可能である。たとえば、3.3は3.2に変更できるが、2.4に変更できない。
【0020】
ある実施形態は、外部メモリデバイス中のバージョンフィールドの二個の署名された複製を使用し、このバージョンフィールドは、OTPバージョンフィールドと組み合わせ可能である。外部デバイス中の二個の署名されたバージョン番号は、少なくとも一つが、メインプロセッサによりアクセス不能であり、ソフトウェアブート時に、ASICのROMコードだけによりアクセス可能な第二SPIデバイス中に、バージョン番号の複製を保持することにより、単一SPIデバイス上のソフトウェア攻撃を防止する。
【0021】
以下の用語は、先行技術文献中に出現する定義と一致する、明細書の記載と一致すると解釈される、あるいは、下記をその個別の範囲に含むと解釈される。
FW(ファームウェア)イメージ - 暗号化キー(たとえば、RSA、あるいは、ECC)で署名されるブート可能なFW。
用語"イメージ"は、所定のバージョン番号と関連付けられたファームウェアコードの状態を含むことを意図する。アップグレードにおいて、バージョン番号nと関連付けられた所定の"イメージ"は、バージョン番号n+1と関連する、後にインストールされる"イメージ"により代替される。アップグレードは、現在インストールされているバージョンより以降、ファームウェアイメージをインストールする動作を含む。
ブートアップ(Boot up) -チップの通電(あるいは、リセット)時から、ブートROMコードが、ファームウェアの実行を許可するまで。
ファームウェアバージョン(FWV) -一識別子、一般的に、増分数量計数器(逓増計数)で、特定バージョンのファームウェアに一意に割り当てられ、たとえば、1.0、あるいは、53.37で、一般的に、“メジャー番号”と“マイナー番号”を含み、表記法で、一ピリオド、あるいは、点で区別される。
アクティブNVM -ブートFWイメージのメインストレージで、このメモリは、ブート後、読み取り、書き込み可能になる。
リカバリーNVM -ロールバック攻撃からFWを保護するメモリ。このメモリは、ブート後、読み書き不可である。
メジャー番号 -ファームウェアバージョン(別称、メジャーアップデート)、ある実施形態は、ロールバック保護の対象を提供する。一般的に、各NVMはこのような番号を保存する(“リカバリーメジャー”)。
マイナー番号 -マイナー番号が用いられて、ファームウェアのアップデートに対するセキュリティの敏感度が低いことを示し、弱いロールバック保護の提供には十分である。たとえば、OTP番号により記録されない(“マイナーアップデート”)。各NVMはこのような番号を記録する(“リカバリーマイナー”)。
ヒューズビットアレイ(Fuse Bit Array) -OTPビットの一アレイ、各ビットは、単一のメジャー番号に対応する。
OTP番号 -プログラム化された最高のヒューズアレイビットは、最高メジャー番号に対応する。
ヒューズアレイ:OTP内の一領域が、最新のメジャー番号を保存するために保留される。
ファームウェアアップグレードバージョニング -特定バージョン名、あるいは、特定バージョン番号を、アップグレードされるファームウェアの個別特定状態に指定する。番号が用いられるとき、バージョン番号は、一般的に、メジャー、および、マイナー番号を有する。メジャー、および、マイナー番号は、一般的に、それぞれ、逓増順序で割り当てられて、以降のバージョンが、以前のバージョンよりも大きいメジャー番号、および/または、マイナー番号を有する。
不揮発性メモリ(NVM):一旦、プログラム化されると、メモリは、電力を失っても、その値を維持する。
OTP:ワンタイムプログラマブルメモリ。一種の不揮発性メモリ(NVM)で、データを一度だけ、メモリに書き込むことを許可する。データは一回だけ書き込むことができるので、OTPデバイスは、悪意のあるソフトウェアアップデートによりハッキングされない。
フラッシュメモリ:一種の消去可能な不揮発ストレージ、あるいは、メモリ(別称、NVM)。一般的に、フラッシュメモリは、マイクロプロセッサのプログラムを保存するのに用いられる。フラッシュは消去可能なので、プログラムされたアプリケーションは、除去、および、代替、あるいは、アップデート可能である。これは、装置が再プログラム化可能で、交換の必要がなく、開発コストを減少させることができることを意味する。また、フラッシュメモリは、フィールド内ソフトウェアアップデートをサポートする。
SPIインターフェース、あるいは、シリアルペリフェラルインターフェース:一インターフェースの非制限範例であり、遅い、あるいは、序列の周辺設備をインターフェースで接続し、簡単には、低コストで、チップ選択ラインを有し、アドレススキームではない。SPIは、シリアルプロトコルで、各種デバイスと通信することができ、シリアルフラッシュデバイスを有する。SPIインターフェースは、廉価な組込コントローラー代替品より速くできる(たとえば、133MHz)。あるSPIインターフェースは2ビット、および/または、4ビットデータバスをサポートし、シリアルインターフェースだけで達成されるものより高い転送速度を達成する。
SPIフラッシュ:外部不揮発性メモリを組み立てる費用効果が高い方法は、インターフェースで接続されてSPIをカバーするフラッシュモジュールを有する。低コストで、小さい占有空間なので、SPIフラッシュモジュールは優れている。たとえば、1個の32MBのチップは、数ドルしかかからない。
外部:回路板上で実体交換することができる。
チップ選択(CS)、別称、スレーブ選択(SS):デジタル電子装置中の制御線は、単一のコンピュータバスに接続される一組の集積回路(チップ)中から一サブセット(1、あるいは、さらに多く)を選択する。シリアルペリフェラルインターフェースバス(SPIバス)は、チップ/スレーブ選択線を用いるバスの例である。
【0022】
よって、コンピュータ制御システムを提供し、このシステムは、ロールバック攻撃から保護され、これらの攻撃は、システムのファームウェアが変化するとき発生し、よって、ファームウェアのバージョンを定義する。システムは、以下の全部、あるいは、任意の集合を含む:
(i)チップは、(a)ROMコード、および、(b)プログラム可能なヒューズアレイメモリを有する。
(a)ROMコードは、一般的に、チップシリコンに集積されるブートローダー(別称、ブートROMコード)を有し、ブートROMコードは、チップがオンになる、あるいは、リセットされるたびに作動する;および/または、
(b)プログラム可能なヒューズアレイメモリ(たとえば、ワンタイムプログラマブル(OTP)メモリ)は、メモリ中に、バージョン識別子(たとえば、バージョン番号)を保存する。
(ii)第一(別称、アクティブ)、および/または、第二(別称、リカバリー)不揮発性メモリ(別称、NVM)は、メモリ中のブータブルファームウェア(別称、ブート時にロードされるファームウェア)バージョンの第一、および/または、第二複製がそれぞれ保存される;
第一識別子は、一般的に、アクティブNVM中に保存され、この識別子は、保存時、前記バージョンを一意に識別し、この識別子の第一複製はアクティブNVM中に保存され、第一識別子は、一般的に、少なくとも一つのアクティブメジャー番号、および/または、アクティブマイナー番号を有し、両者は、一般的に、プライベートキーで署名される;
第二識別子は、たとえば、リカバリーNVM中に保存され、この識別子は、保存時、通常、前記バージョンを一意に識別し、識別子の第二複製は、一般的に、リカバリーNVM中に保存され、第二識別子は、一般的に、少なくとも一つのリカバリーメジャー番号、および/または、リカバリーマイナー番号を有し、両者は、プライベートキーで署名されてもよい;および
(iii)ハードウェアデバイスは、一般的に、第一指令にしたがい、第一指令は、ブートROMコードにより、ブートアップ後提供されて、たとえば、次のシステムリセットまでロックし(別称、少なくとも、書き込みを無効にする、書込保護を提供する)、少なくともリカバリーNVM(および、任意で、OTP)は、少なくともリカバリーNVM(および、任意で、OTP)が書き込み可能ではない(書き込みにアクセス可能ではない)ことを確保することを含み、一般的に、ブートローダーのブートを除外する、および/または、第二指令に従い、第二指令は、ブートROMコードにより提供され、一般的に、次のシステムリセット時、少なくともリカバリーNVM(および、任意で、OTP)の書き込み保護を解除し、これにより、一般的に、たとえば、新しいバージョンのファームウェアがすでに有効になると、古いバージョンのファームウェアがブートされるのを防止することができるシステムを提供する。
【0023】
一般的に、両方のバージョン、および/または、両方の識別子と関連するファームウェアイメージは、プライベートキーで署名される。
【0024】
一般的に、ブートROMコードが設定されて、少なくとも一つのファームウェアイメージを認証する、および/または、第一と第二識別子の一つ、あるいは、両方を認証する。
【0025】
以上の各種実施形態、および、その他の実施形態は、次に段落で詳細に記述される。
【0026】
本明細書に出現する任意の文字、あるいは、図式の商標は、その所有者の財産であり、それらの商標の明細書中での出現は、本発明の実施例を説明するためだけのものである。
【0027】
特に説明がない限り、以下の説明から明らかなように、たとえば、"処理","演算","推定","選択","ランク付け","階層分け","計算","決定","生成","再評価","分類","形成","製造","ステレオマッチング(stereo-matching)","登録","検出","関連","重ね合わせ","獲得"等の用語を用いるのは、少なくとも一つのコンピュータ、あるいは、演算システム、あるいは、プロセッサや類似の電子計算装置の動作、および/または、プロセスが、演算システムのレジスタ、および/または、メモリ内で、物理(たとえば、電子)量として示されるデータを操作、および/または、その他の演算システムのメモリ、レジスタ、あるいは、その他のこのような情報ストレージ、伝送、あるいは、ディスプレイデバイス内の物理量で表示されるデータに転換することを指すことを理解されたい。用語“コンピュータ”は、幅広く、データ処理能力を有する任意の種類の電子装置をカバーするべきであり、これらに限定されないが、パソコン、サーバ、埋め込みコア、計算システム、通信装置、プロセッサ(たとえば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラー、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等)、および、その他の電子演算装置を有する。
【0028】
ここでそれぞれリストされる素子は、違った素子である必要はなく、選択的に、同じ構造であってもよい。一素子、あるいは、特徴が存在する陳述は、(a)素子、あるいは、特徴が存在する実施形態;(b)素子、あるいは、特徴が存在しない実施形態;および(c)素子、あるいは、特徴が選択的に存在し、たとえば、ユーザーが、素子、あるいは、特徴が存在するか、存在しないかを設定することができることを含むことを意図する。
【発明の効果】
【0029】
本発明により、シリコンデバイスの寿命を延長することができる。
【図面の簡単な説明】
【0030】
【
図1】既知のプロセスを説明する簡潔なフローチャートであり、メモリチップのシリアル番号が用いられて、不正事象を検出し、不正事象において、メモリチップは、低い計数値を有するメモリチップで代替される。具体的には、
図1は、既知のアルゴリズムを示し、このアルゴリズムは、32ビットメモリページ内で、計数を逓増させる。
【
図2】本発明の実施形態により構成されるシステムを説明する簡潔なブロック図である。必要であれば、これらの実施形態のそれぞれの素子は、別の素子、あるいは、任意の実施形態、あるいは、ここで記述、あるいは説明される方法と結合される。説明されるコンポーネンツの全て、あるいは任意の集合が提供される。
【
図3】本発明の実施形態により構成されるシステムを説明する簡潔なブロック図である。必要であれば、これらの実施形態のそれぞれの素子は、別の素子、あるいは、任意の実施形態、あるいは、ここで記述、あるいは説明される方法と結合される。説明されるコンポーネンツの全て、あるいは任意の集合が提供される。
【
図4】ある実施形態による初期設定、および、アップデートプロセスを示す図である。
【
図5】ある実施形態による初期設定、および、アップデートプロセスを示す図である。
【発明を実施するための形態】
【0031】
本発明の範囲中に含まれる方法、および、システムは、任意の順序(たとえば、図示される順序)で、特に説明される実施で示される機能ブロックの一部(たとえば、任意の適当な集合)、あるいは、すべてを例として含む。
【0032】
ここで記述、および、図示される演算、機能、および、論理コンポーネンツは、各種形式で実施され、たとえば、ハードウェア回路となり、たとえば、これらに限定されないが、カスタムVLSI回路、あるいは、ゲートアレイ、あるいは、プログラム可能なハードウェアデバイス、たとえば、これらに限定されないが、FPGA、あるいは、少なくとも一つの有形、あるいは、無形のコンピュータ可読媒体上に保存されるとともに、少なくとも一つのプロセッサにより実行可能なソフトウェアプログラムコード、あるいは、それらの任意の適当な組み合わせである。特定の機能部品は、ソフトウェアコードの特定順序、あるいは、複数のソフトウェアコードの特定順序により形成され、討論される機能部品にとって、これらのソフトウェアコードの順序は、記述される方式で、集団行動、あるいは、表現される。たとえば、コンポーネンツは、いくつかのコードシーケンスで分布し、たとえば、これらに限定されないが、物件、工程、函数、ルーティン、および、プログラムであると共に、一般的に、相乗的に操作するいくつかのコンピュータファイルによって生じる。
【0033】
ここで記述される任意の論理機能は、必要に応じて、リアルタイムアプリケーションとして実施され、且つ、論理機能は、任意の適当な構造上のオプション、たとえば、これらに限定されないが、ASIC、あるいは、DSP、あるいは、それらの任意の適当な組み合わせを採用する。ここで述べられる任意のハードウェア素子は、事実上、一つ以上のハードウェアデバイス、たとえば、チップを有し、これらのハードウェアデバイスは、共同設置されてもよく、あるいは、離れていてもよい。
【0034】
EPROMエミュレーションモードを含むEEPROMは、不揮発性、リセット不能計数器の実施に有用である。メモリチップのシリアル番号が用いられて、不正事象を検出する。不正事象中、メモリチップは、もう一つの低い計数値を有するメモリチップにより代替される。
図1は、既知のアルゴリズムの範例であり(https://www.maximintegrated.com/en/design/technical-documents/app-notes/5/5042.html)、アルゴリズムは、32ビットメモリページ内で計数を逓増させる。
【0035】
コードに損害を与える一般的な攻撃方法は、既に知られているコード弱点と脆弱性を利用する。この種の攻撃を防止するため、コードサプライヤーは、定期的に、それらのコードをメンテナンスし、メンテナンスは、一般的に、ある攻撃に対し脆弱な、シリコン上に現在保存された既知の、あるいは、現在見つかっている古いバージョンのコードを、このような攻撃に対して脆弱ではない新しいバージョンのコードに交換することを含む。
【0036】
しかし、攻撃者が、すでにメンテナンスした脆弱でない新しいコードバージョンを、古く、且つ、脆弱なコードバージョンに交換する(別称、"ロールバック")ように仕向けた場合、攻撃者は、その後、古いコードの既知の弱点を利用することができる。この攻撃経路を防止するため、コードバージョン番号は保存され(たとえば、OTPメモリ上のシリコンデバイス内)て、コードバージョンが、古く脆弱なコードバージョンではなく、最新のものであるように確保する。OTP(One Time Programmable)メモリは消去できないので、これにより、OTP中のバージョンはロールバックされない。しかし、コードバージョン番号のOTP空間は制限があるので、所定システムが受け入れられるコードアップデート、あるいは、バージョンの数量を制限する。
【0037】
ある実施形態は、外部メモリデバイス(SPIフラッシュ)中のバージョンフィールドの二個の署名された複製を用いることにより、この問題を解決し、バージョンフィールドは、場合により、OTPバージョンフィールドと結合される。よって、本発明の一実施形態は、二個の署名された外部複製だけを使用し、もう一つの実施形態は、OTPバージョンフィールドと結合される二個の外部複製を使用する。前の実施形態(二個のフラッシュだけを用いる)によると、一般的に、両フラッシュは、最初に、バージョン1(1,1)を含む。その後、アクティブフラッシュバージョン番号は、2にアップデートされ、アクティブフラッシュのアップデート時に、リカバリーフラッシュは書込保護される(2,1)。次のリセット時、アクティブフラッシュコンテンツの有効性と信頼性がテストされる。アクティブフラッシュバージョンが有効であると認められる場合(3)、(現時点でリカバリーフラッシュにアクセスできる)セキュアコードは、アクティブフラッシュコンテンツを、バージョン番号(2,2)を有するリカバリーフラッシュに複製する。その後、安全でないコードの実行が許可される前、リカバリーフラッシュは書込保護される。
【0038】
後の実施形態(二個のフラッシュ、および、一個のOTPを用いる)によると、フラッシュ1、2は、それぞれ、メジャー、および、マイナーバージョンを含み、OTPは、メジャーバージョン1(1.2,1.2,1)だけを有する。アクティブフラッシュバージョン番号が2.0にアップデートされ、アクティブフラッシュのアップデート時、リカバリーフラッシュはまだ書込保護される(2.0,1.2,1)。次のリセット後、アクティブフラッシュコンテンツの有効性と信頼性がテストされる。アクティブフラッシュバージョンが有効であると認められる場合(上記ステップ)、(現時点でリカバリーフラッシュ、および、OTPにアクセスできる)セキュアコードは、アクティブフラッシュコンテンツを、バージョン番号(2.0,2.0,1)を有するリカバリーフラッシュに複製する。このほか、OTPバージョンは、メジャーバージョン(2.0,2.0,2)にアップデートされる。その後、安全でないコードの実行が許可される前、リカバリーフラッシュは書込保護されると共に、OTPがロックされる。
【0039】
図2に示されるように、ある実施形態は、外部メモリ中に保存されるコードバージョン番号フィールドと、内部OTP空間に保存されるバージョンデータを結合する。バージョンフィールドは、二個の複製、一つは外部メモリ#0上の(Flash #0 Ver)、もうひとつは、外部メモリ#1上の(Flash #1 Ver)中に保存される。
【0040】
外部メモリは、SPIフラッシュを有してもよい。ファームウェアアップデートは、ランタイム外部メモリ(
図2のフラッシュ0)で実行される。
バージョンフィールドは、二個の番号、あるいは、数量により実施され、これらの番号、および、数量は、フラッシュ中でプログラムされる:OTPバージョン(OTP_VER)とフラッシュバージョン(FLASH_VER)中でプログラム化される。
【0041】
OTPは、リカバリー/アクティブフラッシュメジャーバージョンをミラー(mirror)することが予期される。そうでない場合、ロールバック攻撃が試みられたと仮定される。
【0042】
理解できることは、一般的に、アップデート工程期間以外では、前記二個の番号は通常同じであり、アップデート時、アクティブ、および、リカバリー/OTPバージョン番号は異なる。
【0043】
リカバリーフラッシュは、一般的に、ロールバック攻撃、あるいは、アップデート試みの失敗時、ランタイム(アクティブ)フラッシュコンテンツをリカバーするのに用いられる。
【0044】
アクティブ(あるいは、ランタイム)フラッシュは、一般的に、リカバリーフラッシュと構造が物理的に同じであり、多種の用途に用いられ、たとえば、ファームウェア、あるいは、任意の所望のデータの保存を有する。バージョン番号は、通常、ファームウェアイメージ中に固定地点を有する。リカバリーフラッシュは、最後のアップデートの時に、アクティブフラッシュ中に保存される任意のコンテンツのバックアップを保存してもよい。必要であれば、リカバリーフラッシュは、ある形式に設定されて、別のタイプの定数データを保存する;フラッシュは書込保護される。
【0045】
任意のファームウェアアップデート中、一般的に、OTPバージョン番号、あるいは、フラッシュバージョン(FLASH_VER)の一つが、逓増する。任意の工程管理バージョン番号が用いられる。例のアップデートプロセスがここで記述される。
【0046】
図2において、OTPバージョン(OTP VER)は、一般的に、OTP専用バージョンフィールド中、値1にプログラムされる最高ビットを有する。フラッシュにおいて、コード(ファームウェア)+バージョン番号は、一般的に、たとえば分離できないように、一緒に署名される。
【0047】
コードバージョン番号を保存するバージョンフィールドは、一般的に、たとえば、ファームウェアのパブリックキーで認証される。コードバージョン番号のOTP、あるいは、フラッシュバージョンのひとつが逓増するとき、ファームウェアコードの新しいバージョンは、一般的に、まず、Flash #0でアップデートされる。
【0048】
任意の適当な方法が用いられて、flash #0中のバージョンが確実に行われているか否か判断する。たとえば、アップデートプロセス期間中、新しいファームウェアがデバイス中にロードされる、且つ、デバイスが各種テスト(たとえば、通信、表示)を行って、デバイスが、任意のシステム障害の場合に、リカバーできるように確保する。
【0049】
一般的に、一旦、flash #0中のバージョンが確実に行われると、ファームウェアアップデートが以下のように継続される:
逓増するバージョン番号がOTPバージョン(OTP_VER)である場合、OTP空間中のバージョンも同様に逓増し、且つ、Flash #1中のバージョンも、それにしたがってアップデートされる。
逓増するバージョン番号がフラッシュバージョン(FLASH_VER)である場合、Flash #1中のFLASH_VERだけがアップデートされ、OTPバージョンはアップデートされない。
このロジックは、このファームウェアアップデートが、任意の適当な位置、たとえば、セキュアコード(たとえば、ROMコード)中、および、ブートヒエラルキー全体に沿って保存されることを確保する。一般的に、ROMコードは、ユーザープロセスにおいて、最高のセキュリティレベルにあり、信頼性テストは、最低レベルのセキュリティレベルにある。
【0050】
新しい製品バージョンがリリースされるとき、たとえば、ここで記述される装置と方法を使用しない標準のOTPバージョンの実施において、OTPファームウェアバージョンフィールド(
図2のOTPバージョン)は、すでに、OTPメモリ中で、大量のビットを使用しており、よって、後続のOTPバージョンをアップデートできる数量を、OTPバージョンメモリの残りのビット数に制限する。たとえば、残りが3個のOTPビットしかない場合、三回のアップデートだけが可能である。
【0051】
新しい製品でこの問題を回避するため、リリースされた(第一)バージョン番号は、OTP中の異なるフィールド中(first_ver_num)に書き込むことができる。この番号が、"異なる"フィールド中に書き込まれることを確保するロジックは、たとえば、アップデートプロセス中のROMコード中に存在してもよく、あるいは、フラッシュデバイス内に外部からプログラム化されてもよい。
【0052】
たとえば、8ビットフィールドは、0~255から、任意のバージョン番号を表すことができる。理解できることは、16進数表現の8ビットに代えて、任意の異なる方法を用いて、現在のファームウェアバージョンを表すことが可能である。たとえば、第一バージョン番号の代わりに、OTP中に一領域を有してもよく、この領域において、焼かれた各ビットは16個の正常なバージョン番号のジャンプを表す。
【0053】
たとえば、古いデバイスにおいて、OTPバージョンメモリは、バージョン33(この時、OTP中、33個のバージョンビットがすでに使用されている)を表す場合がある。しかし、新しい製品において、FIRST_VER_NUMフィールドは33であり、OTP_VERフィールドは、使用されるビットがない。一ファームウェアアップデートにおいて、新しい、および、古い製品はともに、OTP中の一ビットで焼かれ、これらの焼く動作は、ブート時に、たとえば、ROM/セキュアコード内に存在するロジックにより管理される。
【0054】
理解できることは、一般的に、古いデバイスは古いファームウェアバージョンから、すでに多くのOTPビットを使用していることである。新しいデバイスは、これらのファームウェアバージョンを用いず、よって、これらのOTPビットを焼かない。古い製品中ではなく、新しい製品中に提供されるOTP_VERフィールドは、使用されるビットを有さないという事実のおかげで、新しい製品は、古い製品と比べて、さらに多くのファームウェアリリースを受けることができ、古い製品と比較して、新しい製品の寿命を効果的に延長することができる。
【0055】
理解できることは、古いデバイスにとって、全バージョンのOTPビットが焼かれる場合、フラッシュが代わりに用いられて、OTPバージョンを表すことである。これは、ロールバック攻撃防止能力を低下させる。フラッシュメモリ中、OTPのバージョン番号は拡張される。
【0056】
理解できることは、flash #1、および、OTP中の任意のバージョンアップデートは、セキュアコードにより実行され、このコードは、ファームウェア層0(ROMコード後の第一層)中に存在、並びに、作動する、あるいは、別に保護されるプロセッサで作動する、あるいは、任意のその他の安全なハードウェアにより作動される。
【0057】
ある実施形態は、安全なバージョン管理システムを提供し、このシステムは、不揮発性(NV)ストレージデバイス(たとえば、これらに限定されないが、ディスク、SPIフラッシュデバイス、あるいは、任意のその他のNVメモリ)中に保存される埋め込みファームウェア(FW)のロールバック攻撃を防止する。このシステムは、新しいファームウェアバージョンがすでにアップデートされ、且つ、有効になると、古いバージョンのファームウェアをブートアップすることにより、システムをロールバック攻撃から効果的に保護する。このシステムは、たとえば、古いファームウェアバージョンの弱点が発見される場所で、ファームウェアの安全なアップデートを促進する。一般的に、各ブート工程で、デバイス内のコードが起動する前、セキュアコードは、OTPとフラッシュバージョン番号が一致するか比較する。比較結果が一致しない場合、ブートは失敗で、中止される。たとえば、
図3は、ロールバック防止システム(RPS)を説明する簡潔なブロック図である。ロールバック防止システム(RPS)は以下のコンポーネンツの全て、あるいは、任意の集合を有する:
a.チップが通電するとき作動するブートローダーROMコードを有する埋め込みチップ
b.ブート時、ファームウェアを保存する二個の不揮発性メモリ(NVM)デバイス
c.チップに集積されて、バージョン番号ヒューズを保存するワンタイムプログラマブル(OTP)、あるいは、“ヒューズ”メモリ
d.NVMの一つの読み書きを無効にするハードウェア(HW)デバイス、あるいは、方法
【0058】
実施形態は、以下のものを含むが、以下のものに限定されない。
第1実施形態:ロールバック攻撃から保護するコンピュータ制御システムで、ロールバック攻撃は、システムのファームウェアが変化するとき発生し、これにより、ファームウェアのバージョンを定義し、本システムは、以下の全て、あるいは、任意の集合を有する:
(i)チップは、(a)ROMコード、および、(b)プログラム可能なヒューズアレイメモリを有する。
(a)ROMコードは、一般的に、チップシリコンに集積されるブートローダー(別称、ブートROMコード)を有し、ブートROMコードは、チップがオンになる、あるいは、リセットされるときはいつでも作動する;および、
(b)プログラム可能なヒューズアレイメモリ(たとえば、ワンタイムプログラマブル(OTP)メモリ)は、メモリ中に、バージョン識別子(たとえば、バージョン番号)を保存する;
(ii)第一(別称、アクティブ)、および/または、第二(別称、リカバリー)不揮発性メモリ(別称、NVM)は、メモリ中のブータブルファームウェア(別称、ブート時にロードされるファームウェア)バージョンの第一および第二複製をそれぞれ保存する;
第一識別子は、アクティブNVM中に保存され、この識別子は、保存時、前記バージョンを一意に識別し、この識別子の第一複製はアクティブNVM中に保存され、第一識別子は、少なくとも一つのアクティブメジャー番号およびアクティブマイナー番号を有し、両者は、プライベートキーで署名される;
第二識別子は、リカバリーNVM中に保存され、識別子は、保存時、前記バージョンを一意に識別し、識別子の第二複製は、リカバリーNVM中に保存され、第二識別子は、少なくとも一つのリカバリーメジャー番号およびリカバリーマイナー番号を有し、両者は、プライベートキーで署名される;および
(iii)ハードウェアデバイスは、一般的に、第一指令にしたがい、第一指令は、ブートROMコードにより、ブートアップ後提供されて、次のシステムリセットまでロックし(別称、少なくとも、書き込みを無効にする、書込保護を提供する)、少なくともリカバリーNVM(および、任意で、OTP)は、少なくともリカバリーNVM(および、任意で、OTP)が書き込み可能ではない(書き込みにアクセス可能ではない)ことを確保することを含み、一般的に、ブートローダーを除外し、および、第二指令に従い、第二指令は、ブートROMコードにより提供され、次のシステムリセット時、少なくともリカバリーNVM(および、任意で、OTP)の書き込み保護を解除し、これにより、新しいバージョンのファームウェアが有効になると、古いバージョンのファームウェアがブートされるのを防止することができるシステムを提供する。
ファームウェアイメージは、両バージョンと関連し、且つ、
両識別子はプライベートキーで署名され、且つ、
ブートROMコードが設定されて、少なくとも一つのファームウェアイメージを認証する、および/または、第一、および/または、第二識別子を認証する。
【0059】
ブートROMコードは、たとえば、リカバリーNVM、および、アクティブNVM両方中で、メジャー、および、マイナー番号両方を認証する。
【0060】
理解できることは、ファームウェアコード自身は、一般的に、ブート前は、NVMだけにあり、ブート後、コードは、一般的に、デバイスRAMにも保存されることである。
【0061】
ある実施形態によると、外部コードが実行可能でないブート段階中、且つ、ブート段階の終了時であるが、任意の外部コードが作動できる前、書込保護は元に回復し、これにより、ロールバック攻撃を効果的に防止する。
【0062】
ファームウェアのイメージは、フラッシュ中に保存されてもよい。
【0063】
各ファームウェアバージョン番号は、一般的に、特定のファームウェアイメージに関連し、且つ、一緒に署名される。
【0064】
通常、両NVM中のファームウェアイメージは同じである。しかし、ブート時、ROMコードが設定されて、アクティブイメージ中のマイナーバージョン番号が、リカバリーイメージ中のマイナーバージョン番号と同じか、それより高い場合のみブートを許可する、および/または、ROMコードが設定されて、アクティブイメージ中のメジャーバージョン番号が、OTP中のバージョン番号と同じか、高い場合のみ、ブートを許可する。
【0065】
ここで、"リセット"という用語が用いられて、複数の事象を含み、チップはこの事象後、あるいは、この事件の結果、新たに通電される。
【0066】
一般的に、プライベートキーホルダーの所有者は、システム製造者であり、且つ、ファームウェアイメージを署名することが認証されたエンティティだけが、このキーにアクセスするので(よって、認証されたエンティティだけが、このキーを用いて、ファームウェアイメージを署名することができる)、プライベートキーはシークレットである。
【0067】
一般的に、パブリックキーは、シリコンデバイス内部の書込保護されたメモリ(たとえば、上述のROMコード、あるいは、書込保護されたOTP、あるいは、書込保護された埋め込みフラッシュ)中に保存される。
【0068】
一般的に、パブリックキーは、未認証コードにより修正可能であってはならず、修正されたパブリック/プライベートキーペアの使用を防止する。ROMコードは一ヘッダーを検証し、ヘッダーは、第二キーを有し、第二キーが用いられて、ファームウェア自身を認証する;第二キーは有効であるので、これは有効である。
【0069】
第2実施形態: ロールバック攻撃からシステムを保護する方法であって、ロールバック攻撃は、システム中のファームウェアが変化するとき発生し、よって、バージョンを定義する。本方法は:
(i)第1実施形態の全て、あるいは、任意の集合を有するシステムを提供する;
(ii)第一バージョンのブータブルファームウェア(別称、第一ファームウェアイメージ)の複製を、アクティブ、および、リカバリーNVM中に保存する;
少なくとも一つの第一バージョンのメジャー番号の第一、および、第二複製を、それぞれ、第一、および、第二不揮発性メモリデバイス中に保存する;および
OTPメモリ中の少なくとも一つのビットをプログラム化して、メジャー番号と等しく(適合)する;
(iii)少なくとも一回、ファームウェアのマイナーアップデートを実行し、アクティブNVM中に保存されるブータブルファームウェアのバージョンを、ブータブルファームウェア新しい"マイナー"バージョンで代替すること、および、アクティブNVM中に保存される識別子を、高いマイナー番号を有する新しい識別子で代替することを有する;および
(iv)ブートを必要とする少なくとも一つのリセット後、
a.ブートローダーに命令する:
すくなくとも、アクティブNVMのコンテンツが有効であるか、アクティブNVM中の識別子が、OTP番号より大きいか判断する;および
アクティブNVM中のメジャー番号がOTP番号より低い場合、ブートを中止する、および、
b.アクティブNVM中の識別子(別称、アクティブマイナー)が、リカバリーNVM中の識別子(別称、リカバリーマイナー)より大きい場合のみ、それぞれ、下記からなる操作b1、b2を実行する:
操作b1. ブータブルファームウェアの新しいバージョンが、リカバリーNVM中に現在書き込まれるブータブルファームウェアのバージョンに書き込まれる;および
操作b2. リカバリーNVM中の識別子がアップデートされ、アクティブNVM中の識別子の値に等しくなる。
【0070】
一般的に、ファームウェア、および、バージョン番号は、一緒に署名されて、バージョン番号と実際のブータブルファームウェアが連結されなければならない。攻撃者が、ファームウェアコンテンツの交換を試み、バージョン番号をそのままにする、あるいは、逆の場合、署名認証は失敗する。よって、署名は、バージョン番号に安全性の意義を提供する。
【0071】
リカバリーNVMにおいて、署名が用いられて、自動リカバリー事象(たとえば、ここで記述される自動リカバリー事象)中のアクティブNVMの同等の複製となる。
【0072】
一般的に、OTPビットがプログラムされて、両NVM中にも保存されるそのバージョンのメジャー番号と適合する。
【0073】
理解できることは、リカバリーNVMは、ブート後、ユーザーにアクセスできない(書き込みがロックされる)ことである。ブートローダーだけがリカバリーNVMに書き込める。
【0074】
理解できることは、OTP中の各ビットは二進数の1にプログラムされるか、そうでなければ、二進数0である。OTP中に保存されるヒューズアレイにおいて、一アレイ(たとえば、ビット0~64を含む)中の一ビットのインデックスは、OTP番号に対応する。たとえば:アレイのプログラムビット17が、1の最高ビットにプログラムされる場合、この状況は、OTP番号17であると解釈される。インデックス19のビットがその後、1にプログラムされる場合、この動作は、OTP番号を19に変化させる。この動作は、上昇するOTPインデックスが尽きない限り実行することができ、よって、アレイが64ビットである場合、その後、保存可能な最高OTP番号は64である。
【0075】
第3実施形態: 第1実施形態に基づいた、あるいは、前述の任意の実施形態に基づくシステムにおいて、OTPメモリは複数のヒューズを有し、これらのヒューズの状態は、バージョン番号を表す。
【0076】
第4実施形態: 第1実施形態に基づいた、あるいは、前述の任意の実施形態に基づくシステムにおいて、OTP中の複数のビット(別称、OTPビット)が用いられて、番号を表し、
OTP-Number(OTP番号)= Starting-Number(開始番号) + Counter(計数),
複数のビットは、nビットの一アレイを有し、これにより、それぞれ、nビットに関連するnビットインデックスを定義し、nビットは、値 "0"を有するビットの("第一")集合、および、1にヒューズされたビットの("第二")集合を有し、計数は、1にヒューズされたnビットの("第二")集合に関連する数個のビットインデックス中から、最高インデックスとして決定される。
【0077】
すでに符号化された開始番号は、一般的に、保護される不揮発性内部メモリ中、たとえば、(あるいは、別の)OTP、埋め込みフラッシュ、あるいは、ROMコード中に存在する。
【0078】
上記の特徴は、オフセット特徴(offset feature)とも称され、開始番号は“オフセット”とも称される。
【0079】
開始番号(オフセット)は、たとえば、一般の二進数に符号化される。あるいは、別の方法を用いて、単純な番号(たとえば、1、45、あるいは、100)を保存するかわりに、開始番号を保存し、この方法は、少ないOTPヒューズを用い、これにより、OTPヒューズを節約すると同時に、製品の寿命を延長する。たとえば、5個のヒューズを有するフィールド中、プログラムされた各ヒューズは、それぞれ、50の開始番号逓増に対応し、開始番号150を意味する:
【数1】
【0080】
たとえば、ここで一アレイが示され、アレイは、第三ビットだけがヒューズされる可能性がある(通常は、第一から第三ビットがヒューズされても、この状態は可能である。よって、最新の有効メジャー番号は3である。
【数2】
このアレイ中、第七ビットもヒューズされる(通常、第一~第七ビット、あるいは、少なくとも第三~第七ビットであっても、ヒューズされる)。よって、最新の有効メジャー番号は7である。
【数3】
比較すると、別の領域(たとえば、ビット)が、符号化された番号(開始番号)をOTPに保存する場合、この番号の解釈はオフセットであり、たとえが、以下の例で示される:
例えば、値"75"(二進数、あるいは、十進数として、あるいは、その他の任意の効果的な方法を使用)が、OTP中の開始番号領域中に保存される:
【数4】
その後、第三ビットだけがヒューズされる一アレイを与える場合、最新の有効メジャー番号は、3+75=78であり、3ではない。
【数5】
同様に、第七ビットもヒューズされる一アレイを与える場合、最新の有効メジャー番号は、7+75=82であり、7ではない。
【数6】
理解できることは、この実施形態は、開始番号が提供されないシステムと比較して、製品の寿命を延長することができる。
【0081】
第5実施形態: 第1実施形態に基づいた、あるいは、前述の任意の実施形態に基づいたシステムにおいて、ハードウェアデバイスは、アクティブNVMの読み書きを無効にせず、よって、アクティブNVMは、ブート後、読み書き可能である。
【0082】
第6実施形態: 第4実施形態に基づいた、あるいは、前述の任意の実施形態に基づくシステムにおいて、第一ファームウェアイメージが、アクティブ、および、リカバリーNVM中に保存されるとき、OTP番号は、両NVM中に保存されるメジャー番号と等しい。
【0083】
第7実施形態: 第2実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法において、ハードウェアデバイスによるリカバリーNVMのロックは、さらに、リカバリーNVMからの読み取りを無効にすることを有し、リカバリーNVMが読み取り可能ではないことを確保することを含む。
【0084】
第8実施形態: 第2実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法において、リカバリーNVMのロックは、リカバリーNVMを切断することを有する。
【0085】
第9実施形態: 第2実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法において、ハードウェアデバイスによるOTPのロックは、さらに、リカバリーNVMからの読み取りを無効にすることを有し、OTPが読み取り可能ではないことを確保することを含む。
【0086】
第10実施形態: 第2実施形態に基づく、あるいは、前述の任意の実施形態に基づく方法において、アクティブ、および、リカバリーNVM中にそれぞれ保存されるブータブルファームウェアの第一バージョンおよび少なくともメジャー番号が、パブリックキーで一緒に署名され、これにより、署名(signature)を生成する。
【0087】
理解できることは、この実施形態は、すでに署名されたコードに対して有用であり、未署名コードに対しては、同じバージョンが任意のコードと関連付けられてもよい。
【0088】
一般的に、パブリックキーとプライベートキーは関連付けられ、プライベートキー(だけ)は、認証されたファームウェアパブリッシャーにより所有される。
【0089】
ファームウェアを有する(パブリック)キーが用いられて、高レベルのファームウェアを認証する。
【0090】
第11実施形態: 第10実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法において、ブートローダーのアクティブNVMコンテンツに対する有効性のテストは、アクティブNVMのコンテンツと署名の暗号化認証(cryptographic authentication)を有する。
【0091】
第12実施形態: 第11実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法において、認証は、プライベートキーとペアのパブリックキーを使用し、且つ、パブリックキー(プライベートキーではない)がOTP中に保存される。
【0092】
プライベートキーは、一般的に、認証署名者(だけ)により保存される。
【0093】
第13実施形態: 第2実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法、且つ、ブートローダーのアクティブNVMコンテンツに対する有効性のテストは、アクティブNVM中のメジャー番号が、リカバリーNVM中のメジャー番号に等しいか、それより高いことを確保することを有する。
【0094】
第14実施形態: 第2実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法、且つ、ブートローダーのアクティブNVMの内容に対する有効性テストは、少なくとも一つのシステムレベルテストから指示を提供して、少なくとも一つの所定基準を確保することを有する。
【0095】
第15実施形態: 第14実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法、且つ、基準は、新しいバージョンのブータブルファームウェアが、安定してブートされるという判定を有する。
【0096】
前の成功したブートは、新しいバージョンのブータブルファームウェアが安定してブートされるという判定基準の一例である。
【0097】
第16実施形態: 第2実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法において、アクティブNVM中のメジャー番号がOTP番号に等しいときかつその時に限り、ブートローダーがブートをうまく完了する;および、
たとえば、ブートローダーによりテストし、アクティブNVM中の有効な内容を解明する。
【0098】
第17実施形態: 第2実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法において、トラストのチェーン(chain of trust)が少なくとも一回、繰り返して実施され、トラストチェーンは、認証済みコードを用いて、余分なコードレベルを認証し、このコードレベルは、追加メジャー、および/または、マイナーバージョン番号を有し、バージョン番号は、さらに別のコードレベルを認証することができる。
認証後、認証コードは、NVMからRAMにロードされる。
【0099】
第18実施形態: 第1実施形態に基づいた、あるいは、前述の任意の実施形態に基づくシステムにおいて、アクティブ、および、リカバリーNVMは、二個の別々のメモリデバイスを有する。
【0100】
第19実施形態: 第1実施形態に基づいた、あるいは、前述の任意の実施形態に基づくシステムにおいて、アクティブ、および、リカバリーNVMは、単一フラッシュデバイス上に二個のメモリ範囲を有する。
【0101】
第20実施形態: 第4実施形態に基づいた、あるいは、前述の任意の実施形態に基づくシステムにおいて、開始番号は書込保護である。
【0102】
第21実施形態: 第2実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法は、さらに、ブートローダーに命令して、アクティブNVMコンテンツの有効性をテストするとともに、アクティブNVMのコンテンツが有効でない場合、ブートを中止し、これにより、ブートが失敗することを有する。
【0103】
第22実施形態: 第21実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法、且つ、ブートローダーが、アクティブNVM中の識別子が、OTP番号より大きいか否か、あるいは、NVM、あるいは、アクティブNVM内容が有効かを判断する前、ブートローダーが、アクティブNVMのコンテンツの有効性をテストする。
【0104】
第23実施形態: 第2実施形態に基づいた、あるいは、前述の任意の実施形態に基づく方法において、操作b1、b2は、認証コードにより実行される。
【0105】
一般的に、認証コードは、NVM、あるいは、ROM中のROMコードブートブロック、あるいは、一/そのOTP中、あるいは、保護される埋め込みフラッシュ、あるいは、RAM中の認証コード中に存在する。
【0106】
第24実施形態: 第2実施形態に基づく、あるいは、前述の任意の実施形態に基づく方法において、操作b1、b2は、ブートローダーにより実行される。
【0107】
第25実施形態: 第2実施形態に基づく、あるいは、前述の任意の実施形態に基づく方法において、本方法はさらに、
少なくとも一度、ファームウェアのメジャーアップデートを実行し、アクティブNVM中に保存されるブータブルファームウェアのバージョンを、ブータブルファームウェアの新しい"メジャー"バージョンで代替する、および、アクティブNVM中に保存される識別子を、高いメジャー番号を有する新しい識別子で代替すること;および
(vi)ブートが必要な少なくとも一つのリセット後、
a.ブートローダーに命令し:
アクティブNVM中のコンテンツの有効性をテストして、
アクティブNVMのコンテンツが有効でない場合、ブートを中止し、よって、ブートの失敗を生じ、
少なくとも、アクティブNVMのコンテンツが有効である場合、アクティブNVM中の識別子が、OTP番号より大きいか否か判断する;および、
アクティブNVM中のメジャー番号がOTP番号より小さい場合、ブートを中止し、および、
b.アクティブNVM中の識別子がOTP番号より大きい場合だけ、それぞれ、下記からなる操作b4、b5、b6を実行する:
操作b4. ブータブルファームウェアの新しいバージョンが、リカバリーNVM中に現在保存されるブータブルファームウェアのバージョンに書き込まれる;
操作b5. リカバリーNVM中の識別子がアップデートされ、アクティブNVM中の識別子の値に等しくなる;および
操作b6. ヒューズアレイ中のフリービットが、アクティブNVM中の識別子の値にプログラムされて、OTP番号がアクティブNVM中の識別子に等しく、さらに、リカバリーNVMの識別子に等しくなるように確保する、工程を有する。
【0108】
理解できることは、ここで記述される操作の順序は、制限されることを意図していないことである。たとえば、操作b4がまず実行され、次に、操作b5、そして、操作b6の順序である必要はない。その他の順序を用いることもできる。
【0109】
第26実施形態: 第25実施形態に基づく、あるいは、前述の任意の実施形態に基づく方法において、操作b4、b5、b6は、認証コードにより実行される。
【0110】
一般的に、認証コードは、NVM中に存在する。
【0111】
第27実施形態: 第25実施形態に基づく、あるいは、前述の任意の実施形態に基づく方法において、操作b4、b5、b6は、ブートローダーにより実行される。
【0112】
第28実施形態: 第4実施形態、あるいは、前述の任意の実施形態に基づくシステムにおいて、OTP番号は、アクティブメジャーとリカバリーメジャー番号のそれぞれへの比較参照として用いられる。
【0113】
第29実施形態: 第11実施形態に基づく、あるいは、前述の任意の実施形態に基づく方法において、認証は、プライベートキーとペアであるパブリックキーを使用し、パブリックキー(プライベートキーではない)がROM中に保存される。
【0114】
初期設定、および、アップデート段階は、それぞれ、
図4と
図5に示すように、独立、あるいは、分離、あるいは、組み合わせて、以下に記述あるいは説明される実施形態と関連して提供される。具体的には以下に示す。
【0115】
図4は、ある実施形態による高いメジャー番号(“メジャーアップデート”)を有する新しいファームウェアイメージをロードする方法を説明する簡潔なフローチャートである。
図4の方法は、一般的に、以下の操作の全て、あるいは、任意の集合を有し、例えば下記のように適当な順序で実行される。
工程401:第一ファームウェアイメージは、アクティブ、および、リカバリーNVM両方に、完全に同じように保存される。
OTP番号は、両NVM中に保存されるメジャー番号(アクティブバージョン番号=1.2,リカバリーバージョン番号=1.2,OTP番号=1)に適合する。
工程402:新しいファームウェアイメージはアクティブNVM(高いメジャー番号を有する、(2.0,1.2,1))にロードされる。
工程403:リセット後、ブートローダーは、アクティブNVM内容の有効性と信頼性を認証、および、テストする(ファームウェアが有効でない場合、ブートローダーは中止)。
工程404:ブートローダーが、アクティブメジャーがOTP番号より大きいと判断すると、新しいファームウェアイメージは、リカバリーNVM中の古いファームウェアイメージ上に書き込まれる。(2.0,2.0,1)。
工程405:ヒューズアレイ中の別のビットがプログラムされ、この時、OTP番号は、アクティブメジャー、および、リカバリーメジャー(2.0,2.0,2)と適合する。
工程406:リカバリーNVM、および、ヒューズアレイは、次のシステムリセットまでロックされる。メジャーアップデートが完了する。
【0116】
図5は、ある実施形態による高いマイナー番号(“マイナーアップデート”)を有する新しいファームウェアイメージをロードする方法を説明する簡潔なフローチャートである。
図5の方法は、一般的に、以下の操作の全て、あるいは、任意の集合を有し、例えば下記のように適当な順序で実行される。
工程501:第一ファームウェアイメージは、アクティブ、および、リカバリーNVM両方に、完全に同じように保存される。
工程502:OTP番号は、両NVM中に保存されるメジャー番号(アクティブバージョン番号=1.2,リカバリーバージョン番号=1.2,OTP番号=1)と適合する。
工程503:新しいファームウェアイメージは、アクティブNVM(高いマイナー番号を有する,(1.3,1.2,1))にロードされる。
工程504:リセット後、ブートローダーは、アクティブNVM内容の有効性と信頼性を認証、および、テストする(ファームウェアが有効でない場合、ブートローダーは中止)。
工程505:ブートローダーが、アクティブマイナーが、リカバリーマイナーより大きいと判断すると、新しいファームウェアイメージは、リカバリーNVM中の古いファームウェアイメージに書き込まれる。(1.3,1.3,1)。この場合、OTP番号は変化しない。
工程506:リカバリーNVM、および、ヒューズアレイは、次のシステムリセットまでロックされる。マイナーアップデートが完了する。
【0117】
OTP番号オフセットフィールド(たとえば、ここで記述される)を利用する寿命延長特徴は、ここで記述、あるいは、説明される任意の実施形態と同時に設けられてもよい。OTP空間は制限される。OTPメモリの不可逆の、あるいは、破壊的な特徴は、新しいシリコンデバイスが、進化型ファームウェアバージョンでロードされることを意味する(多くのヒューズアレイビットが“焼かれる(burnt)”)。この状況は、OTPバージョンアップデートの寿命をさらに制限する。この状況を処理するために、ヒューズアレイ以外に、別の(“OTP番号オフセット”)フィールドが、OTP中で実施される。この実施は、OTP番号が前進する番号から開始することを許し、新しいデバイスの寿命を延長する。
【0118】
ある実施形態の長所は以下を含む。
外部メモリデバイス中の二個のバージョンフィールドの提供は、古いファームウェアのロールバック攻撃を防止する。攻撃者はファームウェアイメージを改ざんすることができないので、たとえば、ファームウェアイメージに対する任意の変化は、RSA署名有効性を破壊するので、記述される抗ロールバックソリューションは特に優越している。リカバリーNVM上の(たとえば、ファームウェアの)保護は、アクティブNVMファームウェアイメージ上の任意の非実体攻撃を防止する。攻撃者が、古いサイン済みのファームウェアイメージで、ファームウェアイメージを完全に上書きしたくても、リカバリーNVMファームウェアイメージ、および、その大きいバージョン番号は、ブートローダーに、これが確実に、ロールバック攻撃であることを告知する。攻撃者が、古いファームウェアイメージ(元よりも低いバージョン番号を含む)で、物理的に、両NVM(アクティブ、および、リカバリー)を代替する事象において、OTP番号は、ブートローダーに、これが確実に、ロールバック攻撃であることを告知する。マイナーアップデートだけが実行された場合、上記のような両NVMの物理的代替は、たとえば、脅威を避けることができない。よって、OTPフィールドの提供は、(少なくとも)別の脅威を防止することができ、たとえば、新しいデバイス両方中、古いバージョンファームウェアにより、二個の外部メモリを代替することにより、二十のロールバック攻撃を実行する。
【0119】
もう一つの長所は、バージョンデータが暗号化されておらず、よって、バージョン(一般的に、暗号化されていない形式で保存される)はアップデート可能であることである。
【0120】
ある実施形態は、安全なバージョン管理を提供し、OTP空間に制限があっても、最新のシステムにおいて、所定のシステムが受信できるアップデートの数量や回数を制限する。
【0121】
ここで記述される寿命延長特徴は、以下の例により示されるように、十分に優れている。寿命が15年の製品を考慮すると、この製品は、毎年、四回のメジャーアップデートを有し、製品が64個のヒューズアレイビットを有する仮定する。新しいバッチが十年後に製造される場合、ここで記述される方法(寿命延長特徴を含む)は、新しいバッチの寿命を十年延長することができる。寿命延長特徴がない場合、ビット中の三分の二が、初期ファームウェアイメージ設定中で、直ちに“浪費”されるので、新しいバッチは、五年しか存続しない。“古い”デバイスは15年の期限切れ後(あるいは、最大メジャーアップデート)は退役する必要がある。
【0122】
上述の実施形態は、多くのバリエーションが可能である。たとえば、理解できることは、示される実施形態は、名称ではなく、バージョン番号を使用し、これらのバージョン番号は、メジャーとマイナーコンポーネンツを有し、メジャーとマイナーコンポーネンツはそれぞれ、逓増順序で割り当てられる。しかし、上述の実施形態中のこれらの特性は、排他性があることを意図しない。また、ある実施形態によると、ここで、二層保護を提供し、この保護において、メジャーファームウェアバージョンは、強い抗ロールバック保護を獲得し、マイナーファームウェアバージョンは、ロールバック攻撃に対し、弱い保護を獲得する。ここで記述されるOTP番号オフセットフィールド(たとえば、ここで記述されるメカニズム)を採用する寿命延長特徴は、提供される、あるいは、提供されなくてもよい。その他の実施形態によると、ここで、一層保護が提供され、この保護中、メジャーファームウェアバージョンに対してだけロールバック保護を実行し、OTP番号オフセットフィールド(たとえば、ここで記述されるメカニズム)を採用する寿命延長特徴と組み合わされる。理解できることは、実施形態の適用性は、OTP、および、二個のデバイスを含む任意のシステムに拡張させることができ、二個のデバイスの少なくとも一つは書込保護されるとともに、デバイスのファームウェアコードを保存する。
【0123】
任意の一層の実施形態は、全非実体ロールバック攻撃を防止し、これらの攻撃は、アクティブNVMの重ね書きを有するが、実体のロールバック攻撃から保護せず、これらの攻撃は、同時に、二個のNVMを、古いファームウェアを含むNVMに置き換える。後者の保護は、リカバリーNVMは書き込みロックされるので、実体の存在を提供する二層の実施形態中で可能である。
【0124】
理解できることは、書込保護されるNVMは、最新バージョンの全体の複本を保存してもよく、あるいは、バージョン番号だけを保存してもよい。
【0125】
ある実施形態を実施するのに用いられる場合、ファームウェアは、不揮発性メモリ(たとえば、フラッシュ、あるいは、ROM)中に保存されてもよい。
【0126】
あるいは、ここで記述されるある実施形態は、部分的、あるいは、全部(すなわち、ファームウェアなし)が、ハードウェア中で実施され、これらの実施形態中、ここで記載される変数、パラメータ、順次操作と演算の一部、あるいは、すべては、ハードウェア中にあってもよい。
【0127】
理解できることは、たとえば、"強制(mandatory)","必要(required)","需要(need)"および"必須(must)"の専門用語は、実施の選択のことを指し、この選択は、特定の実施、あるいは、応用のコンテンツ範囲にあり、説明を簡潔にするため、ここで記述され、且つ、別の実施において、同じ素子は、強制でない、および、必要でないとして定義される、あるいは、完全に除去されるので、これらの語彙は、排他性を有することを意図しない。
【0128】
別々の実施形態のコンテンツ中で記述される操作を含む本発明の特徴は、一つの実施形態中で組み合わせて提供することもできる。たとえば、システムの実施形態は、対応するプロセスの実施形態を含むことを意図し、逆もまた同様である。特徴は、従来の技術の特徴、および(特に、これに限定されないが)、従来の技術で記述される一節、あるいは、一節内で記述される公開文献中の特徴と組み合わされてもよい。反対に、簡潔にするために、単一の実施形態のコンテンツ中で記述される、あるいは、特定の順序で表わされる本発明の特徴(操作を含む)は、別々に提供される、あるいは、任意の適当な副結合で提供され、これらの副結合は、従来の技術の特徴(特に、これに限定されないが、従来の技術の一節で記述される、あるいは、そこで提示される公開文献中の特徴)を有してもよく、あるいは、異なる順序で示されてもよい。"たとえば(e.g)"が用いられて、排他性を有することを意図しない一個の範例を示す。各方法は、説明、あるいは、記述される操作の一部、あるいは、すべてを有し、たとえば、ここで記述される順序のような、適当な順序で実行されてもよい。
【0129】
ここで記述される各素子(たとえば、操作)は、説明される全特徴を有する、あるいは、その他の実施形態に基づいて、ここで記述される特徴の任意の集合を有してもよい。
【0130】
理解できることは、特に説明がない限り、二個以上の図面中で説明される素子、および/または、書かれた記述中の素子は単一の実施形態で結合することができる。理解できることは、本明細書、あるいは、当業者が特に示さない限り、ここで記述される任意の特徴、特性、ロジック、モジュール、ブロック、操作、あるいは、機能性は、単一の実施形態中で組み合わせて提供することができる。ここで記述される任意のシステムが用いられて、ここで記述される任意の操作や方法を実行する、あるいは、組み合わされてもよい。