"2以上の半導体集積回路を搭載した半導体デバイスであって、少なくとも1つの半導体集積回路は、他の半導体集積回路の起動プログラムより信頼性が確保された起動プログラムで起動し、該起動した起動プログラムにより前記他の半導体集積回路の起動プログラムの認証を行うことを特徴とする半導体デバイス。前記少なくとも1つの半導体集積回路は、前記他の半導体集積回路の起動プログラムの認証が不可であった場合、不可であった前記他の半導体集積回路の起動プログラムに、リセットの命令を行うことを特徴とする請求項1に記載の半導体デバイス。前記少なくとも1つの半導体集積回路は、前記他の半導体集積回路の起動プログラムの認証が不可であった場合、少なくとも不可であった前記他の半導体集積回路に電源を供給するための電源管理デバイスに、電源オフの命令を行うことを特徴とする請求項2に記載の半導体デバイス。前記少なくとも1つの半導体集積回路は、オンボードタイプのメモリにアクセスするためのインターフェースを有し、前記他の半導体集積回路は、前記メモリより低セキュリティで且つ非オンボードタイプの外部記憶装置にアクセスするためのインターフェースを有することを特徴とする請求項1~3のいずれか1項に記載の半導体デバイス。そして、このように複数のCPUを搭載する半導体デバイスの場合、全てのCPUに対して安全に起動することが求められる。プログラム格納デバイスの入れ替え脅威を排除するためには、全ての記憶デバイスを交換リスクがなく安全性の高いデバイスにする必要が生じる。従って、図6で示す半導体デバイスのように、MainSoC11とSubSoC12に対してプログラム格納デバイスとしてそれぞれ接続する外部記憶装置50a,50bは、いずれも高セキュリティの装置を採用する必要が生じる。しかしながら、一般的にHDDなど先に挙げた汎用性の高い記憶デバイスに比べ、セキュリティ性の高い記憶デバイスは技術的に高度であったり、販売数量が少ないなどといった理由によりコストが高くなる傾向にある。本発明は、上述のような実状に鑑みてなされたものであり、その目的は、2以上の半導体集積回路を搭載した半導体デバイスにおいて、各半導体集積回路に接続するそれぞれのプログラム格納デバイス記憶デバイスのうちの一部の記憶デバイスのみを高セキュリティにするだけで、これらの全ての記憶デバイスについて、記憶デバイスの入れ替え脅威を高いセキュリティレベルで排除することを可能にすることにある。上記課題を解決するために、本発明の第1の技術手段は、2以上の半導体集積回路を搭載した半導体デバイスであって、少なくとも1つの半導体集積回路は、他の半導体集積回路の起動プログラムより信頼性が確保された起動プログラムで起動し、該起動した起動プログラムにより前記他の半導体集積回路の起動プログラムの認証を行うことを特徴としたものである。第2の技術手段は、第1の技術手段において、前記少なくとも1つの半導体集積回路は、前記他の半導体集積回路の起動プログラムの認証が不可であった場合、不可であった前記他の半導体集積回路の起動プログラムに、リセットの命令を行うことを特徴としたものである。第3の技術手段は、第2の技術手段において、前記少なくとも1つの半導体集積回路は、前記他の半導体集積回路の起動プログラムの認証が不可であった場合、少なくとも不可であった前記他の半導体集積回路に電源を供給するための電源管理デバイスに、電源オフの命令を行うことを特徴としたものである。第4の技術手段は、第1~第3のいずれか1の技術手段において、前記少なくとも1つの半導体集積回路は、オンボードタイプのメモリにアクセスするためのインターフェースを有し、前記他の半導体集積回路は、前記メモリより低セキュリティで且つ非オンボードタイプの外部記憶装置にアクセスするためのインターフェースを有することを特徴としたものである。本発明に係る半導体デバイスによれば、各半導体集積回路に接続するそれぞれのプログラム格納デバイス記憶デバイスのうちの一部の記憶デバイスのみを高セキュリティにするだけで、これらの全ての記憶デバイスについて、記憶デバイスの入れ替え脅威を高いセキュリティレベルで排除することを可能にする。本発明に係る半導体デバイスは、2以上の半導体集積回路が搭載されており、複合半導体集積回路装置やハイブリッド集積回路などとも呼ぶこともある。これら半導体集積回路は一般的には基板上に搭載されている。個々の半導体集積回路は、プロセッサ内部プロセッサをはじめ、メインメモリ用のメモリI/F、プロセッサを有する他の半導体集積回路用の外部I/F、及びレジスタを備えたLSI等の回路であり、以下、プロセッサを有することからSoCとして説明する。図1は、SoC及びそれに接続されたデバイスでなるシステムの構成例を示す図で、図2は、本発明に係る、複数のSoCが接続されてなる半導体デバイスの一構成例を示す図である。図2では、半導体デバイスに搭載されるSoCの数が2つである場合を例示するが、2以上であれば適用できる。図1で例示するSoC1はプロセッサ以下、CPU10bで例示を備えると共に、タイマ10a、外部I/F10c、メモリコントロール10d、及び外部記憶装置I/F10eを備え、これらがシステムバスに接続されている。そして、SoC1には、メモリコントロール10dにメインメモリとしてのメモリ2が、外部記憶装置I/F10eに外部記憶装置3がそれぞれ接続できるようになっている。CPU10bは、SoC1の全体を制御するモジュールである。起動時、外部記憶装置3に保存しているプログラムデータを読み出し、内部のRAM上に展開することで動作を開始する。なお、このプロセッサとしては、CPUの他に、例えばDSPDigitalSignalProcessor、GPUGraphicsProcessorUnitなど、様々なプロセッサが適用できる。また、タイマ10aは、CPU10bから指示された時間を計測し、計測完了後、CPU10bに対してインターラプトを発行するモジュールである。メモリコントロールメモリコントローラ10dは、メインメモリであるメモリ2を接続するためのメモリI/Fの一例であって、SDRAMSynchronousDynamicRAMやDDRSDRAMDoubleDataRateSDRAMなど、基板上で接続されたメモリ2とのデータ送受信を行うモジュールである。メモリコントロール10dは、CPU10bなどからのデータ送受信要求をバス経由で受け付け、指示に従ってメインメモリであるメモリ2に対してデータ送受信要求を行う。また、その結果を、指示元であるCPU10bなどに対して戻す。外部記憶装置I/F10eは、外部記憶装置3内に保存されたデータの読み出し、書き込みを行うモジュールである。外部記憶装置I/F10eは、CPU10bの指示に従って外部記憶装置3内のデータにアクセスし、主にメモリコントロール10dとの間でデータ送受信を行う。外部I/F10cは、SoC1に接続される外部デバイスとデータ転送やメッセージ転送を行うためのI/Fモジュールである。外部デバイスとは、例えば基板上で接続された他のSoCやASICApplicationSpecificIntegratedCircuitなどである。また、このインターフェース規格としては、PCIPeripheralComponentInterconnectやPCIExpressなどがある。このように、SoC1では、外部I/F10cにより他のSoCを接続することが可能となっており、本発明に係る半導体デバイスは、上記外部デバイスとして他のSoCが接続したようなシステム構成をもつ。ここで、SoC1に外部I/F10cを介して接続したSoCは、SoC1と同様に、CPU等のプロセッサ、外部I/F、メモリコントロール、外部記憶装置I/Fなどを備える。また、SoC1内のプロセッサと他のSoC内のプロセッサの両方が、システムを制御するためのレジスタ群やメインメモリにアクセス可能となっている。つまり、半導体デバイスでは、双方のプロセッサがいずれのSoCを制御することも可能になっている。そして、本発明に係る半導体デバイスは、このようなSoC1及び他のSoCといった2以上のSoCを搭載し、その主たる特徴として次の特徴を有する。すなわち、その少なくとも1つのSoCの起動プログラムは、高セキュリティデバイスに保存されるなどによって、他のSoCの起動プログラムより信頼性が確保されているものとする。つまり、その少なくとも1つのSoCの起動プログラムが格納された外部記憶装置3は、他のSoCの起動プログラムが格納された外部記憶装置3に比べて、高セキュリティとする。そして、その少なくとも1つのSoCは、その信頼性が確保された起動プログラムで起動すると共に、その起動した起動プログラムにより上記他のSoCの起動プログラムの認証を行う。換言すれば、上記少なくとも1つのSoCは、上記他のSoCが単独で起動した場合よりも起動プログラムの信頼性を確保可能な方法で起動され、起動後なお、起動開始後であれば起動途中であってもよいにSoC間の通信をすることによって、上記他のSoCの起動プログラムを認証する。これにより、起動プログラムの信頼性を確保するSoCは1つのみで済むため、システムのセキュリティ性を維持しつつ、低コスト化が実現可能となる。以下、図2を併せて参照しながら、上記少なくとも1つのSoCがMainSoC11で例示し、上記他のSoCがSubSoC12で例示して、本発明に係る半導体デバイスについて説明するが、これに限ったものではない。この例では、図1のSoC1、それに外部I/F10cを介して接続したSoCが、それぞれ図2のMainSoC11、SubSoC12であることを前提にしている。しかし、上述したようにMainSoC11とSubSoC12とは同様であり、特に基本的なハードウェア構成は同様であり、主に起動プログラムが相違している。但し、上記少なくとも1つのSoCの例であるMainSoCは高セキュリティであることを前提とするため、ハードウェア構成にて、SubSoC12に比べMainSoC11の方に耐タンパー性をもたせるように構成してもよい。以下、区別のために、MainSoC11の起動プログラムを起動プログラムMとし、SubSoC12の起動プログラムを起動プログラムSとして説明する。MainSoC11とSubSoC12は、図1で説明するとお互いの外部I/F10cによって接続する。従来技術では、起動するプログラムの信頼性を確保するために、図6で説明したように、各々のSoC11,12が高セキュリティ性の外部記憶装置を利用してCPUを起動させる必要があった。これに対して本発明に係る半導体デバイスにおいては、SubSoC12の起動プログラムSは低セキュリティで済むため、SubSoC12に接続する外部記憶装置14は低セキュリティの装置で済む。従って、起動に関して、MainSoC11とSubSoC12における違いは、基本的に図1で説明すると外部記憶装置I/F10eのみとなる。より具体的には、MainSoC11は外部記憶装置I/Fとして、セキュリティ性が高い外部記憶装置13にアクセスするI/Fを有し、SubSoC12は外部記憶装置I/Fとして外部記憶装置13より低セキュリティの外部記憶装置14にアクセスするためのI/Fを有する。つまり、MainSoC11の起動プログラムMは、MainSoC11のプログラム格納デバイスの例である高セキュリティ外部記憶装置13に記憶され、SubSoC12の起動プログラムSは、SubSoC12のプログラム格納デバイスの例である低セキュリティ外部記憶装置14に記憶されていることになる。特に、MainSoC11は外部記憶装置I/Fとして、セキュリティ性が高く且つオンボードタイプのメモリにアクセスするI/Fを有することが好ましい。そして、SubSoC12は外部記憶装置I/Fとして上記メモリより低セキュリティで且つ非オンボードタイプの外部記憶装置HDDやSDカードなどの汎用的な外部記憶装置にアクセスするためのI/Fを有することが好ましい。図1で説明すると、図1における外部記憶装置3としては、MainSoC11に接続する外部記憶装置13としては高セキュリティでオンボードタイプのメモリなどが採用でき、SubSoC12に接続する外部記憶装置14としては低セキュリティのHDDやSDカードなどの汎用的な外部記憶装置が採用できる。但し、外部記憶装置14は、非オンボードタイプで無くても外部記憶装置13より低セキュリティであれば、コストを減らす効果が得られる。また、MainSoC11の起動プログラムMは、乱数やハッシュなどで起動プログラムSの認証処理が可能な構成、つまりMainSoC11内部のCPUによって処理可能な構成とすることが好ましい。これにより、TPM等の専用のセキュリティデバイスを利用せずに構成可能になり、専用デバイスが無いため低コストで済み、また乱数利用によりハッシュ値そのものがSubSoC12が搭載された基板上に電送されずに済む。次に、図2で例示した半導体デバイスにおける起動処理の一例を、図3及び図4を参照しながら説明する。図3は、図2の半導体デバイスにおけるMainSoCの起動処理例を説明するためのフロー図で、図4は、図2の半導体デバイスにおけるSubSoCの起動処理例を説明するためのフロー図である。まず、図3を参照しながらMainSoC11の起動処理例を説明する。MainSoC11のCPUは、高セキュリティ外部記憶装置13から起動プログラムMのデータを読み出し、RAM上に展開した後、この起動プログラムMにより起動するステップS1。ステップS1では、高セキュリティデバイスからの起動であるため、起動プログラムMは改竄などされていない。次に、上記CPUは乱数データを生成しステップS2、SubSoC12と外部I/Fで接続を行うステップS3。接続後、MainSoC11はSubSoC12とデータ転送や通信などを行うことが可能となる。MainSoC11のCPUは、SubSoC12に対して外部I/Fを介して乱数データ送信を行うステップS4。乱数のデータ長は256bitや512bitなど、製品のセキュリティ要件やハッシュアルゴリズムに応じて決定すればよい。そして、上記CPUは、乱数データ送信と同時若しくは送信前にタイマを起動するステップS5。このタイマは、乱数データ送信からSubSoC12からのハッシュ値が返信されるまでの時間とタイムアウト時間を計測するためのものである。次に、予めMainSoC11側高セキュリティ外部記憶装置13でもよいに保持しているSubSoC12の起動プログラムデータハッシュ値起動プログラムSのデータを元に計算されたハッシュ値と、自身がステップS2で生成した乱数データを使って、再度ハッシュ演算を行うステップS6。このハッシュ計算の結果を期待値として利用することになる。ステップS6の処理後、又は処理中に、上記CPUはSubSoC12からの返信データを受信したか否かを判定しステップS7、受信していなければタイマで設定されている乱数データ送信時からの指定時間例えば60秒などが経過したか否かを判定してステップS10、その指定期間だけ待つ。上記CPUは、SubSoC12から返信データを受信した場合ステップS7でYESの場合、その返信データをステップS6で計算した期待値のデータと比較し、一致したか否かを判定するステップS8。一致した場合ステップS8でYESの場合には、SubSoC12に対してその結果を通知しステップS9、MainSoC11の正常起動を完了する。一方で、不一致の場合ステップS8でNOの場合には、結果を通知せずに、まずSubSoC12に対してソフトウェアリセット通知を発行するステップS11。これにより、SubSoC12はそのCPUがリセット状態となるため全ての機能が停止することになる。次に、上記CPUは、SubSoC12との接続に用いている外部I/Fでの接続を遮断するステップS12。PCIExpressであればリンク接続を停止、リンクのないI/Fであれば、SubSoC12からの要求には一切応じないように動作する。また、SubSoC12から指定時間が経過しても返信データが送信されない場合、つまりMainSoC11で指定時間が経過しても返信データが受信できない場合ステップS10でNOの場合には、SubSoC12は信頼できる起動プログラムからの起動ではない可能性があるため、指定時間経過の時点で、期待値が不一致であった場合と同様にステップS11へ進みソフトウェアリセットを通知する。次に、図4を参照しながらSubSoC12の起動処理例を説明する。この起動プログラムは、SubSoC12のプログラム格納デバイスの例である低セキュリティ外部記憶装置14に記憶されているものとする。SubSoC12のCPUは、低セキュリティデバイスである外部記憶装置14から起動プログラムSのデータを読み出し、RAM上に展開した後、この起動プログラムSにより起動するステップS21。上記CPUは、起動後、若しくは起動時に読み出した起動プログラムSのデータのハッシュ値を計算するステップS22。次に、上記CPUは、MainSoC11と外部I/Fで接続を行うステップS23。この処理は、図3のステップS3からの接続要求をトリガとして実行すればよい。接続後、SubSoC12はMainSoC11とデータ転送や通信などを行うことが可能となる。そして、上記CPUは、起動プログラムSの認証換言すると起動プログラムSが格納された低セキュリティ外部記憶装置14がその格納部分で書き換えられていないかの認証を行うために、MainSoC11から乱数データを受信するステップS24。次に、上記CPUは、既にステップS22で算出している起動プログラムSのデータのハッシュ値と、MainSoC11から受信した乱数データからさらにハッシュ演算を行い、認証用のハッシュデータを生成するステップS25。そして、上記CPUは、生成したハッシュデータをMainSoC11へ外部I/Fを介して送信するステップS26。その後、MainSoC11から認証完了通知を受信したときステップS27でYESの場合、SubSoC12の起動は完了する。一方、認証完了通知が受信されない場合ステップS27でNOの場合、認証完了通知待ちのまま待機状態を継続する。また、ステップS11で説明したように、MainSoC11は、SubSoC12の起動プログラムSの認証が不可であった場合、不可であったSubSoC12の起動プログラムSに、リセットの命令を行う。これにより、SubSoC12のCPUを停止状態にすることができる。このように、もし、低セキュリティ外部記憶装置14内の起動プログラムが不正に書き換えられて、その不正プログラムなどによって動作しようとしても、MainSoC11がソフトウェアリセットによってSubSoC12を強制的に停止することで、システム全体のセキュリティ性を高めることができる。以上のように、MainSoC11は従来同様に高セキュリティ性の外部記憶装置13を利用してCPUを起動するが、SubSoC12は低セキュリティの外部記憶装置14を利用して起動することが可能であり、セキュリティ性を維持しつつ、外部記憶装置にかかるコストを低減することが可能である。SubSoC12は起動後にMainSoC11から起動プログラムSの認証を受けることによって起動プログラムSの信頼性を確認する。また、SubSoC12の起動プログラムSが認証不可の場合にはソフトウェアリセットによりSubSoC12を停止させることで、さらにセキュリティ向上が図れる。すなわち、本発明に係る半導体デバイスによれば、各SoCに接続するそれぞれのプログラム格納デバイス記憶デバイスのうちの一部少なくとも1つの記憶デバイスのみを高セキュリティにするだけで、これらの全ての記憶デバイスについて、記憶デバイスの入れ替え脅威を高いセキュリティレベルで排除することが可能になる。なお、図3及び図4では、起動プログラムSの認証を行う方法としてハッシュ計算を用いた例を挙げたが、これに限らず、例えば公開鍵暗号方式を利用して認証を行ってもよい。図5は、本発明に係る、複数のSoCが接続されてなる半導体デバイスの他の構成例を示す図である。図5で例示する構成例は、図2の構成例において、MainSoC11に電源管理デバイス15が接続されてなる。MainSoC11と電源管理デバイス15は低速通信ライン、例えばUARTUniversalAsynchronousReceiverTransmitter、USARTやI2CInterIntegratedCircuitやSMBusSystemManagementBusなどのシリアル通信で接続されることが多い。図3及び図4で説明した流れでは、異常終了の場合にMainSoC11がSubSoC12に対してソフトウェアリセットを実施することでSubSoC12を停止させている。しかし、さらに確実にSubSoC12及びMainSoC11を備えたシステム全体を停止するために、次のような制御を付加することが好ましい。つまり、MainSoC11は、SubSoC12の起動プログラムSの認証が不可であった場合、電源管理デバイス15に電源オフの命令を行う。より具体的には、MainSoC11はソフトウェアリセット発行後、図3のステップS12の前後で、電源管理デバイス15に対して電源停止を促す停止通知信号を発行する。電源管理デバイス15は、上記通信ラインを利用してMainSoC11からの電源停止命令を受信すると、システム全体への電源供給を停止するシャットダウン状態に移行する。ここで、半導体デバイスに設けられた電源管理デバイス15が、一度にMainSoC11とSubSoC12を含むシステムの電源をオン/オフするような制御を行うデバイスであることを前提に説明したが、SubSoC12とMainSoC11との電源を個別に制御できるデバイスであるか、SubSoC12用の電源管理デバイスとMainSoC11用の電源管理デバイスなどといった具合に個別の電源管理デバイスであってもよい。その場合、MainSoC11からの電源オフ命令は、少なくとも不可であったSubSoC12に電源をオフする命令であってもよく、この命令により少なくともこのSubSoC12の電源がオフできる。図5を参照して説明した構成例によれば、ソフトウェアリセットに加え電源を停止させるため、さらに確実な高セキュリティ性を得ることが可能となる。"