(57)【要約】【課題】  セキュリティが確保された量産性にすぐれた半導体装置１０を提供する。【解決手段】  実施形態の半導体装置１０は、起動プログラムを記憶するＮＡＮＤメモリ１１と、起動プログラムを起動するファームウェアが記憶されるＲＯＭ２３と、前記起動プログラムのセキュリティ情報を記憶するＯＴＰメモリ２４と、前記ＯＴＰメモリ２４に記憶された前記セキュリティ情報と、前記ＮＡＮＤメモリ１１に記憶された起動プログラムとを用いて、前記起動プログラムの改ざん検知を行い、改ざんを検知しなかった場合に、前記起動プログラムを実行するコントローラであるＣＰＵ２１と、を具備する。【選択図】図１
2015036847.tif 000002
【特許請求の範囲】
【請求項１】
起動プログラムを記憶する、書き込み可能な不揮発性メモリと、
前記起動プログラムを起動するファームウェアが記憶されるＲＯＭと、
前記起動プログラムのハッシュ値であるセキュリティ情報を記憶するＯＴＰ（One Time Programmable）メモリと、
前記ＯＴＰメモリに記憶された前記ハッシュ値と、前記不揮発性メモリに記憶された起動プログラムを用いて算出されたハッシュ値との比較により、前記起動プログラムの改ざん検知を行い、改ざんを検知しなかった場合に、前記起動プログラムを実行するコントローラと、を具備し、
前記ＲＯＭと前記ＯＴＰメモリと前記コントローラとが、１チップ化されていることを特徴とする半導体装置。
【請求項２】
起動プログラムを記憶する、書き込み可能な不揮発性メモリと、
前記起動プログラムを起動するファームウェアが記憶されるＲＯＭと、
前記起動プログラムのセキュリティ情報を記憶するＯＴＰ（One Time Programmable）メモリと、
前記ＯＴＰメモリに記憶された前記セキュリティ情報と、前記不揮発性メモリに記憶された起動プログラムとを用いて、前記起動プログラムの改ざん検知を行い、改ざんを検知しなかった場合に、前記起動プログラムを実行するコントローラと、を具備することを特徴とする半導体装置。
【請求項３】
前記ＲＯＭと前記ＯＴＰメモリと前記コントローラとが、１チップ化されていることを特徴とする請求項２に記載の半導体装置。
【請求項４】
前記セキュリティ情報が前記起動プログラムのハッシュ値を含み、前記コントローラが前記改ざん検知にハッシュ演算を用いることを特徴とする請求項３に記載の半導体装置。
【請求項５】
前記起動プログラムが検証用情報を含み、前記ＯＴＰメモリが前記検証用情報の前記セキュリティ情報を記憶し、前記コントローラが、前記改ざん検知に前記セキュリティ情報と前記検証用情報とを用いることを特徴とする請求項２から請求項４のいずれか１項に記載の半導体装置。
【請求項６】
前記検証用情報がＭＡＣであり、前記ＯＴＰメモリが前記セキュリティ情報として秘密鍵情報を記憶し、前記コントローラが、前記改ざん検知にＭＡＣを用いることを特徴とする請求項５に記載の半導体装置。
【請求項７】
前記検証用情報が署名値であり、前記ＯＴＰメモリが前記セキュリティ情報として公開鍵を記憶し、前記コントローラが、前記改ざん検知にＭＡＣを用いることを特徴とする請求項５に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、起動時に起動プログラムの改ざん検知を行う半導体装置に関する。
【背景技術】
【０００２】
半導体装置は、各種の電子デバイスの起動情報を記憶するために使用されている。例えば、スマートテレビ、携帯電話等の無線通信機器、セットトップボックス、又は、これらの組み合わせよる電子デバイスシステムは、例えば、コントローラとコントローラが起動時にもちいるファームウェア、ブートローダ等の起動プログラムを記憶する書き込み可能な不揮発性メモリを含む半導体装置を有する。
【０００３】
特に、電子デバイスの起動には、ＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）と不揮発性メモリ等とが配線板に実装された半導体装置が用いられている。ＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）には、ＣＰＵ及びＲＯＭ等の構成要素が１チップ化されている。不揮発性メモリとしては、例えばＮＡＮＤメモリ（ＮＡＮＤ型フラッシュメモリ）等の書き換え可能で大容量のメモリが用いられる。
【０００４】
ここで、電子デバイスの開発においては、ＳｏＣのＲＯＭに記憶する第１起動プログラムであるファームウェアが開発の初期に決定される。これに対し、ＮＡＮＤメモリ等の書き換え可能メモリに記憶される第２起動プログラムであるブートローダは、電子デバイスの機能の追加、若しくは変更、又は、コスト等の要因による仕様変更に合わせて、出荷直前まで変更が行われることがある。このため、主起動プログラム（ブートローダー）の起動等に必要な最低限の機能を有するファームウェアを最初に確定し、ファームウェアをＲＯＭに記憶しておき、追加機能については、ブートローダやオペレーティングシステムをＮＡＮＤメモリ等の不揮発性メモリに記憶することが多い。
【０００５】
ここで、書き換え可能メモリに記憶された起動プログラムは、出荷後に第三者により改ざんされるおそれがある。悪意のあるコードが起動プログラムに組み込まれると、あらゆるセキュリティ手順が迂回される懸念がある。
【０００６】
例えば、スマートテレビの起動を行う半導体装置の起動プログラムが改ざんされると、有料放送が無料で視聴されたりするおそれがある。
【０００７】
セキュリティ確保の観点から、起動プログラムは改ざんのおそれのないＲＯＭに記憶することが好ましい。しかし、ＲＯＭへの記憶は、いわゆるハードコーディングであるため、更新に要する労力は大きい。
【０００８】
このため、例えば、ＲＯＭにファームウェアと起動プログラムを記憶し、書き換え可能な不揮発メモリにセキュリティ確保のためのセキュリティ情報と追加プログラムとを記憶することで、追加プログラムに変更が生じてもＲＯＭの更新が不要な構成が提案されている。
【０００９】
ここで、電子デバイスシステムの製造のためにＳｏＣを購入する顧客の要求は、多種多様である。要求を実現できるＳｏＣを短期間で提供するためには事前に量産されているＳｏＣにて対応できることが好ましい。また、セキュリティ情報もＳｏＣのＲＯＭに記憶することが好ましい。
【００１０】
しかし、同一のセキュリティ情報がＲＯＭに記憶されたＳｏＣを量産した場合に、セキュリティ情報が暴露される事態が発生した場合に、同じ情報が書き込まれているＳｏＣのすべてが影響を受けるという問題がある。一方、暴露の影響を限定的にするために、異なるセキュリティ情報がＲＯＭに記憶されている複数の種類のＳｏＣを量産した場合、製造後のＳｏＣ及び起動情報の管理／配布が繁雑になるという問題があった。
【００１１】
すなわち、セキュリティの確実性と量産管理の効率というトレードオフが生じていた。そして、ＲＯＭの更新を行わずとも十分なセキュリティを維持し、かつ、起動プログラムの改ざん検知に必要となる情報を記憶できる半導体装置、すなわち、セキュリティが確保された量産性にすぐれた半導体装置が求められていた。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１０−１２９０３７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
本発明はセキュリティが確保された量産性にすぐれた半導体装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
実施形態の半導体装置は、起動プログラムを記憶する、書き込み可能な不揮発性メモリと、前記起動プログラムを起動するファームウェアが記憶されるＲＯＭと、前記起動プログラムのハッシュ値であるセキュリティ情報を記憶するＯＴＰ（One Time Programmable）メモリと、前記ＯＴＰメモリに記憶された前記ハッシュ値と、前記不揮発性メモリに記憶された起動プログラムを用いて算出されたハッシュ値との比較により、前記起動プログラムの改ざん検知を行い、改ざんを検知しなかった場合に、前記起動プログラムを実行するコントローラと、を具備し、前記ＲＯＭと前記ＯＴＰメモリと前記コントローラとが、１チップ化されている。
【図面の簡単な説明】
【００１５】
【図１】実施形態の半導体装置を含む電子デバイスシステムの構成図である。
【図２】実施形態の半導体装置の製造工程のフローチャートである。
【図３】実施形態の半導体装置の起動方法のフローチャートである。
【図４】実施形態の変形例１の半導体装置の起動方法のフローチャートである。
【図５】実施形態の変形例２の半導体装置の起動方法のフローチャートである。
【図６】実施形態の変形例３の半導体装置の起動方法のフローチャートである。
【図７】実施形態の変形例４の半導体装置の起動方法のフローチャートである。
【図８】実施形態の変形例５の半導体装置の起動方法のフローチャートである。
【発明を実施するための形態】
【００１６】
＜半導体装置の構成＞
最初に、図１を用いて本発明の実施形態の半導体装置１０の構成について説明する。半導体装置１０は、コンテンツの送受信機能と表示機能を有するホスト２とともに、スマートテレビである電子デバイスシステム１を構成している。半導体装置１０は、ホスト２の起動デバイスであるが、例えば外観上はスマートテレビの内部に組み込まれホスト２と一体化している。
【００１７】
半導体装置１０は、それぞれが、ＳｏＣ２０とメインバス１５でＳｏＣ２０と接続されている、ＮＡＮＤメモリ１１と、ＳＤＲＡＭ１２と、ＤＭＡＣ（Direct Memory Access controller）１３と、Ｉ／Ｏ１４と、を有する。ＮＡＮＤメモリは書き換え可能な不揮発性メモリである。
【００１８】
ＳｏＣ２０は内部でデータを転送するためのローカルバス２５で接続されているＣＰＵ２１と、ＲＯＭ２３と、ＯＴＰ（One Time Programmable）メモリ２４等の構成要素とが１チップ化されている。
【００１９】
コントローラであるＣＰＵ２１は、プログラム等が展開され実行されるＳＲＡＭ２２を有する。なお、本実施形態の半導体装置１０では、ＣＰＵ２１は、後述するようにハッシュ演算を行い、演算結果からデータ改ざんを検知するセキュリティＨ／Ｗ（ハードウエア）を含む。
【００２０】
ＳＲＡＭ（Static Random Access Memory）２２は、フリップフロップ等の順序回路を用いてデータを記憶するため、高速な情報の出し入れ、すなわち計算等の高速信号処理が可能な動作メモリである。
【００２１】
不揮発性の読み出し専用メモリであるＲＯＭ２３は、設計された配線構造によって特定のデータを記憶するようになっており、フォトマスクを使って集積回路を製造すると、ハードウェアにデータが刻み込まれる、いわゆるマスクＲＯＭである。なお、後述するように、ＲＯＭ２３には、第２起動プログラム（主起動プログラム）であるブートローダを起動する第１起動プログラムであるファームウェアが記憶される
これに対して、ＯＴＰメモリ２４は、一度データを書き込んだ後は、データの消去やデータの再書き込みは不可能で、読み出しのみが可能な不揮発性メモリである。例えば、ＯＴＰメモリ２４は、ヒューズ素子が設けられたＮＡＮＤメモリセルに電気的に一度だけ書き込むことができる。なお、メモリセルに電気的に一度だけ書き込む方法としては、ＭＯＳ構造のヒューズ素子に対してそのゲート絶縁膜に最大定格を超える高電圧を印加して絶縁膜を破壊するようにし、絶縁膜破壊前のヒューズ素子には“０”という情報を記憶させ、絶縁膜破壊後のヒューズ素子には“１”という情報を記憶させるようにしてもよい。または、ゲート配線に電流を流してエレクトロマイグレーションのような物理的な現象を引き起こし、配線又は配線の一部を形成するシリサイド領域を断線（高抵抗化）させることで情報を記憶するようにしてもよい。
【００２２】
ＳＤＲＡＭコントローラ１２Ａで制御されるＳＤＲＡＭ（Synchronous Dynamic Ｒａｎｄｏｍ  Ａｃｅｓｓ  Memory）１２は、メインバス１５に同期して動作するため、非同期ＤＲＡＭよりも複雑な操作パターンを持つことができ、より高速に動作できる。ＳＤＲＡＭ１２には、ブートローダ及びオペレーティングシステムが実行時に展開される。
【００２３】
ＤＭＡＣ１３は、例えば、メモリからメモリへのデータのブロック転送を可能にする。 独立したエンティティによるデータ転送は、プロセッサの負荷を大幅に軽減する。ＤＭＣ１３は、ＳｏＣ２０の内部のメモリとＳＤＲＡＭ１２と間のデータ転送を可能とする。
【００２４】
Ｉ／Ｏ１４は、半導体装置１０とホスト２等とのインターフェイス機能を有する。半導体装置１０が専用の表示部（不図示）を具備する場合には、表示部も、Ｉ／Ｏ１４を介して接続される。
【００２５】
＜半導体装置の製造＞
次に、図２のフローチャートに沿って半導体装置１０の製造工程について簡単に説明する。
【００２６】
＜ステップＳ１１＞
最初にハードウェアの最低限の起動制御を行うためのソフトウェアであるファームウェア（Ｆｉｒｍｗａｒｅ）が作成される。
【００２７】
＜ステップＳ１２＞
ファームウェアをもとに回路設計が行われて、それに基づきＲＯＭ２３が作製される。ＲＯＭ２３は、ＳｏＣ２０の一部であるが、ＣＰＵ２１等はハードウェアの仕様が少し異なっていても同じ設計で作製されるため、ＲＯＭ２３と同時にＳｏＣ２０が作製される。
【００２８】
＜ステップＳ１３＞
電子デバイスシステム１の基本ソフトウェアであるＯＳ（Operating System）、起動直後に動作し、ＯＳ等を起動する起動プログラム（起動データ）であるブートローダ、メインプログラム等のソフトウェアが作成される。
【００２９】
そして、ブートローダのハッシュ値が算出される。ハッシュ値は、起動プログラム等のデータから生成された固定長の疑似乱数であり、不可逆な一方向関数を含むため、ハッシュ値から原文を再現することはできず、また同じハッシュ値を持つ異なるデータを作成することは極めて困難である。
【００３０】
ハッシュ値を算出する関数には、シャーワン（ＳＨＡ−１：   Secure Hash Algorithm 1）、又は、ＭＤ５（Message Digest 5）等を用いる。
【００３１】
シャーワンは、１９９５年に米国標準技術局によってアメリカ政府の標準ハッシュ関数として採用された。インターネット上で安全に通信を行うためのIPSec等に応用されている。ＭＤ５はＲＦＣ１３２１として、ＩＥＴＦで標準化されている。
【００３２】
例えばブートローダの全体、又は、一部分に対してハッシュ関数が実行されて、そのハッシュ値が算出される。
【００３３】
＜ステップＳ１４＞
Ｓｏｃ２０と、ＮＡＮＤメモリ１１等とが配線板に実装されて、半導体装置１０のハードウェアが作製される。そして、ＮＡＮＤメモリ１１に、ブートローダ、ＯＳ、及びメインプログラム等のソフトウェアが記憶される。
【００３４】
＜ステップＳ１５＞
半導体装置１０のＳｏＣ２５のＯＴＰメモリ２４に、算出されたブートローダのハッシュ値が記憶される。
【００３５】
なお、ステップＳ１４とステップＳ１５の順序は逆でもよい。また、データが記憶されたメモリが配線板に実装されてもよい。
【００３６】
ソフトウェアが記憶された半導体装置１０が、ホスト２と接続されることで、電子デバイスシステム１が完成する。
【００３７】
＜起動方法＞
次に、図３のフローチャートに沿って、半導体装置１０による、電子デバイスシステム１の起動方法について説明する。
【００３８】
＜ステップＳ２１＞
電源が投入されると、ＣＰＵ２１はＲＯＭ２３に記憶されているファームウェアの実行を開始し、バス上に存在する部品構成を検知し、ＮＡＮＤコントローラ１１Ａの初期化を行う。以下、「ＣＰＵ２１がファームウェア等のソフトウェアにより行う制御」を、「ファームウェア等が行う」と表現することがある。また、ソフトウェアを動作メモリに「コピーする」ことを「展開する」という。
【００３９】
ファームウェアは、ＮＡＮＤメモリ１１に記憶されているデータを読み取り可能な状態にし、ＳＤＲＡＭコントローラ１２Ａの初期化を行い、ＳＤＲＡＭ１２を読み書き可能な状態にする。続いて、ＣＰＵ２１は、ＮＡＮＤメモリ１１から、ブートローダを読み取り、ＳＲＡＭ２２に展開する。
【００４０】
＜ステップＳ２２＞
ファームウェアは、ＳＲＡＭ２２に展開されたブートローダのハッシュ値を算出する。なお、ＣＰＵ２１は、Ｈ／Ｗとしてハッシュ演算部を有する。
【００４１】
＜ステップＳ２３＞
ファームウェアは、算出したハッシュ値と、ＯＴＰメモリ２４に記憶されているハッシュ値とを比較する。比較結果、すなわち、改ざん検知結果は、例えば、ＳＲＡＭ２２に記憶される。
【００４２】
＜ステップＳ２４、Ｓ２５＞
ファームウェアは、ハッシュ値が一致した場合（Ｓ２４：Ｙｅｓ）、すなわち、改ざんが検知されなかった場合には、ＳＲＡＭ２２に展開されたブートローダに制御を移動し、ブートローダの実行を開始する。
【００４３】
＜ステップＳ２６＞
ブートローダは、オペレーティングシステムをＳＤＲＡＭ１２に展開し、メインプログラム等の起動を行う。
【００４４】
＜ステップＳ２４、Ｓ２７＞
ファームウェアは、ハッシュ値が一致しなかった場合（Ｓ２４：Ｎｏ）、すなわち、起動プログラムであるブートローダの改ざんが検知された場合は、例えば、Ｉ／Ｏ１４に接続されている表示部に「起動中止」のメッセージを表示し、起動処理を中止する。すなわち、ＣＰＵ２１は、起動プログラムを実行しない。
【００４５】
以上の説明のように、半導体装置１０では、セキュリティ情報であるハッシュ値を一度のみ書き込み可能なメモリ（ＯＴＰメモリ２４）に記憶する。このため、半導体装置１０では、ＲＯＭ２３の作製（図２：Ｓ１２）の後、すなわち、ＳｏＣ２０の製造後に、顧客の要望に応じてセキュリティ情報を書き込める。このためＲＯＭ２３にセキュリティ情報を記憶したときと同様のセキュリティを維持しつつ、ＲＯＭ作製後に、改ざん検証に必要となるセキュリティ情報や改ざん検証の方式を設定できる。
【００４６】
すなわち、本実施形態によれば、セキュリティが確保された量産性にすぐれた半導体装置を提供できる。
【００４７】
なお、電子デバイスシステム１は、コンテンツの受信を行い、モニタにコンテンツの表示をする上で、コンテンツ保護のために、第三者による改ざんを防止できることが重要となるスマートテレビであるが、改ざんされたプ起動ログラムの実行防止を目的とする各種の電子デバイスシステムに、半導体装置は応用できる。
【００４８】
起動制御を行うコントローラであるＣＰＵ２１は、ＡＲＭ等汎用プロセッサとしても良いし、その他のマイクロコントローラ、ＤＳＰ等専用プロセッサであってもよい。また、セキュリティＨ／Ｗの代わりに、同機能をコントローラの処理としてさせるソフトウェアを、ファームウェアの中に組み込んでもよい。
【００４９】
半導体装置１０では、ＳｏＣ２０は、ファームウェアとブートローダ／オペレーティングシステムを実行するコントローラが単一のＣＰＵ２１であるが、ブートは簡易なマイクロコントローラのみで処理し、オペレーティングシステムを処理するのはより高速なプロセッサとするなど、検証を行うコントローラと、オペレーティングシステムを実行するプロセッサとが別途存在する構成としてもよい。
【００５０】
半導体装置１０では、ブートローダ、オペレーティングシステム等を記憶する不揮発性メモリが、単一のＮＡＮＤメモリ１１であるが、それぞれ異なる不揮発メモリとしても良い。例えば、プログラムサイズに応じ、サイズが小さいブートローダをＥＥＰＲＯＭに記憶し、サイズが大きいオペレーティングシステムをＮＡＮＤメモリ１１に記憶してもよい。ＳＲＡＭの代わりに、ＳＤＲＡＭを代替してもよい。この場合、ＳＤＲＡＭの利用前の時点で初期化を行うようにプログラムされたファームウェアをもちいる。また、半導体装置内でのプログラム等の動作メモリへの展開にはＤＭＡＣをもちいるが、コントローラ自身の転送機能によって展開してもよい。
【００５１】
＜変形例１〜変形例５＞
次に、実施形態の変形例の半導体装置１０Ａ〜１０Ｅについて説明する。変形例の半導体装置１０Ａ〜１０Ｅ、すなわち、電子デバイスシステム１Ａ〜１Ｅは、半導体装置１０、電子デバイスシステム１と類似機能の構成要素を有するため、構成要素の説明は省略する。
【００５２】
半導体装置１０Ａ〜１０Ｅでは、例えば、ＮＡＮＤメモリ１１が記憶する起動プログラムが、起動プログラムの改ざん検知のための検証用情報を含んでいる。そして、ＯＴＰメモリ２４が検証用情報を検証するためのセキュリティ情報を記憶する。起動すると、コントローラであるＣＰＵ２１は、ＯＴＰメモリ２４のセキュリティ情報と、ＮＡＮＤメモリ１１の検証用情報を読み取り、セキュリティ情報と検証用情報とをもちいて起動プログラムの改ざん検証を行う。
【００５３】
＜変形例１＞
変形例１の半導体装置１０Ａでは、検証用情報としてメッセージ認証コード（ＭＡＣ：Ｍｅｓｓａｇｅ Ａｕｔｈｅｎｔｉｃａｔｉｏｎ Ｃｏｄｅ）に基づいた改ざん検知を行う。ＭＡＣは、生成と検証に同じ共通鍵情報が使われる。
【００５４】
半導体装置１０Ａでは、共通鍵情報がＯＴＰメモリ２４に記憶される。一方、ブートローダと共通鍵情報とからＭＡＣが生成され、ＭＡＣを含むブートローダ、言い換えれば、ＭＡＣとブートローダとが、ＮＡＮＤメモリ１１に記憶される。
【００５５】
開発されたブートローダに機能追加するためブートローダの更新を行う場合、更新されたブートローダと共通鍵情報とからＭＡＣが新たに算出される。そして、更新されたブートローダと更新されたＭＡＣとがＮＡＮＤメモリ１１に記憶される。ＮＡＮＤメモリ１１への更新データの記憶方式については、電子デバイスシステムを回収してから書きこみ機器をもちいてＮＡＮＤメモリ１１に書き込む、ＮＡＮＤメモリ１１を交換する、又は電子デバイスが無線通信等のネットワークによるデータ通信機能を有する場合、オペレーティングシステムが書きこみを実施しても良い。
【００５６】
次に、図４のフローチャートに沿って、半導体装置１０Ａによる、電子デバイスシステム１の起動方法について説明する。
【００５７】
＜ステップＳ３１＞
電源が投入され起動すると、ＣＰＵ２１はＲＯＭ２３に記憶されていたファームウェアにより、ＮＡＮＤメモリ１１から、ブートローダを読み取り、ＳＲＡＭ２２に展開する。
【００５８】
＜ステップＳ３２＞
ＣＰＵ２１は、ファームウェアによりＯＴＰメモリ２４に記憶されている共通鍵情報を読み取る。
【００５９】
＜ステップＳ３３＞
ＣＰＵ２１は、ブートローダのＭＡＣを、ＯＴＰメモリ２４から読み取った共通鍵情報を用いて算出する。
【００６０】
＜ステップＳ３４＞
ＣＰＵ２１は、ＮＡＮＤメモリ１１に記憶されていたＭＡＣと算出したＭＡＣの比較を行う。
【００６１】
＜ステップＳ３５〜Ｓ３７＞
ＣＰＵ２１は、ＭＡＣが一致した場合（Ｓ３５：Ｙｅｓ）、すなわち、改ざんが検知されかった場合には、ブートローダを実行し（Ｓ３６）、ＯＳ及びメインプログラムを起動する（Ｓ３７）。
【００６２】
＜ステップＳ３５、Ｓ３８＞
ＣＰＵ２１は、ＭＡＣが一致しなかった場合（Ｓ３５：Ｎｏ）、すなわち、改ざんが検知された場合、ファームウェアはブートローダに制御を渡さず、起動処理を中止する。
【００６３】
ＭＡＣに基づいた検証機能を提供する際には、顧客毎に異なる共通鍵情報が割当られる。このため、半導体装置１０Ａは、半導体装置１０等の効果を有し、更に、共通鍵情報がある顧客向けの鍵が第三者に不正に渡ったとしても、異なる共通鍵情報が書き込まれているＳｏＣについては影響が及ばないため、半導体装置１０Ａでは、暴露された場合の影響範囲を限定できる。
【００６４】
＜変形例２＞
変形例２の半導体装置１０Ｂは、公開鍵方式に基づいた改ざん検知を行う。すなわち、検証用情報として起動プログラムの署名値と公開鍵とを有し、セキュリティ情報として公開鍵のハッシュ値を有し、検証用情報の改ざん検知にハッシュ演算をもちい、起動プログラムの改ざん検知に公開鍵方式をもちいる。
【００６５】
ＳｏＣ２０を利用して電子デバイスシステム１を設計する開発者は、ＯＴＰメモリ２４にデータを記憶する作業を外部開発者に委託することがある。その際に、起動プログラムの対となるセキュリティ情報を生成するのに必要な鍵情報を外部開発者に提供せずに、設計を行いたい場合がある。電子デバイスシステム１の半導体装置１０Ｂを設計する開発者は、公開鍵方式の秘密鍵と公開鍵とを生成する。
【００６６】
秘密鍵は、電子デバイスシステム１を設計する開発者により厳密に管理される。公開鍵は外部開発者に提供される。外部開発者は、公開鍵情報をＯＴＰメモリ２４に書き込む。開発者は、ブートローダを作成した後に、秘密鍵をもちいてブートローダに署名を行い、署名情報（署名値）を生成する。そして署名値とブートローダとがＮＡＮＤメモリ１１に記憶される。
【００６７】
次に、図５のフローチャートに沿って、半導体装置１０Ｂによる、電子デバイスシステム１の起動方法について説明する。
【００６８】
＜ステップＳ４１＞
電源が投入され起動すると、ＣＰＵ２１はＲＯＭ２３に記憶されていたファームウェアにより、ＮＡＮＤメモリ１１から、ブートローダを読み取り、ＳＲＡＭ２２に展開する。
【００６９】
＜ステップＳ４２＞
ＣＰＵ２１は、ファームウェアにより、ＯＴＰメモリ２４に記憶されている公開鍵を読み取る。
【００７０】
＜ステップＳ４３＞
ＣＰＵ２１は、ＮＡＮＤメモリ１１に記憶されているブートローダと署名値とを読み取る。そして、ＣＰＵ２１は、公開鍵と署名値とからダイジェストを算出し、さらに、ブートローダからダイジェストを算出する。
【００７１】
＜ステップＳ４４＞
ＣＰＵ２１は、それぞれ算出した２つのダイジェストを比較する。
【００７２】
＜ステップＳ４５〜Ｓ４７＞
ＣＰＵ２１は、ダイジェストが一致した場合（Ｓ４５：Ｙｅｓ）には、ブートローダを実行し（Ｓ４６）、ＯＳ及びメインプログラムを起動する（Ｓ４７）。
【００７３】
＜ステップＳ４５、Ｓ４８＞
ダイジェストが一致しなかった場合（Ｓ４５：Ｎｏ）、すなわち、改ざんが検知された場合には、ファームウェアはブートローダに制御を渡さず、起動を中止する。
【００７４】
半導体装置１０Ｂは、半導体装置１０等の効果を有し、更に、ＯＴＰメモリ２４にデータを記憶する作業を外部開発者に委託できるため、生産性が高い。
【００７５】
＜変形例３＞
変形例３の半導体装置１０Ｃは、検証用情報の改ざん検知にＭＡＣをもちい、起動プログラムの改ざん検知に公開鍵方式をもちいる。半導体装置１０Ｃは、検証用情報としてプログラムの署名値と公開鍵と公開鍵のＭＡＣを有し、セキュリティ情報としてＭＡＣの秘密鍵を有し、検証用情報の改ざん検知にＭＡＣをもちい、プログラムの改ざん検知に公開鍵方式をもちいる。
【００７６】
すなわち、半導体装置１０Ｃは、公開鍵方式に基づいた改ざん検知方式において、ＭＡＣに基づいた改ざん検知方式で示した、ブートローダの更新に対応している。ブートローダの更新毎に、秘密鍵により署名情報が生成される。
【００７７】
なお、ＯＴＰメモリ２４記憶する検証用情報に替えて、検証用情報のハッシュ値を用いてもよい。
【００７８】
公開鍵方式でもちいられる鍵のデータサイズは、ハッシュ値のデータサイズよりも大きい場合がある。半導体装置１０Ｃは、ＯＴＰメモリ２４の記憶容量が十分でない場合でも、公開鍵を記憶する替わりに、そのハッシュ値を記憶できる。
【００７９】
この場合には、外部開発者には公開鍵ではなく、公開鍵のハッシュ値が提供される。そして外部開発者により、公開鍵のハッシュ値が、ＯＴＰメモリ２４に記憶される。一方、ブートローダ作成後に、秘密鍵をもちいてブートローダに署名が行われ、署名情報が生成される。そして、署名情報とブートローダと公開鍵とがＮＡＮＤメモリ１１に記憶される。
【００８０】
次に、図６のフローチャートに沿って、半導体装置１０Ｃによる、電子デバイスシステム１の起動方法について説明する。
【００８１】
＜ステップＳ５１＞
電源が投入され起動すると、ＣＰＵ２１はＲＯＭ２３に記憶されていたファームウェアにより、ＮＡＮＤメモリ１１から、公開鍵を読み取り、ＳＲＡＭ２２に展開する。
【００８２】
＜ステップＳ５２＞
ＣＰＵ２１は、ファームウェアにより、公開鍵のハッシュ値を算出する。
【００８３】
＜ステップＳ５３＞
ＣＰＵ２１は、算出したハッシュ値と、ＯＴＰメモリ２４から読み取ったハッシュ値とを比較する。
【００８４】
＜ステップＳ５４、Ｓ５５＞
ＣＰＵ２１は、署名値が一致しなかった場合（Ｓ５４：Ｎｏ）、すなわち、改ざんが検知された場合、ファームウェアはブートローダに制御を渡さず、起動処理を中止する。
【００８５】
＜ステップＳ５４、Ｓ５６＞
ＣＰＵ２１は、署名値が一致した場合（Ｓ５４：Ｙｅｓ）、さらに、公開鍵をもちいてブートローダと署名との改ざん検証を行う。
【００８６】
すなわち、ＣＰＵ２１は、このステップにおいて、ＮＡＮＤメモリ１１から、ブートローダを読み取り、ＳＲＡＭ２２に展開する。
【００８７】
＜ステップＳ５７＞
ＣＰＵ２１は、ファームウェアにより、ＳＲＡＭ２２に展開されたブートローダのダイジェストを算出する。さらに、ＣＰＵ２１は、ファームウェアにより、公開鍵と署名値とからダイジェストを算出する。
【００８８】
＜ステップＳ５８＞
ＣＰＵ２１は、それぞれ算出した２つのダイジェストを比較する。
【００８９】
＜ステップＳ５９〜Ｓ６１＞
ＣＰＵ２１は、ダイジェストが一致した場合（Ｓ５９：Ｙｅｓ）には、ファームウェアから、ＳＲＡＭ２２に展開されたブートローダに制御を移動し、実行を開始する。
【００９０】
一方、署名値が一致しなかった場合（Ｓ５９：Ｎｏ）には、起動を中止する。すなわち、ＣＰＵ２１は、起動プログラムを実行しない。
【００９１】
半導体装置１０Ｃは、半導体装置１０等の効果を有し、更に、より高いセキュリティを維持できる。
【００９２】
なお、変形例３では、公開鍵のハッシュ値をＯＴＰメモリ２４に記憶したが、公開鍵の検証にＭＡＣをもちいてもよい。
【００９３】
＜変形例４＞
変形例４の半導体装置１０Ｄは、すでに説明した複数の検証方式（改ざん検知方式）を兼ね備えたファームウェアを含み、セキュリティ情報がフラグ情報（制御フラグ）を含み、フラグ情報に応じて改ざん検知方式が切り替わる。すなわち、半導体装置１０Ｄは、セキュリティ情報がフラグ情報を含み、ファームウェが複数の改ざん検証方式を有し、フラグ情報に応じて改ざん検知方式が切り替わる
半導体装置１０Ｄでは、改ざん検知方式を選択するときに必要なフラグ情報がＲＯＭ２３又はＯＴＰメモリ２４に記憶される。そして、ＣＰＵ２１は、ファームウェアにより、ＯＴＰメモリ２４から制御フラグを読み取り、検証方式を判定し、判定結果に応じた改ざん検知を行う。
【００９４】
次に、図７のフローチャートに沿って、半導体装置１０Ｄによる、電子デバイスシステム１の起動方法について説明する。
【００９５】
＜ステップＳ７１＞
起動すると、ＣＰＵ２１はファームウェアにより、フラグ情報を読み取り、ＳＲＡＭ２２に展開する。
【００９６】
＜ステップＳ７２、Ｓ７３＞
ＣＰＵ２１は、フラグ情報が定義されている場合（Ｓ７２：Ｙｅｓ）、検証方式を判定し、フラグ情報に応じた検証方法による改ざん検知処理、例えば、図３で示したステップＳ２２からの処理を実行したり、図４で示したステップＳ３２からの処理を実行したりする。
【００９７】
＜ステップＳ７４＞
ＣＰＵ２１は、フラグ情報が定義されていない場合（Ｓ７２：Ｎｏ）、起動を中止する。すなわち、ＯＴＰメモリ２４の破損又は誤った操作等により不正な値が書き込まれ、定義されている制御フラグ以外であった場合、ＣＰＵ２１はブート処理を中断する。
【００９８】
半導体装置１０Ｄは、半導体装置１０等の効果を有し、更に効率的に、改ざん検知が行える。
【００９９】
＜変形例５＞
変形例５の半導体装置１０Ｅは、半導体装置１０Ｄと類似しているが、複数の検証方式のそれぞれに応じた検証情報を有し、記憶する検証情報に応じて複数の改ざん検知処理を順に実行する。フラグ情報は、起動時に実行する複数の検証方式に対応した複数のフィールドをもつ。
【０１００】
次に、図８のフローチャートに沿って、半導体装置１０Ｅによる、電子デバイスシステム１の起動方法について説明する。
【０１０１】
＜ステップＳ８１＞
起動すると、ＣＰＵ２１はファームウェアにより、フラグ情報を読み取り、ＳＲＡＭ２２に展開する。フラグ情報には、複数の検証方式の実行順序が含まれている。
【０１０２】
＜ステップＳ８２、Ｓ８３＞
ＣＰＵ２１は、フラグ情報が定義されていない場合（Ｓ８３：Ｎｏ）、起動を中止する。すなわち、ＣＰＵ２１はブート処理を中断する。
【０１０３】
＜ステップＳ８４＞
ＣＰＵ２１は、フラグ情報に含まれるフィールドを予め組み込まれた順番に応じ、複数の検証処理を順に実行する。
【０１０４】
＜ステップＳ８５＞
ＣＰＵ２１は、１つの検証処理を実行すると、フラグ情報を更新する。
【０１０５】
＜ステップＳ８６＞
ＣＰＵ２１は、フラグ情報で指定されている全ての検証処理を完了するまで（Ｓ８６：Ｎｏ）、ステップＳ８２からの処理を繰り返す。
【０１０６】
＜ステップＳ８７＞
全ての検証処理が完了し（Ｓ８６：Ｙｅｓ）、全ての検証処理において改ざんが検知されなかった場合に限り、ファームウェアによる制御からブートローダによる制御に切り替わる。そして、ＯＳ及びメインプログラムが、実行される（Ｓ８７、Ｓ８８）。言い換えれば、ファームウェアは、フラグ情報に書き込まれた全ての検証処理が実施されたことを確認した後に、ブートローダに制御を移す。ＯＴＰメモリ２４に記憶されたフラグ情報が不正であった場合、あるいは、何れかの時点で改ざんが検知された場合には、ファームウェアはブートローダに制御を渡さない。
【０１０７】
半導体装置１０Ｅは、半導体装置１０等の効果を有し、更に、複数の検証方式を順次実施するため、改ざん検知の確実性が高い。
【０１０８】
なお、本発明の実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。実施形態は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０９】
１…電子デバイスシステム
２…ホスト
１０、１０Ａ〜１０Ｅ…半導体装置
１１…ＮＡＮＤメモリ
１２…ＳＤＲＡＭ
２０…ＳｏＣ
２１…ＣＰＵ
２２…ＳＲＡＭ
２３…ＲＯＭ
２４…ＯＴＰメモリ
【図１】
2015036847.tif 000003
【図２】
2015036847.tif 000004
【図３】
2015036847.tif 000005
【図４】
2015036847.tif 000006
【図５】
2015036847.tif 000007
【図６】
2015036847.tif 000008
【図７】
2015036847.tif 000009
【図８】
2015036847.tif 000010