JP2021089726A - コンピュータシステム、および、その安全管理方法、および、コンピュータソフトウェア製品 - Google Patents

コンピュータシステム、および、その安全管理方法、および、コンピュータソフトウェア製品 Download PDF

Info

Publication number
JP2021089726A
JP2021089726A JP2020190979A JP2020190979A JP2021089726A JP 2021089726 A JP2021089726 A JP 2021089726A JP 2020190979 A JP2020190979 A JP 2020190979A JP 2020190979 A JP2020190979 A JP 2020190979A JP 2021089726 A JP2021089726 A JP 2021089726A
Authority
JP
Japan
Prior art keywords
version
indicator
self
computer system
test
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2020190979A
Other languages
English (en)
Other versions
JP7022809B2 (ja
Inventor
アロン,モシェ
Alon Moshe
フィッシュマン,アブラハム
Fishman Avraham
モラヴ,ダン
Morav Dan
コーエン,エーヤル
Cohen Eyal
トリヒター,ウリ
Trichter Uri
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nuvoton Technology Corp
Original Assignee
Nuvoton Technology Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nuvoton Technology Corp filed Critical Nuvoton Technology Corp
Publication of JP2021089726A publication Critical patent/JP2021089726A/ja
Application granted granted Critical
Publication of JP7022809B2 publication Critical patent/JP7022809B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2284Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing by power-on test, e.g. power-on self test [POST]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/572Secure firmware programming, e.g. of basic input output system [BIOS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/575Secure boot
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/24Memory cell safety or protection circuits, e.g. arrangements for preventing inadvertent reading or writing; Status cells; Test cells
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1051Data output circuits, e.g. read-out amplifiers, data output buffers, data output registers, data output level conversion circuits
    • G11C7/1057Data output buffers, e.g. comprising level conversion circuits, circuits for adapting load
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1078Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Hardware Redundancy (AREA)

Abstract

【課題】コンピュータシステム、その安全管理方法及びコンピュータソフトウェア製品を提供する。【解決手段】コンピュータシステム100は、プロセッサ、リードオンリメモリ(ROM)、第一SPIフラッシュデバイス(Flash0)、第二SPI-フラッシュデバイス(Flash1)及び非再設定可能なインジケーターを有する。Flash1は信頼できるプログラムを保存し、Flash0はコンピュータシステムで使用中のファームウェアを保存する。ファームウェアは、ブートコードの機能性をチェックするセルフテストを有する。非再設定可能なインジケーターは、Flash0とFlash1のどちらからブートコードを動作させるか、Flash1への書き込み防止、セルフテストの実行、低いブートレベルへのセルフテスト合格の提示及びFlash0をFlash1の内容にアップデートするインジケーターを有する。【選択図】図1

Description

本発明は、コンピュータシステムの安全リカバリーに関するものであって、特に、コンピュータシステムの安全なファームウェア管理方法とシステムに関するものである。
コンピュータシステムは、フラッシュメモリを用いて、不揮発データ、たとえば、ブートコードを保存する。ある場合、フラッシュメモリは、さらに、セキュリティと電源管理等の重要な機能に、持続性のストレージサポートを提供する。フラッシュメモリ中に保存されるブートコードは、ファームウェアと称される。
いくつかの方法がすでに設計されて、ファームウェアの信頼性を検証するとともに、それを攻撃から保護する。例示的技術は、たとえば、最初に、2003年3月28日にリリースされた”SECURITY REQUIREMENTS FOR CRYPTOGRAPHIC MODULES, Implementation Guidelines,” NIST-FIPS 140-2; 2008年7月の“The Keyed-Hash Message Authentication Code,” FIPS PUB 198-1;2015年8月“Secure Hash Standard (SHS),” NIST-FIPS 180-4;および、2017年8月の“UEFI (Unified Extensible Firmware Interface Forum)規格”バージョン2.7(Errata A)中で見つけられる。四種の文献はすべて参照として本明細書に組み込まれる。
本発明の実施形態は、コンピュータシステムを提供する。コンピュータシステムは、一つ以上のメモリデバイス、複数の非再設定可能なメモリエレメント、および、プロセッサを有する。一つ以上のメモリデバイスが配置されて、(1)コンピュータシステムをブートストラッピングするブートストラッププログラムの第一バージョン、および、(2)信頼できると分かっているブートストラッププログラムの第二バージョン、を保存する。ブートストラッププログラムは、セルフテストプログラムを有する。複数の非再設定可能なメモリエレメントが配置されて、複数の非再設定可能なインジケーターを保存する。複数の非再設定可能なインジケーターは、少なくとも、(1)セルフテストの実行を要求するセルフテスト要求インジケーター、および、(2)セルフテストをパスしたか、失敗したかを示すセルフテストパスインジケーターを有する。プロセッサが配置されて、ブートストラッププログラムの第一バージョンを検索し、且つ、第一バージョンが、すくなくとも、最近の信頼できる第二バージョンである時、第一バージョン、および、複数の非再設定可能なインジケーターを用いて、コンピュータシステムをブートストラップする。
いくつかの実施形態において、一つ以上のメモリデバイスは、第一バージョンを保存する第一メモリデバイス、および、第二バージョンを保存する第二メモリデバイスを有する。一実施形態において、ブートストラッププログラムの実行期間中に、コンピュータシステムをリセットし、コンピュータシステムがリセットを実行しても、複数の非再設定可能なインジケーターは、データを保留することができる。一実施形態において、第一バージョンが、信頼できる第二バージョンよりも古い時、プロセッサは、リカバリープロセスを起動し、信頼できる第二バージョンを複製して、第一バージョンを代替する。開示される実施形態において、第一バージョンが、信頼できる第二バージョンよりもさらに新しい時、プロセッサは、セルフテストパスインジケーターを読み取るとともに、セルフテストパスインジケーターがクリアされる時、セルフテスト要求インジケーターを設定して、その後、コンピュータシステムをリセットする。
例示的な実施形態において、第一バージョンが、信頼できる第二バージョンよりもさらに新しい時、プロセッサは、セルフテストパスインジケーター、および、セルフテスト要求インジケーターを読み取るとともに、セルフテストパスインジケーターがクリアされ、且つ、セルフテスト要求インジケーターが設定される時、セルフテストプログラムを運転して、セルフテスト要求インジケーターをクリアして、セルフテストプログラムの結果に基づいて、セルフテストパスインジケーターを設定、あるいは、クリアし、その後、コンピュータシステムをリセットする。
一実施形態において、非再設定可能なインジケーターは、さらに、アップデート承認インジケーターを有し、且つ、第一バージョンが、信頼できる第二バージョンよりもさらに新しい時、プロセッサは、セルフテストパスインジケーター、および、アップデート承認インジケーターを読み取るとともに、セルフテストパスインジケーターが設定されるが、アップデート承認インジケーターがクリアになる場合、階層的に、ブートストラッププログラムの第一バージョンを認証し、第一バージョンの認証結果に基づいて、アップデート承認インジケーターを設定、あるいは、クリアし、その後、コンピュータシステムをリセットする。開示される実施形態において、非再設定可能なインジケーターは、さらに、アップデート承認インジケーターを有し、且つ、第一バージョンが、信頼できる第二バージョンよりもさらに新しい時、プロセッサは、セルフテストパスインジケーター、および、アップデート承認インジケーターを読み取り、且つ、セルフテストパスインジケーター、および、アップデート承認インジケーター両方が設定される時、第一バージョンで、信頼できる第二バージョンを代替し、その後、コンピュータシステムをリセットする。一実施形態において、コンピュータシステムの実行中、第二バージョンを保存する少なくとも一つのメモリ領域は、書き込み禁止である。
本発明の実施形態によると、コンピュータシステムの安全管理方法が提供される。本方法は、コンピュータシステムの一つ以上のメモリデバイス中に、(1)コンピュータシステムをブートストラップするブートストラッププログラムの第一バージョン、および、(2)信頼できると分かっている第二バージョンを保存する工程を有する。ブートストラッププログラムは、セルフテストプログラムを有する。コンピュータシステムの非再設定可能なメモリエレメント中に、非再設定可能なインジケーターが保存され、且つ、複数の非再設定可能なインジケーターは、(1)セルフテストプログラムの実施を要求するセルフテスト要求インジケーター、および、(2)セルフテストプログラムがパスしたか、あるいは、失敗かを示すセルフテストパスインジケーター、を有する。計算システムのプロセッサを用いて、ブートストラッププログラムの第一バージョンを検索し、且つ、第一バージョンが、すくなくとも、最近の信頼できる第二バージョンである時、第一バージョン、および、複数の非再設定可能なインジケーターを用いて、コンピュータシステムを安全にブートストラップする。
本発明の一実施形態によると、さらに、コンピュータソフトウェア製品が提供される。製品は、複数のプログラム命令が保存される有形の非一時的コンピュータ可読媒体を有し、命令がコンピュータシステム中のプロセッサにより読み取られる時、プロセッサに、コンピュータシステムの一つ以上のメモリデバイス中に、(1)コンピュータシステムのブートストラッププログラムをブートストラップする第一バージョン、および、(2)信頼できると分かっているブートストラッププログラムの第二バージョン、を保存させる。ブートストラッププログラムは、ブートストラッププログラムをテストするセルフテストプログラムを有する。コンピュータシステムの非再設定可能なメモリエレメント中に、複数の非再設定可能なインジケーターを保存し、コンピュータシステムのリセットにかかわらず、複数の非再設定可能なインジケーターは保留され、且つ、複数の非再設定可能なインジケーターは、(1)セルフテストプログラムの実施を要求するセルフテスト要求インジケーター、および、(2)セルフテストプログラムがパスしたか、あるいは、失敗かを示すセルフテストパスインジケーターを有して、ブートストラッププログラムの第一バージョンを検索するとともに、第一バージョンが、すくなくとも、最近の信頼できる第二バージョンである時、第一バージョン、および、複数の非再設定可能なインジケーターを用いて、コンピュータシステムを安全にブートストラップする。
本発明は、以下の実施形態中で詳細に記述され、図面とともに参照すれば、本発明の原理を理解することができる。
本発明によって追加の保護が提供され、従来の階層的認証プロセスにより提供される保護が十分ではないこと、また、フラッシュプログラミングは、電力故障や電源誤作動により中断して、コードを、不確定で不安定にする問題を改善することができる。
本発明の一実施形態によるコンピュータシステムのブロック図である。 本発明の一実施形態によるフラッシュメモリのプログラミングを記述するタイミング波形を示す図である。 本発明のいくつかの実施形態によるブートストラッピングの方法のフローチャートである。 本発明のいくつかの実施形態によるフラッシュリカバリー方法のフローチャートである。 本発明のいくつかの実施形態によるフラッシュアップデート方法のフローチャートである。 本発明のいくつかの実施形態による階層的認証方法のフローチャートである。 本発明のいくつかの実施形態によるリナックスレベル認証方法のフローチャートである。 本発明のいくつかの実施形態によるリナックスレベルブートストラップのフローチャートである。
本発明の実施形態によるコンピュータシステムは、フラッシュメモリ、および、リードオンリメモリ(ROM)を有する。実施形態において、ブートプログラムは、小さく、且つ、最も信頼できる層0から、より大きく信頼されない外層まで、階層的ソフトウェア層を有する(記述中と図面中、時に、ブート層をブートレベルとみなす)。
コンピュータシステムが起動する時、ROM中に保存される初期のブートコードは、ブートプログラム(“layer-0 boot”)を実行するとともに、“layer-1 boot”プログラムを認証する。認証は、通常、暗号化キー、および、デジタル署名を用いて行われる。次に、layer-1 bootが実行するとともに、次の層を認証し、フラッシュ、あるいは、その他のシステムメモリ(通常は、不揮発性)中に保存される。このプロセスは、“layer n-1 boot”プログラムが実行、且つ、最終のブートセッション(final boot stage)である“layer-n boot”を認証するまで、階層的に継続される。いくつかの実施形態において、コンピュータシステムは、リナックスシステムであり、且つ、layer-n bootは、“リナックスブート”と見なされる。このような階層的セキュアブートは、たとえば、上記のNIST-FIPS Publication 180-4中で記述されている。“layer m boot”プログラムは、多段ブートストラッププログラムとも称される。
本発明によるいくつかの実施形態において、コンピュータシステムは、ブートコードを有するコンピュータプログラムを実行するプロセッサ、および、二個のフラッシュメモリ - ブートストラッピングに用いられる第一フラッシュメモリ(以下で“Flash0”と称する)、および、最後の(すなわち、つい最近の)既知の良好なファームウェアコードを保存し、且つ、リカバリーに用いられる第二フラッシュメモリ(“Flash1”)を有する。本文中、“良好なファームウェアコード”というのは、既に認証が成功しており、且つ、信頼でき、安定していることで知られるファームウェアコードのことを意味する。複数の実施形態によると、Flash0からの起動が失敗の場合、コンピュータシステムは、Flash1からの起動を試みる。
コンピュータシステムは、さらに、コントローラーを有し、コントローラーが含むflash0/1からブートのレジスタビットにしたがって、コントローラーは、フラッシュアクセスを、プロセッサからflash0あるいはflash1に選択する。Flash-0が新しいファームウェアコードでプログラムされる時、プロセッサはコードを認証する。認証が成功した時、プロセッサは、新しいファームウェアコードをFlash-1に複製し、且つ、コンピュータシステムは、Flash-0から起動する。認証が失敗の時、プロセッサは、良好であると知られた最後のファームウェアを、Flash-1からFlash-0に複製し、よって、新しいファームウェアを削除する。その後、コンピュータシステムは、Flash-0からブートされる。
ここで記述される実施形態は、主に、フラッシュメモリを用いているが、本文中の技術は、フラッシュメモリに限定されず、且つ、別の実施形態では、その他の適当な任意のメモリデバイスを用いてもよい。以下で、フラッシュメモリ、および、メモリデバイスという用語は互換使用することができる。
いくつかの場合において、上述の階層的認証プロセスにより提供される保護は十分ではない。ブートプログラムのサイズの増加するにつれて、コードの脆弱性が増加し、安全性が低下する。このほか、フラッシュプログラミングは、電力故障や電源誤作動により中断して、コードを、不確定で不安定にする。本発明による実施形態において、追加の保護が提供される。
本発明の実施形態によると、メモリデバイス中の一、あるいは、それ以上のビットが用いられて、フラッシュプログラミングの完成を示し(以下で“タグビット”あるいは“有効タグ”と称する)、一実施形態によると、フラッシュプログラミングは、タグビットの設定から開始し、タグビットを第一2進値(たとえば、logic 1)に設定して、フラッシュプログラミングの失敗を示す。プログラミングがうまく完了した時だけ、タグビットが第二2進値(たとえば、logic 0)に設定され、フラッシュプログラミングがすでに成功していることを示す。よって、電源が故障する時、フラッシュがプログラムされており、このタグは、プログラミング失敗を示すとともに、適切な措置を採取する(このような措置の例は、例示的実施形態により、以下で記述される)。
本発明によるいくつかの実施形態において、コンピュータシステムは、一つ以上のメモリエレメントを有し、プロセッサにより、2進値にプログラムされるとともに、プロセッサ供給電圧が、所定の電圧範囲内にある限り(すなわち、プロセッサの別のメモリがリセットされても)、メモリエレメントは、プログラムされた2進値を保持する。このようなメモリエレメントは以下で“非再設定可能なインジケーター(non-resettable indicator)”と称される。実施形態において、各種ブーティング操作は、一つ以上の非再設定可能なインジケーターの設定を有し、且つ、プロセッサをリセットすることにより終了する。よって、プロセッサが起動する時、プロセッサは、一つ以上の非再設定可能なインジケーターを読み取ることにより、前のブートセッション(previous boot session)中で開始されたブートシーケンスを続行する。注意すべきことは、本文中、非再設定可能なインジケーターは、一表示値を示すことができる、あるいは、この非再設定可能な表示値のメモリエレメントを保存することができる。つまり、この非再設定可能な表示値を保存するメモリエレメントは、非再設定可能なインジケーターと称することができ、いわゆる“非再設定可能なメモリエレメント中に、非再設定可能なインジケーターを保存する”というのは、非再設定可能なメモリエレメント中に、表示値を保存して、この非再設定可能なメモリエレメントを、非再設定可能なインジケーターに変えることを意味する。
一実施形態において、ブートプログラムの最高ヒエラルキーレベルは、ブートコードの機能性を検証するセルフテストプログラムを有する。コンピュータシステムが、新しいブートコード(Flash 0に保存される)から起動する時、非再設定可能なインジケーター(以下で、“セルフテスト要求インジケーター”と称される)が設定され、セルフテストが要求されることを示す。セルフテスト要求インジケーターを検出するブートコードの最高ヒエラルキーレベルが設定される時、プロセッサは、セルフテストプログラムを実行するとともに、別の非再設定可能なインジケーター(“セルフテストパス”インジケーター)中に、セルフテストの結果を保存し、その後、リセットする。よって、ファームウェアの最高ヒエラルキーレベルが高く、且つ、攻撃に弱いが、最高ヒエラルキーレベルで生じるレジスタ値、あるいは、揮発性メモリコンテンツの任意の干渉はリセットされる。ファームウェアのセルフテスト部分の唯一の要求は、真の結果を、非再設定可能なセルフテストパスインジケーター中に保存することである。
いくつかの実施形態において、最下層より高いブート層中の失敗、悪意のある、あるいは、予想外の要素は、セルフテストパスインジケーターを不当に設定する。一実施形態によると、“アップデート承認非再設定可能なインジケーター”が設定される場合のみ、プロセッサは、Flash-1を更新する(つまり、flash-0からflash-1へ、ブートプログラムを複製する)。一実施形態において、セルフテスト完了後、ファームウェア変化を防止するため、プロセッサは、全てのブートレベルを階層的に認証することにより、セルフテストパスインジケーターに対応し、且つ、成功した認証に対応して、アップデート承認非再設定可能なインジケーターを設定するとともに、プロセッサをリセットする。
いくつかの実施形態において、上述の“flash0/1からブートのレジスタ”は、非再設定可能なインジケーターであり、非再設定可能なインジケーターは、ブートコードのソースをflash0に選択する、あるいは、flash0からの起動が失敗の場合、flash1に選択される。さらに別の実施形態において、“ロックFlash1書き込み”非再設定可能なインジケーターは、flash1への書き込みを防止する(非再設定可能な“Flash0/1からブート”、および、“ロックFlash1書き込み”インジケーターは、以下の例示的実施形態に関連して記述される)。
総合すると、二個のブートフラッシュデバイス、コントローラー、および、安全な階層的ブートを有するコンピュータシステムは、非再設定可能なインジケーター、フラッシュデバイス中に保存されるセルフテストプログラムと有効タグを用いることにより達成される。
システム記述
図1は、本発明の一実施形態によるコンピュータシステムのブロック図100である。コンピュータシステムは、プロセッサ102、コントローラー104、ブートストラップリードオンリメモリ(Bootstrap Read-Only-Memory、ROM)106、第一SPIフラッシュデバイス108(“Flash0”)、第二SPI-フラッシュデバイス110(“Flash1”)、および、非再設定可能なインジケーター112を有する。実施形態において、コンピュータシステム100は、示されない別のサブユニットを有する。これに限定されないが、周辺機器、通信ポート、および、メモリを有する。
プロセッサ102は、メモリ中に保存されるプログラムを実行し、プログラムは、ブートストラップROM106、およびFlash-0 108中に保存されるブートストラッププログラム(multi-stage bootstrap program)を有する。コントローラー104は、シリアルプロセッサインターフェース(SPIフラッシュ)バスにより、Flash-0、および、Flash-1に結合される。バスは、それぞれ、Flash0とFlash1を制御するChip-Select (CS) CS0とCS1ワイヤを有し、図1で記述される例示的実施形態において、CSワイヤの極性は負であり(“active-low”)、よって、CSワイヤはCS0#とCS1#に指定される。
非再設定可能なインジケーター122は、コンピュータシステムがリセットされる時、それらのロジック値を維持するレジスタである。本発明による実施形態において、ブートシーケンスは、多数のレジスタのリセットを含むコンピュータシステムの一つ以上のリセットを有する。しかし、非再設定可能なインジケーターは、リセット期間中、レジスタとインジケーターの値を保留する。
本発明による実施形態において、非再設定可能なインジケーターは:
プロセッサが、二個のフラッシュデバイスのどちらかから、ブートコードを動作させるか決定する“Flash0/1からブートのインジケーター”;
設定時、flash1への全ての書き込みを防止する“ロックFlash1書き込みインジケーター”;
ブートのリナックスレベルによりこのインジケーターを観察する、あるいは、このインジケーターが設定されることを検出する時、プロセッサに、セルフテストプログラムを実行させる“セルフテスト要求インジケーター”;
低いブートレベルに、セルフテストがうまくパスしたことを示す“セルフテストパスインジケーター”;および
ファームウェアのlevel-0(level-0 of the firmware)により、このインジケーターが観察される時、あるいは、このインジケーターが設定されるのを検出する時、プロセッサに、flash0のコンテンツを、flash1にアップデートする“アップデート承認インジケーター”、を有する。
図1に示される例示的実施形態によると、Flash1(すなわち、第二SPIフラッシュデバイス110)は、良いと知られているファームウェアプログラムの一バージョンを保存し、Flash0(すなわち、第一SPIフラッシュデバイス)は、コンピュータシステムにより使用中であるファームウェアコードを保存する。いくつかの実施形態において、ファームウェアコードは、ファームウェアブートコードの機能性をチェックするセルフテストプログラムを有する。
実施形態において、新しいファームウェアが、Flash0でプログラムされる時、プロセッサは、ブート時に、新しいファームウェアを認証するとともに、セルフテストがパスするかチェックする。新しいファームウェアが認証に失敗する、あるいは、セルフテストが失敗の時、新しいファームウェアは、故障であると見なされ、且つ、コンピュータシステムは、Flash1をFlash0に複製し、および、新しいファームウェアを削除することにより、最後の既知のファームウェアをリカバーする。
認証が成功し、且つ、セルフテストがパスした時、新しいファームウェアは、良好であると見なされ、コンピュータシステムは、新しいファームウェアをFlash1に複製して、最後の既知の良好なファームウェアを代替する。
本発明のいくつかの実施形態によると、トップレベルのブートストラッププログラムは認証されるが、攻撃に遭い易く、且つ、故障である可能性がある。よって、トップレベルのファームウェアが実行される時、プロセッサが、任意のリカバリーオプションをブロックするFlash1のコンテンツを変更するのを防止することが必須である。実施形態において、低いレベルのファームウェア(通常、ROMベース)だけが、Flash1のコンテンツを変更することができる。よって、階層が高い感染したファームウェアレベルのダメージを制限する。理解できることは、Flash1のアップデートレベルが低下するほど、ソリューションはより安全であることである。いくつかの実施形態において、レベル1、あるいは、その他の低レベルはFlash1をアップデートする。これは安全ではないが、高レベルのファームウェアにFlash1をアップデートさせるよりはまだ安全である。
セルフテスト運転後、ファームウェアは、コンピュータシステムをリセットする必要があり、および、すでに引き起こされた任意の危害を起こしてはいけない。よって、セルフテストの結果が、非再設定可能なインジケーター中で表示されて、低レベルファームウェアにより用いられる。高いレベルのファームウェアのセルフテスト部分が相対して小さい時、本発明の実施形態によると、コンピュータシステムの安全性が高くなる。
よって、図1中で記述される例示的実施形態によると、コンピュータシステムは、認証、および、セルフテストを実行することにより、不安全、あるいは、非機能的ファームウェアを検出する。セルフテスト後、コンピュータシステムはリセットし、高いファームウェア層が生じるダメージを消去する。セルフテストの結果は、非再設定可能なインジケーターにより、低いファームウェア層に伝えられる。不安全、あるいは、非機能的ファームウェアが検出される時、コンピュータシステムは、Flash-1をFlash0に複製することにより、最後の既知のファームウェアに戻る。認証、および、セルフテスト両方がパスする時、新しいファームウェアは、良好であると見なされるとともに、コンピュータシステムは、ファームウェアをFlash-1に複製して、前の最後の既知の良好なファームウェアを代替する。
理解できることは、上述のコンピュータシステム100の構造は、例として引用されていることである。本発明の技術に関連するコンピュータシステムは、上述に限定されない。別の実施形態において、たとえば、ブートストラップROM106、および/または、コントローラー104は、プロセッサ102中に組み込まれる。一実施形態において、Flash0、および/または、Flash1は、直列、あるいは、並列で、SPI以外のバスにより、プロセッサ102に結合される。いくつかの実施形態において、Flash0、および/または、Flash1は、その他のメモリ技術、たとえば、強誘電性RAM(F-RAM)、あるいは、磁気抵抗RAM(M−RAM)により代替される。
一実施形態において、冗長度のために、単一バージョンを超えるFlash1が出現する。
図2は、本発明の一実施形態によるフラッシュメモリのプログラミングを記述するタイミング波形である。通常、フラッシュ中に保存される不揮発性ストレージビット(“有効タグ”と称される)が用いられて、フラッシュのプログラミングが有効であることを示す。
波形200は、正常なフラッシュプログラミングセッションに対応するタイミング波形を説明する。CPUは、有効タグビットをクリアして、プログラミングが失敗したことを示す。その後、プロセッサは、フラッシュをプログラムし、且つ、プログラミングが完成した後だけ、プロセッサがタグを設定して、プログラミングが成功したことを示す。
タイミング波形202は、電力故障のせいで中断されたフラッシュプログラミングセッションのタイミング波形を説明する。有効タグは、プログラミングの前にクリアされる。プログラミング期間中、電力入力の電圧が降下し、プログラミングが中断される。有効タグはクリアのまま保持され、プログラミングが失敗したことを示す。
よって、図2に関連して記述される例示的実施形態によると、一組の有効タグは、フラッシュプログラミングの成功、および、任意のプログラミングの失敗を示し、任意のプログラミングの失敗は、時期が悪い中止を含み、たとえば、電力故障の結果として、クリアされた有効タグ、および、プログラミングの失敗の表示をもたらす。
実施形態において、有効タグがフラッシュ中に保存され、消去操作の後に選択されたフラッシュ技術のロジックレベルにしたがって、クリア、および、設定された有効タグのロジック値が決定される。たとえば、消去操作が、フラッシュビットをlogic-0に設定することをもたらす時、logic-1の有効タグは、プログラミングの成功を示す。
図3は、本発明のいくつかの実施形態によるブートストラッピングの方法を説明するフローチャートである。フローチャートは、プロセッサ102(図1)により実行される。
まず、工程300において、flash0は、flash1中のファームウェアと異なる新しいブートファームウェアを保存する。これは、新しいフラッシュデバイスがシステム中に挿入される時、あるいは、実行中、工程300のリセット前に、新しいファームウェアはすでにプログラムされている(以下で、図8に関連して記述される)。その上、flash0のプログラミングが未完成時(且つ、以下で記述されるように、工程300で継続される)、flash0中のファームウェアはflash1中のファームウェアと異なる。
次に、リセット工程302が開始され、コンピュータシステムがリセットされる。注意すべきことは、システムがリセットされる時、ここで開示されるブート方法により処理される非再設定可能なインジケーターを除いて、全レジスタのコンテンツがクリアされることである。上述の工程は、開示されるブーティング方法により処理される。よって、システムがリブートする時、欠陥のあるプログラムが生成される任意のダメージは無効である。
リセット工程302後、プロセッサは、“Flash1からのブート確認工程”304に進入するとともに、非再設定可能な“flash0/1からブートの”インジケーターの値をチェックする。工程304において、非再設定可能な“flash0/1からブートの”インジケーターが、プロセッサは、flash1から起動するべきであることを示す場合、プロセッサは、“フラッシュリカバリー工程”306に進入し、この工程は、flash1をflash0に複製し、その後、リセット工程302に再進入する(“フラッシュリカバリー工程”306は、図4に関連して、以下で記述される)。注意すべきことは、flash0/1からブートのインジケーターが、flash1からブートされることを示す時、“フラッシュリカバリー工程”306は、flash1中に保存されるコードから動作することである。インジケーターがflash0からのブートを示す時、さらなるブート命令は、flash0から動作する(いくつかの実施形態において、ROMコードは、リカバリー工程全体を管理し、且つ、コードをflash1からflash0に複製し、その後、システムをリセットして、flash0からブートする)。
工程304において、インジケーターが、flash0から起動することを示す時、プロセッサは、“Flash1タグ確認工程”308に進入し、プロセッサは、Flash1有効タグの値をチェックする。
工程308において、flash1有効タグが未設定の時(よって、flash1のプログラム成功を示さない)、プロセッサは、flash0をflash1に複製する工程を有する“フラッシュアップデート工程”310に進入し、その後、“リセット工程”302に再進入する(図5に関連して、フラッシュアップデート工程310が記述される)。
工程308において、flash-1有効タグが設定される時(Flash1のプログラミング成功を示す)、プロセッサは“Flash0認証工程”312に進入するとともに、レベル1のファームウェアを認証する。工程312において、認証が失敗の時、プロセッサは、“Flash1からのブート設定”工程314に進入し、プロセッサは、フラッシュ 0/1 インジケーターからのブートを設定して、flash-1からのブートを示し、その後、リセットされる。いくつかの実施形態において、工程314のコア再設定は、リセット工程312と同じである。その他の実施形態において、工程314中、再設定が短いプロセスであり、たとえば、“リセット工程”302は、フェーズロックループ(Phase-Locked-Loops)のようなクロックソースのリセットを有し、リセット工程314は、レジスタのリセットだけを有する。
工程312において、認証がパスした場合、プロセッサは、“バージョン制御工程”316に進入し、プロセッサは、flash0中に保存されるファームウェアのバージョンコードとflash1のファームウェアのバージョンコードを比較する。本発明の実施形態によると、ファームウェアコードの一部は、バージョン識別子である(“バージョンコード”)。識別子は、数値を表すバージョン番号、あるいは、たとえば、タイムスタンプを有する。バージョンコードが形成されなければならず、よって、プロセッサは、二個のファームウェアバージョンのどちらが新しいかを教えることができる。たとえば、バージョンコードが、各新しいバージョンで増加する一整数である時、算術的に、別のファームウェアバージョンのバージョンコードより大きいバージョンコードを有するファームウェアコードはさらに新しい。
工程316において、flash0バージョンコードが、flash1バージョンコードより小さい時、flash0中に保存される新しいファームウェアは、最近のファームウェアではない。この場合、プロセッサは、“Flash1からのブート設定工程”314に進入する。工程316において、flash1とflash0両方のバージョンコードが同じ時、新しいファームウェアは承認され、且つ、flash1はすでにアップデートされている。この場合、プロセッサは、“ロックFlash1且つ進行(Lock-Flash1-and-Go)工程”322に進入するが、プロセッサは、非再設定可能なロックFlash1書き込みインジケーターを設定し、その後、ファームウェア層1に進む(その後、リナックスファームウェアが実行されるまで、高いレベルになる)。flash1の書き込みのロックは、システムの安全性を向上させるとともに、高いレベルからのファームウェア、および、任意のアプリケーションからのリカバリーフラッシュへの攻撃を防止する。
工程316において、flash0中に保存されるファームウェアのバージョンコードが、flash1中に保存されるファームウェアのバージョンコードより大きい時、flash0は、検証の必要がある新しいファームウェアを保存する。プロセッサは、その後、“セルフテストパス確認工程”318に進入するとともに、セルフテストパス非再設定可能なインジケーターが設定されるか否かチェックする。セルフテストパスインジケーターが未設定の時、プロセッサは、“セルフテスト要求設定工程”320に進入するとともに、非再設定可能なセルフテスト要求インジケーターを設定して、セルフテスト要求を示す。プロセッサは、その後、“Flash1ロック且つ進行工程”322に進入する。この場合、セルフテスト要求インジケーターが設定され、且つ、アップデート承認インジケーターが未設定なので、リナックスファームウェアレベルに到達する時、リナックスレベルより低いレベルは、アップデート承認インジケーターを設定し、且つ、その後、リセットする(図8に関連して、以下で記述される)。
工程318において、セルフテストパス非再設定可能なインジケーターが設定される場合、プロセッサは、“アップデート承認確認工程”324に進入するとともに、非再設定可能なアップデート承認インジケーターが設定されるか否かチェックする。インジケーターが未設定の場合、プロセッサは、“Flash1ロック且つ進行工程”322に進入する。この場合、セルフテストパスインジケーターが設定され、且つ、アップデート承認インジケーターは設定されないので、リナックスファームウェアレベルに到達する時、リナックスレベルより低いレベルは、アップデート承認非再設定可能なインジケーターを設定し、その後、リセットされる(図8に関連して、以下で記述される)。
工程324において、更新/承認インジケーターが設定される時、プロセッサは、“フラッシュアップデート工程”310に進入する。
工程322の後、プロセッサは、ファームウェア層1を実行し、図6に関連して、以下で記述される。
図4は、本発明のいくつかの実施形態によるフラッシュリカバリー方法(図3の306)の工程を示す図である。flash0中に保存される新しいファームウェアが、認証、あるいは、セルフテストをパスしない時、フラッシュリカバリー工程が、プロセッサ102(図1)により実行される。Flash0/1からブートのインジケーターがflash1からの起動を示す時、工程306に進入し、フラッシュリカバリー工程のコードは、flash1中に保存されるコードである。
工程は、“Flash0-有効タグクリア工程”402から開始され、プロセッサは、flash0プログラミングに備えて、flash0の有効タグをクリアする。次に、プロセッサは、“Flash1をFlash0に複製工程”404に進入し、flash1中に保存されるファームウェアは、良好であると知られた最後のファームウェアであり、flash0に複製されるとともに、新しいファームウェア、あるいは、破損した古いファームウェアを廃止する(すでに認証、あるいは、セルフテストに失敗している)。
理解できることは、工程404は、複数の工程を有することである。これに限定されないが、フラッシュセクター、フラッシュのプログラミングセクター、機能的テスト、および、マージンテストの削除を有する。必要とされる工程は、選択したフラッシュ技術によって異なり、且つ、本発明の範囲を超える。
工程404の後、プロセッサは、“Flash0-有効タグ設定工程”406に進入するとともに、有効タグ(Valid Tag)を設定し、フラッシュプログラミングがすでにうまく完成していることを示す(上述のように、図2を参照し、プログラミングプロセス中に電源が中断された場合でも、有効タグの値は欠陥にならない)。プロセッサは、その後、“インジケータークリア工程”408に進入して、非再設定可能なセルフテスト要求インジケーター、セルフテストパスインジケーター、および、アップデート承認インジケーターをクリアする。フラッシュリカバリー工程の前の工程によって、各工程408中でクリアされる非再設定可能なインジケーターは、まだクリアされていない、あるいは、すでにクリアされている。
工程408の後、プロセッサは、“Flash0からのブート設定工程”410に進入するとともに、Flash0/1からブートのインジケーターを設定して、flash0からの起動を示し、その後、工程を出る(たとえば、図3のリセット工程302に進入)。
図5は、本発明のいくつかの実施形態によるフラッシュアップデート方法の工程(図3の310)を示す図である。工程は、プロセッサ102(図1)により実行される。工程は、“Flash1書き込み解除工程”502で開始され、プロセッサは、非再設定可能なロックFlash1書き込みインジケーターをクリアし、flash0は、flash1に複製される。次に、プロセッサは、“Flash1有効タグクリア工程”504に進入し、プロセッサは、flash1プログラミングに備えて、flash1の有効タグをクリアする。プロセッサは、その後、“Flash1をFlash0に複製工程”506に進入するとともに、flash0のコンテンツをflash1に複製し、良好であると知られた最後のファームウェアをアップデートする。理解できることは、工程506は、複数の工程を有することで、これに限定されないが、フラッシュセクター、フラッシュのプログラミングセクター、機能的テスト、および、マージンテストの消去を有する。必要とされる工程は、選択したフラッシュ技術によって異なり、且つ、本発明の範囲を超える。
工程506の後、プロセッサは、“Flash1有効タグ設定工程”508に進入するとともに、有効タグを設定し、フラッシュプログラミングがすでにうまく完成していることを示す(上述のように、図2を参照し、プログラミングプロセス中に電源が中断された場合でも、有効タグの値は欠陥にならない)。
プロセッサは、その後、インジケータークリア工程510に進入するとともに、非再設定可能なセルフテスト要求インジケーター、セルフテストパスインジケーター、および、アップデート承認インジケーターをクリアする(フラッシュリカバリー工程の前の工程によって、工程510中で、クリアされる各非再設定可能なインジケーターは、まだクリアされていない、あるいは、すでにクリアされている)。
工程510の後、プロセッサは、“Flash0からのブート設定工程”512に進入し、プロセッサは、非再設定可能なFlash0/1からブートのインジケーターを設定して、flash0からの起動を示す。その後、工程310は終了する(プロセッサは、図3のリセット工程302に進入する)。
図6は、本発明のいくつかの実施形態による階層的認証方法の工程図600である。工程はプロセッサ102(図1)により実行され、工程322の後にこの工程に進入する。工程は、“Layer-1-起動工程”602で開始され、プロセッサは、Flash0中に保存されるlayer-1ブートコードの実行を開始する。次に、プロセッサは、“Layer-2-認証工程”604に進入し、プロセッサは、次のブートストラップ層を認証する(たとえば、デジタル署名をチェックすることにより)。認証の失敗時、あるいは、ウオッチドッグタイマー(WDG)が期限切れ時、プロセッサは、コアリセットを実行する。工程604において、すでに、layer2が認証されている時、プロセッサは、“Layer-2起動工程”606に進入して、layer2を起動するとともに、“Layer-3認証工程”608に進入する。
層を起動し、次の層を認証すると共に、その後、次の層を起動するプロセスは、“layer-n-2起動工程”610で、プロセッサがlayer n-2(nは、ブートストラップ層の総数)を起動するまで継続される。プロセッサはその後、“Layer-n-1認証工程”612に進入し、layer n-1を認証し、および、認証がパスし、且つ、WDGがまだ期限切れでない時、layer n-1認証に進入する(図7を参照する)。
図7は、本発明のいくつかの実施形態によるリナックスレベル認証方法の工程700を説明する図である。工程700は、図6の工程612に続いて、プロセッサ102(図1)により実行される。
工程700は、“Layer-n-1-起動工程”702から開始され、プロセッサは、layer n-1(リナックス層より低い)を起動する。次に、プロセッサは、“リナックス層認証工程”704に進入し、プロセッサは、リナックス層を認証する(たとえば、デジタル署名をチェックすることによる)。認証失敗時、あるいは、ウオッチドッグタイマーが期限切れの時、プロセッサはコアをリセットする。認証が成功時、プロセッサは、“セルフテストパスインジケーター確認工程”706に進入する。
セルフテストがリナックス層によりうまく実行された時、非再設定可能なセルフテストパスインジケーターが設定される。上述のように、一組のセルフテストパスインジケーターは、リナックス層が認証されなければいけないので、flash1アップデート(layer0中)をトリガーすべきではない。しかし、工程706において、リナックス層はすでに認証されており(工程704)、よって、セルフテストパスインジケーターが設定される時、flash1アップデートは初期化されるべきである。よって、工程706において、セルフテストパスが設定時、プロセッサは、“アップデート承認設定工程”708に進入するとともに、非再設定可能なアップデート承認インジケーターを設定する。その後、“Flash0からのブート設定工程”710において、Flash0/1からのブートを設定して、flash0からのブートを示し、次に、コアをリセットする。
工程706において、セルフテストパスインジケーターが未設定の時、プロセッサは、“クリア且つロック工程”712に進入し、プロセッサは、非再設定可能なアップデート承認インジケーター(最新のリセットより前に実行された工程に基づいて、すでにクリアされている可能性がある)に進入するとともに、非再設定可能なロックFlash1書き込みインジケーター(設定される)を設定し、その後、リナックス層を起動する(図8に関連して、以下で記述される)。
図8は、本発明のいくつかの実施形態によるリナックスレベルブートストラップの工程800を示す図である。工程はプロセッサ102(図1)により実行される。図8に示されるように、工程800は二個の開始工程を有する。
工程は、“リナックス起動工程”802で、リナックス層の起動で開始される(図7の工程712の後に実施される)。次に、“セルフテスト要求確認工程”804において、プロセッサは、非再設定可能なセルフテスト要求インジケーターが設定されるか否かチェックする。セルフテスト要求インジケーターが未設定の時、ブートが完成し、且つ、プロセッサは、リナックスコード(ブート層より高い)の運転を開始する。セルフテスト要求インジケーターが設定される時、プロセッサは、“リナックスセルフテスト工程”806に進入するとともに、リナックスブートコード中に組み込まれるセルフテストを実行する。
工程806において、セルフテストが失敗の時、あるいは、ウオッチドッグタイマーが期限切れの時、プロセッサはリセットする。セルフテストがパスの時、プロセッサは、セルフテスト要求クリア工程808に進入するとともに、非再設定可能なセルフテスト要求インジケーターをクリアする。その後、“セルフテストパス設定工程”810に進入するとともに、非再設定可能なセルフテストパスインジケーターを設定する。最後に、プロセッサは、“Flash0からのブート設定工程”812に進入し、プロセッサは、非再設定可能なFlash0/1からブートのインジケーターを設定して、flash0からのブートを示して、コアをリセットする。
プロセッサが、実行中、且つ、新しいファームウェアバージョンを受信する時、たとえば、インターネットにより、リナックス工程800に進入する。新しいファームウェアはRAMにロードされ、その後、プロセッサは、“DDR画像認証工程”814に進入し、プロセッサは、RAM中に保存されるブートイメージを認証する。次に、プロセッサは、“Flash0への画像複製工程”816に進入するとともに、RAMコンテンツをFlash0に複製し、リセットする。リセット後、上述のように、図3を参照すると、作用が発揮されるとともに、さらに、新しいファームウェアを検証する(上述のように、リナックス層で実行される新しいファームウェアの認証は信頼されない)とともに、良好であると見なされる時、flash1をアップデートする。
総合すると、図3から図8を参照し、ここで記述される方法は、コンピュータシステム中で、セキュアブートを促進する。コンピュータシステムは、二個のフラッシュデバイスを有し、セキュアブートの促進は、非再設定可能なインジケーターを用いて、セルフテスト条件を増加させて、新しいファームウェアを承諾し、および、ブートプログラムのlevel-0を完全に信頼することだけで、全ての高いレベルが階層的に認証される。理解できることは、ここで記述される方法は例示的な実施形態であることである。別の実施形態において、異なるステップ、および/または、異なる順序のステップによって、その他の適切な工程を用いることができる。
ここで記述される実施形態は、主に、リナックスシステムと関係しているが、開示される技術は、別の操作システム、たとえば、アンドロイド、iOS等に適用できる。
プロセッサ102、および、コントローラー104の異なる素子は、たとえば、一つ以上の特定用途向け集積回路(ASIC)、あるいは、フィールドプログラマブルゲートアレイ(FPGA)等の適当なハードウェアを用いて、ソフトウェア、ハードウェア、あるいは、ハードウェアとソフトウェア素子の組み合わせを用いて実施される。
いくつかの実施形態において、プロセッサ102は、一つ以上の汎用プログラム可能プロセッサを有し、ソフトウェア中でプログラムされて、ここで記述される機能を実行する。ソフトウェアは、たとえば、ネットワークにより、電子的形態で、プロセッサにダウンロードされるか、あるいは、代替的、または、追加的に提供される、および/または、一時的でない有形の媒体、たとえば、磁気、光学、あるいは、電気メモリに保存される。
ここで記述される実施形態は、主に、二バージョンのファームウェア(ひとつは、良好であるとして知られるファームウェアバージョン、もう一つは、コンピュータシステムにより使用中のファームウェアバージョン)は、別々のメモリデバイス中に保存される配置に言及している。しかし、この配置は必須ではない。別の実施形態において、二個のファームウェアバージョンは、異なる形式で、一つ以上のメモリデバイス中に保存され、たとえば、同じデバイスパッケージの二個のメモリ、あるいは、同じメモリの二個の異なる領域中でパッケージされ、一領域は、もう一つよりさらに安全であると見なされる。
ここで記述される実施形態は、主に、セキュアブートに組んでいるが、ここで開示される方法とシステムは、その他のアプリケーションに用いることもできる。
本発明では好ましい実施例を前述の通り開示したが、これらは決して本発明を限定するものではなく、当該技術を熟知する者なら誰でも、本発明の思想を脱しない範囲内で各種の変形を加えることができる。
100…ブロック図
102…プロセッサ
104…コントローラー
106…ブートストラップリードオンリメモリ
108…第一SPIフラッシュデバイス
110…第二SPIフラッシュデバイス
122…非再設定可能なインジケーター
200…正常なプログラミングのタイミング波形
202…中断されたプログラミングのタイミング波形
300…ブート方法の流れ
302…リセット工程
304…起動確認工程
306…フラッシュリカバリー工程
308…Flash1タグ確認工程
310…フラッシュアップデート工程
312…Flash0認証工程
314…ブート設定工程
316…バージョン制御工程
318…セルフテストパス確認工程
320…セルフテスト要求設定工程
322…Flash1ロック且つ進行工程
324…アップデート承認確認工程
402…Flash0-有効タグクリア工程
404…Flash1をFlash0に複製工程
406…Flash0-有効タグ設定工程
408…インジケータークリア工程
410…Flash0からのブート設定工程
502…Flash1書き込み解除工程
504…Flash1有効タグクリア工程
506…Flash1をFlash0に複製工程
508…Flash1有効タグ設定工程
510…インジケータークリア工程
512…Flash0からのブート設定工程
600…階層的認証方法の工程
602…Layer-1起動工程
604…Layer-2認証工程
606…Layer-2起動工程
608…Layer-3認証工程
610…layer-n-2起動工程
612…Layer-n-1認証工程
700…リナックスレベル認証方法の工程
702…Layer-n-1-起動工程
704…リナックス層認証工程
706…セルフテストパスインジケーター確認工程
708…アップデート承認設定工程
710…Flash0からのブート設定工程
712…クリア且つロック工程
800…リナックスレベルブートストラップの工程
802…リナックス起動工程
804…セルフテスト要求確認工程
806…リナックスセルフテスト工程
808…セルフテスト要求クリア工程
810…セルフテストパス設定工程
812…Flash0からのブート設定工程
814…DDR画像認証工程
816…Flash0への画像複製工程

Claims (17)

  1. コンピュータシステムであって、一つ以上のメモリデバイスと、複数の非再設定可能なメモリエレメント、および、一プロセッサ、を有し、
    前記一つ以上のメモリデバイスは、(1)前記コンピュータシステムをブーストラッピングする、セルフテストプログラムを有するブートストラッププログラムの第一バージョン、および、(2)信頼できると分かっている前記ブートストラッププログラムの第二バージョン、を保存し、
    前記複数の非再設定可能なメモリエレメントは、複数の非再設定可能なインジケーターを保存し、前記非再設定可能なインジケーターは、
    前記セルフテストプログラムの実施を要求するセルフテスト要求インジケーター、および、
    前記セルフテストプログラムがパスしたか、あるいは、失敗かを示すセルフテストパスインジケーター、を有し、および、
    前記プロセッサは、前記ブートストラッププログラムの前記第一バージョンを検索するとともに、前記第一バージョンが、少なくとも、最近の信頼できる前記第二バージョンである時、前記第一バージョン、および、前記複数の非再設定可能なインジケーターを用いて、前記コンピュータシステムをブートストラップすることを特徴とするコンピュータシステム。
  2. 前記一つ以上のメモリデバイスは、前記第一バージョンを保存する第一メモリデバイス、および、前記第二バージョンを保存する第二メモリデバイスを有し、且つ、前記ブートストラッププログラムの実行期間中に、前記コンピュータシステムをリセットし、前記コンピュータシステムがリセットを実行しても、前記複数の非再設定可能なインジケーターは、データを保留することを特徴とする請求項1に記載のコンピュータシステム。
  3. 前記第一バージョンが、信頼できる前記第二バージョンより古い時、前記プロセッサは、リカバリープロセスを開始して、信頼できる前記第二バージョンを複製して、前記第一バージョンを代替することを特徴とする請求項1に記載のコンピュータシステム。
  4. 前記第一バージョンが、信頼できる前記第二バージョンよりさらに新しい時、前記プロセッサは、前記セルフテストパスインジケーターを読み取るとともに、前記セルフテストパスインジケーターがクリアされる時、前記セルフテスト要求インジケーターを設定するとともに、その後、前記コンピュータシステムをリセットすることを特徴とする請求項1に記載のコンピュータシステム。
  5. 前記第一バージョンが、信頼できる前記第二バージョンよりさらに新しい時、前記プロセッサは、前記セルフテストパスインジケーター、および、前記セルフテスト要求インジケーターを読み取り、且つ、前記セルフテストパスインジケーターがクリアされるとともに、前記セルフテスト要求インジケーターが設定される時、前記プロセッサは、前記セルフテストプログラムを実行して、前記セルフテスト要求インジケーターをクリアし、前記セルフテストプログラムの結果に基づいて、前記セルフテストパスインジケーターを設定、あるいは、クリアするとともに、その後、前記コンピュータシステムをリセットすることを特徴とする請求項1に記載のコンピュータシステム。
  6. 前記非再設定可能なインジケーターはさらに、アップデート承認インジケーターを有し、且つ、前記第一バージョンが、信頼できる前記第二バージョンよりさらに新しい時、前記プロセッサは、前記セルフテストパスインジケーター、および、前記アップデート承認インジケーターを読み取るとともに、前記セルフテストパスインジケーターが設定されるが、前記アップデート承認インジケーターがクリアされる時、前記プロセッサは、前記第一バージョンの前記ブートストラッププログラムを階層的に認証し、前記第一バージョンの認証結果に基づいて、前記アップデート承認インジケーターを設定、あるいは、クリアするとともに、その後、前記コンピュータシステムをリセットすることを特徴とする請求項1に記載のコンピュータシステム。
  7. 前記複数の非再設定可能なインジケーターは、さらに、アップデート承認インジケーターを有し、且つ、前記第一バージョンが、信頼できる前記第二バージョンよりさらに新しい時、前記プロセッサは、前記セルフテストパスインジケーター、および、前記アップデート承認インジケーターを読み取るとともに、前記セルフテストパスインジケーターと前記アップデート承認インジケーター両方が設定される時、前記プロセッサは、前記第一バージョンで、信頼できる前記第二バージョンを代替し、その後、前記コンピュータシステムをリセットすることを特徴とする請求項1に記載のコンピュータシステム。
  8. 前記コンピュータシステムの運行中、前記第二バージョンを保存する少なくとも一つのメモリ領域は、書き込み禁止であることを特徴とする請求項1に記載のコンピュータシステム。
  9. コンピュータシステムの安全管理方法であって、前記方法は、
    前記コンピュータシステムの一つ以上のメモリデバイス中に、(1)前記コンピュータシステムをブートストラッピングする、多段ブートストラッププログラムをテストするセルフテストプログラムを有する前記多段ブートストラッププログラムの第一バージョン、および、(2)信頼できると分かっている前記多段ブートストラッププログラムの第二バージョンを保存する工程と、
    前記コンピュータシステムの非再設定可能なメモリエレメント中に、複数の非再設定可能なインジケーターを保存し、前記コンピュータシステムの再設定にかかわらず、前記複数の非再設定可能なインジケーターは維持され、且つ、前記非再設定可能なインジケーターが、(1)前記セルフテストプログラムの実行を要求するセルフテスト要求インジケーター、および、(2)前記セルフテストプログラムがパスしたか、あるいは、失敗したかを示すセルフテストパスインジケーターを有する工程、および、
    前記コンピュータシステムのプロセッサを用いて、前記ブートストラッププログラムの前記第一バージョンを検索し、且つ、前記第一バージョンが、少なくとも、最近の信頼できる前記第二バージョンである時、前記第一バージョン、および、前記非再設定可能なインジケーターを用いて、前記コンピュータシステムを安全にブートストラッピングする工程、
    を有することを特徴とする方法。
  10. 前記第一、および、第二バージョンの保存は、前記第一バージョンを第一メモリデバイス中に保存することと、前記第二バージョンを第二メモリデバイス中に保存することを含むことを特徴とする請求項9に記載の方法。
  11. 前記コンピュータシステムのブーティングは、前記第一バージョンが、信頼できる前記第二バージョンより古い時、リカバリープロセスを初期化して、信頼できる前記第二バージョンを複製して、前記第一バージョンを代替することを含むことを特徴とする請求項9に記載の方法。
  12. 前記第一バージョンが、信頼できる前記第二バージョンよりさらに新しい時、前記コンピュータシステムをブートし、前記コンピュータシステムは、前記セルフテストパスインジケーターを読み取るとともに、前記セルフテストパスインジケーターがクリアされる時、前記セルフテスト要求インジケーターを設定し、その後、前記コンピュータシステムをリセットする工程を有することを特徴とする請求項9に記載の方法。
  13. 前記第一バージョンが、信頼できる前記第二バージョンよりさらに新しい時、前記コンピュータシステムをブートし、前記コンピュータシステムは、前記セルフテストパスインジケーター、および、前記セルフテスト要求インジケーターを読み取るとともに、前記セルフテストパスインジケーターがクリアされ、前記セルフテスト要求インジケーターが設定される時、前記セルフテストプログラムを実行し、前記セルフテスト要求インジケーターをクリアし、前記セルフテストプログラムの結果に基づいて、前記セルフテストパスインジケーターを設定、あるいは、クリアし、その後、前記コンピュータシステムをリセットする工程を有することを特徴とする請求項9に記載の方法。
  14. 前記複数の非再設定可能なインジケーターは、さらに、アップデート承認インジケーターを有し、且つ、前記第一バージョンが、信頼できる前記第二バージョンよりさらに新しい時、前記コンピュータシステムをブートし、前記コンピュータシステムは、前記セルフテストパスインジケーター、および、前記アップデート承認インジケーターを読み取ると共に、前記セルフテストパスインジケーターが設定されるが、前記アップデート承認インジケーターがクリアされる時、前記ブートストラッププログラムの前記第一バージョンを階層的に認証し、前記第一バージョンの認証結果に基づいて、前記アップデート承認インジケーターを設定、あるいは、クリアし、その後、前記コンピュータシステムをリセットする工程を有することを特徴とする請求項9に記載の方法。
  15. 前記非再設定可能なインジケーターは、さらに、アップデート承認インジケーターを有し、且つ、前記第一バージョンが、信頼できる前記第二バージョンよりさらに新しい時、前記コンピュータシステムをブートし、前記コンピュータシステムは、前記セルフテストパスインジケーター、および、前記アップデート承認インジケーターの読み取るとともに、前記セルフテストパスインジケーター、および、前記アップデート承認インジケーター両方が設定される時、前記第一バージョンで、信頼できる前記第二バージョンを代替し、その後、前記コンピュータシステムをリセットする工程を有することを特徴とする請求項9に記載の方法。
  16. 前記コンピュータシステムの実行期間中、前記第二バージョンを保存する少なくとも一つのメモリ領域は、書き込み禁止であることを特徴とする請求項9に記載の方法。
  17. コンピュータソフトウェア製品であって、前記製品は、有形の非一時的コンピュータ可読媒体を有し、複数のプログラム命令が保存され、前記複数の命令が、前記コンピュータシステムの前記プロセッサにより読み取られる時、前記プロセッサに、以下のことをさせ、
    前記コンピュータシステムの一つ以上のメモリデバイス中に、(1)前記コンピュータシステムをブートストラッピングする、セルフテストプログラムを有するブートストラッププログラムの第一バージョン、および、(2)信頼できると分かっている前記ブートストラッププログラムの第二バージョンを保存、
    前記コンピュータシステムの非再設定可能なメモリエレメント中に、複数の非再設定可能なインジケーターを保存し、且つ、前記非再設定可能なインジケーターは、前記非再設定可能なインジケーターは、(1)前記セルフテストプログラムの実施を要求するセルフテスト要求インジケーター、および、(2)前記セルフテストプログラムがパスしたか、あるいは、失敗かを示すセルフテストパスインジケーターを有し、および、
    前記ブートストラッププログラムの前記第一バージョンを検索するとともに、前記第一バージョンが、少なくとも、最近の信頼できる前記第二バージョンである時、前記第一バージョン、および、前記非再設定可能なインジケーターを用いて、前記コンピュータシステムを安全にブートストラップする、ことを特徴とするコンピュータソフトウェア製品。
JP2020190979A 2019-11-17 2020-11-17 コンピュータシステム、および、その安全管理方法、および、コンピュータソフトウェア製品 Active JP7022809B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962936518P 2019-11-17 2019-11-17
US62/936,518 2019-11-17
US16/929,137 2020-07-15
US16/929,137 US11385902B2 (en) 2019-11-17 2020-07-15 Secure firmware management with hierarchical boot sequence using last known good firmware

Publications (2)

Publication Number Publication Date
JP2021089726A true JP2021089726A (ja) 2021-06-10
JP7022809B2 JP7022809B2 (ja) 2022-02-18

Family

ID=75909973

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020190979A Active JP7022809B2 (ja) 2019-11-17 2020-11-17 コンピュータシステム、および、その安全管理方法、および、コンピュータソフトウェア製品

Country Status (3)

Country Link
US (1) US11385902B2 (ja)
JP (1) JP7022809B2 (ja)
TW (1) TWI768544B (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9703950B2 (en) * 2012-03-30 2017-07-11 Irdeto B.V. Method and system for preventing and detecting security threats
US11709683B2 (en) * 2020-08-07 2023-07-25 EMC IP Holding Company LLC State semantics kexec based firmware update
US11126385B1 (en) * 2020-08-10 2021-09-21 Kyocera Document Solutions, Inc. Firmware upgrade system and associated methods for printing devices
US11567844B2 (en) * 2021-01-21 2023-01-31 Infineon Technologies LLC Nonvolatile memory devices, systems and methods for fast, secure, resilient system boot
CN113254089B (zh) * 2021-06-04 2021-10-29 深圳市科力锐科技有限公司 系统引导方式修正方法、装置、设备及存储介质
US11977639B2 (en) * 2021-07-12 2024-05-07 Dell Products, L.P. Indicating a type of secure boot to endpoint devices by a security processor
TWI824602B (zh) * 2022-07-05 2023-12-01 大陸商星宸科技股份有限公司 電子裝置及其控制方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0728632A (ja) * 1993-07-09 1995-01-31 Hitachi Ltd オペレーティングシステムの自動入れ替え方法及びそれを利用した計算機システム
JP2013156799A (ja) * 2012-01-30 2013-08-15 Lenovo Singapore Pte Ltd システム・ファームウェアの更新方法およびコンピュータ
JP2014518428A (ja) * 2011-07-07 2014-07-28 インテル・コーポレーション Biosフラッシュ攻撃に対する保護および通知
JP2015153334A (ja) * 2014-02-19 2015-08-24 日本電気株式会社 情報処理装置、bios更新方法およびbios更新プログラム
US20160055068A1 (en) * 2013-04-23 2016-02-25 Hewlett-Packard Development Company, L.P. Recovering from Compromised System Boot Code
CN107678762A (zh) * 2017-09-26 2018-02-09 杭州中天微系统有限公司 一种系统版本升级方法及装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7974416B2 (en) * 2002-11-27 2011-07-05 Intel Corporation Providing a secure execution mode in a pre-boot environment
US8291226B2 (en) * 2006-02-10 2012-10-16 Qualcomm Incorporated Method and apparatus for securely booting from an external storage device
US8607350B2 (en) * 2006-03-30 2013-12-10 International Business Machines Corporation Sovereign information sharing service
US8151277B2 (en) * 2007-05-15 2012-04-03 Dynatrace Software Gmbh Method and system for dynamic remote injection of in-process agents into virtual machine based applications
US8984265B2 (en) 2007-03-30 2015-03-17 Intel Corporation Server active management technology (AMT) assisted secure boot
CN101329631B (zh) * 2007-06-21 2011-03-16 大唐移动通信设备有限公司 一种嵌入式系统自动检测和恢复启动的方法及装置
KR101393307B1 (ko) * 2007-07-13 2014-05-12 삼성전자주식회사 보안 부팅 방법 및 그 방법을 사용하는 반도체 메모리시스템
TWI571800B (zh) * 2011-04-19 2017-02-21 仁寶電腦工業股份有限公司 電腦開機之方法與電腦系統
US8914626B1 (en) * 2011-05-20 2014-12-16 Amazon Technologies, Inc. Providing configurable bootstrapping of software image execution
US8918879B1 (en) * 2012-05-14 2014-12-23 Trend Micro Inc. Operating system bootstrap failure detection
US9921915B2 (en) * 2015-10-16 2018-03-20 Quanta Computer Inc. Baseboard management controller recovery
JP6740789B2 (ja) * 2016-08-03 2020-08-19 富士通株式会社 ストレージ制御装置および記憶装置管理プログラム
TW201818253A (zh) * 2016-11-11 2018-05-16 英業達股份有限公司 檢測系統及檢測方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0728632A (ja) * 1993-07-09 1995-01-31 Hitachi Ltd オペレーティングシステムの自動入れ替え方法及びそれを利用した計算機システム
JP2014518428A (ja) * 2011-07-07 2014-07-28 インテル・コーポレーション Biosフラッシュ攻撃に対する保護および通知
JP2013156799A (ja) * 2012-01-30 2013-08-15 Lenovo Singapore Pte Ltd システム・ファームウェアの更新方法およびコンピュータ
US20160055068A1 (en) * 2013-04-23 2016-02-25 Hewlett-Packard Development Company, L.P. Recovering from Compromised System Boot Code
JP2015153334A (ja) * 2014-02-19 2015-08-24 日本電気株式会社 情報処理装置、bios更新方法およびbios更新プログラム
CN107678762A (zh) * 2017-09-26 2018-02-09 杭州中天微系统有限公司 一种系统版本升级方法及装置

Also Published As

Publication number Publication date
US20210149681A1 (en) 2021-05-20
TW202121171A (zh) 2021-06-01
TWI768544B (zh) 2022-06-21
JP7022809B2 (ja) 2022-02-18
US11385902B2 (en) 2022-07-12

Similar Documents

Publication Publication Date Title
JP7022809B2 (ja) コンピュータシステム、および、その安全管理方法、および、コンピュータソフトウェア製品
JP4769608B2 (ja) 起動検証機能を有する情報処理装置
EP2745228B1 (en) Secure recovery apparatus and method
TWI664574B (zh) 唯讀記憶體之修補啟動碼的方法及系統單晶片
JP5767751B2 (ja) Biosを検証する方法、コンピューティングプラットフォーム、およびプログラム
US9703635B2 (en) Method, computer program, and computer for restoring set of variables
EP3028147B1 (en) Updating boot code
US9852298B2 (en) Configuring a system
JP5740646B2 (ja) ソフトウェアのダウンロード方法
BR112014014815B1 (pt) Dispositivo de computação, método e meio de armazenamento para realização de cópia de segurança de firmware
WO2014175861A1 (en) Recovering from compromised system boot code
CN104572168A (zh) 一种bios自更新保护系统及方法
WO2006086302A1 (en) Method and system for validating a computer system
CN107015878B (zh) 用于计算机的系统修复方法及系统
CN112347518A (zh) 储存装置
JP2020095470A (ja) 情報処理装置及びその制御方法
CN114008617A (zh) 固件防回滚
WO2017143513A1 (zh) 一种启动Boot的方法、CPU及单板
CN113094107B (zh) 数据保护方法、装置、设备及计算机存储介质
CN112817619B (zh) 电脑系统及其安全管理方法以及电脑软件产品
US12001560B2 (en) Method and system for avoiding boot failure from platform firmware resilience execution
US20230129942A1 (en) Method for locking a rewritable non-volatile memory and electronic device implementing said method
EP4174698A1 (en) Method and system for controlling the boot customization in a platform firmware resilience execution
JP5895271B2 (ja) ソフトウェアのダウンロード方法
KR20230082388A (ko) 차량 제어기의 부트로더 검증 장치 및 그 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210305

TRDD Decision of grant or rejection written
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20211227

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220111

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220207

R150 Certificate of patent or registration of utility model

Ref document number: 7022809

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150