JP2023026017A - 起動検証プログラム、情報処理装置および起動検証方法 - Google Patents

起動検証プログラム、情報処理装置および起動検証方法 Download PDF

Info

Publication number
JP2023026017A
JP2023026017A JP2021131587A JP2021131587A JP2023026017A JP 2023026017 A JP2023026017 A JP 2023026017A JP 2021131587 A JP2021131587 A JP 2021131587A JP 2021131587 A JP2021131587 A JP 2021131587A JP 2023026017 A JP2023026017 A JP 2023026017A
Authority
JP
Japan
Prior art keywords
program
memory
hash value
verification
electronic signature
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.)
Pending
Application number
JP2021131587A
Other languages
English (en)
Inventor
義仁 山上
Yoshihito Yamagami
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2021131587A priority Critical patent/JP2023026017A/ja
Publication of JP2023026017A publication Critical patent/JP2023026017A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】メモリサイズを超えるリセットプログラムに対して、セキュリティ保証をしたうえで実行する。【解決手段】RCU1は、FMEM120から、第1のリセットプログラム41の第1ハッシュ値と第2のリセットプログラム42の第2ハッシュ値と第1のリセットプログラム41とをSRAM30aに転送し、ハッシュ関数24を用いて第1のリセットプログラム41のハッシュ値を計算し、計算して得られたハッシュ値と第1ハッシュ値とを比較し、比較結果が一致すれば、第1のリセットプログラム41を実行する。RCU1は、FMEM120から第2のリセットプログラム42を、第1のリセットプログラム41に上書きするようにSRAM30aに読み込み、ハッシュ関数24を用いて第2のリセットプログラム42のハッシュ値を計算し、計算して得られたハッシュ値と第2ハッシュ値とを比較し、比較結果が一致すれば、第2のリセットプログラム42を実行する。【選択図】図6

Description

本発明は、起動検証プログラムなどに関する。
近年、IOT(Internet Of Things)の普及により、IOT機器として組込み機器のネットワーク接続が増えている。このため、ファイアウォールなどのネットワークセキュリティの対策の他、IOT機器内の組込みソフトウェアを保護する必要がある。すなわち、IOT機器内の組込みソフトウェアをブートする前には、当該組込みソフトウェアが改竄されていないことを検証する必要がある。
検証手段として、例えば、電子署名が挙げられる。電子署名は、秘密鍵を使ってメッセージから署名データを作成し、秘密鍵と対になる公開鍵を使って署名データとメッセージの妥当性を検証する。秘密鍵を持つ者が各プログラムのハッシュ値に対して署名データを作成し、署名検証者が署名データの署名確認を行うことで、各プログラムのハッシュ値が改竄されていないことが確認される。さらに、各プログラムのハッシュ値がプログラムごとに計算して得られるハッシュ値と一致することで、各プログラムが改竄されていないことが確認される。
ここで、SoC(System on a Chip)の初期化を行う専用のハードウェアとして組込み機器であるRCU(Reset Control Unit)がある。RCUは、OTP(One-Time-Programmable)メモリとフラッシュメモリ(flash memory)とSRAM(Static Random Access Memory)を含んで構成される。組込みソフトウェアとしての初期化プログラムは、OTPメモリとフラッシュメモリに分かれて書き込まれている。OTPメモリは、書き換え不可能なメモリであるが、フラッシュメモリは、書き換え可能なメモリである。フラッシュメモリに格納された初期化プログラムは、第三者に改竄される可能性があるため、改竄されるおそれの少ないSRAMにコピーされ、各プログラムのハッシュ値が改竄されていないことが確認されてから実行される。
特開昭64-059548号公報 特開2015-22521号公報
しかしながら、メモリの搭載量より大きい初期化プログラムに対して、セキュリティの保証をしたうえで実行することが難しいという問題がある。
かかる問題について説明する。初期化プログラムは、SoCを初期化するための手順が記載されているプログラムである。SoCのハードウェアが複雑化、および高機能化し、SoCの初期化のための手順も増加しているため、初期化プログラムは改竄されるおそれの少ないSRAMの容量を超える事態が発生している。したがって、初期化プログラムに対して、セキュリティの保証をしたうえで実行することが難しい。
本発明は、1つの側面では、メモリサイズを超える初期化プログラムに対して、セキュリティ保証をしたうえで実行することを目的とする。
1つの態様では、起動検証プログラムは、プロセッサを起動するために必要なプログラムを検証する起動検証プログラムであって、書き換えできない第1メモリから所定のハッシュ関数を、外部から書き込みできない第2メモリに転送し、外部から書き込みできる第3メモリから、前記プログラムを前記第2メモリのサイズに合わせて分割された一方の第1プログラムに対応する第1ハッシュ値と、他方の第2プログラムに対応する第2ハッシュ値と、前記第1プログラムとを前記第2メモリに転送し、前記ハッシュ関数を用いて前記第1プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第1ハッシュ値とを比較し、比較結果が一致すれば、前記第1プログラムを実行し、前記第3メモリから前記第2プログラムを、前記第2メモリに記憶された前記第1プログラムに上書きするように、前記第2メモリに読み込み、前記ハッシュ関数を用いて前記第2プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第2ハッシュ値とを比較し、比較結果が一致すれば、前記第2プログラムを実行する、処理をコンピュータに実行させる。
1実施態様によれば、第2メモリのサイズを超えるプログラムに対して、改竄される可能性がある第1メモリ上のデータのセキュリティ保証をしたうえで実行できる。
図1は、実施例に係るRCUの機能構成の一例を示すブロック図である。 図2は、実施例に係るハードウェア構成例を示す図である。 図3は、電子署名の一例を示す図である。 図4は、実施例に係る起動検証処理のフローチャートの一例を示す図である。 図5は、SRAMに転送されるデータの遷移を示す図である。 図6は、実施例に係る起動検証処理のシーケンスの一例を示す図である。
以下に、本願の開示する起動検証プログラム、情報処理装置および起動検証方法の実施例を図面に基づいて詳細に説明する。なお、本発明は、実施例により限定されるものではない。
[RCUの機能構成]
図1は、実施例に係るRCUの機能構成の一例を示すブロック図である。図1に示すRCU1は、SoCの初期化を行う専用のハードウェアであり、後述するサーバに組み込む組込み機器である。RCU1は、制御部10、第1の記憶部20および第2の記憶部30を有する。また、RCU1は、後述するサーバに搭載される第3の記憶部40と接続される。RCU1は、制御部10と、第1の記憶部20と、第2の記憶部30と、第3の記憶部40とを用いて、SoCを起動するために必要なリセットプログラムであってSoCの初期化を行うリセットプログラムに対してセキュリティ保証をしたうえで実行する。実施例では、リセットプログラムが、実行する際に展開される第2の記憶部30の記憶容量より大きい場合であるとする。リセットプログラムは、第2の記憶部30の記憶容量に合わせて予め2つに分割されるものとする。なお、RCU1は、情報処理装置の一例である。第1の記憶部20は、第1メモリの一例である。第2の記憶部30は、第2メモリの一例である。第3の記憶部40は、第3メモリの一例である。
ここで、RCU1を含むサーバのハードウェアの構成例を、図2を参照して説明する。図2は、実施例に係るハードウェア構成例を示す図である。図2に示すように、サーバ100は、CPU(Central Processing Unit)110、FMEM(flash memory)120、通信装置140および主記憶部130を有する。通信装置140は、ネットワークインタフェースカード等であり、他の装置との通信を行う。主記憶部130は、サーバ100のメインメモリである。FMEM120は、図1に示した機能を動作させるプログラムやDBを記憶する。FMEM120は、書き換え可能なメモリであり、図1に示す第3の記憶部40に対応する。なお、FMEM120は、SSD(Solid State Drive)としても良いし、HDD(Hard Disk Drive)であっても良い。
CPU110は、RCU1とSoC2とを有する。RCU1は、SoC2の初期化を行う専用のハードウェアである。RCU1は、CPU10a、OTP20a、SRAM30aおよびI2Cコントローラ50aを有する。CPU10aは、OTP20a、SRAM30a、I2Cコントローラ50aとバス150で接続されるとともに、FMEM120、主記憶部130および通信装置140ともバス150で接続される。OTP20aは、書き換えできないメモリであり、図1に示す第1の記憶部20に対応する。SRAM30aは、書き換え可能なメモリであり、図1で示す第2の記憶部30に対応する。
CPU10aは、図1に示した機能を動作させるプログラムを読み出して、SRAM30aに展開し、プロセスとして実行する。例えば、書き換える可能性があるプログラム(実施例では、リセットプログラム)は、FMEM120に格納され、バージョンアップがあった場合、格納されたプログラムが更新される。FMEM120は、第三者に改竄される可能性があるため、リセットプログラムが実行される前に、リセットプログラムが改竄されていないことを確認する必要がある。このため、CPU10aは、リセットプログラムを、改竄される可能性があるFMEM120から改竄されるおそれが少ないSRAM30aにコピーして、改竄されていないことを検証してから実行する起動検証処理のプロセスを実行する。
図1に戻って、第1の記憶部20は、書き換えできない記憶部であり、図2に示すOTP20aに対応する。第1の記憶部20は、メインプログラム21、ブートプログラム22、電子署名検証プログラム23およびハッシュ関数24を有する。
メインプログラム21は、起動検証プログラムの一例である。すなわち、メインプログラム21は、SoC2の初期化を行うリセットプログラムであって予め分割されたリセットプログラムを順番に、第3の記憶部40から第2の記憶部30にコピーして、改竄されていないことを検証してから実行する。
ブートプログラム22は、RCU1を立ち上げるために必要な処理を実行する。例えば、ブートプログラム22は、第1の記憶部20のスタックを初期化する。
電子署名検証プログラム23は、電子署名を検証するプログラムである。
ハッシュ関数24は、ハッシュ値を算出する関数である。ハッシュ関数24には、一例として、256ビットのハッシュ値を算出するSHA256(Secure Hash Algorithm 256-bit)が挙げられる。
第2の記憶部30は、改竄されるおそれの少ない記憶部であり、第1の記憶部20や第3の記憶部40より実行速度(レイテンシー)が速い記憶部である。第2の記憶部30は、図2に示すSRAM30aに対応する。
第3の記憶部40は、第三者に改竄される可能性がある記憶部であり、図2に示すFMEM120に対応する。第3の記憶部40は、第1のリセットプログラム41、第2のリセットプログラム42および電子署名43を有する。
第1のリセットプログラム41は、SoCの初期化を行うリセットプログラムを第2の記憶部30の記憶容量に合わせて分割されたリセットプログラムである。すなわち、第1のリセットプログラム41は、第2の記憶部30の記憶容量を超えないように、リセットプログラムを分割されたプログラムである。第1のリセットプログラム41には、初期化ステップが例えば10段階ある場合には、このうち7段階の初期化ステップが実行されるようにコーディングされている。
第2のリセットプログラム42は、SoCの初期化を行うリセットプログラムを第2の記憶部30の記憶容量に合わせて分割されたプログラムであって第1のリセットプログラム41とは異なる残りのリセットプログラムである。すなわち、第2のリセットプログラム42は、第2の記憶部30の記憶容量を超えないように、リセットプログラムを分割されたプログラムである。第2のリセットプログラム42には、初期化ステップが例えば10段階ある場合には、残りの3段階の初期化ステップが実行されるようにコーディングされている。
電子署名43は、各リセットプログラム41,42のハッシュ値を纏めて計算したハッシュ値をメッセージとして秘密鍵を用いて暗号化したものである。電子署名43は、電子署名検証プログラム23を用いて検証される。ここで、電子署名43の一例を、図3を参照して説明する。
図3は、電子署名の一例を示す図である。図3に示すように、電子署名43は、第1のリセットプログラムのハッシュ値と、第2のリセットプログラムのハッシュ値と、電子署名データとを有する。第1のリセットプログラムのハッシュ値と、第2のリセットプログラムのハッシュ値とは、電子署名データが生成される際に、ハッシュ関数24を用いて計算される。図3では、ハッシュ関数24がSHA256である場合とする。すると、第1のリセットプログラムのハッシュ値および第2のリセットプログラムのハッシュ値は、それぞれ32バイト(256ビット)の値である。電子署名データは、メッセージとしての各リセットプログラムのハッシュ値を纏めて計算したハッシュ値を暗号化したものである。電子署名検証プログラム23は、電子署名データを公開鍵で復号化し、得られたメッセージとしてのハッシュ値と、計算して得られたメッセージとしての各プログラムのハッシュ値を纏めたハッシュ値とを比較して、電子署名43が正しいことを検証する。言い換えれば、電子署名検証プログラム23は、第1のリセットプログラムのハッシュ値と、第2のリセットプログラムのハッシュ値とが正しいことを検証する。使用される公開鍵は、第1の記憶部20に格納されているので、改竄されることはない。なお、暗号には、例えば、RSA暗号または楕円曲線暗号が挙げられる。実施例におけるRCU1では、例えば、演算数が少なくてサイズも小さいRSA暗号が適用されても良い。
図1に戻って、制御部10は、RCU1全体を司る処理部であり、ブート処理部11、電子署名検証部12、第1の検証実行部13および第2の検証実行部14を有する。なお、第1の検証実行部13は、第1の転送部、第2の転送部および第1の検証実行部の一例である。第2の検証実行部14は、第3の転送部および第2の検証実行部の一例である。
ブート処理部11は、メインプログラム21に基づいて、ブートプログラム22を実行する。ブート処理部11は、ブートプログラム22の実行により、RCU1を立ち上げるための必要な処理を実行する。例えば、ブート処理部11は、第2の記憶部30のスタックを初期化する。
電子署名検証部12は、メインプログラム21に基づいて、電子署名検証プログラム23を実行する。例えば、電子署名検証部12は、メインプログラム21に基づいて、第1の記憶部20に記憶された電子署名検証プログラム23およびハッシュ関数24、並びに第3の記憶部40に記憶された電子署名43を第2の記憶部30に転送する。そして、電子署名検証部12は、第2の記憶部に転送された電子署名検証プログラム23を実行する。電子署名検証部12は、電子署名検証プログラム23の実行により、電子署名43を検証する。
一例として、電子署名検証部12は、電子署名43に含まれる電子署名データを公開鍵で復号化する。電子署名検証部12は、復号化して得られたメッセージとしてのハッシュ値と、電子署名43に含まれる第1のリセットプログラムのハッシュ値と第2のリセットプログラムのハッシュ値とを纏めたハッシュ値とを比較する。そして、電子署名検証部12は、比較結果が一致したか否かにより、電子署名43が正しいか否かを検証する。言い換えれば、電子署名検証部12は、電子署名43に含まれる第1のリセットプログラムのハッシュ値と、第2のリセットプログラムのハッシュ値とが正しいことを検証する。そして、電子署名検証部12は、電子署名43が正しいことが検証された場合には、電子署名43に含まれる第1のリセットプログラムのハッシュ値と第2のリセットプログラムのハッシュ値とを第2の記憶部30のスタックに保存する。これにより、電子署名検証部12は、電子署名43を検証することで、電子署名43に含まれる第1のリセットプログラム41のハッシュ値と第2のリセットプログラム42のハッシュ値とが正しいことを検証できる。
第1の検証実行部13は、メインプログラム21に基づいて、第1のリセットプログラム41を検証する。例えば、第1の検証実行部13は、メインプログラム21に基づいて、第3の記憶部40に記憶された第1のリセットプログラム41を第2の記憶部30に転送する。このとき、第1の検証実行部13は、第3の記憶部40から第1のリセットプログラム41を電子署名検証プログラム23に上書きするように読み込む。そして、第1の検証実行部13は、メインプログラム21に基づいて、第1のリセットプログラム41のハッシュ値を、ハッシュ関数24を用いて計算する。そして、第1の検証実行部13は、計算したハッシュ値と、第2の記憶部30のスタックに保存された第1のリセットプログラムのハッシュ値とを比較する。第1の検証実行部13は、比較結果が一致したか否かにより、第1のリセットプログラム41が正しいか否かを検証する。
また、第1の検証実行部13は、メインプログラム21に基づいて、第1のリセットプログラム41を実行する。例えば、第1の検証実行部13は、メインプログラム21に基づいて、第1のリセットプログラム41が正しいことが検証できれば、第1のリセットプログラム41を実行する。これにより、第1の検証実行部13は、第2の記憶部30を超えるリセットプログラムに対して、改竄される可能性がある第3の記憶部40上の第1のリセットプログラム41のセキュリティ保証をしたうえで実行できる。また、第1の検証実行部13は、実行速度が速い第2の記憶部30で第1のリセットプログラム41の検証および実行を行うことで、検証実行の実行時間を上げることができる。
第2の検証実行部14は、メインプログラム21に基づいて、第2のリセットプログラム42を検証する。例えば、第2の検証実行部14は、メインプログラム21に基づいて、第3の記憶部40に記憶された第2のリセットプログラム42を第2の記憶部30に転送する。このとき、第2の検証実行部14は、第3の記憶部40から第2のリセットプログラム42を第1のリセットプログラム41に上書きするように読み込む。そして、第2の検証実行部14は、メインプログラム21に基づいて、第2のリセットプログラム42のハッシュ値を、ハッシュ関数24を用いて計算する。そして、第2の検証実行部14は、計算したハッシュ値と、第2の記憶部30のスタックに保存された第2のリセットプログラムのハッシュ値とを比較する。第2の検証実行部14は、比較結果が一致したか否かにより、第2のリセットプログラム42が正しいか否かを検証する。
また、第2の検証実行部14は、メインプログラム21に基づいて、第2のリセットプログラム42を実行する。例えば、第2の検証実行部14は、メインプログラム21に基づいて、第2のリセットプログラム42が正しいことが検証できれば、第2のリセットプログラム42を実行する。これにより、第2の検証実行部14は、第2の記憶部30を超えるリセットプログラムに対して、改竄される可能性がある第3の記憶部40上の第2のリセットプログラム42のセキュリティ保証をしたうえで実行できる。また、第2の検証実行部14は、実行速度が速い第2の記憶部30で第2のリセットプログラム42の検証および実行を行うことで、検証実行の実行時間を上げることができる。
[起動検証処理のフローチャート]
ここで、実施例に係る起動検証処理のフローチャートを、図4を参照して説明する。図4は、実施例に係る起動検証処理のフローチャートの一例を示す図である。図4に示すフローチャートでは、第1の記憶部20をOTP20a、第2の記憶部30をSRAM30a、第3の記憶部40をFMEM120として説明する。また、図4に示すフローチャートを説明しながら、適宜、図5に示す、SRAM30a上のデータの遷移について説明する。
図5の第1段目には、メインプログラム21の実行要求前のOTP20a(第1の記憶部20)、SRAM30a(第2の記憶部30)、FMEM120(第3の記憶部40)が表わされている。OTP20aには、ブートプログラム22、電子署名検証プログラム23、ハッシュ関数24が記憶されている。FMEM120には、第1のリセットプログラム41、第2のリセットプログラム42および電子署名43が記憶されている。SRAM30aには、何も記憶されていない空の状態である。
このような状況の下、OTP20aでは、メインプログラム21の実行要求があると、ブート処理部11は、メインプログラム21に基づいて、ブート処理を実行する(ステップS11)。そして、電子署名検証部12は、メインプログラム21に基づいて、電子署名検証プログラム23とハッシュ関数24をOTP20aからSRAM30aへ転送する(ステップS12)。加えて、電子署名検証部12は、メインプログラム21に基づいて、電子署名43をFMEM120からSRAM30aへ転送する。図5の第2段目では、SRAM30aには、ブート処理によってスタックが初期化されている。また、電子署名検証プログラム23、電子署名43およびハッシュ関数24が記憶されている。
次に、電子署名検証部12は、メインプログラム21に基づいて、SRAM30aにおいて、電子署名検証プログラム23を用いて電子署名43を検証する(ステップS13)。例えば、電子署名検証プログラム23は、電子署名43に含まれる電子署名データを公開鍵で復号化する。電子署名検証プログラム23は、復号化して得られたメッセージとしてのハッシュ値と、電子署名43に含まれる第1のリセットプログラムのハッシュ値と第2のリセットプログラムのハッシュ値とを纏めたハッシュ値とを比較する。そして、電子署名検証プログラム23は、比較結果が一致したか否かにより、電子署名43を検証する。そして、電子署名検証プログラム23は、電子署名43が正しいことが検証された場合には、電子署名43に含まれる第1のリセットプログラムのハッシュ値と第2のリセットプログラムのハッシュ値とをSRAM30aのスタックに保存する。
電子署名43が正しいことを検証した後、第1の検証実行部13は、メインプログラム21に基づいて、第1のリセットプログラム41をFMEM120からSRAM30aへ転送する(ステップS14)。第1の検証実行部13は、第1のリセットプログラム41をSRAM30aへ書き込む際、電子署名検証プログラム23上に上書きして入れ換えする。図5の第3段目では、SRAM30aには、電子署名検証プログラム23に入れ換わって、第1のリセットプログラム41が記憶されている。
そして、第1の検証実行部13は、メインプログラム21に基づいて、SRAM30aにおいて、ハッシュ関数24を用いて、第1のリセットプログラム41のハッシュ値を計算する(ステップS15)。そして、第1の検証実行部13は、メインプログラム21に基づいて、計算したハッシュ値と電子署名43から得られたハッシュ値(スタックに保存されたハッシュ値)を比較し、合っていることを確認する(ステップS16)。
合っていることを確認した後、第1の検証実行部13は、メインプログラム21に基づいて、SRAM30aにおいて、第1のリセットプログラム41を実行する(ステップS17)。
実行後、第2の検証実行部14は、メインプログラム21に基づいて、第2のリセットプログラム42をFMEM120からSRAM30aへ転送する(ステップS18)。第2の検証実行部14は、第2のリセットプログラム42をSRAM30aへ書き込む際、第1のリセットプログラム41上に上書きして入れ換えする。図5の第4段目では、SRAM30aには、第1のリセットプログラム41に入れ換わって、第2のリセットプログラム42が記憶されている。
そして、第2の検証実行部14は、メインプログラム21に基づいて、SRAM30aにおいて、ハッシュ関数24を用いて、第2のリセットプログラム42のハッシュ値を計算する(ステップS19)。そして、第2の検証実行部14は、メインプログラム21に基づいて、計算したハッシュ値と電子署名43から得られたハッシュ値(スタックに保存されたハッシュ値)を比較し、合っていることを確認する(ステップS20)。
合っていることを確認した後、第2の検証実行部14は、メインプログラム21に基づいて、SRAM30aにおいて、第2のリセットプログラム42を実行する(ステップS21)。そして、起動検証処理が終了した後に、制御部10は、例えばメインプログラム21に基づいて、SoC2を起動する。
[起動検証処理のシーケンス]
ここで、実施例に係る起動検証処理のシーケンスを、図6を参照して説明する。図6は、実施例に係る起動検証処理のシーケンスの一例を示す図である。図6に示すシーケンスでは、第1の記憶部20をOTP20a、第2の記憶部30をSRAM30a、第3の記憶部40をFMEM120として説明する。なお、図6では、白抜き矢印は、データの遷移を意味するものとする。
OTP20aでは、ブート処理部11は、メインプログラム21に基づいて、ブート処理を実行する(S31)。そして、電子署名検証部12は、メインプログラム21に基づいて、電子署名検証プログラム23をOTP20aからSRAM30aへ転送する(S32)。そして、電子署名検証部12は、メインプログラム21に基づいて、ハッシュ関数24をOTP20aからSRAM30aへ転送する(S33)。加えて、電子署名検証部12は、メインプログラム21に基づいて、電子署名43をFMEM120からSRAM30aへ転送する(S34)。
そして、電子署名検証部12は、メインプログラム21に基づいて、電子署名検証プログラム23を呼び出す(S35)。電子署名検証部12は、SRAM30aにおいて、電子署名検証プログラム23を実行する(S36)。電子署名検証プログラム23は、電子署名43を検証する。そして、電子署名検証プログラム23は、電子署名43が正しいことが検証された場合には、電子署名43に含まれる、第1のリセットプログラムのハッシュ値および第2のリセットプログラムのハッシュ値をSRAM30aのスタックに保存する。
電子署名43が正しいことを検証した後、第1の検証実行部13は、メインプログラム21に基づいて、第1のリセットプログラム41をFMEM120からSRAM30aへ転送する(S37)。そして、第1の検証実行部13は、メインプログラム21に基づいて、ハッシュ関数24を呼び出す(S37A)。第1の検証実行部13は、SRAM30aにおいて、ハッシュ関数24を実行して、第1のリセットプログラム41のハッシュ値を算出する(S38)。
そして、第1の検証実行部13は、メインプログラム21に基づいて、ハッシュ値を用いて第1のリセットプログラム41を検証する(S39)。例えば、第1の検証実行部13は、計算したハッシュ値と電子署名43から得られたハッシュ値(スタックに保存されたハッシュ値)を比較し、合っていることを確認する。
合っていることを確認した後、第1の検証実行部13は、メインプログラム21に基づいて、第1のリセットプログラム41を呼び出す(S40)。第1の検証実行部13は、SRAM30aにおいて、第1のリセットプログラム41を実行する(S41)。
実行後、第2の検証実行部14は、メインプログラム21に基づいて、第2のリセットプログラム42をFMEM120からSRAM30aへ転送する(S42)。そして、第2の検証実行部14は、メインプログラム21に基づいて、ハッシュ関数24を呼び出す(S42A)。第2の検証実行部14は、SRAM30aにおいて、ハッシュ関数24を実行して、第2のリセットプログラム42のハッシュ値を算出する(S43)。
そして、第2の検証実行部14は、メインプログラム21に基づいて、ハッシュ値を用いて第2のリセットプログラム42を検証する(S44)。例えば、第2の検証実行部14は、計算したハッシュ値と電子署名43から得られたハッシュ値(スタックに保存されたハッシュ値)を比較し、合っていることを確認する。
合っていることを確認した後、第2の検証実行部14は、メインプログラム21に基づいて、第2のリセットプログラム42を呼び出す(S45)。第2の検証実行部14は、SRAM30aにおいて、第2のリセットプログラム42を実行する(S46)。そして、起動検証処理が終了した後に、制御部10は、例えばメインプログラム21に基づいて、SoC2を起動する。
[実施例の効果]
上記実施例では、RCU1は、SoC2を起動するために必要なプログラムを検証する。RCU1は、書き換えできないOTP20aから所定のハッシュ関数を、外部から書き込みできないSRAM30aに転送する。RCU1は、外部から書き込みできるFMEM120から、プログラムをSRAM30aのサイズに合わせて分割された一方の第1プログラムに対応する第1ハッシュ値と、他方の第2プログラムに対応する第2ハッシュ値と、第1プログラムとを第2メモリに転送する。RCU1は、ハッシュ関数を用いて第1プログラムのハッシュ値を計算し、計算して得られたハッシュ値と第1ハッシュ値とを比較する。RCU1は、比較結果が一致すれば、第1プログラムを実行する。RCU1は、FMEM120から第2プログラムを、SRAM30aに記憶された第1プログラムに上書きするように、SRAM30aに読み込む。RCU1は、ハッシュ関数を用いて第2プログラムのハッシュ値を計算し、計算して得られたハッシュ値と第2ハッシュ値とを比較する。RCU1は、比較結果が一致すれば、第2プログラムを実行する。かかる構成によれば、RCU1は、SRAM30aのサイズを超えるプログラムに対して、改竄される可能性があるFMEM120上のプログラムのセキュリティ保証をしたうえで実行できる。
また、上記実施例によれば、RCU1は、所定のハッシュ関数に加えて、電子署名を検証する電子署名検証プログラム23をOTP20aからSRAM30aに転送する。RCU1は、第1ハッシュ値と第2ハッシュ値に加えて、電子署名43をFMEM120からSRAM30aに転送する。RCU1は、電子署名検証プログラム23を用いて、電子署名43を検証する。そして、RCU1は、検証した結果が正常であれば、FMEM120から第1プログラムを、SRAM30aに記憶された電子署名検証プログラム23に上書きするように、SRAM30aに読み込む。かかる構成によれば、RCU1は、SRAM30aのサイズが小さい場合であっても、第1プログラムを電子署名検証プログラム23上に上書きすることで、第1プログラムのセキュリティ保証をしたうえで実行できる。
また、SRAM30aは、OTP20aおよびFMEM120よりも実行速度が速い。これにより、RCU1は、SRAM30aでプログラムの検証および実行をすることで、検証および実行の実行時間を上げることができる。
[その他]
なお、リセットプログラムは、第2の記憶部30の記憶容量に合わせて予め2つに分割されると説明した。しかしながら、リセットプログラムを分割する数は、2つに限定されず、3つであっても良く、第2の記憶部30の記憶容量を超えない大きさで分割される数であれば良い。
また、図示したRCU1に含まれる制御部10の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、第1の検証実行部13を、第1の検証部と、第1の実行部とに分散しても良い。第2の検証実行部14を、第2の検証部と、第2の実行部とに分散しても良い。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)プロセッサを起動するために必要なプログラムを検証する起動検証プログラムであって、
書き換えできない第1メモリから所定のハッシュ関数を、外部から書き込みできない第2メモリに転送し、
外部から書き込みできる第3メモリから、前記プログラムを前記第2メモリのサイズに合わせて分割された一方の第1プログラムに対応する第1ハッシュ値と、他方の第2プログラムに対応する第2ハッシュ値と、前記第1プログラムとを前記第2メモリに転送し、
前記ハッシュ関数を用いて前記第1プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第1ハッシュ値とを比較し、
比較結果が一致すれば、前記第1プログラムを実行し、
前記第3メモリから前記第2プログラムを、前記第2メモリに記憶された前記第1プログラムに上書きするように、前記第2メモリに読み込み、
前記ハッシュ関数を用いて前記第2プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第2ハッシュ値とを比較し、
比較結果が一致すれば、前記第2プログラムを実行する
処理をコンピュータに実行させる起動検証プログラム。
(付記2)前記第1メモリから前記第2メモリに転送する処理は、前記所定のハッシュ関数に加えて、電子署名を検証する検証プログラムを前記第2メモリに転送し、
前記第3メモリから前記第2メモリに転送する処理は、前記第1ハッシュ値と前記第2ハッシュ値に加えて、前記電子署名を転送し、
前記検証プログラムを用いて、前記電子署名を検証し、
検証した結果が正常であれば、前記第3メモリから前記第1プログラムを、前記第2メモリに記憶された前記検証プログラムに上書きするように、前記第2メモリに読み込む
ことを特徴とする付記1に記載の起動検証プログラム。
(付記3)前記第2メモリは、前記第1メモリおよび前記第3メモリよりも実行速度が速い
ことを特徴とする付記1または付記2に記載の起動検証プログラム。
(付記4)前記所定のハッシュ関数は、SHA256(Secure Hash Algorithm 256-bit)である
ことを特徴とする付記1に記載の起動検証プログラム。
(付記5)プロセッサを起動するために必要なプログラムを検証する情報処理装置であって、
書き換えできない第1メモリから所定のハッシュ関数を、外部から書き込みできない第2メモリに転送する第1の転送部と、
外部から書き込みできる第3メモリから、前記プログラムを前記第2メモリのサイズに合わせて分割された一方の第1プログラムに対応する第1ハッシュ値と、他方の第2プログラムに対応する第2ハッシュ値と、前記第1プログラムとを前記第2メモリに転送する第2の転送部と、
前記ハッシュ関数を用いて前記第1プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第1ハッシュ値とを比較し、比較結果が一致すれば、前記第1プログラムを実行する第1の検証実行部と、
前記第3メモリから前記第2プログラムを、前記第2メモリに記憶された前記第1プログラムに上書きするように、前記第2メモリに読み込む第3の転送部と、
前記ハッシュ関数を用いて前記第2プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第2ハッシュ値とを比較し、比較結果が一致すれば、前記第2プログラムを実行する第2の検証実行部と、
を有することを特徴とする情報処理装置。
(付記6)プロセッサを起動するために必要なプログラムを検証する起動検証方法であって、
書き換えできない第1メモリから所定のハッシュ関数を、外部から書き込みできない第2メモリに転送し、
外部から書き込みできる第3メモリから、前記プログラムを前記第2メモリのサイズに合わせて分割された一方の第1プログラムに対応する第1ハッシュ値と、他方の第2プログラムに対応する第2ハッシュ値と、前記第1プログラムとを前記第2メモリに転送し、
前記ハッシュ関数を用いて前記第1プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第1ハッシュ値とを比較し、
比較結果が一致すれば、前記第1プログラムを実行し、
前記第3メモリから前記第2プログラムを、前記第2メモリに記憶された前記第1プログラムに上書きするように、前記第2メモリに読み込み、
前記ハッシュ関数を用いて前記第2プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第2ハッシュ値とを比較し、
比較結果が一致すれば、前記第2プログラムを実行する
処理をコンピュータが実行する起動検証方法。
1 RCU
2 SoC
10 制御部
11 ブート処理部
12 電子署名検証部
13 第1の検証実行部
14 第2の検証実行部
20 第1の記憶部
21 メインプログラム
22 ブートプログラム
23 電子署名検証プログラム
24 ハッシュ関数
30 第2の記憶部
40 第3の記憶部
41 第1のリセットプログラム
42 第2のリセットプログラム
43 電子署名
10a CPU
20a OTP
30a SRAM
50a I2Cコントローラ
100 サーバ
120 FMEM
130 主記憶部
140 通信装置

Claims (5)

  1. プロセッサを起動するために必要なプログラムを検証する起動検証プログラムであって、
    書き換えできない第1メモリから所定のハッシュ関数を、外部から書き込みできない第2メモリに転送し、
    外部から書き込みできる第3メモリから、前記プログラムを前記第2メモリのサイズに合わせて分割された一方の第1プログラムに対応する第1ハッシュ値と、他方の第2プログラムに対応する第2ハッシュ値と、前記第1プログラムとを前記第2メモリに転送し、
    前記ハッシュ関数を用いて前記第1プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第1ハッシュ値とを比較し、
    比較結果が一致すれば、前記第1プログラムを実行し、
    前記第3メモリから前記第2プログラムを、前記第2メモリに記憶された前記第1プログラムに上書きするように、前記第2メモリに読み込み、
    前記ハッシュ関数を用いて前記第2プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第2ハッシュ値とを比較し、
    比較結果が一致すれば、前記第2プログラムを実行する
    処理をコンピュータに実行させる起動検証プログラム。
  2. 前記第1メモリから前記第2メモリに転送する処理は、前記所定のハッシュ関数に加えて、電子署名を検証する検証プログラムを前記第2メモリに転送し、
    前記第3メモリから前記第2メモリに転送する処理は、前記第1ハッシュ値と前記第2ハッシュ値に加えて、前記電子署名を転送し、
    前記検証プログラムを用いて、前記電子署名を検証し、
    検証した結果が正常であれば、前記第3メモリから前記第1プログラムを、前記第2メモリに記憶された前記検証プログラムに上書きするように、前記第2メモリに読み込む
    ことを特徴とする請求項1に記載の起動検証プログラム。
  3. 前記第2メモリは、前記第1メモリおよび前記第3メモリよりも実行速度が速い
    ことを特徴とする請求項1または請求項2に記載の起動検証プログラム。
  4. プロセッサを起動するために必要なプログラムを検証する情報処理装置であって、
    書き換えできない第1メモリから所定のハッシュ関数を、外部から書き込みできない第2メモリに転送する第1の転送部と、
    外部から書き込みできる第3メモリから、前記プログラムを前記第2メモリのサイズに合わせて分割された一方の第1プログラムに対応する第1ハッシュ値と、他方の第2プログラムに対応する第2ハッシュ値と、前記第1プログラムとを前記第2メモリに転送する第2の転送部と、
    前記ハッシュ関数を用いて前記第1プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第1ハッシュ値とを比較し、比較結果が一致すれば、前記第1プログラムを実行する第1の検証実行部と、
    前記第3メモリから前記第2プログラムを、前記第2メモリに記憶された前記第1プログラムに上書きするように、前記第2メモリに読み込む第3の転送部と、
    前記ハッシュ関数を用いて前記第2プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第2ハッシュ値とを比較し、比較結果が一致すれば、前記第2プログラムを実行する第2の検証実行部と、
    を有することを特徴とする情報処理装置。
  5. プロセッサを起動するために必要なプログラムを検証する起動検証方法であって、
    書き換えできない第1メモリから所定のハッシュ関数を、外部から書き込みできない第2メモリに転送し、
    外部から書き込みできる第3メモリから、前記プログラムを前記第2メモリのサイズに合わせて分割された一方の第1プログラムに対応する第1ハッシュ値と、他方の第2プログラムに対応する第2ハッシュ値と、前記第1プログラムとを前記第2メモリに転送し、
    前記ハッシュ関数を用いて前記第1プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第1ハッシュ値とを比較し、
    比較結果が一致すれば、前記第1プログラムを実行し、
    前記第3メモリから前記第2プログラムを、前記第2メモリに記憶された前記第1プログラムに上書きするように、前記第2メモリに読み込み、
    前記ハッシュ関数を用いて前記第2プログラムのハッシュ値を計算し、計算して得られたハッシュ値と前記第2ハッシュ値とを比較し、
    比較結果が一致すれば、前記第2プログラムを実行する
    処理をコンピュータが実行する起動検証方法。
JP2021131587A 2021-08-12 2021-08-12 起動検証プログラム、情報処理装置および起動検証方法 Pending JP2023026017A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021131587A JP2023026017A (ja) 2021-08-12 2021-08-12 起動検証プログラム、情報処理装置および起動検証方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021131587A JP2023026017A (ja) 2021-08-12 2021-08-12 起動検証プログラム、情報処理装置および起動検証方法

Publications (1)

Publication Number Publication Date
JP2023026017A true JP2023026017A (ja) 2023-02-24

Family

ID=85252209

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021131587A Pending JP2023026017A (ja) 2021-08-12 2021-08-12 起動検証プログラム、情報処理装置および起動検証方法

Country Status (1)

Country Link
JP (1) JP2023026017A (ja)

Similar Documents

Publication Publication Date Title
US11113404B2 (en) Securing operating system configuration using hardware
JP6595822B2 (ja) 情報処理装置及びその制御方法
KR101237527B1 (ko) 보안 부팅 메커니즘을 포함하는 컴퓨터 시스템
CN109446815B (zh) 基本输入输出系统固件的管理方法、装置和服务器
US8782388B2 (en) Information processing apparatus, method, and computer-readable storage medium that encrypt data in a blob based on a hash value
CN102208000B (zh) 为虚拟机镜像提供安全机制的方法和系统
US11829479B2 (en) Firmware security verification method and device
TW201516733A (zh) 用以核對uefi認證變量變化之系統及方法
US11106798B2 (en) Automatically replacing versions of a key database for secure boots
TWI745629B (zh) 電腦系統以及初始化電腦系統的方法
TWI570591B (zh) 允許測試金鑰用於bios安裝之技術
CN113434853A (zh) 一种将固件烧录至存储设备的方法及控制器
US20210367781A1 (en) Method and system for accelerating verification procedure for image file
CN113177201A (zh) 程序校验、签名方法及装置、soc芯片
US20230273977A1 (en) Managing ownership of an electronic device
US20230010319A1 (en) Deriving independent symmetric encryption keys based upon a type of secure boot using a security processor
WO2016024967A1 (en) Secure non-volatile random access memory
JP2023026017A (ja) 起動検証プログラム、情報処理装置および起動検証方法
US20230351056A1 (en) Sram physically unclonable function (puf) memory for generating keys based on device owner
US20240152620A1 (en) Owner revocation emulation container
US20230106491A1 (en) Security dominion of computing device
KR20190118894A (ko) 안전한 usb 장치를 보장하는 부트 방법
CN116089967B (zh) 数据防回滚方法和电子设备
KR102369874B1 (ko) 무결성 검증 대상 디바이스에 대한 os 및 무결성 정보의 통합 업데이트 방법 및 원격 검증 시스템, os 배포 서버 및 무결성 검증 대상 디바이스
US11966748B2 (en) Dynamic boot configuration