(57)【特許請求の範囲】
【請求項１】
内部プロセッサを具備した半導体集積回路を搭載した半導体デバイスであって、
第１のインターフェースを介して前記半導体集積回路に接続された認証デバイスをさらに搭載し、
前記認証デバイスは、内部プロセッサを具備せず、前記第１のインターフェースを介して前記半導体集積回路の起動プログラムの認証を行うデバイスであり、
前記半導体集積回路は、前記認証デバイスで生成された乱数値を用いて前記起動プログラムのデータからハッシュデータを求め、
前記認証デバイスは、前記乱数値を用いて求め且つ外部から読み出し不可能な領域に保存した期待値との比較により、前記ハッシュデータを検証することで、前記起動プログラムの認証を行うことを特徴とする半導体デバイス。
【請求項２】
前記半導体集積回路は、非オンボードタイプの外部記憶装置にアクセスするための第２のインターフェースを有し、前記起動プログラムは、前記外部記憶装置に記憶されていることを特徴とする請求項１に記載の半導体デバイス。
【請求項３】
前記認証デバイスは、前記起動プログラムの認証が不可であった場合、前記半導体集積回路に電源を供給するための電源管理デバイスに、電源オフの命令を行うことを特徴とする請求項１又は２に記載の半導体デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体デバイスに関し、より詳細には、内部プロセッサを具備した半導体集積回路を搭載した半導体デバイスに関する。
【背景技術】
【０００２】
近年のＬＳＩ（Large Scale Integration）のプロセス微細化により、ＬＳＩに搭載可能な回路規模は増加し、ＬＳＩが処理する機能や性能は加速度的に向上している。なお、回路規模によっては、その半導体集積回路をＶＬＳＩ（Very LSI）、ＵＬＳＩ（Ultra-LSI）などと呼ぶこともある。
【０００３】
機能向上の１つとして、プロセッサ機能をＬＳＩの中に取り込むと、ＬＳＩ内部のプロセッサがＬＳＩ全体を内部から制御することが可能となり、ＬＳＩ内部にあたかも一つのシステムを構築できる。このように、半導体集積回路であって、その内部にプロセッサを内蔵してシステムを構築するデバイスは、ＳｏＣ（System on a Chip）と呼ばれている。
【０００４】
ＳｏＣと呼ばれる半導体集積回路には、様々なデバイスがある。非常に高性能なプロセッサを搭載し、ＳｏＣの外部に接続される全てのデバイスを統合的に管理できるものや、複数のプロセッサを内蔵し、さらに処理能力や演算能力を高めたもの、また、外部デバイスの制御は他のプロセッサに任せて、自身はＳｏＣ内部の制御のみを行うものなど様々である。
【０００５】
ところで、ＳｏＣにおいて、ＣＰＵ（Central Processing Unit）等のプロセッサを安全に立ち上げることは非常に重要であり、特にセキュリティを重視した製品では確実に信頼できるプログラムデータからプロセッサ（以下、ＣＰＵで例示）を起動する必要がある。プログラムが悪意ある者によって差し替えられた状態で起動を許してしまうと、ＳｏＣ内外の記憶装置に暗号化して保存したデータが読み出される危険性や、暗号化データの復号化ができなかったとして消去されてしまう恐れもある。また、ユーザがプログラムを差し替えられたことに気付かずに利用すると、差し替えられた後に生成したデータは、悪意ある者によって搾取されてしまう。
【０００６】
このような危険性を排除するために、ＣＰＵを安全且つ確実に立ち上げることは重要である。実現方法として、例えばプログラムデータを暗号化した上で記憶デバイスに保存しておき、起動時に復号化してからＲＡＭ（Random Access Memory）上に展開して起動する方法がある。他の実現方法として、ＴＰＭ（Trusted Platform Module）で代表されるセキュリティデバイスを利用する方法もある。このセキュリティデバイスは、ＳｏＣの外部に設けられ、そのＳｏＣのコプロセッサとして稼働するデバイスであって、ＣＰＵ等の内部プロセッサを搭載したデバイスであるため、セキュリティチップとも呼ばれている。
【０００７】
さらに、ＨＤＤ（Hard Disk Drive）やＳＤカード、ＵＳＢ（Universal Serial Bus）メモリなど一般的に広く利用され汎用性の高い記憶デバイスにプログラムデータを保存するのではなく、基板にオンボードで直接実装するタイプの記憶デバイスに保存することもセキュリティ性を高める方法の一つである。独自のＩ／Ｆ（Interface）プロトコルで動作するデバイスの採用や、Ｆｌａｓｈ  ＤＩＭＭ（Dual Inline Memory Module）など一般的にはユーザが入手しにくいデバイスを採用する方法もある。オンボードタイプデバイスやユーザが入手しにくいデバイスなどの場合、第三者によってデバイスの入れ替えを行うのは難しいばかりではなく、基板に実装したまま外部から書き換えることは非常に専門的な知識が必要となるため、セキュリティ性が高くなる。
【０００８】
複合機（ＭＦＰ）を例に挙げ具体的に説明すると、次のようになる。一般的なモデル（製品）とセキュリティを重視したモデルの２種類ある場合、セキュリティを重視したモデルではデータの暗号化や、動作時に一次的に保存したメモリデータ、ＨＤＤデータの消去などといったセキュリティ機能が付加される。ここで脅威となる一例は、一般的なモデルのプログラムデータ格納デバイスをセキュリティを重視したモデルのデバイスと置き換えることが挙げられる。置き換え後にＣＰＵの起動が可能であると、それまでに蓄積されたデータの消去がなされず、また今後利用する際に生成されるデータは暗号化されていないため、非常に危険な状態となってしまう。従って、ＣＰＵを安全に起動することは、セキュリティ上、非常に重要な要素となる。
【０００９】
また、近年、ＭＦＰに限らず様々なシステムは、大規模化・複雑化に伴って複数のＣＰＵによってシステム全体を制御することが多くなってきた。例えば、特許文献１には、上述したようなＳｏＣで代表される半導体集積回路を、同じ回路基板などに２以上搭載した半導体デバイスが開示されている。この半導体デバイスも複数のＣＰＵをもつことになる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００１−１３２１５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
そして、このように複数のＣＰＵを搭載する半導体デバイスの場合、全てのＣＰＵに対して安全に起動することが求められる。プログラム格納デバイスの入れ替え脅威を排除するためには、全ての記憶デバイスを交換リスクがなく安全性の高いデバイスにする必要が生じる。従って、図７で示す半導体デバイスのように、Ｍａｉｎ ＳｏＣ７１とＳｕｂ ＳｏＣ７２に対してそれぞれプログラム格納デバイスとして接続する外部記憶装置７３，７４は、いずれも高セキュリティの装置を採用する必要が生じる。
【００１２】
しかしながら、一般的にＨＤＤなど先に挙げた汎用性の高い記憶デバイスに比べ、セキュリティ性の高い記憶デバイスは技術的に高度であったり、販売数量が少ないなどといった理由によりコストが高くなる傾向にある。
【００１３】
また、プログラム格納デバイスの入れ替え脅威を排除する場合のコスト高の問題は、複数のＳｏＣを搭載する半導体デバイスに限ったものではなく、１つのＳｏＣを搭載した半導体デバイスについても該当し、そのＳｏＣで使用するプログラム格納デバイスのセキュリティ性を高くする必要があるため、コストが高くなる傾向にある。
【００１４】
また、上述したように１つのＳｏＣにセキュリティチップを接続することも考えられるが、このセキュリティチップはＴＰＭで代表されるように内部プロセッサが搭載されたデバイスであるため、コストが嵩む。なお、セキュリティチップ自身もＳｏＣと言えることから、複数のＳｏＣを搭載した半導体デバイスで説明した通り、このセキュリティチップのプログラム格納デバイスも高セキュリティの装置を採用する必要があるため、この点からもセキュリティチップを採用するとコストが高くなる傾向にある。
【００１５】
本発明は、上述のような実状に鑑みてなされたものであり、その目的は、半導体集積回路を搭載した半導体デバイスにおいて、半導体集積回路におけるプログラム格納デバイス（記憶デバイス）の入れ替え脅威を、高いセキュリティレベルで且つ低コストで排除することを可能にすることにある。
【課題を解決するための手段】
【００１６】
上記課題を解決するために、本発明の第１の技術手段は、内部プロセッサを具備した半導体集積回路を搭載した半導体デバイスであって、第１のインターフェースを介して前記半導体集積回路に接続された認証デバイスをさらに搭載し、前記認証デバイスは、内部プロセッサを具備せず、前記第１のインターフェースを介して前記半導体集積回路の起動プログラムの認証を行うデバイスであり、前記半導体集積回路は、前記認証デバイスで生成された乱数値を用いて前記起動プログラムのデータからハッシュデータを求め、前記認証デバイスは、前記乱数値を用いて求め且つ外部から読み出し不可能な領域に保存した期待値との比較により、前記ハッシュデータを検証することで、前記起動プログラムの認証を行うことを特徴としたものである。
【００１７】
第２の技術手段は、第１の技術手段において、前記半導体集積回路は、非オンボードタイプの外部記憶装置にアクセスするための第２のインターフェースを有し、前記起動プログラムは、前記外部記憶装置に記憶されていることを特徴としたものである。
【００１８】
第３の技術手段は、第１又は第２の技術手段において、前記認証デバイスは、前記起動プログラムの認証が不可であった場合、前記半導体集積回路に電源を供給するための電源管理デバイスに、電源オフの命令を行うことを特徴としたものである。
【発明の効果】
【００１９】
本発明に係る半導体デバイスによれば、搭載された半導体集積回路におけるプログラム格納デバイス（記憶デバイス）の入れ替え脅威を、高いセキュリティレベルで且つ低コストで排除することが可能になる。
【図面の簡単な説明】
【００２０】
【図１】本発明に係る、ＳｏＣと認証デバイスとが接続されてなる半導体デバイスの一構成例を示す図である。
【図２】本発明に係る半導体デバイスに搭載された認証デバイスの構成例を示す図である。
【図３】本発明に係る半導体デバイスに搭載されたＳｏＣの構成例を示す図である。
【図４】図２の認証デバイスの起動処理例を説明するためのフロー図である。
【図５】図３のＳｏＣの起動処理例を説明するためのフロー図である。
【図６】本発明に係る、ＳｏＣと認証デバイスとが接続されてなる半導体デバイスの他の構成例を示す図である。
【図７】従来技術による、複数のＳｏＣが接続されてなる半導体デバイスの構成例を示す図である。
【発明を実施するための形態】
【００２１】
本発明に係る半導体デバイスは、少なくとも１つの半導体集積回路と、その回路の起動プログラムを認証することでその回路を認証するための１つの認証デバイスが搭載されており、これらは一般的には基板上に搭載されている。この半導体集積回路は、プロセッサ（内部プロセッサ）をはじめ、メインメモリ用のメモリＩ／Ｆ、外部デバイスである認証デバイス用の外部Ｉ／Ｆ、及びレジスタを備えたＬＳＩ等の回路であり、以下、プロセッサを有することからＳｏＣとして説明する。
【００２２】
図１は、本発明に係る、ＳｏＣと認証デバイスとが接続されてなる半導体デバイスの一構成例を示す図である。図２は、図１で例示した本発明に係る半導体デバイスに搭載された認証デバイスの構成例を示す図で、図３は、図１で例示した本発明に係る半導体デバイスに搭載されたＳｏＣの構成例を示す図である。
【００２３】
図１で例示するように、本発明に係る半導体デバイスは、認証デバイス１とＳｏＣ２とが外部Ｉ／Ｆを介して接続された状態で搭載されている。
【００２４】
認証デバイス１は、図２で例示するように、レジスタ１０ａ、外部Ｉ／Ｆ１０ｂ、乱数生成部１０ｃ、ハッシュ演算部１０ｄ、及びタイマ１０ｅを具備している。認証デバイス１の各構成要素の詳細については後述する。
【００２５】
そして、認証デバイス１は、図２の例で示すようにＣＰＵ等の内部プロセッサを具備しないデバイス、すなわちＣＰＵ機能を含まないデバイスであり、例えば、ＣＰＵ機能を含まないＣＰＬＤ（Complex Programmable Logic Device）やＣＰＵ機能を含まないＡＳＩＣ（Application Specific Integrated Circuit）などが挙げられる。このような認証デバイス１は、ＣＰＵ機能を含まずプログラム格納デバイス（例えば外部記憶装置）に保存するプログラム自体が存在しないため、改竄脅威がなくセキュリティ性が高いものとなる。本発明に係る半導体デバイスでは、このようなセキュアな認証デバイス１を認証元として利用し、外部Ｉ／Ｆで接続されたＳｏＣ２の起動プログラムを認証する。なお、認証デバイス１は、後述の構成例に限らず、ＣＰＵ機能を具備せず且つＳｏＣ２の起動プログラムを認証できるような構成であればよい。
【００２６】
一方で、認証対象となるＳｏＣ２は、ＣＰＵ等の内部プロセッサを具備したデバイスである。ＳｏＣ２は、図３で例示するように、内部プロセッサの一例としてのＣＰＵ２０ａの他に、外部Ｉ／Ｆ２０ｂ、メモリコントロール２０ｃ、及び外部記憶装置Ｉ／Ｆ２０ｄを具備し、これらがシステムバスに接続されている。そして、ＳｏＣ２には、図１では省略しているが、メモリコントロール２０ｃにメインメモリとしてのメモリ４が接続できるようになっている。また、ＳｏＣ２には、外部記憶装置Ｉ／Ｆ２０ｄに低セキュリティ外部記憶装置３が接続できるようになっている。なお、ＳｏＣ２の各構成要素の詳細については後述する。
【００２７】
まず、認証デバイス１の各構成要素について説明する。レジスタ１０ａは、１６ｂｉｔや３２ｂｉｔなどのデータ単位で複数の値を保持することができるモジュールである。各データ単位にはアドレスが割り振られている。また、認証デバイス１は、レジスタ１０ａの値によって認証デバイス１内の各構成要素の動作を決定することが可能に構成されている。特に、認証デバイス１は、レジスタ１０ａの値によって、認証デバイス１上のハードウェアをリセットするハードウェアリセットやその解除を行うことが可能に構成されている。
【００２８】
外部Ｉ／Ｆ１０ｂは、認証デバイス１に接続される外部デバイス（ここではＳｏＣ２）とデータ転送やメッセージ転送などのやり取りを行うためのＩ／Ｆモジュールであり、ＳｏＣ２がバスマスタ、認証デバイス１がバススレーブとして機能するように構成されている。よって、外部Ｉ／Ｆ１０ｂは、主にＳｏＣ２がレジスタ１０ａに対してリード／ライト（Ｒ／Ｗ）アクセスするためのＩ／Ｆとなる。これにより、ＳｏＣ２のＣＰＵ２０ａは、アドレスが割り振られた各データ単位に対し、外部Ｉ／Ｆ２０ｂ，１０ｂを介して値の読み出しや書き換えを行うことが可能になっている。
【００２９】
乱数生成部１０ｃは、認証デバイス１においてハードウェアリセットが解除されたときに１度だけ乱数を生成するモジュールである。乱数生成部１０ｃは、生成した乱数をレジスタ１０ａに格納する。また、乱数生成部１０ｃは、ハードウェアリセット解除後、直ぐに乱数値を生成するように構成されており、これにより、外部Ｉ／Ｆ１０ｂからのアクセスより前に乱数値を確定可能になっている。
【００３０】
タイマ１０ｅは、認証デバイス１においてハードウェアリセットが解除されると同時に、時間計測を開始するモジュールである。タイマ１０ｅは、時間計測開始から指定時間までにＳｏＣ２のデバイス認証が正常終了しなければ、ハードウェアリセットの実行（図示しない電源管理ブロックに対するリセットの通知も含むことが好ましい）も行う。
【００３１】
ハッシュ演算部１０ｄは、自らが生成した乱数値と既知のＳｏＣプログラムハッシュ値（ＳｏＣ２の起動プログラムのデータを元に計算されたハッシュ値）とから、さらにハッシュ演算を行い、期待値を生成するモジュールである。ハッシュ演算部１０ｄは、生成した期待値を外部から読み出し不可能な領域に保存する。また、ハッシュ演算部１０ｄは、ＳｏＣ２から、ＳｏＣ２側でハッシュ演算されたハッシュデータについてのレジスタ１０ａへの書き込みが実行されたときに、書き込まれた値と上記期待値とを比較して、正常／異常の判断を行う。認証デバイス１では、このように乱数を利用することでハッシュ値そのものがＳｏＣ２に電送されることを防ぐことが好ましい。
【００３２】
次に、ＳｏＣ２の各構成要素について説明する。ＣＰＵ２０ａは、ＳｏＣ２の全体を制御するモジュールである。起動時、低セキュリティ外部記憶装置３に保存しているプログラムデータを読み出し、内部のＲＡＭ上に展開することで動作を開始する。なお、このプロセッサとしては、ＣＰＵの他に、例えばＤＳＰ（Digital Signal Processor）、ＧＰＵ（Graphics Processor Unit）など、様々なプロセッサが適用できる。このプログラムデータには、少なくとも起動プログラム（以下、起動プログラムＳと言う）のデータが含まれる。また、ＣＰＵ２０ａは、この起動プログラムＳに従って、認証デバイス１のレジスタ１０ａにアクセス可能になっている。
【００３３】
外部Ｉ／Ｆ２０ｂは、ＳｏＣ２に接続される外部デバイス（ここでは認証デバイス１）とデータ転送やメッセージ転送などのやり取りを行うためのＩ／Ｆモジュールである。また、外部Ｉ／Ｆ２０ｂは、シリアルＩ／ＦやパラレルＩ／ＦなどのローカルバスのＩ／Ｆであり、認証デバイス１及びＳｏＣ２の両方が起動していれば、接続のためのネゴシエーション不要で利用することができる。
【００３４】
メモリコントロール（メモリコントローラ）２０ｃは、メインメモリであるメモリ４を接続するためのメモリＩ／Ｆの一例であって、ＳＤＲＡＭ（Synchronous Dynamic RAM）やＤＤＲ  ＳＤＲＡＭ（Double-Data-Rate SDRAM）など、基板上で接続されたメモリ４とのデータ送受信を行うモジュールである。メモリコントロール２０ｃは、ＣＰＵ２０ａなどからのデータ送受信要求をバス経由で受け付け、指示に従ってメインメモリであるメモリ４に対してデータ送受信要求を行う。また、その結果を、指示元であるＣＰＵ２０ａなどに対して戻す。
【００３５】
外部記憶装置Ｉ／Ｆ２０ｄは、低セキュリティ外部記憶装置３内に保存されたデータの読み出し、書き込みを行うモジュールである。外部記憶装置Ｉ／Ｆ２０ｄは、ＣＰＵ２０ａの指示に従って外部記憶装置３内のデータにアクセスし、主にメモリコントロール２０ｃとの間でデータ送受信を行う。
【００３６】
以上のように、本発明に係る半導体デバイスは、ＳｏＣ２及び認証デバイス１を搭載しており、認証デバイス１が内部プロセッサを具備しない。認証デバイス１は、内部プロセッサを具備しないためプログラムによる起動ではなく、レジスタ１０ａ、乱数生成部１０ｃ、ハッシュ演算部１０ｄ、及びタイマ１０ｅで例示したようなハードウェア構成の機構を具備し、その機構で起動する。そして、その機構（以下、起動機構と言う）は、プログラムを必要としないため、起動プログラムＳを有するＳｏＣ２に比べ信頼性が確保されていると言える。より具体的には、認証デバイス１の起動機構は、ＳｏＣ２の起動プログラムＳが格納された低セキュリティ外部記憶装置３に比べて、高セキュリティと言える。
【００３７】
なお、起動プログラムＳの格納デバイスとして外部記憶装置を利用する場合に限らず、内部に格納デバイスを設けた場合においても、起動プログラムＳの改竄リスクは残るため、上記起動機構より低セキュリティとなる。また、認証デバイス１をより高セキュリティなデバイスとするために、ハードウェア構成自体についても、ＳｏＣ２に比べ認証デバイス１の方に耐タンパー性をもたせるように構成することが好ましい。
【００３８】
そして、上記起動機構は、ハードウェアの機構により信頼性が確保された状態で起動開始した後に、ＳｏＣ２の認証、つまり起動プログラムＳの認証を行う。このように、認証デバイス１は、信頼性を確保可能な方法で起動され、起動後（なお、起動開始後であれば起動途中であってもよい）にＳｏＣ２とのやり取りによって、ＳｏＣ２の起動プログラムＳを認証する。但し、このやり取りは、ＳｏＣ２がマスタ、認証デバイス１がスレーブとなって実行される。
【００３９】
このような認証により、ＳｏＣ２では、自身でその起動プログラムＳの信頼性を確保する必要性がなくなり、外部記憶装置Ｉ／Ｆ２０ｄに接続する外部記憶装置が低セキュリティのもの（つまり、低セキュリティ外部記憶装置３）で済むため、システムのセキュリティ性を維持しつつ、低コスト化が実現可能となる。
【００４０】
特に、認証デバイス１の起動機構は各構成要素１０ａ〜１０ｅで例示したように高セキュリティで且つオンボードタイプの機構となっているが、ＳｏＣ２は外部記憶装置Ｉ／Ｆとして認証デバイス１の起動機構より低セキュリティで且つ非オンボードタイプの外部記憶装置（ＨＤＤやＳＤカードなどの汎用的な外部記憶装置）にアクセスするためのＩ／Ｆを有することが好ましい。つまり、ＳｏＣ２に接続する起動プログラムＳの格納用の外部記憶装置３として、低セキュリティのＨＤＤやＳＤカードなどの汎用的な外部記憶装置を採用でき、これによりコストを減らすことができる。但し、外部記憶装置３は、非オンボードタイプで無くても認証デバイス１の起動機構より低セキュリティであれば、コストを減らす効果を奏する。
【００４１】
次に、図１の半導体デバイスにおける起動処理の一例を、図４及び図５を参照しながら説明する。図４は、図２の認証デバイスの起動処理例を説明するためのフロー図で、図５は、図３のＳｏＣの起動処理例を説明するためのフロー図である。
【００４２】
まず、図４を参照しながら認証デバイス１の起動処理例を説明する。半導体デバイス（又はそれを搭載した電子機器）自体の電源がオンされたときに、認証デバイス１の起動処理も開始される。認証デバイス１は、起動処理として、まずクロックの安定化を待ち、安定化した後に、レジスタ１０ａの値をハードウェアリセットが解除された状態にする（ステップＳ１）。
【００４３】
認証デバイス１からＳｏＣ２に対してアクセスする機能がないため、認証デバイス１は、起動開始後、ＳｏＣ２からのアクセスを待つ状態となる。言い換えると、認証デバイス１は、自身が起点となり認証動作を開始できない。そこで、ステップＳ１の後、直ぐにタイマ１０ｅが起動してタイマ動作を開始し、認証完了までの時間をカウントし、それが制限時間（上記指定時間）内であるかを判定する（ステップＳ２）。
【００４４】
乱数生成部１０ｃが、同様にハードウェアリセット解除後、直ぐに乱数値を生成する（ステップＳ３）。ここで発生させた乱数値は、ＳｏＣ２からの読み取りが可能なようにレジスタ１０ａに格納される。ステップＳ３の後、ハッシュ演算部１０ｄが、既知のハッシュ値である起動プログラムＳのデータを元に計算されたハッシュ値と、乱数生成部１０ｃが生成した乱数値とから、ハッシュ演算を行うことで、期待値のデータを生成する（ステップＳ４）。この期待値のデータは外部から読み出し不可能な領域に格納しておく。
【００４５】
ステップＳ４に続いて、若しくは少なくともステップＳ３での乱数値の格納処理より後に、外部Ｉ／Ｆ１０ｂがＳｏＣ２の外部Ｉ／Ｆ２０ｂとの接続を可能な状態にしておく。そして、認証デバイス１は、ＳｏＣ２から外部Ｉ／Ｆ１０ｂを介しての乱数値読み出しのレジスタアクセスがあれば、そのアクセスに応答することで乱数値を出力する（ステップＳ５）。乱数値のデータ長は２５６ｂｉｔや５１２ｂｉｔなど、製品のセキュリティ要件やハッシュアルゴリズムに応じて決定すればよい。
【００４６】
続いて、認証デバイス１は、ＳｏＣ２からハッシュデータのレジスタ書き込みアクセスがあったときに、レジスタ１０ａへの書き込みを行い、ハッシュ演算部１０ｄが、その書き込みがなされたときに（ステップＳ６でＹＥＳの場合）、作成しておいた期待値とそのハッシュデータとが一致するかを確認する（ステップＳ７）。ステップＳ７の確認の結果が一致していた場合、ハッシュ演算部１０ｄが、正常起動として、上記レジスタ書き込みアクセスに対する認証完了の応答をＳｏＣ２に返し（ステップＳ８）、タイマ１０ｅを停止する。
【００４７】
一方で、認証デバイス１は、ハッシュデータのレジスタ書き込みアクセスがない場合（ステップＳ６でＮＯの場合）には、タイマ１０ｅが指定時間（例えば６０秒など）の経過／未経過を判定し（ステップＳ９）、未経過であればステップＳ６に戻ってレジスタ書き込みアクセスを待つ。指定時間が経過した場合（ステップＳ９でＹＥＳの場合）には、起動プログラムＳ（プログラムで用いる各種パラメータも含む）が改竄されて信頼性がないものになっていたこと（若しくは接続不良であること）を意味するため、タイマ１０ｅがハードウェアリセットの実行を行う（ステップＳ１０）。この場合、認証デバイス１が異常起動として処理を終了したことを意味する。ステップＳ１０のハードウェアリセットには、外部Ｉ／Ｆ１０ｂを遮断する処理も含まれる。
【００４８】
また、ステップＳ７でＮＯの場合、つまり確認の結果が一致していなかった場合には、起動プログラムＳ（プログラムで用いる各種パラメータも含む）が改竄されていたことを意味するため、ステップＳ１０に進み、タイマ１０ｅがハードウェアリセットの実行を行う。なお、ステップＳ７でＮＯの場合には、ステップＳ１０の前に、上記レジスタ書き込みアクセスに対する認証失敗の応答をＳｏＣ２に返すようにしてもよい。
【００４９】
なお、ステップＳ５でレジスタアクセスがあることを前提に説明したが、このレジスタアクセスがなければ、後述のステップＳ１３の処理を行わないようなプログラムに起動プログラムＳが改竄されていること（若しくは接続不良であること）を意味するため、そのレジスタアクセスを同じく上記指定時間待って、レジスタアクセスがかければステップＳ１０の処理を実行するようにすることが好ましい。
【００５０】
以上のように、認証デバイス１では、その処理として、電源投入後、自動的に乱数生成及び期待値生成の動作が実行されると共に、自動的にタイマ１０ｅが起動され、指定時間内に認証が完了しなければそれを外部に通知する動作（ここでは外部Ｉ／Ｆ１０ｂの遮断動作）が実行されるだけであり、処理の途中で主導的にＳｏＣ２に対してアクセスする必要もない。よって、認証デバイス１としては、例えば認証デバイス１のハードウェアリセット解除後に一度だけ実行されるハードウェア処理を行う構成のような、全ての処理がプログラムを介さずに動作可能な自動処理を行う構成（全ての処理において、ＣＰＵの介在が不要な単純処理を行うような構成）を採用するだけで済むため、認証デバイス１に内部プロセッサを具備しないような構成を採用できる。
【００５１】
次に、図５を参照しながらＳｏＣ２の起動処理例を説明する。この起動プログラムＳは、ＳｏＣ２のプログラム格納デバイスの例である低セキュリティ外部記憶装置３に記憶されているものとして説明する。
【００５２】
ＳｏＣ２のＣＰＵ２０ａは、低セキュリティデバイスである外部記憶装置３から起動プログラムＳのデータを読み出し、ＲＡＭ上に展開した後、この起動プログラムＳにより起動する（ステップＳ１１）。ＣＰＵ２０ａは、起動後、若しくは起動時に読み出した起動プログラムＳのデータのハッシュ値を計算する（ステップＳ１２）。ステップＳ１２並びに後述のステップＳ１３〜Ｓ１６の処理は、起動プログラムＳの認証（換言すると起動プログラムＳが格納された低セキュリティ外部記憶装置３がその格納部分で書き換えられていないかの認証）を行うためになされる。
【００５３】
ステップＳ１２に続いて、若しくは少なくともステップＳ１１の処理後に、外部Ｉ／Ｆ２０ｂが認証デバイス１の外部Ｉ／Ｆ１０ｂとの接続を可能な状態にしておく。そして、ステップＳ１２でハッシュ値が求まると、ＣＰＵ２０ａは、認証デバイス１に対し、レジスタリードアクセスを行うことで乱数値を取得する（ステップＳ１３）。
【００５４】
次に、ＣＰＵ２０ａは、既にステップＳ１２で算出している起動プログラムＳのデータのハッシュ値と、認証デバイス１から受信した乱数値からさらにハッシュ演算を行い、認証用のハッシュデータを生成する（ステップＳ１４）。そして、ＣＰＵ２０ａは外部Ｉ／Ｆ２０ｂを介し、生成したハッシュデータを認証デバイス１へレジスタライトアクセスすることによって、指定アドレスに書き込みを行う（ステップＳ１５）。
【００５５】
その後、ＣＰＵ２０ａは、外部Ｉ／Ｆ２０ｂを介して認証デバイス１からレジスタライトアクセスに対する認証完了応答を待ち（ステップＳ１６）、認証完了応答を受信した場合（ＹＥＳの場合）、ＳｏＣ２の起動処理を完了し、これによりＳｏＣ２が通常動作を行う状態になる。一方、認証完了応答が受信されない場合（ステップＳ１６でＮＯの場合）、認証完了応答待ちのまま待機状態を継続する。なお、認証デバイス１側の処理として認証失敗の応答も送信する場合には、その認証失敗応答を受けた場合に認証失敗の状態で処理を終了させればよい。
【００５６】
以上、図４及び図５の処理例では、認証デバイス１が認証完了応答を返信するようにしておき、ＳｏＣ２側がその返信を受けた場合に起動を完了するように説明した。この処理例では、ＳｏＣ２が正常終了したか／異常終了したかを判定できるため、正常終了／異常終了に応じてＳｏＣ２は異なる動作を実行できる。なお、ステップＳ１６の判定に制限時間を設けておくことでその判定をその制限時間内に済ませることもできる。
【００５７】
但し、ＳｏＣ２の起動完了に係る処理は、外部Ｉ／Ｆ２０ｂにおけるＩ／Ｆプロトコルに応じて決まるため、図４及び図５で例示したような処理に限ったものではない。例えば、外部Ｉ／Ｆ２０ｂにおいて、Ｉ／Ｆプロトコルとして「応答」が定義されていないレガシープロトコルを採用することもできる。実際、レガシープロトコルでは「応答」が定義されていないことが多い。このような構成を採用した場合、「応答」が定義されていないために、ＳｏＣ２は起動が正常終了であったのか異常終了であったのかの判定ができないが、そもそもＳｏＣ２は異常終了を必ずしも知る必要がない。この場合、ＳｏＣ２は常に正常終了するが、システムが異常終了の場合は、ＳｏＣ２の外部からシャットダウン要求がくるように構成しておけばよい。このシャットダウン要求は、例えば認証デバイス１がステップＳ１０で実行するハードウェアリセットの一処理として実行すればよい。ＳｏＣ２は、このシャットダウン要求に従い、正常終了後直ぐに通常のシャットダウンを行えばよい。
【００５８】
以上のように、ＳｏＣ２は低セキュリティの外部記憶装置３を利用して起動することが可能であり、また、搭載されたＳｏＣにおけるプログラム格納デバイス（記憶デバイス）の入れ替えがなされても、正常起動しないため、高いセキュリティレベルでその入れ替えを排除することができる。つまり、ＳｏＣ２では、セキュリティ性を維持しつつ、外部記憶装置にかかるコストを低減することが可能である。また、認証デバイス１も、ＣＰＵ機能をもたないためＣＰＵ機能に係るコストと起動プログラムの格納デバイスのコストも低減することができる。
【００５９】
図６は、本発明に係る、ＳｏＣと認証デバイスとが接続されてなる半導体デバイスの他の構成例を示す図である。図６で例示する構成例は、図１の構成例において、認証デバイス１に電源管理デバイス５が接続されてなる。認証デバイス１と電源管理デバイス５は低速通信ライン、例えばＵＡＲＴ（Universal Asynchronous Receiver Transmitter）、ＵＳＡＲＴ(Universal Synchronous Asynchronous Receiver Transmitter)やＩ２Ｃ（Inter-Integrated Circuit）やＳＭＢｕｓ（System Management Bus）などのシリアル通信で接続されることが多い。
【００６０】
図４及び図５で説明した流れでは、異常終了の場合に、認証デバイス１がＳｏＣ２に対して何も応答しない（若しくは認証失敗応答を返す）ことでＳｏＣ２を正常起動させないようにしたが、さらに確実にＳｏＣ２及び認証デバイス１を備えたシステム全体を停止するために、次のような制御を付加することが好ましい。
【００６１】
つまり、認証デバイス１は、ＳｏＣ２の起動プログラムＳの認証が不可であった場合、電源管理デバイス５に電源オフの命令を行う。より具体的には、認証デバイス１はハードウェアリセット（図４のステップＳ１０）の主たる処理として、認証デバイス１とＳｏＣ２を含むシステムへの電源供給を管理する電源管理デバイス５に対して、電源停止を促す停止通知信号（電源停止命令）を発行する。電源管理デバイス５は、上記通信ラインを利用して認証デバイス１からのこの信号を受信すると、システム全体への電源供給を停止する（シャットダウン状態に移行する）。このようにして電源オフを行うことで、さらに確実な高セキュリティ性を得ることが可能となる。
【００６２】
ここで、半導体デバイスに設けられた電源管理デバイス５が、一度に認証デバイス１とＳｏＣ２を含むシステムの電源をオン／オフするような制御を行うデバイスであることを前提に説明したが、（Ａ）ＳｏＣ２と認証デバイス１との電源を個別に制御できるデバイスであるか、（Ｂ）ＳｏＣ２用の電源管理デバイスと認証デバイス１用の電源管理デバイスなどといった具合に個別の電源管理デバイスであってもよい。
【００６３】
上記（Ａ），（Ｂ）いずれの場合でも、認証デバイス１からの電源オフ命令は、ＳｏＣ２への電源供給のみをオフする命令が少なくとも含まれていれば、少なくともこのＳｏＣ２の電源がオフできるため、さらに確実な高セキュリティ性を得ることが可能となる。また、その場合、図４のステップＳ１０におけるハードウェアリセットの前に、ＳｏＣ２の電源に関するオフ命令を発すればよく、また、ステップＳ１０におけるハードウェアリセットに認証デバイス１自身への電源供給をオフする命令を含めておくことが好ましい。
【００６４】
以上、本発明に係る半導体デバイスについて、図１〜図５の構成例及び図６の構成例では、起動プログラムＳの認証を行う方法としてハッシュ計算を用いることを前提に説明したが、これに限らず、例えば公開鍵暗号方式を利用して認証を行ってもよい。
【００６５】
また、図１や図６の構成例では、半導体デバイスに搭載されるＳｏＣの数、認証デバイスの数がいずれも１つであって、認証デバイス１が起動プログラムＳの認証を行う場合を例示したが、本発明に係る半導体デバイスでは、いずれの数も１つ以上であれば適用できる。
【００６６】
例えば、認証デバイスとＳｏＣとが一対一で接続されてなるセットを複数、半導体デバイスに搭載しておくことができる。他の例として、本発明は、１つの認証デバイスに複数のＳｏＣが接続され、これらのＳｏＣの起動プログラムがその認証デバイスによって認証されるような半導体デバイスであっても適用できる。この例の場合、認証デバイスにタイマやレジスタを多く具備しておくことで実現できるが、代わりに、認証の順番を決めておくか、若しくはＳｏＣの起動処理の速度を異ならせておくなどにより、簡潔な処理構造のまま複数のＳｏＣに対応させることもできる。
【符号の説明】
【００６７】
１…認証デバイス、２…ＳｏＣ、３…低セキュリティ外部記憶装置、４…メモリ、５…電源管理デバイス、１０ａ…レジスタ、１０ｂ…認証デバイスの外部Ｉ／Ｆ、１０ｃ…乱数生成部、１０ｄ…ハッシュ計算部、１０ｅ…タイマ、２０ａ…ＣＰＵ、２０ｂ…ＳｏＣの外部Ｉ／Ｆ、２０ｃ…メモリコントロール、２０ｄ…外部記憶装置Ｉ／Ｆ。
【図１】
0005865661.tif 000002
【図２】
0005865661.tif 000003
【図３】
0005865661.tif 000004
【図４】
0005865661.tif 000005
【図５】
0005865661.tif 000006
【図６】
0005865661.tif 000007
【図７】
0005865661.tif 000008