説明

半導体デバイス

【課題】半導体集積回路を搭載した半導体デバイスにおいて、半導体集積回路におけるプログラム格納デバイス(記憶デバイス)の入れ替え脅威を、高いセキュリティレベルで且つ低コストで排除することを可能にする。
【解決手段】本発明に係る半導体デバイスは、内部プロセッサを具備した半導体集積回路(SoC2で例示)と、内部プロセッサを具備せず、SoC2の起動プログラムの認証を行う認証デバイス1とを搭載している。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体デバイスに関し、より詳細には、内部プロセッサを具備した半導体集積回路を搭載した半導体デバイスに関する。
【背景技術】
【0002】
近年のLSI(Large Scale Integration)のプロセス微細化により、LSIに搭載可能な回路規模は増加し、LSIが処理する機能や性能は加速度的に向上している。なお、回路規模によっては、その半導体集積回路をVLSI(Very LSI)、ULSI(Ultra-LSI)などと呼ぶこともある。
【0003】
機能向上の1つとして、プロセッサ機能をLSIの中に取り込むと、LSI内部のプロセッサがLSI全体を内部から制御することが可能となり、LSI内部にあたかも一つのシステムを構築できる。このように、半導体集積回路であって、その内部にプロセッサを内蔵してシステムを構築するデバイスは、SoC(System on a Chip)と呼ばれている。
【0004】
SoCと呼ばれる半導体集積回路には、様々なデバイスがある。非常に高性能なプロセッサを搭載し、SoCの外部に接続される全てのデバイスを統合的に管理できるものや、複数のプロセッサを内蔵し、さらに処理能力や演算能力を高めたもの、また、外部デバイスの制御は他のプロセッサに任せて、自身はSoC内部の制御のみを行うものなど様々である。
【0005】
ところで、SoCにおいて、CPU(Central Processing Unit)等のプロセッサを安全に立ち上げることは非常に重要であり、特にセキュリティを重視した製品では確実に信頼できるプログラムデータからプロセッサ(以下、CPUで例示)を起動する必要がある。プログラムが悪意ある者によって差し替えられた状態で起動を許してしまうと、SoC内外の記憶装置に暗号化して保存したデータが読み出される危険性や、暗号化データの復号化ができなかったとして消去されてしまう恐れもある。また、ユーザがプログラムを差し替えられたことに気付かずに利用すると、差し替えられた後に生成したデータは、悪意ある者によって搾取されてしまう。
【0006】
このような危険性を排除するために、CPUを安全且つ確実に立ち上げることは重要である。実現方法として、例えばプログラムデータを暗号化した上で記憶デバイスに保存しておき、起動時に復号化してからRAM(Random Access Memory)上に展開して起動する方法がある。他の実現方法として、TPM(Trusted Platform Module)で代表されるセキュリティデバイスを利用する方法もある。このセキュリティデバイスは、SoCの外部に設けられ、そのSoCのコプロセッサとして稼働するデバイスであって、CPU等の内部プロセッサを搭載したデバイスであるため、セキュリティチップとも呼ばれている。
【0007】
さらに、HDD(Hard Disk Drive)やSDカード、USB(Universal Serial Bus)メモリなど一般的に広く利用され汎用性の高い記憶デバイスにプログラムデータを保存するのではなく、基板にオンボードで直接実装するタイプの記憶デバイスに保存することもセキュリティ性を高める方法の一つである。独自のI/F(Interface)プロトコルで動作するデバイスの採用や、Flash DIMM(Dual Inline Memory Module)など一般的にはユーザが入手しにくいデバイスを採用する方法もある。オンボードタイプデバイスやユーザが入手しにくいデバイスなどの場合、第三者によってデバイスの入れ替えを行うのは難しいばかりではなく、基板に実装したまま外部から書き換えることは非常に専門的な知識が必要となるため、セキュリティ性が高くなる。
【0008】
複合機(MFP)を例に挙げ具体的に説明すると、次のようになる。一般的なモデル(製品)とセキュリティを重視したモデルの2種類ある場合、セキュリティを重視したモデルではデータの暗号化や、動作時に一次的に保存したメモリデータ、HDDデータの消去などといったセキュリティ機能が付加される。ここで脅威となる一例は、一般的なモデルのプログラムデータ格納デバイスをセキュリティを重視したモデルのデバイスと置き換えることが挙げられる。置き換え後にCPUの起動が可能であると、それまでに蓄積されたデータの消去がなされず、また今後利用する際に生成されるデータは暗号化されていないため、非常に危険な状態となってしまう。従って、CPUを安全に起動することは、セキュリティ上、非常に重要な要素となる。
【0009】
また、近年、MFPに限らず様々なシステムは、大規模化・複雑化に伴って複数のCPUによってシステム全体を制御することが多くなってきた。例えば、特許文献1には、上述したようなSoCで代表される半導体集積回路を、同じ回路基板などに2以上搭載した半導体デバイスが開示されている。この半導体デバイスも複数のCPUをもつことになる。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特開2001−13215号公報
【発明の概要】
【発明が解決しようとする課題】
【0011】
そして、このように複数のCPUを搭載する半導体デバイスの場合、全てのCPUに対して安全に起動することが求められる。プログラム格納デバイスの入れ替え脅威を排除するためには、全ての記憶デバイスを交換リスクがなく安全性の高いデバイスにする必要が生じる。従って、図7で示す半導体デバイスのように、Main SoC71とSub SoC72に対してそれぞれプログラム格納デバイスとして接続する外部記憶装置73,74は、いずれも高セキュリティの装置を採用する必要が生じる。
【0012】
しかしながら、一般的にHDDなど先に挙げた汎用性の高い記憶デバイスに比べ、セキュリティ性の高い記憶デバイスは技術的に高度であったり、販売数量が少ないなどといった理由によりコストが高くなる傾向にある。
【0013】
また、プログラム格納デバイスの入れ替え脅威を排除する場合のコスト高の問題は、複数のSoCを搭載する半導体デバイスに限ったものではなく、1つのSoCを搭載した半導体デバイスについても該当し、そのSoCで使用するプログラム格納デバイスのセキュリティ性を高くする必要があるため、コストが高くなる傾向にある。
【0014】
また、上述したように1つのSoCにセキュリティチップを接続することも考えられるが、このセキュリティチップはTPMで代表されるように内部プロセッサが搭載されたデバイスであるため、コストが嵩む。なお、セキュリティチップ自身もSoCと言えることから、複数のSoCを搭載した半導体デバイスで説明した通り、このセキュリティチップのプログラム格納デバイスも高セキュリティの装置を採用する必要があるため、この点からもセキュリティチップを採用するとコストが高くなる傾向にある。
【0015】
本発明は、上述のような実状に鑑みてなされたものであり、その目的は、半導体集積回路を搭載した半導体デバイスにおいて、半導体集積回路におけるプログラム格納デバイス(記憶デバイス)の入れ替え脅威を、高いセキュリティレベルで且つ低コストで排除することを可能にすることにある。
【課題を解決するための手段】
【0016】
上記課題を解決するために、本発明の第1の技術手段は、内部プロセッサを具備した半導体集積回路を搭載した半導体デバイスであって、内部プロセッサを具備せず、前記半導体集積回路の起動プログラムの認証を行う認証デバイスをさらに搭載したことを特徴としたものである。
【0017】
第2の技術手段は、第1の技術手段において、前記半導体集積回路は、非オンボードタイプの外部記憶装置にアクセスするためのインターフェースを有し、前記起動プログラムは、前記外部記憶装置に記憶されていることを特徴としたものである。
【0018】
第3の技術手段は、第1又は第2の技術手段において、前記認証デバイスは、前記半導体集積回路の起動プログラムの認証が不可であった場合、前記半導体集積回路に電源を供給するための電源管理デバイスに、電源オフの命令を行うことを特徴としたものである。
【発明の効果】
【0019】
本発明に係る半導体デバイスによれば、搭載された半導体集積回路におけるプログラム格納デバイス(記憶デバイス)の入れ替え脅威を、高いセキュリティレベルで且つ低コストで排除することが可能になる。
【図面の簡単な説明】
【0020】
【図1】本発明に係る、SoCと認証デバイスとが接続されてなる半導体デバイスの一構成例を示す図である。
【図2】本発明に係る半導体デバイスに搭載された認証デバイスの構成例を示す図である。
【図3】本発明に係る半導体デバイスに搭載されたSoCの構成例を示す図である。
【図4】図2の認証デバイスの起動処理例を説明するためのフロー図である。
【図5】図3のSoCの起動処理例を説明するためのフロー図である。
【図6】本発明に係る、SoCと認証デバイスとが接続されてなる半導体デバイスの他の構成例を示す図である。
【図7】従来技術による、複数のSoCが接続されてなる半導体デバイスの構成例を示す図である。
【発明を実施するための形態】
【0021】
本発明に係る半導体デバイスは、少なくとも1つの半導体集積回路と、その回路の起動プログラムを認証することでその回路を認証するための1つの認証デバイスが搭載されており、これらは一般的には基板上に搭載されている。この半導体集積回路は、プロセッサ(内部プロセッサ)をはじめ、メインメモリ用のメモリI/F、外部デバイスである認証デバイス用の外部I/F、及びレジスタを備えたLSI等の回路であり、以下、プロセッサを有することからSoCとして説明する。
【0022】
図1は、本発明に係る、SoCと認証デバイスとが接続されてなる半導体デバイスの一構成例を示す図である。図2は、図1で例示した本発明に係る半導体デバイスに搭載された認証デバイスの構成例を示す図で、図3は、図1で例示した本発明に係る半導体デバイスに搭載されたSoCの構成例を示す図である。
【0023】
図1で例示するように、本発明に係る半導体デバイスは、認証デバイス1とSoC2とが外部I/Fを介して接続された状態で搭載されている。
【0024】
認証デバイス1は、図2で例示するように、レジスタ10a、外部I/F10b、乱数生成部10c、ハッシュ演算部10d、及びタイマ10eを具備している。認証デバイス1の各構成要素の詳細については後述する。
【0025】
そして、認証デバイス1は、図2の例で示すようにCPU等の内部プロセッサを具備しないデバイス、すなわちCPU機能を含まないデバイスであり、例えば、CPU機能を含まないCPLD(Complex Programmable Logic Device)やCPU機能を含まないASIC(Application Specific Integrated Circuit)などが挙げられる。このような認証デバイス1は、CPU機能を含まずプログラム格納デバイス(例えば外部記憶装置)に保存するプログラム自体が存在しないため、改竄脅威がなくセキュリティ性が高いものとなる。本発明に係る半導体デバイスでは、このようなセキュアな認証デバイス1を認証元として利用し、外部I/Fで接続されたSoC2の起動プログラムを認証する。なお、認証デバイス1は、後述の構成例に限らず、CPU機能を具備せず且つSoC2の起動プログラムを認証できるような構成であればよい。
【0026】
一方で、認証対象となるSoC2は、CPU等の内部プロセッサを具備したデバイスである。SoC2は、図3で例示するように、内部プロセッサの一例としてのCPU20aの他に、外部I/F20b、メモリコントロール20c、及び外部記憶装置I/F20dを具備し、これらがシステムバスに接続されている。そして、SoC2には、図1では省略しているが、メモリコントロール20cにメインメモリとしてのメモリ4が接続できるようになっている。また、SoC2には、外部記憶装置I/F20dに低セキュリティ外部記憶装置3が接続できるようになっている。なお、SoC2の各構成要素の詳細については後述する。
【0027】
まず、認証デバイス1の各構成要素について説明する。レジスタ10aは、16bitや32bitなどのデータ単位で複数の値を保持することができるモジュールである。各データ単位にはアドレスが割り振られている。また、認証デバイス1は、レジスタ10aの値によって認証デバイス1内の各構成要素の動作を決定することが可能に構成されている。特に、認証デバイス1は、レジスタ10aの値によって、認証デバイス1上のハードウェアをリセットするハードウェアリセットやその解除を行うことが可能に構成されている。
【0028】
外部I/F10bは、認証デバイス1に接続される外部デバイス(ここではSoC2)とデータ転送やメッセージ転送などのやり取りを行うためのI/Fモジュールであり、SoC2がバスマスタ、認証デバイス1がバススレーブとして機能するように構成されている。よって、外部I/F10bは、主にSoC2がレジスタ10aに対してリード/ライト(R/W)アクセスするためのI/Fとなる。これにより、SoC2のCPU20aは、アドレスが割り振られた各データ単位に対し、外部I/F20b,10bを介して値の読み出しや書き換えを行うことが可能になっている。
【0029】
乱数生成部10cは、認証デバイス1においてハードウェアリセットが解除されたときに1度だけ乱数を生成するモジュールである。乱数生成部10cは、生成した乱数をレジスタ10aに格納する。また、乱数生成部10cは、ハードウェアリセット解除後、直ぐに乱数値を生成するように構成されており、これにより、外部I/F10bからのアクセスより前に乱数値を確定可能になっている。
【0030】
タイマ10eは、認証デバイス1においてハードウェアリセットが解除されると同時に、時間計測を開始するモジュールである。タイマ10eは、時間計測開始から指定時間までにSoC2のデバイス認証が正常終了しなければ、ハードウェアリセットの実行(図示しない電源管理ブロックに対するリセットの通知も含むことが好ましい)も行う。
【0031】
ハッシュ演算部10dは、自らが生成した乱数値と既知のSoCプログラムハッシュ値(SoC2の起動プログラムのデータを元に計算されたハッシュ値)とから、さらにハッシュ演算を行い、期待値を生成するモジュールである。ハッシュ演算部10dは、生成した期待値を外部から読み出し不可能な領域に保存する。また、ハッシュ演算部10dは、SoC2から、SoC2側でハッシュ演算されたハッシュデータについてのレジスタ10aへの書き込みが実行されたときに、書き込まれた値と上記期待値とを比較して、正常/異常の判断を行う。認証デバイス1では、このように乱数を利用することでハッシュ値そのものがSoC2に電送されることを防ぐことが好ましい。
【0032】
次に、SoC2の各構成要素について説明する。CPU20aは、SoC2の全体を制御するモジュールである。起動時、低セキュリティ外部記憶装置3に保存しているプログラムデータを読み出し、内部のRAM上に展開することで動作を開始する。なお、このプロセッサとしては、CPUの他に、例えばDSP(Digital Signal Processor)、GPU(Graphics Processor Unit)など、様々なプロセッサが適用できる。このプログラムデータには、少なくとも起動プログラム(以下、起動プログラムSと言う)のデータが含まれる。また、CPU20aは、この起動プログラムSに従って、認証デバイス1のレジスタ10aにアクセス可能になっている。
【0033】
外部I/F20bは、SoC2に接続される外部デバイス(ここでは認証デバイス1)とデータ転送やメッセージ転送などのやり取りを行うためのI/Fモジュールである。また、外部I/F20bは、シリアルI/FやパラレルI/FなどのローカルバスのI/Fであり、認証デバイス1及びSoC2の両方が起動していれば、接続のためのネゴシエーション不要で利用することができる。
【0034】
メモリコントロール(メモリコントローラ)20cは、メインメモリであるメモリ4を接続するためのメモリI/Fの一例であって、SDRAM(Synchronous Dynamic RAM)やDDR SDRAM(Double-Data-Rate SDRAM)など、基板上で接続されたメモリ4とのデータ送受信を行うモジュールである。メモリコントロール20cは、CPU20aなどからのデータ送受信要求をバス経由で受け付け、指示に従ってメインメモリであるメモリ4に対してデータ送受信要求を行う。また、その結果を、指示元であるCPU20aなどに対して戻す。
【0035】
外部記憶装置I/F20dは、低セキュリティ外部記憶装置3内に保存されたデータの読み出し、書き込みを行うモジュールである。外部記憶装置I/F20dは、CPU20aの指示に従って外部記憶装置3内のデータにアクセスし、主にメモリコントロール20cとの間でデータ送受信を行う。
【0036】
以上のように、本発明に係る半導体デバイスは、SoC2及び認証デバイス1を搭載しており、認証デバイス1が内部プロセッサを具備しない。認証デバイス1は、内部プロセッサを具備しないためプログラムによる起動ではなく、レジスタ10a、乱数生成部10c、ハッシュ演算部10d、及びタイマ10eで例示したようなハードウェア構成の機構を具備し、その機構で起動する。そして、その機構(以下、起動機構と言う)は、プログラムを必要としないため、起動プログラムSを有するSoC2に比べ信頼性が確保されていると言える。より具体的には、認証デバイス1の起動機構は、SoC2の起動プログラムSが格納された低セキュリティ外部記憶装置3に比べて、高セキュリティと言える。
【0037】
なお、起動プログラムSの格納デバイスとして外部記憶装置を利用する場合に限らず、内部に格納デバイスを設けた場合においても、起動プログラムSの改竄リスクは残るため、上記起動機構より低セキュリティとなる。また、認証デバイス1をより高セキュリティなデバイスとするために、ハードウェア構成自体についても、SoC2に比べ認証デバイス1の方に耐タンパー性をもたせるように構成することが好ましい。
【0038】
そして、上記起動機構は、ハードウェアの機構により信頼性が確保された状態で起動開始した後に、SoC2の認証、つまり起動プログラムSの認証を行う。このように、認証デバイス1は、信頼性を確保可能な方法で起動され、起動後(なお、起動開始後であれば起動途中であってもよい)にSoC2とのやり取りによって、SoC2の起動プログラムSを認証する。但し、このやり取りは、SoC2がマスタ、認証デバイス1がスレーブとなって実行される。
【0039】
このような認証により、SoC2では、自身でその起動プログラムSの信頼性を確保する必要性がなくなり、外部記憶装置I/F20dに接続する外部記憶装置が低セキュリティのもの(つまり、低セキュリティ外部記憶装置3)で済むため、システムのセキュリティ性を維持しつつ、低コスト化が実現可能となる。
【0040】
特に、認証デバイス1の起動機構は各構成要素10a〜10eで例示したように高セキュリティで且つオンボードタイプの機構となっているが、SoC2は外部記憶装置I/Fとして認証デバイス1の起動機構より低セキュリティで且つ非オンボードタイプの外部記憶装置(HDDやSDカードなどの汎用的な外部記憶装置)にアクセスするためのI/Fを有することが好ましい。つまり、SoC2に接続する起動プログラムSの格納用の外部記憶装置3として、低セキュリティのHDDやSDカードなどの汎用的な外部記憶装置を採用でき、これによりコストを減らすことができる。但し、外部記憶装置3は、非オンボードタイプで無くても認証デバイス1の起動機構より低セキュリティであれば、コストを減らす効果を奏する。
【0041】
次に、図1の半導体デバイスにおける起動処理の一例を、図4及び図5を参照しながら説明する。図4は、図2の認証デバイスの起動処理例を説明するためのフロー図で、図5は、図3のSoCの起動処理例を説明するためのフロー図である。
【0042】
まず、図4を参照しながら認証デバイス1の起動処理例を説明する。半導体デバイス(又はそれを搭載した電子機器)自体の電源がオンされたときに、認証デバイス1の起動処理も開始される。認証デバイス1は、起動処理として、まずクロックの安定化を待ち、安定化した後に、レジスタ10aの値をハードウェアリセットが解除された状態にする(ステップS1)。
【0043】
認証デバイス1からSoC2に対してアクセスする機能がないため、認証デバイス1は、起動開始後、SoC2からのアクセスを待つ状態となる。言い換えると、認証デバイス1は、自身が起点となり認証動作を開始できない。そこで、ステップS1の後、直ぐにタイマ10eが起動してタイマ動作を開始し、認証完了までの時間をカウントし、それが制限時間(上記指定時間)内であるかを判定する(ステップS2)。
【0044】
乱数生成部10cが、同様にハードウェアリセット解除後、直ぐに乱数値を生成する(ステップS3)。ここで発生させた乱数値は、SoC2からの読み取りが可能なようにレジスタ10aに格納される。ステップS3の後、ハッシュ演算部10dが、既知のハッシュ値である起動プログラムSのデータを元に計算されたハッシュ値と、乱数生成部10cが生成した乱数値とから、ハッシュ演算を行うことで、期待値のデータを生成する(ステップS4)。この期待値のデータは外部から読み出し不可能な領域に格納しておく。
【0045】
ステップS4に続いて、若しくは少なくともステップS3での乱数値の格納処理より後に、外部I/F10bがSoC2の外部I/F20bとの接続を可能な状態にしておく。そして、認証デバイス1は、SoC2から外部I/F10bを介しての乱数値読み出しのレジスタアクセスがあれば、そのアクセスに応答することで乱数値を出力する(ステップS5)。乱数値のデータ長は256bitや512bitなど、製品のセキュリティ要件やハッシュアルゴリズムに応じて決定すればよい。
【0046】
続いて、認証デバイス1は、SoC2からハッシュデータのレジスタ書き込みアクセスがあったときに、レジスタ10aへの書き込みを行い、ハッシュ演算部10dが、その書き込みがなされたときに(ステップS6でYESの場合)、作成しておいた期待値とそのハッシュデータとが一致するかを確認する(ステップS7)。ステップS7の確認の結果が一致していた場合、ハッシュ演算部10dが、正常起動として、上記レジスタ書き込みアクセスに対する認証完了の応答をSoC2に返し(ステップS8)、タイマ10eを停止する。
【0047】
一方で、認証デバイス1は、ハッシュデータのレジスタ書き込みアクセスがない場合(ステップS6でNOの場合)には、タイマ10eが指定時間(例えば60秒など)の経過/未経過を判定し(ステップS9)、未経過であればステップS6に戻ってレジスタ書き込みアクセスを待つ。指定時間が経過した場合(ステップS9でYESの場合)には、起動プログラムS(プログラムで用いる各種パラメータも含む)が改竄されて信頼性がないものになっていたこと(若しくは接続不良であること)を意味するため、タイマ10eがハードウェアリセットの実行を行う(ステップS10)。この場合、認証デバイス1が異常起動として処理を終了したことを意味する。ステップS10のハードウェアリセットには、外部I/F10bを遮断する処理も含まれる。
【0048】
また、ステップS7でNOの場合、つまり確認の結果が一致していなかった場合には、起動プログラムS(プログラムで用いる各種パラメータも含む)が改竄されていたことを意味するため、ステップS10に進み、タイマ10eがハードウェアリセットの実行を行う。なお、ステップS7でNOの場合には、ステップS10の前に、上記レジスタ書き込みアクセスに対する認証失敗の応答をSoC2に返すようにしてもよい。
【0049】
なお、ステップS5でレジスタアクセスがあることを前提に説明したが、このレジスタアクセスがなければ、後述のステップS13の処理を行わないようなプログラムに起動プログラムSが改竄されていること(若しくは接続不良であること)を意味するため、そのレジスタアクセスを同じく上記指定時間待って、レジスタアクセスがかければステップS10の処理を実行するようにすることが好ましい。
【0050】
以上のように、認証デバイス1では、その処理として、電源投入後、自動的に乱数生成及び期待値生成の動作が実行されると共に、自動的にタイマ10eが起動され、指定時間内に認証が完了しなければそれを外部に通知する動作(ここでは外部I/F10bの遮断動作)が実行されるだけであり、処理の途中で主導的にSoC2に対してアクセスする必要もない。よって、認証デバイス1としては、例えば認証デバイス1のハードウェアリセット解除後に一度だけ実行されるハードウェア処理を行う構成のような、全ての処理がプログラムを介さずに動作可能な自動処理を行う構成(全ての処理において、CPUの介在が不要な単純処理を行うような構成)を採用するだけで済むため、認証デバイス1に内部プロセッサを具備しないような構成を採用できる。
【0051】
次に、図5を参照しながらSoC2の起動処理例を説明する。この起動プログラムSは、SoC2のプログラム格納デバイスの例である低セキュリティ外部記憶装置3に記憶されているものとして説明する。
【0052】
SoC2のCPU20aは、低セキュリティデバイスである外部記憶装置3から起動プログラムSのデータを読み出し、RAM上に展開した後、この起動プログラムSにより起動する(ステップS11)。CPU20aは、起動後、若しくは起動時に読み出した起動プログラムSのデータのハッシュ値を計算する(ステップS12)。ステップS12並びに後述のステップS13〜S16の処理は、起動プログラムSの認証(換言すると起動プログラムSが格納された低セキュリティ外部記憶装置3がその格納部分で書き換えられていないかの認証)を行うためになされる。
【0053】
ステップS12に続いて、若しくは少なくともステップS11の処理後に、外部I/F20bが認証デバイス1の外部I/F10bとの接続を可能な状態にしておく。そして、ステップS12でハッシュ値が求まると、CPU20aは、認証デバイス1に対し、レジスタリードアクセスを行うことで乱数値を取得する(ステップS13)。
【0054】
次に、CPU20aは、既にステップS12で算出している起動プログラムSのデータのハッシュ値と、認証デバイス1から受信した乱数値からさらにハッシュ演算を行い、認証用のハッシュデータを生成する(ステップS14)。そして、CPU20aは外部I/F20bを介し、生成したハッシュデータを認証デバイス1へレジスタライトアクセスすることによって、指定アドレスに書き込みを行う(ステップS15)。
【0055】
その後、CPU20aは、外部I/F20bを介して認証デバイス1からレジスタライトアクセスに対する認証完了応答を待ち(ステップS16)、認証完了応答を受信した場合(YESの場合)、SoC2の起動処理を完了し、これによりSoC2が通常動作を行う状態になる。一方、認証完了応答が受信されない場合(ステップS16でNOの場合)、認証完了応答待ちのまま待機状態を継続する。なお、認証デバイス1側の処理として認証失敗の応答も送信する場合には、その認証失敗応答を受けた場合に認証失敗の状態で処理を終了させればよい。
【0056】
以上、図4及び図5の処理例では、認証デバイス1が認証完了応答を返信するようにしておき、SoC2側がその返信を受けた場合に起動を完了するように説明した。この処理例では、SoC2が正常終了したか/異常終了したかを判定できるため、正常終了/異常終了に応じてSoC2は異なる動作を実行できる。なお、ステップS16の判定に制限時間を設けておくことでその判定をその制限時間内に済ませることもできる。
【0057】
但し、SoC2の起動完了に係る処理は、外部I/F20bにおけるI/Fプロトコルに応じて決まるため、図4及び図5で例示したような処理に限ったものではない。例えば、外部I/F20bにおいて、I/Fプロトコルとして「応答」が定義されていないレガシープロトコルを採用することもできる。実際、レガシープロトコルでは「応答」が定義されていないことが多い。このような構成を採用した場合、「応答」が定義されていないために、SoC2は起動が正常終了であったのか異常終了であったのかの判定ができないが、そもそもSoC2は異常終了を必ずしも知る必要がない。この場合、SoC2は常に正常終了するが、システムが異常終了の場合は、SoC2の外部からシャットダウン要求がくるように構成しておけばよい。このシャットダウン要求は、例えば認証デバイス1がステップS10で実行するハードウェアリセットの一処理として実行すればよい。SoC2は、このシャットダウン要求に従い、正常終了後直ぐに通常のシャットダウンを行えばよい。
【0058】
以上のように、SoC2は低セキュリティの外部記憶装置3を利用して起動することが可能であり、また、搭載されたSoCにおけるプログラム格納デバイス(記憶デバイス)の入れ替えがなされても、正常起動しないため、高いセキュリティレベルでその入れ替えを排除することができる。つまり、SoC2では、セキュリティ性を維持しつつ、外部記憶装置にかかるコストを低減することが可能である。また、認証デバイス1も、CPU機能をもたないためCPU機能に係るコストと起動プログラムの格納デバイスのコストも低減することができる。
【0059】
図6は、本発明に係る、SoCと認証デバイスとが接続されてなる半導体デバイスの他の構成例を示す図である。図6で例示する構成例は、図1の構成例において、認証デバイス1に電源管理デバイス5が接続されてなる。認証デバイス1と電源管理デバイス5は低速通信ライン、例えばUART(Universal Asynchronous Receiver Transmitter)、USART(Universal Synchronous Asynchronous Receiver Transmitter)やI2C(Inter-Integrated Circuit)やSMBus(System Management Bus)などのシリアル通信で接続されることが多い。
【0060】
図4及び図5で説明した流れでは、異常終了の場合に、認証デバイス1がSoC2に対して何も応答しない(若しくは認証失敗応答を返す)ことでSoC2を正常起動させないようにしたが、さらに確実にSoC2及び認証デバイス1を備えたシステム全体を停止するために、次のような制御を付加することが好ましい。
【0061】
つまり、認証デバイス1は、SoC2の起動プログラムSの認証が不可であった場合、電源管理デバイス5に電源オフの命令を行う。より具体的には、認証デバイス1はハードウェアリセット(図4のステップS10)の主たる処理として、認証デバイス1とSoC2を含むシステムへの電源供給を管理する電源管理デバイス5に対して、電源停止を促す停止通知信号(電源停止命令)を発行する。電源管理デバイス5は、上記通信ラインを利用して認証デバイス1からのこの信号を受信すると、システム全体への電源供給を停止する(シャットダウン状態に移行する)。このようにして電源オフを行うことで、さらに確実な高セキュリティ性を得ることが可能となる。
【0062】
ここで、半導体デバイスに設けられた電源管理デバイス5が、一度に認証デバイス1とSoC2を含むシステムの電源をオン/オフするような制御を行うデバイスであることを前提に説明したが、(A)SoC2と認証デバイス1との電源を個別に制御できるデバイスであるか、(B)SoC2用の電源管理デバイスと認証デバイス1用の電源管理デバイスなどといった具合に個別の電源管理デバイスであってもよい。
【0063】
上記(A),(B)いずれの場合でも、認証デバイス1からの電源オフ命令は、SoC2への電源供給のみをオフする命令が少なくとも含まれていれば、少なくともこのSoC2の電源がオフできるため、さらに確実な高セキュリティ性を得ることが可能となる。また、その場合、図4のステップS10におけるハードウェアリセットの前に、SoC2の電源に関するオフ命令を発すればよく、また、ステップS10におけるハードウェアリセットに認証デバイス1自身への電源供給をオフする命令を含めておくことが好ましい。
【0064】
以上、本発明に係る半導体デバイスについて、図1〜図5の構成例及び図6の構成例では、起動プログラムSの認証を行う方法としてハッシュ計算を用いることを前提に説明したが、これに限らず、例えば公開鍵暗号方式を利用して認証を行ってもよい。
【0065】
また、図1や図6の構成例では、半導体デバイスに搭載されるSoCの数、認証デバイスの数がいずれも1つであって、認証デバイス1が起動プログラムSの認証を行う場合を例示したが、本発明に係る半導体デバイスでは、いずれの数も1つ以上であれば適用できる。
【0066】
例えば、認証デバイスとSoCとが一対一で接続されてなるセットを複数、半導体デバイスに搭載しておくことができる。他の例として、本発明は、1つの認証デバイスに複数のSoCが接続され、これらのSoCの起動プログラムがその認証デバイスによって認証されるような半導体デバイスであっても適用できる。この例の場合、認証デバイスにタイマやレジスタを多く具備しておくことで実現できるが、代わりに、認証の順番を決めておくか、若しくはSoCの起動処理の速度を異ならせておくなどにより、簡潔な処理構造のまま複数のSoCに対応させることもできる。
【符号の説明】
【0067】
1…認証デバイス、2…SoC、3…低セキュリティ外部記憶装置、4…メモリ、5…電源管理デバイス、10a…レジスタ、10b…認証デバイスの外部I/F、10c…乱数生成部、10d…ハッシュ計算部、10e…タイマ、20a…CPU、20b…SoCの外部I/F、20c…メモリコントロール、20d…外部記憶装置I/F。

【特許請求の範囲】
【請求項1】
内部プロセッサを具備した半導体集積回路を搭載した半導体デバイスであって、
内部プロセッサを具備せず、前記半導体集積回路の起動プログラムの認証を行う認証デバイスをさらに搭載したことを特徴とする半導体デバイス。
【請求項2】
前記半導体集積回路は、非オンボードタイプの外部記憶装置にアクセスするためのインターフェースを有し、前記起動プログラムは、前記外部記憶装置に記憶されていることを特徴とする請求項1に記載の半導体デバイス。
【請求項3】
前記認証デバイスは、前記半導体集積回路の起動プログラムの認証が不可であった場合、前記半導体集積回路に電源を供給するための電源管理デバイスに、電源オフの命令を行うことを特徴とする請求項1又は2に記載の半導体デバイス。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate