特開2018-194879(P2018-194879A)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

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

▶ ルネサスエレクトロニクス株式会社の特許一覧
特開2018-194879半導体装置、ブート方法、およびブートプログラム
<>
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000003
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000004
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000005
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000006
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000007
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000008
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000009
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000010
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000011
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000012
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000013
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000014
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000015
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000016
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000017
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000018
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000019
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000020
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000021
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000022
  • 特開2018194879-半導体装置、ブート方法、およびブートプログラム 図000023
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】特開2018-194879(P2018-194879A)
(43)【公開日】2018年12月6日
(54)【発明の名称】半導体装置、ブート方法、およびブートプログラム
(51)【国際特許分類】
   G06F 21/57 20130101AFI20181109BHJP
   G09C 1/00 20060101ALI20181109BHJP
   H04L 9/32 20060101ALI20181109BHJP
   G06F 21/12 20130101ALI20181109BHJP
【FI】
   G06F21/57 350
   G09C1/00 640D
   H04L9/00 675A
   H04L9/00 675B
   G06F21/12
【審査請求】未請求
【請求項の数】5
【出願形態】OL
【全頁数】19
(21)【出願番号】特願2017-95295(P2017-95295)
(22)【出願日】2017年5月12日
(71)【出願人】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110002066
【氏名又は名称】特許業務法人筒井国際特許事務所
(72)【発明者】
【氏名】長野 清武郎
(72)【発明者】
【氏名】宮内 成典
【テーマコード(参考)】
5J104
【Fターム(参考)】
5J104AA08
5J104AA09
5J104LA02
5J104LA03
(57)【要約】
【課題】セキュリティレベルを下げずに、ブート時の処理時間を短くする。
【解決手段】取得部11Aは、公開鍵と、当該公開鍵に対応する秘密鍵で生成された署名と、当該署名に対応付けられたプログラムとを取得する。また、署名検証部12Aは、取得部11Aにより取得されたブートプログラムをブートする前に、取得部11Aにより取得された公開鍵と、署名とを用いて署名検証を行う。また、算出部13Aは、署名検証部12Aによる署名検証の結果が適切である場合、機器固有値を用いて、第1MAC値を算出して、当該第1MAC値を記憶する。ブート部14Aは、ブート対象プログラムのブート時に、再度、機器固有値を用いて第2MAC値を算出し、当該第2MAC値と、記憶されている第1MAC値とを比較してブート対象プログラムが正当であることを判定して、当該判定結果に基づいてブートを実行する。
【選択図】図1
【特許請求の範囲】
【請求項1】
公開鍵と、当該公開鍵に対応する秘密鍵で生成された署名と、当該署名に対応付けられたプログラムとを取得する取得部と、
前記取得部により取得されたプログラムをブートする前に、前記取得部により取得された公開鍵と、前記署名とを用いて署名検証を行う署名検証部と、
前記署名検証部により、前記署名が適切であることが検証された場合、自装置を識別する情報を用いて、前記プログラムが正当に製造されたものであり、且つ改ざんされていないことを判定するための判定値を算出して、当該判定値を記憶する算出部と、
前記プログラムのブート時に、前記自装置を識別する情報を用いて判定値を再度算出し、当該再度算出した判定値と、記憶されている判定値とを比較して前記プログラムが正当に製造されたものであり、且つ改ざんされていないことを判定する判定処理を実行して、当該判定結果に基づいてブートを実行するブート部と、
を備える半導体装置。
【請求項2】
前記取得部は、共通鍵により暗号化されたプログラムおよび署名を取得すると共に、当該共通鍵を取得し、
前記署名検証部は、前記取得部により取得された共通鍵を用いてプログラムおよび署名を復号して、前記公開鍵と復号した署名とを用いて署名検証を行い、
前記算出部は、前記自装置を識別する情報を用いて鍵を生成し、当該鍵を用いて前記算出した判定値と前記プログラムとを再暗号化し、
前記ブート部は、前記プログラムおよび前記記憶された判定値を前記算出部により生成された鍵を用いて復号して、前記判定処理を実行する、請求項1に記載の半導体装置。
【請求項3】
前記プログラムを修正した修正プログラムを取得し、当該修正プログラムを反映させるプログラム修正部をさらに備え、
前記算出部は、前記プログラム修正部により修正されると、修正が反映されたプログラムに対して判定値を再度算出し、記憶する、請求項1に記載の半導体装置。
【請求項4】
プログラムをブートする半導体装置で実行されるブート方法であって、
前記半導体装置が、公開鍵と、当該公開鍵に対応する秘密鍵で生成された署名と、当該署名に対応付けられたプログラムとを取得する取得ステップと、
前記取得ステップで取得したプログラムをブートする前に、前記取得ステップで取得した公開鍵と、前記署名とを用いて署名検証を行う署名検証ステップと、
前記署名検証ステップで、前記署名が適切であることを検証した場合、自装置を識別する情報を用いて、前記プログラムが正当に製造されたものであり、且つ改ざんされていないことを判定するための判定値を算出して、当該判定値を記憶する算出ステップと、
前記プログラムのブート時に、前記自装置を識別する情報を用いて前記判定値を再度算出し、当該判定値と、記憶されている判定値とを比較して前記プログラムが正当に製造されたものであり、且つ改ざんされていないことを判定する判定処理を実行して、当該判定結果に基づいてブートを実行するブートステップと、
を含むブート方法。
【請求項5】
公開鍵と、当該公開鍵に対応する秘密鍵で生成された署名と、当該署名に対応付けられたブート対象のプログラムとを取得する半導体装置に、
前記ブート対象のプログラムをブートする前に、前記公開鍵と、前記署名とを用いて署名検証を行う署名検証ステップと、
前記署名検証ステップで、前記署名が適切であることを検証した場合、自装置を識別する情報を用いて、前記ブート対象のプログラムが正当に製造されたものであり、且つ改ざんされていないことを判定するための判定値を算出して、当該判定値を記憶する算出ステップと、
前記ブート対象のプログラムのブート時に、前記自装置を識別する情報を用いて判定値を再度算出し、当該再度算出した判定値と、記憶されている判定値とを比較して前記ブート対象のプログラムが正当に製造されたものであり、且つ改ざんされていないことを判定する判定処理を実行して、当該判定結果に基づいてブートを実行するブートステップと、
を実行させる、ブートプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体装置、ブート方法、およびブートプログラムに関するものである。
【背景技術】
【0002】
組み込み機器等に対して第三者(意図しない者)が作成または改ざんしたプログラムの実行を防止したいという要求が近年高まっている。この要求を実現する技術の一つとしてプログラムの完全性の確認と認証を行うセキュアブートがある(例えば、特許文献1参照)。具体的に、特許文献1には、ブート時にソフトウェアモジュールのコードイメージのハッシュ演算を行い、その結果と証明書の計測値を照合する旨が記載されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】国際公開第2009/044533号
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、ハッシュ演算は、起動対象のプログラムサイズに比例して演算時間が長くなるので、プログラムサイズが大きい場合、ブートを実行するための処理時間が長くなるという問題点がある。よって、セキュリティレベルを下げずに、ブート時の処理時間を短くすることが望まれる。
【0005】
その他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0006】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、以下のとおりである。
【0007】
一実施の形態による半導体装置では、取得部が、公開鍵と、当該公開鍵に対応する秘密鍵で生成された署名と、当該署名に対応付けられたプログラムとを取得する。また、署名検証部が、取得部により取得されたプログラムをブートする前に、取得部により取得された公開鍵と、署名とを用いて署名検証を行う。また、算出部が、署名検証部により、署名が適切であることが検証された場合、自装置を識別する情報を用いて、プログラムが正当に製造されたものであり、且つ改ざんされていないことを判定するための判定値を算出して、当該判定値を記憶する。また、ブート部が、プログラムのブート時に、自装置を識別する情報を用いて判定値を再度算出し、当該再度算出した判定値と、記憶されている判定値とを比較してプログラムが正当に製造されたものであり、且つ改ざんされていないことを判定する判定処理を実行して、当該判定結果に基づいてブートを実行する。
【発明の効果】
【0008】
上記一実施の形態によれば、セキュリティレベルを下げずに、ブート時の処理時間を短くすることができる。
【図面の簡単な説明】
【0009】
図1】第1実施形態におけるプログラム実行装置の構成例について概要を示した図である。
図2】第1実施形態におけるプログラム提供装置が、プログラム実行装置へ送信するプログラムを生成する手順を概念的に説明する図である。
図3】プログラム実行装置のハードウェア構成図である。
図4】第1実施形態におけるブートプログラム、ブート対象プログラム、および署名を取得した際の記憶状態を示す図である。
図5】第1実施形態における署名検証およびブート前のMAC値を算出する際の状態を示す図である。
図6】第1実施形態におけるブート前におけるブート対象プログラムおよび第1MAC値の記憶状態を示す図である。
図7】第1実施形態におけるブート時におけるブート対象プログラム、第1MAC値、および第2MAC値の記憶状態を示す図である。
図8】第1実施形態におけるプログラム実行装置がブート対象のプログラムをブートする処理手順を示すフローチャートである。
図9】第1実施形態における処理時間の比較例を示す図である。
図10】第2実施形態に係るプログラム実行装置の構成例について概要を示した図である。
図11】第2実施形態におけるプログラム提供装置が、プログラム実行装置へ送信するプログラムを生成する手順を概念的に説明する図である。
図12】第2実施形態におけるブートプログラム、ブート対象プログラム、および署名を取得した際の記憶状態を示す図である。
図13】第2実施形態における署名検証およびブート前のMAC値を算出する際の状態を示す図である。
図14】第2実施形態におけるブート前におけるブート対象プログラムおよび第1MAC値の記憶状態を示す図である。
図15】第2実施形態におけるブート時におけるブート対象プログラム、第1MAC値、および第2MAC値の記憶状態を示す図である。
図16】第2実施形態におけるプログラム実行装置がブート対象のプログラムをブートする処理手順を示すフローチャートである。
図17】第2実施形態における処理時間の比較例を示す図である。
図18】第3実施形態に係るプログラム実行装置の構成例について概要を示した図である。
図19】第3実施形態に係る修正プログラムを取得した際の記憶状態を示す図である。
図20】第3実施形態に係るブート対象のプログラムと第1MAC値の修正をした状態を示す図である。
図21】プログラム実行装置が修正プログラムを取得した際に、プログラムの修正を反映して第1MAC値を更新する処理手順を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一の符号を付し、その繰り返しの説明は省略する。一方で、ある図において符号を付して説明した部位について、他の図の説明の際に再度の図示はしないが同一の符号を付して言及する場合がある。
【0011】
<第1実施形態>
図1は、第1実施形態のプログラム実行装置の構成例について概要を示した図である。第1実施形態のプログラム実行装置1Aは、取得部11A、署名検証部12A、算出部13A、およびブート部14Aなどの各部を含む。なお、プログラム実行装置1Aは、プログラム提供装置2Aと有線又は無線により接続しており、プログラム提供装置2Aと互いに情報を送受信することができる。プログラム実行装置1Aは、ブート対象のプログラム(例えば、エンドユーザへ提供するサービスを実行するアプリケーションプログラム)を実行する装置であり、当該ブート対象のプログラムを実行可能な情報処理装置、半導体装置などである。ここでブートとは、ブート対象のプログラムを実行するまたは実行可能な状態にすることをいう。プログラム実行装置1Aは、例えば、パーソナルコンピュータ、携帯電話機などである。また、プログラム実行装置1Aは、産業機械、自動車等を制御するコンピュータでもよい。また、プログラム実行装置1Aは、複数の装置により実現されてもよい。
【0012】
プログラム提供装置2Aは、ブート対象のプログラムやブートプログラム(ブートを実行するプログラム)をプログラム実行装置1Aへ提供(送信)する装置であり、情報処理装置、半導体装置などである。プログラム提供装置2Aは、例えば、パーソナルコンピュータ、サーバ装置などである。また、プログラム提供装置2Aは、複数の装置により実現されてもよい。例えば、別々の事業者の装置により、プログラム提供装置2Aが実現されてもよい。
【0013】
取得部11Aは、公開鍵と、当該公開鍵に対応する秘密鍵で生成された署名と、当該署名に対応付けられたブート対象プログラムとを取得する部分である。具体的に、取得部11Aは、プログラム提供装置2Aから公開鍵を含むブートプログラムを取得し、当該ブートプログラムを記憶する。また、取得部11Aは、ブート対象プログラムと当該ブート対象プログラムの署名とをプログラム提供装置2Aから取得し、ブート対象プログラムと署名とを記憶する。
【0014】
ここで、図2を用いて、プログラム提供装置2Aが、プログラム実行装置1Aへ送信するプログラムを生成する手順を説明する。図2は、プログラム提供装置2Aが、プログラム実行装置1Aへ送信するプログラムを生成する手順を概念的に説明する図である。
【0015】
前提として、プログラム提供装置2Aは、公開鍵と、当該公開鍵に対応する秘密鍵を保持しているものとする。また、プログラム提供装置2Aは、ブートプログラムとブート対象のプログラムも保持しているものとする。
【0016】
まず、プログラム提供装置2Aは、ブートプログラムに公開鍵を実装させる(ステップS1)。続いて、プログラム提供装置2Aは、ブート対象プログラム全体をハッシュ演算した結果に対して秘密鍵を用いた演算をして署名を生成する(ステップS2)。続いて、プログラム提供装置2Aは、ブート対象プログラムと署名とを対応付ける処理(連接)をする(ステップS3)。
【0017】
このように、プログラム提供装置2Aは、公開鍵を含むブートプログラムを生成し、ブートプログラムと署名とを対応付ける。また、プログラム提供装置2Aは、当該ブートプログラムをプログラム実行装置1Aへ送信すると共に、ブート対象プログラムと署名とを対応付けてプログラム実行装置1Aへ送信する。
【0018】
図1に戻り、署名検証部12Aは、取得部11Aにより取得されたブート対象プログラムをブートする前に、取得部11Aにより取得された公開鍵と、署名とを用いて署名検証を行う部分である。具体的に、署名検証部12Aは、ブートする前に、ブート対象プログラム全体をハッシュ演算した結果に対し、公開鍵を用いた演算を行うことにより、署名検証を行う。署名検証部12Aは、署名検証の結果が適切である場合、その旨を算出部13Aへ通知する。また、署名検証部12Aは、署名検証の結果が適切でない場合、署名が適切でない旨を出力する等のエラー処理をする。
【0019】
算出部13Aは、署名検証部12Aによる署名検証の結果が適切である場合、自装置を識別する情報(機器固有値)を用いて、ブート対象プログラムが正当に製造されたものであり、且つ改ざんされていないことを判定するための判定値を算出して、当該判定値を記憶する部分である。
【0020】
算出部13Aは、署名検証部12Aから署名検証の結果が適切である旨を受信すると、機器固有値を生成する。算出部13Aは、例えば、生成日時と乱数とを組み合わせた情報を、機器固有値として生成する。続いて、算出部13Aは、当該機器固有値を元にブート対象プログラムのMAC値(第1MAC値)を判定値として計算し、当該MAC値を記憶する。このMAC値は、正当であることが判定でき、且つ改ざん検出が可能な値である。なお、算出部13Aは、記憶している署名をMAC値に置き換えるようにしてもよい。また、MAC値以外の正当であることが判定でき、且つ改ざん検出が可能な値を適用するようにしてもよい。
【0021】
ブート部14Aは、ブート対象プログラムのブート処理をする部分である。具体的に、ブート部14Aは、ブート対象プログラムのブート時(例えば、プログラム実行装置1Aの電源が投入された場合やプログラム実行装置1Aがリセット(再起動)された場合等)に、機器固有値を用いてMAC値(第2MAC値)を再度算出する。続いて、ブート部14Aは、当該第2MAC値と、記憶されている第1MAC値とを比較してブート対象プログラムが正当であり、且つ改ざんしていないことを判定する判定処理(MAC検証)を実行して、当該判定結果に基づいてブートを実行する。
【0022】
<プログラム実行装置のハードウェア構成図>
続いて、プログラム実行装置1(プログラム実行装置1A、1B、1C)のハードウェア構成図の説明をする。プログラム実行装置1は、図3に示すように、MaskROM101、演算器102、機器固有値生成部103、揮発性メモリ104、不揮発性メモリ105、およびインタフェース部106を含むコンピュータシステムとして構成されている。ここで、インタフェース部106は、通信インタフェースなどの外部の装置との入出力を受け付けるインタフェースである。プログラム実行装置1は、図3に示すMaskROM101、演算器102、揮発性メモリ104、および不揮発性メモリ105等のハードウェア上に所定のプログラム(ブートプログラム、ブート対象プログラム等)を読み込ませることにより、演算器102の制御のもとで機器固有値生成部103、インタフェース部106を動作させる。なお、MaskROM101のかわりに、OTPROM(One Time Programmable ROM)などの、記憶する機会が限定される記憶手段を適用してもよい。
【0023】
<ブート対象プログラム等のデータ遷移>
続いて、図4図7を用いて、ブートを実行するまでのブート対象プログラム等のデータ遷移を説明する。まず、図4にブートプログラム、ブート対象プログラム、および署名を取得した際の記憶状態を示す。演算器102は、プログラム提供装置2Aからインタフェース部106を介して、ブートプログラム、ブート対象プログラム、および署名を取得すると、ブートプログラムをMaskROM101に記憶する。また、演算器102は、ブート対象プログラムおよび署名を不揮発性メモリ105に記憶する。このように、演算器102およびインタフェース部106は、取得部11Aとして機能する。
【0024】
続いて、図5に署名検証およびブート前のMAC値(第1MAC値)を算出する際の状態を示す。演算器102は、署名検証時に、ブートプログラムを実行し、不揮発性メモリ105に記憶されているブート対象プログラムおよび署名を揮発性メモリ104へ移動またはコピーする。揮発性メモリ104へ移動またはコピーする方法は、予め記憶されている設定ファイルを参照して移動またはコピーする等がある。
【0025】
演算器102は、ブートプログラムを実行し、ブート対象プログラム全体をハッシュ演算した結果に対し、公開鍵を用いた演算を行うことにより、署名検証を行う。このように、演算器102は、署名検証部12Aとして機能する。この署名検証が適切である場合、機器固有値生成部103は、機器固有値を算出し、演算器102が、当該機器固有値を元にブート対象プログラムの第1MAC値を算出する。このように、演算器102および機器固有値生成部103が、算出部13Aとして機能する。
【0026】
続いて、図6にブート前におけるブート対象プログラムおよび第1MAC値の記憶状態を示す。演算器102が、第1MAC値を算出すると、ブート対象プログラムを不揮発性メモリ105に移動またはコピーすると共に、署名を置き換えて第1MAC値を不揮発性メモリ105へ移動またはコピーする。このように、プログラム実行装置1Aは、ブート実行前に、署名検証を済ませておき、第1MAC値を記憶しておく。
【0027】
続いて、図7にブート時におけるブート対象プログラム、第1MAC値、および第2MAC値の記憶状態を示す。ブート時には、演算器102が、ブートプログラムを起動し、不揮発性メモリ105に記憶されている第1MAC値と、ブート対象プログラムとを揮発性メモリ104へ移動またはコピーする。続いて、演算器102は、機器固有値を元にブート対象プログラムのMAC値(第2MAC値)を算出する。続いて、演算器102は、第1MAC値と第2MAC値とを比較することにより、MAC検証を行う。演算器102は、MAC検証した結果、ブート対象プログラムが正当であり、改ざんされていない場合、ブート対象プログラムをブートする。このように、演算器102は、ブート部14Aとして機能する。
【0028】
なお、上述の例では、ブート対象プログラムおよび署名を揮発性メモリ104へ移動またはコピーする場合について述べたが、移動またはコピーせずに不揮発性メモリ105に記憶したままで署名検証したり、MAC検証したりしてもよい。
【0029】
<処理フロー>
続いて、図8に示すフローチャートを用いて、プログラム実行装置1Aがブート対象プログラムをブートする処理手順を説明する。取得部11Aは、プログラム提供装置2Aから公開鍵を含むブートプログラムを取得し、当該ブートプログラムを記憶する(ステップS11)。続いて、取得部11Aは、ブート対象プログラムおよび署名を取得し、当該ブート対象プログラムおよび署名を記憶する(ステップS12)。
【0030】
署名検証部12Aは、取得部11Aにより取得されたブートプログラムをブートする前に、取得部11Aにより取得された公開鍵と、署名とを用いて署名検証を行う(ステップS13)。
【0031】
続いて、算出部13Aは、署名検証部12Aによる署名検証の結果が適切である場合、機器固有値を用いて第1MAC値を算出して、当該第1MAC値を記憶する(ステップS14)。ここまでが、ブート前の処理である。
【0032】
続いて、ブート部14Aは、ブート対象プログラムのブート時に、再度、機器固有値を用いて第2MAC値を算出し、当該第2MAC値と、記憶されている第1MAC値とを比較してブート対象プログラムが正当であることを判定して(ステップS15)、当該判定結果に基づいてブートを実行する(ステップS16)。
【0033】
上述のように、取得部11Aは、公開鍵と、当該公開鍵に対応する秘密鍵で生成された署名と、当該署名に対応付けられたブート対象プログラムとを取得する。また、署名検証部12Aは、取得部11Aにより取得されたブート対象プログラムをブートする前に、取得部11Aにより取得された公開鍵と、署名とを用いて署名検証を行う。また、算出部13Aは、署名検証部12Aによる署名検証の結果が適切である場合、機器固有値を用いて、第1MAC値を算出して、当該第1MAC値を記憶する。ブート部14Aは、ブート対象プログラムのブート時に、再度、機器固有値を用いて第2MAC値を算出し、当該第2MAC値と、記憶されている第1MAC値とを比較してブート対象プログラムが正当であり、改善されていないことを判定して、当該判定結果に基づいてブートを実行する。
【0034】
このように、ブートする前に、署名検証を済ませておき、第1MAC値を算出しておくので、ブート時には、第2MAC値を算出して、MAC検証をすればよい。この結果、プログラム実行装置1Aは、ブート時に署名検証する場合と比較して、セキュリティレベルを下げることなく、早期にブートすることができる。
【0035】
ここで、図9を用いて、ブート時に署名検証する場合と、ブート前に予め署名検証しておき、ブート時にMAC検証する場合の処理時間の比較をする。
【0036】
図9は、処理時間の比較例を示す図である。図9(a)は、上述の方法とは異なり、ブート時に署名検証してブートを行う場合の処理時間を示す。
【0037】
図9(a)に示す処理の前提として、ブート対象プログラムと署名を不揮発性メモリで記憶しているものとする。リセットもしくは電源が投入されたタイミングで、ブート対象プログラムのブートを開始し、ブート対象プログラムと署名とを揮発性メモリへコピーし、揮発性メモリ上のブート対象プログラムに対し署名検証を行い、当該署名検証をした結果、署名が適切である場合、ブートプログラムのブートを継続する。図9(a)に示すように、ブート時にハッシュ演算および公開鍵演算をしているため、これらに2.13M(メガサイクル)要する。
【0038】
なお、プログラムのサイズは、1Mバイトであり、署名サイズは、256バイトである。また、SHA256を用いてハッシュ演算をしている。
【0039】
図9(b)および図9(c)は、予め署名検証しておき、ブート時にMAC検証する場合の処理時間(第1実施形態における処理時間)を示す。
【0040】
具体的に、図9(b)は、第1実施形態におけるブート前の署名検証およびMAC値の演算時間を示す。第1実施形態では、ブート前に署名検証を行うので、図9(a)の例におけるブート時と同程度の処理時間を要する。なお、図9(b)に示す所定処理は、第1MAC値の演算時間などである。
【0041】
図9(c)は、第1実施形態におけるブート時のMAC検証の時間を示す。MACサイズは16バイトである。また、公開鍵演算は、出願人が開発したハードウェア暗号IP(Intellectual Property)を用いている。MAC演算は、AES−128−CBC−MACを用いている。
【0042】
ブート時の処理時間に着目して、図9(a)と図9(c)とを比較すると、ブート時に署名処理をする場合と比較して、予めハッシュ演算および公開鍵演算している分、上記実施形態におけるブート時間が短くなっている。すなわち、第1実施形態に係るプログラム実行装置1Aは、早期にブートすることができる。
【0043】
<第2実施形態>
図10は、第2実施形態に係るプログラム実行装置1Bの構成例について概要を示した図である。プログラム実行装置1Bは、プログラム提供装置2Bと接続している。第1実施形態では、プログラム提供装置2Aが、公開鍵を実装するブートプログラムを送信していたが、プログラム提供装置2Bは、さらに共通鍵を実装するブートプログラムを送信する。また、第2実施形態では、プログラム提供装置2Bが、プログラムと署名とを共通鍵で暗号化したデータをプログラム実行装置1Bへ送信する。
【0044】
取得部11Bは、共通鍵により暗号化されたブート対象プログラムおよび署名を取得すると共に、当該共通鍵を取得する。具体的には、取得部11Bは、プログラム提供装置2Bから公開鍵および共通鍵を含むブートプログラムを取得し、当該ブートプログラムを記憶する。また、取得部11Bは、上記共通鍵で暗号化されたブート対象プログラムと当該プログラムの署名とをプログラム提供装置2Bから取得し、ブート対象プログラムと署名とを記憶する。
【0045】
ここで、図11を用いて、プログラム提供装置2Bが、プログラム実行装置1Bへ送信するプログラムを生成する手順を説明する。図11は、プログラム提供装置2Bが、プログラム実行装置1Bへ送信するプログラムを生成する手順を概念的に説明する図である。
【0046】
前提として、プログラム提供装置2Bは、公開鍵と、当該公開鍵に対応する秘密鍵と、共通鍵とを保持しているものとする。また、プログラム提供装置2Bは、ブートプログラムとブート対象プログラムも保持しているものとする。
【0047】
まず、プログラム提供装置2Bは、ブートプログラムに公開鍵を実装させる(ステップS21)。続いて、プログラム提供装置2Bは、ブート対象プログラム全体をハッシュ演算した結果に対して秘密鍵を用いた演算をして署名を生成する(ステップS22)。続いて、プログラム提供装置2Bは、ブート対象プログラムと署名とを対応付ける処理(連接)をする(ステップS23)。
【0048】
続いて、プログラム提供装置2Bは、上記ブートプログラムに共通鍵を実装させる(ステップS24)。プログラム提供装置2Bは、ブート対象プログラムと署名とを共通鍵で暗号化する(ステップS25)。
【0049】
このように、プログラム提供装置2Bは、公開鍵および共通鍵を含むブートプログラムを生成し、ブートプログラムと署名とを対応付けた後、暗号化する。また、プログラム提供装置2Bは、当該ブートプログラムをプログラム実行装置1Bへ送信すると共に、ブート対象プログラムと署名とを対応付けてプログラム実行装置1Bへ送信する。
【0050】
図10に戻り、署名検証部12Bは、取得部11Bにより取得された共通鍵を用いてプログラムおよび署名を復号して、公開鍵と復号した署名とを用いて署名検証を行う部分である。具体的に、署名検証部12Bは、ブートする前(例えば、取得部11Bによりブート対象プログラム等が記憶された直後)に、共通鍵を用いてブート対象プログラムおよび署名を復号する。そして、署名検証部12Bは,復号したブート対象プログラム全体をハッシュ演算した結果に対し、公開鍵を用いた演算を行うことにより、署名検証を行う。署名検証を行った後の処理は、署名検証部12Aと同様である。
【0051】
算出部13Bは、署名検証部12Bによる署名検証の結果が適切である場合、機器固有値を用いて第1MAC値を算出し、当該機器固有値を用いて鍵(独自鍵)を生成し、当該鍵を用いて第1MAC値とブート対象プログラムとを暗号化する。
【0052】
ブート部14Bは、ブート時に、算出部13Bによって暗号化された第1MAC値とブート対象プログラムとを復号し、再度、機器固有値を用いて、復号したブート対象プログラムに対して第2MAC値を計算して、MAC検証する。
【0053】
<ブート対象プログラム等のデータ遷移>
続いて、図12図15を用いて、ブートを実行するまでにおける、ブート対象プログラム等のデータ遷移を説明する。まず、図12にブートプログラム、ブート対象プログラム、および署名を取得した際の記憶状態を示す。演算器102は、プログラム提供装置2Bからインタフェース部106を介して、共通鍵を含むブートプログラム、共通鍵で暗号化したブート対象プログラムおよび署名を取得すると、ブートプログラムをMaskROM101に記憶する。また、演算器102は、ブート対象プログラムおよび署名を不揮発性メモリ105に記憶する。このように、演算器102およびインタフェース部106は、取得部11Bとして機能する。
【0054】
続いて、図13に署名検証およびブート前のMAC値を算出する際の状態を示す。プログラム実行装置1Bは、署名検証時に、ブートプログラムを実行し、不揮発性メモリ105に記憶されているブート対象プログラムおよび署名を揮発性メモリ104へ移動またはコピーして、ブート対象プログラムおよび署名を共通鍵で復号する。
【0055】
演算器102は、ブートプログラムを実行し、ブート対象プログラム全体をハッシュ演算した結果に対し、公開鍵を用いた演算を行うことにより、署名検証を行う。このように、演算器102は、署名検証部12Bとして機能する。この署名検証が適切である場合、機器固有値生成部103は、機器固有値を算出し、当該機器固有値を元にブート対象プログラムの第1MAC値を算出する。
【0056】
続いて、図14にブート前におけるブート対象プログラムおよび第1MAC値の記憶状態を示す。演算器102が、第1MAC値を算出すると、機器固有値による鍵を用いて当該第1MAC値とブート対象プログラムとを暗号化する。そして、演算器102は、不揮発性メモリ105に暗号化した第1MAC値とブート対象プログラムとを移動またはコピーすると共に、署名を置き換えて第1MAC値を不揮発性メモリ105へ移動またはコピーする。このように、プログラム実行装置1Bは、ブート実行前に、署名検証を済ませておき、第1MAC値を記憶しておく。このように、演算器102は、算出部13Bとして機能する。
【0057】
続いて、図15にブート時におけるブート対象プログラム、第1MAC値、および第2MAC値の記憶状態を示す。ブート時には、演算器102が、ブートプログラムを起動し、不揮発性メモリ105に記憶されている第1MAC値と、ブートプログラムとを復号して、揮発性メモリ104へ移動またはコピーする。続いて、演算器102は、機器固有値を元にブート対象プログラムの第2MAC値を算出する。続いて、演算器102は、第1MAC値と第2MAC値とを比較することにより、MAC検証を行う。演算器102は、MAC検証した結果、ブート対象プログラムが正当であり、改ざんされていない場合、ブート対象プログラムをブートする。このように、演算器102は、ブート部14Bとして機能する。
【0058】
なお、上述の例では、ブート対象プログラムおよび署名を揮発性メモリ104へ移動またはコピーする場合について述べたが、移動またはコピーせずに不揮発性メモリ105に記憶したままで署名検証したり、MAC検証したりしてもよい。
【0059】
<処理フロー>
続いて、図16に示すフローチャートを用いて、プログラム実行装置1Bがブート対象プログラムをブートする処理手順を説明する。取得部11Bは、プログラム提供装置2Bから公開鍵および共通鍵を含むブートプログラムを取得し、当該ブートプログラムを記憶する(ステップS31)。続いて、取得部11Bは、上記共通鍵で暗号化されたブート対象プログラムおよび署名を取得し、当該ブート対象プログラムおよび署名を記憶する(ステップS32)。署名検証部12Bは、ブート対象プログラムおよび署名を復号する(ステップS33)。
【0060】
署名検証部12Bは、取得部11Bにより取得されたブート対象プログラムをブートする前に、取得部11Bにより取得された公開鍵と、署名とを用いて署名検証を行う(ステップS34)。
【0061】
続いて、算出部13Bは、署名検証部12Bによる署名検証の結果が適切である場合、機器固有値を用いて、第1MAC値を算出する(ステップS35)。続いて、算出部13Bは、ブート対象プログラムと第1MAC値とを機器固有値による鍵を用いて暗号化して(ステップS36)、暗号化したブート対象プログラムと第1MAC値とを記憶する。ここまでが、ブート前の処理である。
【0062】
続いて、ブート部14Bは、ブート対象プログラムのブート時に、再暗号化したブート対象プログラムと第1MAC値とを復号し、再度、機器固有値を用いて第2MAC値を算出し、MAC検証として、第2MAC値と、記憶されている第1MAC値とを比較してブート対象プログラムが正当であることを判定して(ステップS37)、当該判定結果に基づいてブートを実行する(ステップS38)。
【0063】
上述のように、取得部11Bは、共通鍵により暗号化されたプログラムおよび署名を取得すると共に、当該共通鍵を取得する。また、署名検証部12Bは、取得部11Bにより取得された共通鍵を用いてプログラムおよび署名を復号して、公開鍵と復号した署名とを用いて署名検証を行う。また、算出部13Bは、機器固有値を用いて鍵を生成し、当該鍵を用いて第1MAC値とブート対象プログラムとを暗号化する。ブート部14Bは、ブート対象プログラムおよび第1MAC値を復号し、MAC検証を行う。
【0064】
この場合、プログラム実行装置1Bは、署名検証やハッシュ検証している時以外、ブート対象プログラムを暗号化した状態を維持するので、より一層ブート対象プログラムをセキュアな状態にすることができる。すなわち、不揮発性メモリ105上保存しているブート対象プログラムに実装したアルゴリズム等の情報漏えいを防ぐことができる。
【0065】
ここで、図17を用いて、ブート時に署名検証する場合と、予め署名検証しておき、ブート時にMAC検証する場合の処理時間の比較をする。
【0066】
図17は、処理時間の比較例を示す図である。図17に示す結果は、図9と同一の条件下で処理を行った結果である。図17(a)は、ブート時に署名検証してブートを行う場合の処理時間を示す。図17(b)および図17(c)は、予め署名検証しておき、ブート時にMAC検証する場合における処理時間(第2実施形態による処理の処理時間)を示す。具体的に、図17(b)は、ブート前の署名検証およびMAC値の演算時間を示す。図17(c)は、ブート時のMAC検証の時間を示す。
【0067】
ブート時の処理時間に着目して、図17(a)と図17(c)とを比較すると、図9に示した例と同様に、ブート時に署名する場合と比較して、第2実施形態におけるブート時間が短くなっている。すなわち、第2実施形態に係るプログラム実行装置1Bは、早期にブートすることができる。
【0068】
<第3実施形態>
図18は、第3実施形態に係るプログラム実行装置1Cの構成例について概要を示した図である。プログラム実行装置1Cは、プログラム提供装置2Cと接続している。第3実施形態では、プログラム提供装置2Cは、プログラム実行装置1Cに送信したブート対象プログラムの一部を修正したプログラム(ブート対象プログラムを提供した事業者などから配信された信頼のある修正プログラム)をプログラム実行装置1Cへインターネット等を介して送信する。
【0069】
プログラム修正部15は、プログラム提供装置2Cから修正プログラムを取得し、プログラムの修正を反映させる部分である。プログラム修正部15は、プログラム提供装置2Cから修正プログラムを受信すると、修正プログラムをブート対象プログラムへ反映させる。プログラム修正部15は、修正プログラムをブート対象プログラムへ反映させると、プログラムを修正した旨を算出部13Cへ通知する。
【0070】
なお、プログラム修正部15は、ブート対象プログラムへの追加プログラムを取得することに応じて、ブート対象プログラムを修正するようにしてもよいし、ブート対象プログラムの一部機能の削除要求を受信して、それに応じて、ブート対象プログラムの一部機能を削除するブート対象プログラムの修正をするようにしてもよい。
【0071】
算出部13Cは、プログラム修正部15によりプログラムが修正されると、修正されたプログラムに対する第1MAC値を再度算出する部分である。算出部13Cは、プログラム修正部15からプログラムが修正された旨を受信すると、修正されたプログラムに対して第1MAC値を算出して、当該第1MAC値を置き換える。
【0072】
<修正プログラム等のデータ遷移>
続いて、図19および図20を用いて、ブートを実行するまでの修正プログラム等のデータ遷移を説明する。まず、図19に修正プログラムを取得した際の記憶状態を示す。前提として、ブート対象プログラム(機能Aおよび機能Bを有するプログラム)に対して、署名検証を済ませており、第1MAC値を算出して、当該第1MAC値とブート対象プログラムとを不揮発性メモリ105に記憶している。この状態において、演算器102は、インタフェース部106を介してプログラム提供装置2Cから修正プログラム(機能Bの修正版である機能B−1のプログラム)を取得すると、当該修正プログラムを揮発性メモリ104へ記憶する。このように、演算器102およびインタフェース部106は、プログラム修正部15として機能する。
【0073】
続いて、図20にブート対象のプログラムと第1MAC値の修正をした状態を示す。演算器102は、修正プログラムを取得し、記憶すると、ブート対象プログラムおよび第1MAC値を揮発性メモリ104へ移動またはコピーする。続いて、演算器102は、ブート対象プログラムに対して、修正プログラムを反映させる。そして、演算器102は、修正したブート対象プログラムに対して、第1MAC値を再度算出する。このように、演算器102は、算出部13Cとして機能する。続いて、演算器102は、再度算出した第1MAC値および修正プログラムを反映したブート対象プログラムを不揮発性メモリ105へ記憶する。
【0074】
<処理フロー>
続いて、図21に示すフローチャートを用いて、プログラム実行装置1Cが修正プログラムを取得した際に、プログラムの修正を反映して第1MAC値を修正する処理手順を説明する。
【0075】
まず、プログラム修正部15は、プログラム提供装置2Cから修正プログラムを取得し、当該修正プログラムを記憶する(ステップS41)。続いて、プログラム修正部15は、ブート対象プログラムを修正する(ステップS42)。算出部13Cは、第1MAC値を再度算出し(ステップS43)、当該第1MAC値を修正する(ステップS44)。
【0076】
なお、第2実施形態に示したように、ブート対象プログラムおよび第1MAC値を暗号化した状態で記憶していた場合も、上述と同様の処理をすることができる。例えば、修正プログラムを取得したとき、まず、プログラム実行装置1Cは、機器固有値を用いた独自鍵で、ブート対象プログラムおよび第1MAC値を復号する。続いて、プログラム実行装置1Cは、ブート対象プログラムに修正プログラムを反映し、第1MAC値を再度算出する。続いて、プログラム実行装置1Cは、修正したブート対象プログラムおよび第1MAC値を独自鍵により暗号化して、記憶すればよい。
【0077】
上述のように、取得部11Cが修正プログラムを取得すると、プログラム修正部15が修正プログラムをブート対象プログラムに反映する。これに応じて、算出部13Cが、第1MAC値を再度算出(修正)する。
【0078】
この場合、プログラム実行装置1Cは、修正プログラムが反映されたことをトリガーとして、第1MAC値を修正するので、プログラムが修正されても適切にMAC検証を行うことができる。
【0079】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記の実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、上記の実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、上記の各実施の形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【産業上の利用可能性】
【0080】
本発明は、プログラムをブートする装置に利用可能である。
【符号の説明】
【0081】
1A、1B、1C…プログラム実行装置、2A、2B、2C…プログラム提供装置、11A、11B…取得部、12A、12B…署名検証部、13A、13B、13C…算出部、14A、14B…ブート部、15…プログラム修正部、101…MaskROM、102…演算器、103…機器固有値生成部、104…揮発性メモリ、105…不揮発性メモリ、106…インタフェース部。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21