(57)【要約】【課題】ＩＣカードなどに用いられるマイコンにおいて、暗号化されたプログラムを不正に読み出す攻撃に対するセキュリティレベルを向上する。【解決手段】ＣＰＵとＥＥＰＲＯＭとＲＯＭを備え、ＲＯＭには暗号化領域と非暗号化領域を設けられ、暗号化領域に暗号化されたファームウェアが格納される。暗号鍵を保持し、暗号化されたファームウェアを復号してＣＰＵに供給する暗号復号器を備える。ＥＥＰＲＯＭは、ユーザモードでＣＰＵからのアクセスが禁止される、システム領域がもうけられ、暗号鍵は複数のビット列である分割鍵に分割され、システム領域内の分散したアドレス領域に格納される。ＲＯＭの非暗号化領域には、暗号化されていない暗号鍵読み込みプログラムが格納されており、これをＣＰＵが実行することにより、ＥＥＰＲＯＭに分散して保持される複数の分割鍵を読み出して再構成することにより暗号鍵を復元し、暗号復号器に供給する。【選択図】図１
2014089640.tif 000002
【特許請求の範囲】
【請求項１】
第１動作モードと第２動作モードを有するＣＰＵと、前記第２動作モードにおいて前記ＣＰＵからのアクセスが禁止される第１領域と第２領域を有し電気的に書き換え可能な第１不揮発性メモリと、暗号化された命令及び／又はデータである暗号化コードを格納可能な第３領域と第４領域を有し電気的に書き換え不能な第２不揮発性メモリと、暗号復号器とを備え、
前記第１不揮発性メモリは、前記暗号化コードを復号するための暗号鍵を構成する複数の分割鍵を保持するための、前記第１領域内の分散する複数のアドレス領域を有し、
前記暗号復号器は、暗号鍵を保持し、前記第２動作モードにおいて、前記第２不揮発性メモリの前記第３領域から読み出された前記暗号化コードを前記暗号鍵により復号して前記ＣＰＵへ供給可能であり、
前記第２不揮発性メモリは、前記第１動作モードにおいて前記ＣＰＵによって実行されることにより、前記第１不揮発性メモリに分散して保持される前記複数の分割鍵を読み出して再構成することにより前記暗号鍵を復元し、前記暗号復号器に供給する、暗号鍵読み込みプログラムを、前記第４領域に保持する、半導体装置。
【請求項２】
請求項１において、前記半導体装置は通信インターフェースをさらに備え、
前記第２不揮発性メモリは、前記ＣＰＵによって実行されることにより、前記通信インターフェースを介して外部から入力される前記暗号鍵を、前記複数の分割鍵に分割された状態で、前記第１不揮発性メモリの前記第１領域内の前記複数のアドレス領域に分散して書き込むことができる暗号鍵書き込みプログラムを、前記第４領域に保持する、半導体装置。
【請求項３】
請求項２において、前記暗号鍵書き込みプログラムにより、前記分割鍵が前記第１不揮発性メモリに書き込まれる前に、認証を行う認証ステップが実行可能に構成される、半導体装置。
【請求項４】
請求項３において、前記暗号鍵書き込みプログラムにより、前記分割鍵が前記第１不揮発性メモリに書き込まれる前に、前記ＣＰＵが動作すべき動作モードが前記第１動作モードであることを判定するステップと、前記第１不揮発性メモリに前記複数の分割鍵が既に書き込まれているか否かを判定するステップとが実行可能に構成され、前記ＣＰＵが動作すべき動作モードが前記第１動作モードであり且つ前記複数の分割鍵が未だ書き込まれていない場合に、前記認証ステップへ進むことが実行可能に構成される、半導体装置。
【請求項５】
請求項４において、前記第１不揮発性メモリは、前記複数の分割鍵が既に書き込まれたか否かを示すデータを保持するための領域を、前記第１領域内に有する、半導体装置。
【請求項６】
請求項５において、前記複数の分割鍵が既に書き込まれたか否かを示す前記データは、複数ビットで構成される、半導体装置。
【請求項７】
請求項３において、前記認証ステップは、保持されるＲＳＡの公開鍵ｅ及びＮと期待値ｐについて、外部から入力されるｃを用いて、前記ｃの前記ｅ乗の前記Ｎについての剰余を算出し、前記ｐと比較するステップを含む、半導体装置。
【請求項８】
請求項２において、前記第２不揮発性メモリは、前記ＣＰＵが動作すべき動作モードが前記第２動作モードであると判定し、前記第１動作モードで前記暗号鍵読み込みプログラムが前記ＣＰＵによって実行された後、前記ＣＰＵを前記第２動作モードに遷移させるプログラムを、前記第４領域に保持する、半導体装置。
【請求項９】
請求項１において、前記複数の分割鍵を保持するための、前記第１不揮発性メモリの前記第１領域内の分散する前記複数のアドレス領域は、前記第１不揮発性メモリにおける物理アドレスが不連続であり、且つ、前記ＣＰＵによってアクセスするための論理アドレスが不連続である、半導体装置。
【請求項１０】
請求項９において、前記複数の分割鍵を保持するための、前記第１不揮発性メモリの前記第１領域内の分散する前記複数のアドレス領域に対応する複数の前記物理アドレスの間隔が不均一であり、及び／または、前記複数のアドレス領域に対応する複数の前記論理アドレスの間隔が不均一である、半導体装置。
【請求項１１】
請求項１において、前記第１不揮発性メモリは、前記複数の分割鍵を格納するための前記複数のアドレス領域の複数の鍵アドレス値を格納する鍵アドレス格納領域を、前記第１領域に有し、前記第２不揮発性メモリは、前記鍵アドレス格納領域のアドレス値を、前記第４領域に保持する、半導体装置。
【請求項１２】
請求項１において、前記複数の分割鍵を保持するための、前記第１不揮発性メモリの前記第１領域内の分散する前記複数のアドレス領域に対応する複数のアドレスのそれぞれは、基点アドレスと偏差によって算出されることができ、前記第１不揮発性メモリは、前記基点アドレスと前記偏差を保持するための、前記第１領域内のアドレス領域を有する、半導体装置。
【請求項１３】
請求項１において、前記ＣＰＵと、前記第１不揮発性メモリと、前記第２不揮発性メモリと、前記暗号復号器とが、単一の半導体基板上に形成された、半導体装置。
【請求項１４】
第１動作モードと第２動作モードを有するＣＰＵと、前記第２動作モードにおいて前記ＣＰＵからのアクセスが禁止される第１領域と第２領域を有し電気的に書き換え可能な第１不揮発性メモリと、暗号化された命令及び／又はデータである暗号化コードを格納可能な第３領域と第４領域を有し電気的に書き換え不能な第２不揮発性メモリと、前記第２動作モードにおいて、前記第２不揮発性メモリの前記第３領域から読み出された前記暗号化コードを暗号鍵により復号して前記ＣＰＵへ供給可能な暗号復号器と、通信インターフェースとを備える半導体装置に対して暗号鍵を書き込む暗号鍵書き込み方法であって、
前記通信インターフェースを介して外部から暗号鍵を入力する第１ステップと、前記入力された前記暗号鍵を、複数の分割鍵に分割された状態で、前記第１不揮発性メモリの前記第１領域内の複数のアドレス領域に分散して書き込む第２ステップとを含む、暗号鍵書き込み方法。
【請求項１５】
請求項１４において、前記第２ステップより前に、前記ＣＰＵが動作すべき動作モードが前記第１動作モードであることを確認する第３ステップと、前記第１不揮発性メモリの前記複数のアドレス領域に、前記複数の分割鍵が書き込まれていないことを確認する第４ステップと、暗号鍵の書き込みを認証する第５ステップをさらに含む、暗号鍵書き込み方法。
【請求項１６】
請求項１４において、前記第３ステップにより前記ＣＰＵが動作すべき動作モードが前記第２動作モードであると判定されたとき、前記第１動作モードで、前記第１不揮発性メモリに分散して保持される前記複数の分割鍵を読み出し、再構成することにより前記暗号鍵を復元し、前記暗号復号器に供給する、第６ステップと、前記ＣＰＵの動作モードを前記第２動作モードに遷移させる第７ステップをさらに含む、暗号鍵書き込み方法。
【請求項１７】
請求項１４において、前記複数の分割鍵を保持するための、前記第１不揮発性メモリの前記第１領域内の分散する前記複数のアドレス領域は、前記第１不揮発性メモリにおける物理アドレスが不連続であり、且つ、前記ＣＰＵによってアクセスするための論理アドレスが不連続である、暗号鍵書き込み方法。
【請求項１８】
請求項１７において、前記複数の分割鍵を保持するための、前記第１不揮発性メモリの前記第１領域内の分散する前記複数のアドレス領域に対応する複数の前記物理アドレスの間隔が不均一であり、及び／または、前記複数のアドレス領域に対応する複数の前記論理アドレスの間隔が不均一である、暗号鍵書き込み方法。
【請求項１９】
請求項１４において、前記複数の分割鍵を前記第１不揮発性メモリの前記第１領域内に分散して格納するための、前記複数のアドレス領域のそれぞれを示す鍵格納アドレスを、前記第１不揮発性メモリの前記第１領域または前記第２不揮発性メモリの前記第４領域から読み出す第８ステップをさらに含む、暗号鍵書き込み方法。
【請求項２０】
請求項１４において、前記複数の分割鍵を前記第１不揮発性メモリの前記第１領域内に分散して格納するための、前記複数のアドレス領域のそれぞれを示す鍵格納アドレスは、基点アドレスと偏差によって算出されることができ、前記通信インターフェースを介して外部から前記基点アドレスと前記偏差を、前記通信インターフェースを介して外部から入力する第９ステップをさらに含む、暗号鍵書き込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばＩＣ (Integrated Circuit) カードなどに搭載される、ＣＰＵとそのプログラムを暗号化して格納するＲＯＭ (Read Only Memory) を備える半導体装置に関し、特に暗号化されたプログラムを不正に読み出す攻撃に対するセキュリティレベルを向上するために好適に利用できるものである。
【背景技術】
【０００２】
ＩＣカードは、一般に、ＲＯＭ，ＲＡＭ (Random Access Memory)，ＥＥＰＲＯＭ (Electrically Erasable Programmable Read-Only Memory)，ＣＰＵ (Central Processing Unit) が１チップ化されたＳｏＣ (System On Chip)（マイクロコンピュータ） として提供される。電源、グランド、クロック、リセット、シリアル通信インターフェースなど必要最小限の外部端子のみを備えている。内部のメモリへの直接的なアクセスを行なえる構成にはなっておらず、データのやり取りは、必ずシリアル通信を介して行われることで、メモリ内容の秘匿性が保証されてきた。
【０００３】
しかし、解析装置の性能向上に伴い、リバースエンジニアリングによるセキュリティ機器の解析が問題となってきている。中でも、ＲＯＭのリバースエンジニアリングによって、ＲＯＭに格納されているファームウェアの内容を読み出されることが現実の脅威となってきている。従来、単純な組み合わせ回路によるスクランブルが行なわれてきた。スクランブル回路の構成は非公開で、その秘匿性がファームウェアの秘匿性を担保してきた。しかし、リバースエンジニアリング技術の向上により、スクランブル回路の解析すらも可能となりつつある。こうした背景から、単純なＲＯＭパターンの読み出しだけではファームウェアが解析できないような、ＲＯＭ内容の暗号化が求められている。暗号化では、方式の秘匿性か鍵の秘匿性により、暗号化されたプログラムを不正に読み出す攻撃に対するセキュリティレベルを向上する。ＲＯＭの内容をリバースエンジニアリングで解読できる攻撃を想定した場合、暗号化方式も回路構成の物理解析から解析されることが予想される。そこで、暗号鍵を電気的に書き換え可能な不揮発性メモリに格納し、物理形状や回路構成の光学的観察によるリバースエンジニアリングのみでは暗号鍵が読み取られないようにする。
【０００４】
特許文献１と特許文献２には、プログラムを暗号化して記憶する、セキュリティ機器に関する発明が開示されている。暗号化されたプログラムは、暗号鍵を使って復号され、別の記憶装置に展開された後に実行される。
【０００５】
ＩＣカードでは、ファームウェアであるプログラムの秘匿を目的とした暗号化が行われるようになる以前から、記憶しているユーザ情報と通信の秘匿のために、暗号化技術が広く利用されてきており、そのための暗号鍵の保管にはいくつかの方法が知られている。特許文献３には、ＩＣカード内の、外部から絶対に読み出しのできないメモリエリアに暗号鍵を記憶することにより、また、特許文献４には、暗号鍵を分割し、１つの記憶装置内の分散した領域に記憶することにより、それぞれ、暗号鍵を不正に読み出す攻撃に対するセキュリティレベルを向上する技術が開示されている。特許文献５には、複数の暗号鍵からなる鍵情報を分割管理し、あるいは一括管理することにより、効率よく記憶することができる技術が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開2000-155819号公報
【特許文献２】特開2003-333027号公報
【特許文献３】特開平04-102185号公報
【特許文献４】特開2000-252973号公報
【特許文献５】特開2012-080295号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１、２、３、４及び５について本発明者が検討した結果、以下のような新たな課題があることがわかった。
【０００８】
特許文献１には、暗号鍵の保管方法について、特に不正に読み出す攻撃に対するセキュリティレベルを向上する技術は、記載されていない。特許文献２には、暗号鍵を分割して複数の記憶装置に分散して記憶する技術が記載されているが、複数の記憶装置を備える必要があるため、ＩＣカードのような小規模なシステムには、採用することができない。
【０００９】
特許文献３、４及び５に記載される暗号鍵の保管方法は、プログラムによって実行されるため、そのプログラム自体の暗号化に用いる暗号鍵の保管には、利用することができない。
【００１０】
さらに、仮に特許文献３や特許文献４に開示される暗号鍵の保管方法を、特許文献１または特許文献２に開示される技術に適用したとしても、プログラムを不正に読み出す攻撃に対するセキュリティレベルを向上することはできない。特許文献１と特許文献２に開示される技術では、暗号化されたプログラムは、暗号鍵を使って復号され、別の記憶装置の上に展開された後に実行されるため、その展開されたプログラム、即ち復号されて平文となったプログラムを読み出す攻撃に対しては、暗号鍵の秘匿は無意味だからである。
【００１１】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
一実施の形態によれば、下記の通りである。
【００１３】
すなわち、ＣＰＵと電気的に書き換え可能なＥＥＰＲＯＭと電気的に書き換え不能なＲＯＭを備える半導体装置であって、ＲＯＭに暗号化領域と非暗号化領域を設け、暗号化領域に暗号化されたファームウェアを格納する。暗号鍵を保持し、暗号化されたファームウェアを復号してＣＰＵに供給する暗号復号器を備える。ＣＰＵはシステムモードとユーザモードを含むいずれかの動作モードで動作し、ＥＥＰＲＯＭはユーザモードではＣＰＵからのアクセスが禁止される、システム領域を備える。ファームウェアを暗号化した暗号鍵は、複数のビット列である分割鍵に分割され、ＥＥＰＲＯＭのシステム領域内の分散したアドレス領域に格納される。
【００１４】
ＲＯＭの非暗号化領域には、暗号化されていない暗号鍵読み込みプログラムが格納されており、これをＣＰＵによって実行することにより、ＥＥＰＲＯＭに分散して保持される複数の分割鍵を読み出し、再構成することにより暗号鍵を復元し、暗号復号器に供給することができる。
【００１５】
ここでＣＰＵとは、供給される命令コードを解釈して実行するプロセッサであって、そのアーキテクチャに限定されない。マイクロコンピュータやマイクロコントローラのＣＰＵであってもよく、マルチプロセッサやＤＳＰ（Digital Signal Processor）であってもよい。
【発明の効果】
【００１６】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００１７】
すなわち、ＲＯＭの暗号化領域に格納されている、暗号化されたプログラムを、不正に読み出す攻撃に対するセキュリティレベルを向上することができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、実施の一形態に係る半導体装置の構成を表すブロック図である。
【図２】図２は、実施の一形態に係る半導体装置におけるリセットルーチンの一例を示すフローチャートである。
【図３】図３は、実施の一形態に係るＬＳＩの構成を表すブロック図である。
【図４】図４は、鍵格納アドレスによって分割鍵を格納するアドレスを指定する実施形態における、ＲＯＭとＥＥＰＲＯＭのメモリマップである。
【図５】図５は、鍵アドレス格納アドレスによって鍵アドレスを指定し、その鍵アドレスによって分割鍵を格納するアドレスを指定する実施形態における、ＲＯＭとＥＥＰＲＯＭのメモリマップである。
【図６】図６は、基点アドレスと偏差によって分割鍵を格納するアドレスを指定する実施形態における、ＲＯＭとＥＥＰＲＯＭのメモリマップである。
【図７】図７は、鍵書き込み用の認証及び鍵書き込み処理に伴う通信フローの一例を表す説明図である。
【図８】図８は、鍵書き込み用の認証及び鍵書き込み処理に伴う通信フローの別の例を表す説明図である。
【図９】図９は、基点アドレスと偏差によって分割鍵を格納するアドレスを指定する実施形態における、鍵書き込み処理に伴う通信フローの例を表す説明図である。
【図１０】図１０は、鍵格納アドレスによって分割鍵を格納するアドレスを指定する実施形態における、鍵読み込み処理（ループ）のフローチャートである。
【図１１】図１１は、鍵格納アドレスによって分割鍵を格納するアドレスを指定する実施形態における、鍵読み込み処理（ループアンローリング）のフローチャートである。
【図１２】図１２は、鍵アドレス格納アドレスによって鍵アドレスを指定し、その鍵アドレスによって分割鍵を格納するアドレスを指定する実施形態における、鍵読み込み処理（ループ）のフローチャートである。
【図１３】図１３は、鍵アドレス格納アドレスによって鍵アドレスを指定し、その鍵アドレスによって分割鍵を格納するアドレスを指定する実施形態における、鍵読み込み処理（ループアンローリング）のフローチャートである。
【図１４】図１４は、基点アドレスと偏差によって分割鍵を格納するアドレスを指定する実施形態における、鍵読み込み処理（ループ）のフローチャートである。
【図１５】図１５は、基点アドレスと偏差によって分割鍵を格納するアドレスを指定する実施形態における、鍵読み込み処理（ループアンローリング）のフローチャートである。
【発明を実施するための形態】
【００１９】
１．実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００２０】
〔１〕＜暗号鍵を分割しＥＥＰＲＯＭのシステム領域に分散して格納するマイコン＞
半導体装置（９）であって、以下の各要素を備える。
【００２１】
第１動作モード（システムモード）と第２動作モード（ユーザモード）を有するＣＰＵ（ＣＰＵ２、中央処理装置）。
【００２２】
前記第２動作モード（ユーザモード）において前記ＣＰＵからのアクセスが禁止される第１領域（システム領域４１）と第２領域（ユーザ領域４２）を有し電気的に書き換え可能な第１不揮発性メモリ（ＥＥＰＲＯＭ４）。
【００２３】
暗号化された命令及び／又はデータである暗号化コードを格納可能な第３領域（暗号化領域３２）と第４領域（非暗号化領域３１）を有し電気的に書き換え不能な第２不揮発性メモリ（ＲＯＭ３）。
【００２４】
暗号復号器（１）。
【００２５】
ここで、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）は、前記暗号化コードを復号するための暗号鍵（１１）を構成する複数の分割鍵（１２）を保持するための、前記第１領域（システム領域４１）内の分散する複数のアドレス領域を有する。
【００２６】
前記暗号復号器は、暗号鍵（１１）を保持し、前記第２動作モード（ユーザモード）において、前記第２不揮発性メモリの前記第３領域（暗号化領域３１）から読み出された前記暗号化コードを前記暗号鍵により復号して前記ＣＰＵへ供給可能である。
【００２７】
前記第２不揮発性メモリ（ＲＯＭ３）は、前記第１動作モード（システムモード）において前記ＣＰＵによって実行されることにより、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）に分散して保持される前記複数の分割鍵を読み出して再構成することにより前記暗号鍵を復元し、前記暗号復号器に供給する、暗号鍵読み込みプログラム（７０）を、前記第４領域（非暗号化領域３１）に保持する。
【００２８】
これにより、暗号化されたプログラムを不正に読み出す攻撃に対するセキュリティレベルを向上することができる。
【００２９】
〔２〕＜暗号鍵書き込みプログラム＞
項１において、前記半導体装置は通信インターフェース（５）をさらに備える。前記第２不揮発性メモリ（ＲＯＭ３）は、暗号鍵書き込みプログラム（８０）を、前記第４領域（非暗号化領域３１）に保持する。前記暗号鍵書き込みプログラムは、前記ＣＰＵによって実行されることにより、前記通信インターフェースを介して外部から入力される前記暗号鍵を、前記複数の分割鍵に分割された状態で、前記第１不揮発性メモリ（ＥＥＰＲＯＭ）の前記第１領域（システム領域４１）内の前記複数のアドレス領域に分散して書き込むことができる。
【００３０】
これにより、半導体装置の製造後に、暗号鍵を分割・分散して半導体装置内に書き込むことができる。
【００３１】
〔３〕＜暗号鍵書き込み前の認証＞
項２において、前記暗号鍵書き込みプログラムにより、前記分割鍵が前記第１不揮発性メモリ（ＥＥＰＲＯＭ）に書き込まれる前に、認証を行う認証ステップ（９０）が実行可能に構成される。
【００３２】
これにより、第１不揮発性メモリ（ＥＥＰＲＯＭ）に書き込まれた、分割された暗号鍵を、意図的に書き換えることにより、暗号鍵の真の値を探索する、攻撃に対するセキュリティレベルを、さらに向上することができる。
【００３３】
〔４〕＜ユーザモードと鍵書き込み済みの場合の鍵書き込み処理の禁止＞
項３において、前記分割鍵が前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）に書き込まれる前に、前記ＣＰＵが動作すべき動作モードが前記第１動作モード（システムモード）であることを判定するステップ（６１）と、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）に前記複数の分割鍵が既に書き込まれているか否かを判定するステップ（６３）とが実行可能に構成される。前記ＣＰＵが動作すべき動作モードが前記第１動作モード（システムモード）であり且つ前記複数の分割鍵が未だ書き込まれていない場合に、前記認証ステップへ進むことが実行可能に構成される。
【００３４】
これにより、ユーザモードにおいて、また、暗号鍵が既に書き込まれた状態で、暗号鍵を意図的に書き換えることにより、暗号鍵の真の値を探索する、攻撃に対するセキュリティレベルを、さらに向上することができる。
【００３５】
〔５〕＜暗号鍵書き込み済みフラグ＞
項４において、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）は、前記複数の分割鍵が既に書き込まれたか否かを示すデータを保持するための領域（１４）を、前記第１領域（システム領域４１）内に有する。
【００３６】
これにより、暗号鍵書き込み済みフラグ（１４）を意図的に書き換えることにより、暗号鍵の真の値を探索する攻撃に対するセキュリティレベルを、さらに向上することができる。
【００３７】
〔６〕＜複数ビットで構成される暗号鍵書き込み済みフラグ＞
項５において、前記複数の分割鍵が既に書き込まれたか否かを示す前記データは、複数ビットで構成される。
【００３８】
これにより、暗号鍵書き込み済みフラグ（１４）を意図的に書き換える攻撃に対するセキュリティレベルを、さらに向上することができる。
【００３９】
〔７〕＜ＲＳＡ暗号による認証＞
項３から項６のうちのいずれか１項において、前記認証ステップは、保持されるＲＳＡの公開鍵ｅ及びＮと期待値ｐについて、外部から入力されるｃを用いて、前記ｃの前記ｅ乗の前記Ｎについての剰余を算出し、前記ｐと比較するステップを含む。
【００４０】
これにより、暗号鍵書き込みの前提となる認証のセキュリティレベルを、さらに向上することができる。
【００４１】
〔８〕＜暗号復号器への鍵の転送後にユーザプログラムに分岐＞
項２において、前記第２不揮発性メモリ（ＲＯＭ３）は、前記ＣＰＵが動作すべき動作モードが前記第２動作モード（ユーザモード）であると判定し（６１）、前記暗号鍵読み込みプログラムが実行された後に、前記ＣＰＵを前記第２動作モード（ユーザモード）に遷移させるプログラム（６０）を、前記第４領域（非暗号化領域３１）に保持する。前記暗号鍵読み込みプログラムは、前記ＣＰＵによって前記第１動作モード（システムモード）で実行される。
【００４２】
これにより、分割された暗号鍵（１２）が第１不揮発性メモリ（ＥＥＰＲＯＭ４）から読み出され、復元された暗号鍵（１１）が暗号復号器（１）に格納された後に、暗号化されたユーザプログラムの実行が可能になる。
【００４３】
〔９〕＜不連続なアドレスに分散＞
項１において、前記複数の分割鍵（１２）を保持するための、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）の前記第１領域（システム領域４１）内の分散する前記複数のアドレス領域は、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）における物理アドレスが不連続であり、且つ、前記ＣＰＵによってアクセスするための論理アドレスが不連続である。
【００４４】
これにより、第１不揮発性メモリ（ＥＥＰＲＯＭ４）の第１領域（システム領域４１）の内容が、攻撃によってダンプ（ダンプアタック）された場合であっても、暗号鍵の値を探索する空間を広くすることができ、セキュリティレベルを、さらに向上することができる。
【００４５】
〔１０〕＜アドレス間隔の不均一なアドレスに分散＞
項９において、前記複数の分割鍵（１２）を保持するための、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）の前記第１領域（システム領域４１）内の分散する前記複数のアドレス領域に対応する複数の前記物理アドレスの間隔が不均一であり、及び／または、前記複数のアドレス領域に対応する複数の前記論理アドレスの間隔が不均一である。
【００４６】
これにより、第１不揮発性メモリ（ＥＥＰＲＯＭ４）の第１領域（システム領域４１）の内容が、攻撃によってダンプ（ダンプアタック）された場合であっても、暗号鍵の値を探索する空間をさらに広くすることができ、セキュリティレベルを、さらに向上することができる。
【００４７】
〔１１〕＜鍵アドレス格納アドレス＞
項１において、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）は、前記複数の分割鍵を格納するための前記複数のアドレス領域の複数の鍵アドレス値（１５）を格納する鍵アドレス格納領域を、前記第１領域（システム領域４１）に有し、前記第２不揮発性メモリ（ＲＯＭ３）は、前記鍵アドレス格納領域のアドレス値（２０）を、前記第４領域（非暗号化領域３１）に保持する。
【００４８】
これにより、第１不揮発性メモリ（ＥＥＰＲＯＭ４）の第１領域（システム領域４１）の内容が、攻撃によってダンプ（ダンプアタック）された場合であっても、暗号鍵の値を探索する空間をさらに広くすることができ、セキュリティレベルを、さらに向上することができる。
【００４９】
〔１２〕＜基点アドレス＋偏差で規定されるアドレスに分散＞
項１において、前記複数の分割鍵（１２）を保持するための、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）の前記第１領域（システム領域４１）内の分散する前記複数のアドレス領域に対応する複数のアドレスのそれぞれは、基点アドレス（１６）と偏差（１７）によって算出されることができる。前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）は、前記基点アドレスと前記偏差を保持するための、前記第１領域（システム領域４１）内のアドレス領域を有する。
【００５０】
これにより、第１不揮発性メモリ（ＥＥＰＲＯＭ４）の第１領域（システム領域４１）の内容が、攻撃によってダンプ（ダンプアタック）された場合であっても、暗号鍵の値を探索する空間をさらに広くすることができ、セキュリティレベルを、さらに向上することができる。
【００５１】
〔１３〕＜シングルチップ＞
項１から項１２のうちのいずれか１項において、前記ＣＰＵ（ＣＰＵ２）と、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）と、前記第２不揮発性メモリ（ＲＯＭ３）と、前記暗号復号器（１）とが、単一の半導体基板上に形成される。
【００５２】
これにより、光学的観察、あるいは電気的プロービングによる信号の観測などによる攻撃に対するセキュリティレベルを向上することができる。
【００５３】
〔１４〕＜暗号鍵書き込み方法＞
半導体装置（９）に対して暗号鍵を書き込む暗号鍵書き込み方法であって、前記半導体装置は、以下の構成を備える。
【００５４】
第１動作モード（システムモード）と第２動作モード（ユーザモード）を有するＣＰＵ（２）。
【００５５】
前記第２動作モード（ユーザモード）において前記ＣＰＵからのアクセスが禁止される第１領域（システム領域４１）と第２領域（ユーザ領域４２）を有し電気的に書き換え可能な第１不揮発性メモリ（ＥＥＰＲＯＭ４）。
【００５６】
暗号化された命令及び／又はデータである暗号化コードを格納可能な第３領域（暗号化領域３２）と第４領域（非暗号化領域３１）を有し電気的に書き換え不能な第２不揮発性メモリ（ＲＯＭ３）。
【００５７】
前記第２動作モード（ユーザモード）において、前記第２不揮発性メモリ（ＲＯＭ３）の前記第３領域（暗号化領域３２）から読み出された前記暗号化コードを暗号鍵により復号して前記ＣＰＵへ供給可能な暗号復号器（１）。
【００５８】
通信インターフェース（５）。
【００５９】
前記暗号鍵書き込み方法は、前記通信インターフェースを介して外部から暗号鍵を入力する第１ステップ（８１）と、前記入力された前記暗号鍵を、複数の分割鍵に分割された状態で、前記第１不揮発性メモリ（ＥＥＰＲＯＭ）の前記第１領域（システム領域）内の複数のアドレス領域に分散して書き込む第２ステップ（８０）とを含む。
【００６０】
これにより、暗号化されたプログラムを不正に読み出す攻撃に対するセキュリティレベルを向上することができる。
【００６１】
〔１５〕＜動作モードと鍵書き込みフラグの確認＋認証＞
項１４において、前記第２ステップより前に、前記ＣＰＵが動作すべき動作モードが前記第１動作モード（システムモード）であることを確認する第３ステップ（６１）と、前記第１不揮発性メモリ（ＥＥＰＲＯＭ）の前記複数のアドレス領域に、前記複数の分割鍵が書き込まれていないことを確認する第４ステップ（６３）と、暗号鍵の書き込みを認証する第５ステップ（９０）をさらに含む。
【００６２】
これにより、ユーザモードにおいて、また、暗号鍵が既に書き込まれた状態で、暗号鍵を意図的に書き換えることにより、暗号鍵の真の値を探索する、攻撃に対するセキュリティレベルを、さらに向上することができる。
【００６３】
〔１６〕＜暗号復号器に鍵を読込み後ユーザプログラムに分岐＞
項１４において、暗号鍵書き込み方法は、第６ステップ（７０）と第７ステップ（６２）をさらに含む。
【００６４】
前記第６ステップ（７０）は、前記第３ステップにより前記ＣＰＵが動作すべき動作モードが前記第２動作モード（ユーザモード）であると判定されたとき、前記第１動作モード（システムモード）で、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）に分散して保持される前記複数の分割鍵を読み出し、再構成することにより前記暗号鍵を復元し、前記暗号復号器に供給する。
【００６５】
前記第７ステップ（６２）は、前記ＣＰＵの動作モードを前記第２動作モード（ユーザモード）に遷移させる。
【００６６】
これにより、分割された暗号鍵（１２）が第１不揮発性メモリ（ＥＥＰＲＯＭ４）から読み出され、復元された暗号鍵（１１）が暗号復号器（２）に格納された後に、暗号化されたユーザプログラムの実行が可能になる。
【００６７】
〔１７〕＜不連続なアドレスに分散＞
項１４において、前記複数の分割鍵（１２）を保持するための、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）の前記第１領域（システム領域４１）内の分散する前記複数のアドレス領域は、前記第１不揮発性メモリにおける物理アドレスが不連続であり、且つ、前記ＣＰＵによってアクセスするための論理アドレスが不連続である。
【００６８】
これにより、第１不揮発性メモリ（ＥＥＰＲＯＭ４）の第１領域（システム領域４１）の内容が、攻撃によってダンプ（ダンプアタック）された場合であっても、暗号鍵の値を探索する空間を広くすることができ、セキュリティレベルを、さらに向上することができる。
【００６９】
〔１８〕＜アドレス間隔の不均一なアドレスに分散＞
項１７において、前記複数の分割鍵（１２）を保持するための、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）の前記第１領域（システム領域４１）内の分散する前記複数のアドレス領域に対応する複数の前記物理アドレスの間隔が不均一であり、及び／または、前記複数のアドレス領域に対応する複数の前記論理アドレスの間隔が不均一である。
【００７０】
これにより、第１不揮発性メモリ（ＥＥＰＲＯＭ４）の第１領域（システム領域４１）の内容が、攻撃によってダンプ（ダンプアタック）された場合であっても、暗号鍵の値を探索する空間をさらに広くすることができ、セキュリティレベルを、さらに向上することができる。
【００７１】
〔１９〕＜鍵格納アドレス＞
項１４において、暗号鍵書き込み方法は、第８ステップをさらに含む。
【００７２】
前記第８ステップは、鍵格納アドレス（１５、１９）を、前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）の前記第１領域（システム領域４１）または前記第２不揮発性メモリ（ＲＯＭ３）の前記第４領域（非暗号化領域３１）から読み出す。ここで、前記鍵格納アドレス（１５、１９）は、前記複数の分割鍵（１２）を前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）の前記第１領域（システム領域４１）内に分散して格納するための、前記複数のアドレス領域のそれぞれを示す。
【００７３】
これにより、第１不揮発性メモリ（ＥＥＰＲＯＭ４）の第１領域（システム領域４１）の内容が、攻撃によってダンプ（ダンプアタック）された場合であっても、暗号鍵の値を探索する空間をさらに広くすることができ、セキュリティレベルを、さらに向上することができる。
【００７４】
〔２０〕＜基点アドレス＋偏差で規定されるアドレスに分散＞
項１４において、前記複数の分割鍵（１２）を前記第１不揮発性メモリ（ＥＥＰＲＯＭ４）の前記第１領域（システム領域４１）内に分散して格納するための、前記複数のアドレス領域のそれぞれを示す鍵格納アドレスは、基点アドレス（１６）と偏差（１７）によって算出されることができる。暗号鍵書き込み方法は、前記通信インターフェースを介して外部から前記基点アドレスと前記偏差を、前記通信インターフェースを介して外部から入力する第９ステップ（８３、８４）をさらに含む。
【００７５】
これにより、第１不揮発性メモリ（ＥＥＰＲＯＭ４）の第１領域（システム領域４１）の内容が、攻撃によってダンプ（ダンプアタック）された場合であっても、暗号鍵の値を探索する空間をさらに広くすることができ、セキュリティレベルを、さらに向上することができる。
【００７６】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００７７】
〔実施形態１〕
図１は、実施の一形態に係る半導体装置の構成を表すブロック図である。
【００７８】
暗号復号器１と、ＣＰＵ２と、電気的に書き換え不能な不揮発性メモリであるＲＯＭ３と、電気的に書き換え可能な不揮発性メモリであるＥＥＰＲＯＭ４が、アドレスバス７とデータバス８を介して、互いに接続されている。ＣＰＵ２は、システムモードとユーザモードを含むいくつかの動作モードで動作することができる。ＲＯＭ３は、暗号化された命令及び／又はデータである暗号化コードを格納する、暗号化領域３２と、暗号化されていない命令及び／又はデータを格納する、非暗号化領域３１を備える。ＥＥＰＲＯＭ４は、システムモードではＣＰＵ２からのアクセスが許されるが、ユーザモードではＣＰＵ２からのアクセスが禁じられる、システム領域４１と、どちらのモードでもＣＰＵ２からのアクセスが許されるユーザ領域４２を備える。
【００７９】
ＥＥＰＲＯＭ４のシステム領域４１には、ＲＯＭ３の暗号化領域３１に格納されている暗号化コードを復号するための暗号鍵１１を構成する複数の分割鍵１２を格納するための、複数のアドレス領域が設けられている。ＲＯＭ３の非暗号化領域３１には、暗号鍵読み込みプログラム７０が格納されている。システムモードにおいてＣＰＵ２によって暗号鍵読み込みプログラム７０が実行されることにより、ＥＥＰＲＯＭ４に分散して保持される複数の分割鍵１２を読み出して再構成することにより暗号鍵１１を復元し、暗号復号器１に供給する。暗号復号器１は、暗号鍵１１を保持し、ユーザモードにおいて、ＲＯＭ３の暗号化領域３２から読み出された暗号化コードを暗号鍵１１により復号してＣＰＵ２に供給する。
【００８０】
保護すべきユーザプログラムは、暗号鍵１１を使って予め暗号化し、ＲＯＭ３の暗号化領域３２に格納しておく。ＲＯＭ３の暗号化領域３２の内容を解読したとしても、正しい暗号鍵１１が知られない限り、保護すべきユーザプログラムの内容の秘匿性は保たれる。暗号鍵１１は、複数のビット列である分割鍵に分割され、ＥＥＰＲＯＭ４のシステム領域に分散して格納される。分割し分散させることにより、再構成するための組合せの数を大きくすることができ、セキュリティレベルを向上することができる。分割し分散して格納されている分割鍵１２は、電源投入後に実行される暗号鍵読み込みプログラム７０によって、ＥＥＰＲＯＭ４から読み出され、再構成された暗号鍵１１が暗号復号器１に書き込まれる。その後は、ＲＯＭ３の暗号化領域３２に格納されているユーザプログラムは、暗号復号器１によって暗号鍵１１を使って復号され、ＣＰＵ２に供給されることにより、実行可能となる。
【００８１】
これにより、暗号化されたプログラムを不正に読み出す攻撃に対するセキュリティレベルを向上することができる。ＥＥＰＲＯＭ４のシステム領域４１は、ユーザモードではアクセスができないので、ダンプアタックから守られている。仮にＥＥＰＲＯＭ４の内容がダンプされたとしても、暗号鍵は分割され、分散して格納されるので、暗号鍵の探索空間を大きくして、セキュリティレベルを向上することができる。
【００８２】
ＲＯＭ３やＥＥＰＲＯＭ４などのメモリに格納される命令コードやデータは、暗号化とは別にスクランブル処理を施されていても良い。その場合には、メモリからデータバス８と暗号復号器１を経てＣＰＵ２に至る経路上に、デスクランブル回路を挿入すればよい。
【００８３】
暗号復号器１は、暗号の復号を行うか、入力されたコードをそのままＣＰＵ２に供給するかを指定するイネーブルビット１３を備えると良い。暗号鍵読み込みプログラム７０が実行されるのは、当然ながら、暗号復号器１に暗号鍵１１が設定される前である。暗号鍵読み込みプログラム７０のように、暗号化されていないプログラムを実行する場合には、イネーブルビット１３により、暗号復号器１に復号動作をさせないように設定する。
【００８４】
暗号復号器１は、暗号鍵１１を保持するために、レジスタを備えると良い。このとき、レジスタの初期値、即ち電源投入直後のリセット値を、暗号鍵１１の初期値として利用することができる。暗号鍵読み込みプログラム７０のような、正しい暗号鍵１１によって暗号化されていては実行できないプログラムを、レジスタのリセット値である、暗号鍵１１の初期値を使って暗号化しておく。上述のイネーブルビット１３を設ける代わりに、正しい暗号鍵１１が書き込まれるまでの間、暗号復号器１は上記レジスタの初期値を暗号鍵として使った復号を行うようにすることができる。この場合には、暗号鍵読み込みプログラム７０は、途中まで暗号鍵１１の初期値を使って暗号化しておき、正しい暗号鍵１１の書き込みステップの直後から、正しい暗号鍵１１で暗号化しておく必要がある。
【００８５】
暗号鍵読み込みプログラム７０は、半導体装置の電源投入直後に動作するリセットルーチン６０から呼び出される。なお、このリセットルーチンも、暗号鍵読み込みプログラム７０と同様に、暗号復号器１に暗号鍵１１が設定される前に実行されるため、上述のような簡易な暗号化が施されているか、暗号化されていないことが必要である。リセットルーチン６０もＲＯＭ３の非暗号化領域３１に格納されている。
【００８６】
ＥＥＰＲＯＭ４は、システム領域４１に、分割鍵１２が既に書き込まれているか否かを示す、鍵書き込み済みフラグ１４を格納する領域を備えるのが好適である。その作用および効果は、以下のリセットルーチンについての説明に含めて述べる。
【００８７】
図２は、実施の一形態に係る半導体装置におけるリセットルーチンの一例を示すフローチャートである。
【００８８】
リセットルーチン６０は、パワーオンリセットによって起動される。まず、ＣＰＵ２が動作すべき動作モードを判定する（ステップ６１）。ＣＰＵ２が動作すべき動作モードは、一般のマイコンでは、端子の状態で指定されるが、ＩＣカードに用いられるような高いセキュリティレベルが要求されるマイコンでは、そのような端子を設けることができないので、ＥＥＰＲＯＭ４のような不揮発性メモリなどによって、指定される。この判定（ステップ６１）自体は、システムモードで動作する。
【００８９】
ＣＰＵ２が動作すべき動作モードがユーザモードであるとき、鍵読み込み処理７０＿２を行った後、ユーザモードへ切り替える（ステップ６２）。鍵読み込み処理７０＿２により、ＥＥＰＲＯＭ４から分割鍵１２が読み出され、再構成された暗号鍵１１が暗号復号器１に書き込まれる。その後は、ＲＯＭ３の暗号化領域３２に格納されているユーザプログラムは、暗号復号器１によって暗号鍵１１を使って復号され、ＣＰＵ２に供給されることにより、ユーザモードで実行可能となる。
【００９０】
ＣＰＵ２が動作すべき動作モードがシステムモードであるとき、ＥＥＰＲＯＭ４への分割鍵１２の書き込みが既になされているか、まだなされていないかが判定される（ステップ６３）。このとき、鍵書き込み済みフラグ１４を読み出して判断すると良い。分割鍵１２がＥＥＰＲＯＭ４へ書き込み済みの場合、鍵読み込み処理７０＿１を行うことにより、分割鍵１２が読み出され、再構成された暗号鍵１１が暗号復号器１に書き込まれる。その後、システムモード用の認証を行い（ステップ６４）、認証された場合（ステップ６５）にはシステムモードの動作を開始するが、認証に失敗した場合（ステップ６５）には、エラー処理（ステップ６６＿１）を行って、システムをリセットする。システムモードによる動作を開始する前に認証を行うことにより、セキュリティレベルを向上することができる。
【００９１】
ＣＰＵ２が動作すべき動作モードがシステムモードで、ＥＥＰＲＯＭ４への分割鍵１２の書き込みがまだなされていないかと判定（ステップ６３）された場合には、鍵書き込み用認証（ステップ９０）が行われる。その結果、認証された場合（ステップ６７）には、鍵書き込み処理（ステップ８０）を行った後に、システムをリセットする。認証に失敗した場合（ステップ６７）には、エラー処理（ステップ６６＿２）を行って、システムをリセットする。
【００９２】
鍵書き込み処理（ステップ８０）は、外部から暗号鍵１１を受信して、複数のビット列に分割して分割鍵１２を生成し、ＥＥＰＲＯＭ４のシステム領域４１に分散して書き込む。予め外部で暗号鍵１１を複数のビット列に分割することによって生成した複数の分割鍵１２を、ＥＥＰＲＯＭ４のシステム領域４１に分散して書き込んでもよい。これにより、半導体装置の製造後に、暗号鍵を分割・分散して半導体装置内に書き込むことができる。
【００９３】
以上述べたように、ユーザモードのとき、鍵が既に書き込み済みのとき、また、鍵書き込み用の認証（ステップ９０）で認証に失敗した場合には、鍵書き込み処理（ステップ８０）が実行されない構成となっている。これにより、ＥＥＰＲＯＭ４に書き込まれた分割鍵１２を、１つずつ意図的に書き換えることにより、暗号鍵の真の値を探索するような、攻撃に対するセキュリティレベルを向上することができる。
【００９４】
鍵書き込み済みフラグ１４は、１ビットで構成されてもよいが、秘密に管理された複数ビットで構成されるのがより好適である。これにより、暗号鍵書き込み済みフラグ１４を意図的に書き換える攻撃に対するセキュリティレベルを向上することができる。
【００９５】
暗号鍵１１の分割と分散の方法について、定量的に考察する。
【００９６】
暗号のセキュリティレベルを表す指標の一つに、暗号鍵の探索空間の大きさがある。例えば、暗号鍵が128ビットの場合、２128通りの組合せの中に必ず真の暗号鍵が含まれるので、探索空間は２128である。
【００９７】
これに対し、分割鍵１２が書き込まれたＥＥＰＲＯＭ４全体が、メモリダンプによって読み出された場合を想定する。このとき、ＥＥＰＲＯＭ４のメモリ空間から分割鍵１２を探索して再構成するための探索空間を求める。たとえば、256KBのメモリ空間に128bit(16B)の鍵を１ワード（2B）づつのランダムなアドレス領域に格納する場合、128K種類のアドレスから8個のアドレスを順番の違いも考慮した組み合わせで選択することとなるので、おおよそ２(17×8)通り、２136通りの組み合わせとなる。これは、128ビットの暗号鍵が原理的に持っている探索空間２128よりも大きいので、セキュリティレベルは低下していない。一方、たとえば、128bit(16B)の鍵を256KBのメモリ空間の一箇所にまとめて格納すると、256KBのメモリ空間から16Bを切り出すときの切り出し方の組み合わせは、２18通りとなる。もともとの暗号鍵が有している探索空間の２128に比べると、探索空間が大幅に減少するので、セキュリティレベルは著しく低下する。
【００９８】
暗号鍵を分割する分割数は、鍵を格納するメモリの実アドレス空間の広さをパラメータとし、鍵の探索空間を基準として、いくつに分割すべきかを決めることができる。たとえば、メモリの実アドレス空間の広さをＲバイト、鍵の分割数をＬとし、鍵のビット長をＭ、分割された部分鍵のi番目の部分鍵のビット長をｍiとすると、探索空間は、
【数１】
2014089640.tif 000003
と表現できる。通常、実メモリ空間は、鍵のビット長に比べて大きいので、
【数２】
2014089640.tif 000004
と考えることができ、
【数３】
2014089640.tif 000005
と近似できる。また、鍵を同じビット長に分割する場合、
【数４】
2014089640.tif 000006
となる。ここで、
【数５】
2014089640.tif 000007
を満たす場合は、そもそも鍵がメモリの実アドレス空間のどこに格納されているかを試すよりも、鍵を全数探索した方が早いことを意味する。
【００９９】
こうしたケースは、鍵のビット長Ｍが短い場合に発生する。通常は、実メモリ空間は十数ビットのアドレスで表現できるサイズであるので、分割数Ｌが小さい場合はそうしたケースは発生しない。したがって、ダンプアタックに対して、探索空間をＳビット以上にしたい場合、
【数６】
2014089640.tif 000008
を満たすように分割数Ｌを設定すればよい。Ｒは１よりも大きいと仮定してよいので、
【数７】
2014089640.tif 000009
となる。また、Ｓは現在の計算機の能力から、８０〜１２８程度が必要とされている。したがって、たとえば、２５６ＫＢの実メモリ空間があった場合、
【数８】
2014089640.tif 000010
となり、５以上に分割すればよいことがわかる。
【０１００】
本実施形態では、ユーザモードではアクセスができないＥＥＰＲＯＭ４のシステム領域に、分割鍵を格納することにより、ダンプアタックから守っている。さらに暗号鍵の分割数を上述のように適切に選ぶことにより、仮にセキュリティが破られてダンプアタックを許したとして、探索空間を十分大きく保つことができる。
【０１０１】
上述の通りの鍵の分割による大きな探索空間を実現するためには、分割鍵はメモリ上の不連続なアドレスに格納すると良い。分割鍵が連続するアドレスに格納され、攻撃者がその事実を知っていると、分割した効果が失われるからである。また、不連続なアドレスに格納しても、均等な間隔であった場合、攻撃者がその事実を知っていると、分割した効果が失われるので、アドレス間隔は不均一であることが望ましい。このときのアドレスとは、メモリの物理アドレスとＣＰＵからみた論理アドレスを指す。物理アドレスと論理アドレスの両方のアドレスで不連続であることが望ましいが、一方のみ不連続でも、セキュリティレベルの向上効果はある。
【０１０２】
図１に示した半導体装置は、単一の半導体基板上に、公知の集積回路製造方法を用いて形成することができる。
【０１０３】
図３は、実施の一形態に係るＬＳＩの構成を表すブロック図である。ＬＳＩ９には、例えば単一のシリコン基板上に、暗号復号器１、ＣＰＵ２、ＲＯＭ３、ＥＥＰＲＯＭ４、ＵＡＲＴ５、及びＲＡＭ６が、アドレスバス７とデータバス８を介して互いに接続して形成されている。ＵＡＲＴ５は、汎用非同期送受信機（Universal Asynchronous Receiver Transmitter）である。同期式送受信機が追加された、汎用同期・非同期送受信機ＵＳＡＲＴ（Universal Synchronous and Asynchronous Receiver Transmitter）であっても良い。上記通信インターフェースはＵＡＲＴ、ＵＳＡＲＴに限らず、如何なる通信インターフェースでも良い。ＬＳＩ９は、ＶＣＣとＧＮＤからなる電源、リセット、クロック、及び、ＵＡＲＴ５の信号端子を端子として備える。また、図示はしないが予備の端子を数本備えてもよい。オンチップ発振器を備えればクロック端子を、パワーオンリセット回路をオンチップに備え、リセットしてパワーオンリセットのみを想定するシステム設計をすれば、リセット端子をも省略することができる。必要最小限の端子のみを備えることにより、ＬＳＩ９内部の状態を観察あるいは電気的に観測することが困難となり、光学的観察、あるいは電気的プロービングによる信号の観測などによる攻撃に対するセキュリティレベルを向上することができる。
【０１０４】
ＲＯＭ３の内容を暗号化し、ＣＰＵ２でＲＯＭ３上のプログラムを実行する際にリアルタイムで復号化を行なうセキュアマイコンにおいて、復号用の暗号鍵をＲＯＭやチップ上の回路としてあらかじめ設定しておくのではなく、ＥＥＰＲＯＭなどの電気的に書き換え可能な不揮発性メモリ上に製造後に書き込むことで、リバースエンジニアリングによる鍵漏洩のリスクを減らす。チップの製造直後は、復号用の暗号鍵を書き込む処理以外は、暗号化された状態で格納されており、ＣＰＵ２で実行することが出来ない。暗号鍵が書き込まれた後に利用できるようになる。また、ユーザに出荷される場合には、暗号鍵の設定などのＲＯＭ３の非暗号化領域３１の内容については、ユーザモードではアクセスできないようにすることができる。
【０１０５】
暗号鍵を分割し、または既に分割された状態で、ＥＥＰＲＯＭ４のシステム領域４１に分散して書き込むためには、暗号鍵の書き込みプログラム８０を実行する。鍵書き込みプログラム８０は、暗号鍵の書き込み前に実行されなければならないから、必然的にその命令コードは暗号化することができず、ＲＯＭ３の非暗号化領域３１に格納される。
【０１０６】
暗号鍵書き込みプログラム８０を、ＬＳＩ上に格納する代わりに、出荷する前に、ＲＡＭ６またはＥＥＰＲＯＭ４に一旦書き込み、そのプログラムを実行して暗号鍵を分割して書き込み、ＲＡＭ６またはＥＥＰＲＯＭ４に書き込んだ暗号鍵書き込みプログラム８０を消去してから出荷することもできる。これにより、暗号鍵書き込みプログラム８０の内容を知る攻撃からは防御される。一方、ＲＡＭ６またはＥＥＰＲＯＭ４上の暗号化されていないプログラムの実行を許す設定を、ＬＳＩに残すこととなり、その面での脆弱性を生じる。
【０１０７】
〔実施形態２〕＜鍵格納アドレスによる分割鍵を格納するアドレスの指定＞
図４は、鍵格納アドレスによって分割鍵を格納するアドレスを指定する実施形態における、ＲＯＭとＥＥＰＲＯＭのメモリマップである。ＣＰＵ２から見た論理アドレス空間内の異なる領域に、それぞれ割り付けられている。ＲＯＭ３は非暗号化領域３１と暗号化領域３２を持ち、ＥＥＰＲＯＭ４はシステム領域４１とユーザ領域４２を持つ。
【０１０８】
鍵格納アドレス１９＿１、１９＿２、１９＿３と鍵書き込み済フラグ格納アドレス１８は、それぞれ、ＥＥＰＲＯＭ４のシステム領域４１における、分割鍵１２＿１、１２＿２、１２＿３と鍵書き込み済みフラグ１４を格納すべきアドレスの値であり、ＲＯＭ３の非暗号化領域に格納されている。リセットルーチン６０は、図２に示したフローチャートの通り、ステップ６３で鍵書き込み済みか否かの判定を行う。このとき、鍵書き込み済フラグ格納アドレス１８に基づいて、ＥＥＰＲＯＭ４の鍵書き込み済みフラグ１４を読み出し、値を判定する。鍵書き込み処理８０は、鍵格納アドレス１９＿１、１９＿２、１９＿３に基づいて、ＥＥＰＲＯＭ４に分割鍵１２＿１、１２＿２、１２＿３を書き込む。鍵読み込み処理７０＿１、７０＿２は、鍵格納アドレス１９＿１、１９＿２、１９＿３に基づいて、ＥＥＰＲＯＭ４から分割鍵１２＿１、１２＿２、１２＿３を読み出し、暗号復号器１に書き込む。
【０１０９】
図１０は、鍵格納アドレスによって分割鍵を格納するアドレスを指定する実施形態における、鍵読み込み処理（ループ）のフローチャートである。ＥＥＰＲＯＭ４上の第ｉ部分鍵１２＿ｉをＣＰＵ２の汎用レジスタに読み出し（ステップ７１）、暗号復号器１の鍵レジスタ内の第ｉ部分鍵１２＿ｉに対応するレジスタに、汎用レジスタに読み出した第ｉ部分鍵１２＿ｉを書き込む（ステップ７２）。暗号鍵の分割数をＬとするとき、ｉを１からＬまで繰り返すループによって、ステップ７１と７２を繰り返し実行する。
【０１１０】
図１１は、本実施形態における、鍵読み込み処理（ループアンローリング）のフローチャートである。図１０に示した鍵読み込み処理７０では、ループによってステップ７１と７２を繰り返し実行するのに対し、ループを用いず、ＥＥＰＲＯＭ４からの部分鍵読み出し（ステップ７１）と暗号復号器１への分鍵書き込み（ステップ７２）をＬ個分の命令コードを順次記述した命令コードによって実行するものである。ループを制御するレジスタ値をレーザ照射等により読み出し値を一時的に破壊し、ループ回数を減らし、鍵の位置部分のみを書き換えるアタックに対して、ループ制御を無くすることでセキュリティレベルを向上することができる。
【０１１１】
〔実施形態３〕＜鍵アドレス格納アドレスで指定される鍵アドレスを介して分割鍵を格納するアドレスを指定＞
暗号鍵書き込みプログラム８０はＲＯＭ３の非暗号化領域３１に格納されるので、ＲＯＭ３を光学的に観察するなどの攻撃を受けることにより、暗号鍵書き込みプログラム８０が攻撃者に知られる恐れを否定することができない。このとき、実施形態２で述べた分割鍵を格納するアドレスの指定方法では、ＲＯＭ３を観察することにより、暗号鍵書き込みプログラム８０の内容を解析して分割鍵１２が格納されるＥＥＰＲＯＭ４のアドレスが探知される恐れがある。分割鍵１２が格納されているのはＥＥＰＲＯＭ４のシステム領域４１であるので、ユーザからはアクセスができないように設計されているとはいえ、分割鍵１２の格納されているアドレスが探知されることは、セキュリティレベルの低下である。
【０１１２】
そこで、暗号鍵書き込みプログラム８０の内容の解析によっても、深刻なセキュリティレベルの低下を招かない、分割鍵を格納するアドレスの指定方法を、実施形態３及び４に示す。
【０１１３】
図５は、鍵アドレス格納アドレスによって鍵アドレスを指定し、その鍵アドレスによって分割鍵を格納するアドレスを指定する実施形態における、ＲＯＭとＥＥＰＲＯＭのメモリマップである。ＣＰＵ２から見た論理アドレス空間内の異なる領域に、それぞれ割り付けられている。ＲＯＭ３は非暗号化領域３１と暗号化領域３２を持ち、ＥＥＰＲＯＭ４はシステム領域４１とユーザ領域４２を持つ。
【０１１４】
分割鍵１２＿１、１２＿２、１２＿３を書き込むアドレスは、鍵アドレス１５＿１、１５＿２、１５＿３として、ＥＥＰＲＯＭ４のシステム領域４１に格納される。鍵アドレス１５＿１、１５＿２、１５＿３を格納すべきアドレスは、鍵アドレス格納アドレス２０＿１、２０＿２、２０＿３として、ＲＯＭ３の非暗号化領域に格納されている。鍵書き込み済みフラグ１４を格納すべきアドレスは、実施形態２と同様に、鍵書き込み済フラグ格納アドレス１８によって指定される。リセットルーチン６０は、図２に示したフローチャートの通り、ステップ６３で鍵書き込み済みか否かの判定を行う。このとき、実施形態２と同様に、鍵書き込み済フラグ格納アドレス１８に基づいて、ＥＥＰＲＯＭ４の鍵書き込み済みフラグ１４を読み出し、値を判定する。鍵アドレス１５＿１、１５＿２、１５＿３は、例えばＵＡＲＴ５を介して外部から入力され、鍵アドレス格納アドレス２０＿１、２０＿２、２０＿３で指定される、ＥＥＰＲＯＭ４のシステム領域４１に、書き込まれる。鍵書き込み処理８０は、鍵アドレス１５＿１、１５＿２、１５＿３に基づいて、ＥＥＰＲＯＭ４に分割鍵１２＿１、１２＿２、１２＿３を書き込む。このとき、分割鍵１２＿１、１２＿２、１２＿３も、例えばＵＡＲＴ５を介して外部から入力される。鍵読み込み処理７０＿１、７０＿２は鍵アドレス１５＿１、１５＿２、１５＿３に基づいて、ＥＥＰＲＯＭ４から分割鍵１２＿１、１２＿２、１２＿３を読み出し、暗号復号器１に書き込む。
【０１１５】
ＥＥＰＲＯＭ４は、電気的な状態の変化で情報を記憶するので、光学的な観察によっては情報を読み取ることができない。このため、ＲＯＭ３よりもセキュリティレベルが高い。本実施形態においては、分割鍵１２＿１、１２＿２、１２＿３を格納すべきアドレスである、鍵アドレス１５＿１、１５＿２、１５＿３を、ＥＥＰＲＯＭ４のシステム領域４１にすることにより、実施形態１よりもセキュリティレベルを向上することができる。
【０１１６】
図１２は、鍵アドレス格納アドレスによって鍵アドレスを指定し、その鍵アドレスによって分割鍵を格納するアドレスを指定する実施形態における、鍵読み込み処理（ループ）のフローチャートである。ＥＥＰＲＯＭ４上に格納された第ｉ部分鍵１２＿ｉが格納されているアドレスである鍵アドレス１５＿ｉをＣＰＵ２の汎用レジスタに読み出す（ステップ７５）。次に、ＥＥＰＲＯＭ４の、その汎用レジスタが指し示すアドレスから第ｉ部分鍵１２＿ｉをＣＰＵ２の汎用レジスタに読み出す（ステップ７１）。汎用レジスタに読み出した第ｉ部分鍵１２＿ｉは、暗号復号器１の鍵レジスタ内の第ｉ部分鍵１２＿ｉに対応するレジスタに書き込む（ステップ７２）。暗号鍵の分割数をＬとするとき、ｉを１からＬまで繰り返すループによって、ステップ７５、７１と７２を繰り返し実行する。
【０１１７】
図１０に示した、実施形態２における鍵読み込み処理と比較すると、ステップ７１がレジスタ間接アドレッシングによるロード命令になっており、その汎用レジスタの値を、その前に実行されるステップ７５のロード命令によって決めている。
【０１１８】
図１３は、本実施形態における、鍵読み込み処理（ループアンローリング）のフローチャートである。図１２に示した鍵読み込み処理７０では、ループによってステップ７５、７１と７２を繰り返し実行するのに対し、ループを用いず、ステップ７５、７１と７２をＬ個分の命令コードを順次記述した命令コードによって実行するものである。実施形態２の場合と同様に、ループを制御するレジスタ値をレーザ照射等により読み出し値を一時的に破壊し、ループ回数を減らし、鍵の位置部分のみを書き換えるアタックに対して、ループ制御を無くすることでセキュリティレベルを向上することができる。
【０１１９】
〔実施形態４〕＜基点アドレスと偏差によって分割鍵を格納するアドレスを指定＞
実施形態３では、分割鍵を格納するアドレスを指定するのに、鍵アドレス格納アドレスによって鍵アドレスを指定し、その鍵アドレスによって分割鍵を格納するアドレスを指定するという、間接的なポインタを仲介させることによって、追跡を困難にし、セキュリティレベルを向上する。これに代えて、分割鍵を格納するアドレスを指定するのに、何らかの関数を用いることによって追跡を困難にし、セキュリティレベルを向上する。例えば、分割鍵を格納するアドレスを、基点アドレスと偏差から算出する。
【０１２０】
図６は、基点アドレスと偏差によって分割鍵を格納するアドレスを指定する、本実施形態における、ＲＯＭとＥＥＰＲＯＭのメモリマップである。ＣＰＵ２から見た論理アドレス空間内の異なる領域に、それぞれ割り付けられている。ＲＯＭ３は非暗号化領域３１と暗号化領域３２を持ち、ＥＥＰＲＯＭ４はシステム領域４１とユーザ領域４２を持つ。
【０１２１】
分割鍵１２＿１、１２＿２、１２＿３を書き込むアドレスは、それぞれ、基点アドレス１６＿１、１６＿２、１６＿３と偏差１７＿１、１７＿２、１７＿３の和によって与えられる。基点アドレス１６＿１、１６＿２、１６＿３と偏差１７＿１、１７＿２、１７＿３は、ＥＥＰＲＯＭ４のシステム領域４１に格納される。基点アドレス１６＿１、１６＿２、１６＿３と偏差１７＿１、１７＿２、１７＿３を格納すべきアドレスは、それぞれ、基点アドレス格納アドレス２１＿１、２１＿２、２１＿３と偏差格納アドレス２２＿１、２２＿２、２２＿３として、ＲＯＭ３の非暗号化領域に格納されている。鍵書き込み済みフラグ１４を格納すべきアドレスは、実施形態２、３と同様に、鍵書き込み済フラグ格納アドレス１８によって指定される。リセットルーチン６０は、図２に示したフローチャートの通り、ステップ６３で鍵書き込み済みか否かの判定を行う。このとき、実施形態２、３と同様に、鍵書き込み済フラグ格納アドレス１８に基づいて、ＥＥＰＲＯＭ４の鍵書き込み済みフラグ１４を読み出し、値を判定する。基点アドレス１６＿１、１６＿２、１６＿３と偏差１７＿１、１７＿２、１７＿３は、例えばＵＡＲＴ５を介して外部から入力され、基点アドレス格納アドレス２１＿１、２１＿２、２１＿３と偏差格納アドレス２２＿１、２２＿２、２２＿３で指定される、ＥＥＰＲＯＭ４のシステム領域４１に、書き込まれる。
【０１２２】
鍵書き込み処理８０は、基点アドレス格納アドレス２１＿１、２１＿２、２１＿３と偏差格納アドレス２２＿１、２２＿２、２２＿３で指定される、ＥＥＰＲＯＭ４のシステム領域４１から、基点アドレス１６＿１、１６＿２、１６＿３と偏差１７＿１、１７＿２、１７＿３を読み出し、分割鍵を格納すべきアドレスを算出する。それに基づいてＥＥＰＲＯＭ４に分割鍵１２＿１、１２＿２、１２＿３を書き込む。
【０１２３】
図９は、本実施形態における、鍵書き込み処理に伴う通信フローの例を表す説明図である。図１または図３に示したＬＳＩなどの半導体装置であるチップは、ＵＡＲＴ５などの通信インターフェースを介してカードリーダライタと接続されている。カードリーダライタは、一般のユーザが使うカードリーダライタではなく、チップをシステムモードで動作させることができ、ＥＥＰＲＯＭ４のシステム領域への書き込みが可能な特殊なものである必要がある。同等の機能があればよく、ＬＳＩのロジックテスタなどでもよい。
【０１２４】
基点アドレス１６＿１と偏差１７＿１と、それに対応する分割鍵１２＿１は、それぞれ、基点アドレス８３＿１、偏差８４＿１、分割鍵８１＿１として、カードリーダライタから例えばＵＡＲＴ５などの通信インターフェースを介してチップに送信される。チップは、基点アドレス１６＿１と偏差１７＿１を加算することによって格納すべきアドレスを求め、そのアドレスに分割鍵１２＿１を書き込む。書き込みが完了すると、鍵書き込み完了ステータス８２＿１を、カードリーダライタに送信する。これを分割数であるＬ回繰り返す。
【０１２５】
鍵読み込み処理７０＿１、７０＿２は基点アドレス格納アドレス２１＿１、２１＿２、２１＿３と偏差格納アドレス２２＿１、２２＿２、２２＿３で指定される、ＥＥＰＲＯＭ４のシステム領域４１から、基点アドレス１６＿１、１６＿２、１６＿３と偏差１７＿１、１７＿２、１７＿３を読み出し、分割鍵を格納すべきアドレスを算出する。それに基づいてＥＥＰＲＯＭ４から分割鍵１２＿１、１２＿２、１２＿３を読み出し、暗号復号器１に書き込む。
【０１２６】
実施形態２、３と異なり、分割鍵１２＿１、１２＿２、１２＿３を格納すべきアドレスそのもの（実施形態２では鍵格納アドレス１９＿１、１９＿２、１９＿３、実施形態３では鍵アドレス１５＿１、１５＿２、１５＿３）は、装置上のどのメモリにも格納されていない。これにより、ＥＥＰＲＯＭ４システム領域４１の内容までもが、攻撃によってダンプされた場合であっても、分割鍵１２＿１、１２＿２、１２＿３を格納すべきアドレスを容易に求めることができず、セキュリティレベルが向上する。
【０１２７】
分割鍵１２＿１、１２＿２、１２＿３を格納すべきアドレスを算出するための関数は、任意に決めることができる。分割鍵ごとに異なる基点アドレスによって指定する実施形態を示したが、一つの基点アドレスと複数の偏差によって定めても良い。その他、如何なる関数によって算出するものとしてもよい。関数自体はＲＯＭ３の非暗号化領域に、プログラムの一部として格納されるが、そのパラメータ（本実施形態では基点アドレスと偏差）は、ＥＥＰＲＯＭ４のシステム領域４１に格納するのが好ましい。
【０１２８】
図１４は、基点アドレスと偏差によって分割鍵を格納するアドレスを指定する、本実施形態における、鍵読み込み処理（ループ）のフローチャートである。ＥＥＰＲＯＭ４上に格納された第ｉ部分鍵１２＿ｉの基点アドレス１６＿ｉをＣＰＵ２の汎用レジスタ１に読み出し（ステップ７３）、偏差１７＿ｉをＣＰＵ２の汎用レジスタ２に読み出す（ステップ７４）。次に、汎用レジスタ１と汎用レジスタ２の和を求め、汎用レジスタ３に格納する（ステップ７５）。これが、第ｉ部分鍵１２＿ｉを格納すべきアドレスである。次に、その汎用レジスタ３が指し示すアドレスのＥＥＰＲＯＭ４から第ｉ部分鍵１２＿ｉをＣＰＵ２の汎用レジスタ４に読み出す（ステップ７１）。汎用レジスタ４に読み出した第ｉ部分鍵１２＿ｉは、暗号復号器１の鍵レジスタ内の第ｉ部分鍵１２＿ｉに対応するレジスタに書き込む（ステップ７２）。暗号鍵の分割数をＬとするとき、ｉを１からＬまで繰り返すループによって、ステップ７３、７４、７５、７１と７２を繰り返し実行する。
【０１２９】
図１５は、本実施形態における、鍵読み込み処理（ループアンローリング）のフローチャートである。図１４に示した鍵読み込み処理７０では、ループによってステップ７３、７４、７５、７１と７２を繰り返し実行するのに対し、ループを用いず、ステップ７３、７４、７５、７１と７２をＬ個分の命令コードを順次記述した命令コードによって実行するものである。実施形態２、３の場合と同様に、ループを制御するレジスタ値をレーザ照射等により読み出し値を一時的に破壊し、ループ回数を減らし、鍵の位置部分のみを書き換えるアタックに対して、ループ制御を無くすることでセキュリティレベルを向上することができる。
【０１３０】
〔実施形態５〕＜認証＞
鍵書き込み用認証（ステップ９０）について、さらに詳しく説明する。
【０１３１】
認証の方法にはいくつかの方法がある。たとえば、認証用の秘密の入力データのハッシュ値を期待値としてＲＯＭに格納しておき、認証を行なう際には、ハッシュ値を生成するための入力データを認証用に用いる方法が考えられる。また別の方法としては、ブロック暗号の鍵情報を認証用の秘密情報とし、認証用のブロック暗号の鍵を用いて、平文を暗号化し、平文と暗号化文の組をＲＯＭ内に格納しておき、認証の際には鍵情報を入力値とし、ＲＯＭ内に格納された平文を入力された鍵で暗号化し、ＲＯＭ内に格納された暗号化文が得られるかを検査する方法もある。
【０１３２】
公開鍵暗号を用いた方法では、ＤＳＡの考え方を用いて、ＲＳＡの公開鍵、e、Nと、期待値pをＲＯＭ内に格納しておき、外部からp=Ce mod Nを満たすような値Cを入力する。認証時には、Ce mod Nを計算し、期待値pと等しくなることを確認する。Cの値は、RSAの秘密素数dを用いて、C=pd mod Nで計算が出来る。pからCを求めるのは、RSA暗号を解くことと等価であるため、鍵のビット数が十分に長い場合、現実的な計算時間では求めることが出来ない。これらの方法によればいずれも、第三者がＲＯＭ内の情報からは期待値を容易に求めることが出来ない。このため、ＲＯＭに対するダンプアタックによっては、セキュリティレベルは損なわれない。
【０１３３】
図７は、鍵書き込み用の認証及び鍵書き込み処理に伴う通信フローの一例を表す説明図である。
【０１３４】
図１または図３に示したＬＳＩなどの半導体装置であるチップは、ＵＡＲＴ５などの通信インターフェースを介してカードリーダライタと接続されている。カードリーダライタは、一般のユーザが使うカードリーダライタではなく、チップをシステムモードで動作させることができ、ＥＥＰＲＯＭ４のシステム領域への書き込みが可能な特殊なものである必要がある。同等の機能があればよく、ＬＳＩのロジックテスタなどでもよい。
【０１３５】
カードリーダライタは、予めc = pd mod Nを計算し、cを認証用データ９３としてＵＡＲＴなどの通信インターフェースを介してチップに送信する。チップはＲＯＭ３内に、p, e, Nを保持している。認証用データ９３としてcを受信すると、p' = ce mod Nを計算する（ステップ９０）。p' = pであれば認証成功である（ステップ６７）。認証成功ステータス９４をカードリーダライタに送信して、鍵書き込み用認証処理を完了して鍵書き込み処理（ステップ８０）に移る。p'≠pであれば認証失敗であり、エラー処理（ステップ６６＿２）を行って終了（リセット）する。
【０１３６】
鍵書き込み処理（ステップ８０）では、ＲＯＭ３の暗号領域の暗号鍵１１の情報８１を、カードリーダライタからチップに送信する。暗号鍵１１全体を一括して送信しても良いし、予め分割して複数の分割鍵１２として送信しても良い。チップは、鍵の書き込み処理を行い、鍵書き込み済みフラグ１４を設定した後、鍵書き込み完了ステータス８２をカードリーダライタに送信し、鍵書き込み処理（ステップ８０）を完了する。
【０１３７】
これにより、暗号鍵書き込みの前提となる認証のセキュリティレベルを、さらに向上することができる。
【０１３８】
図８は、鍵書き込み用の認証及び鍵書き込み処理に伴う通信フローの別の例を表す説明図である。
【０１３９】
カードリーダライタは、認証開始コマンド９１を、ＵＡＲＴなどの通信インターフェースを介してチップに送信する。チップはＲＯＭ３内に、eとNを保持しているが、期待値pは保持していない。チップは認証開始コマンド９１を受信すると、期待値として使用する乱数pを生成し、認証用乱数９２としてカードリーダライタに送信する。カードリーダライタは、受信した認証用乱数p（９２）を用い、c = pd mod Nを計算し、cを認証用データ９３としてチップに送信する。チップは、認証用データ９３としてcを受信すると、p' = ce mod Nを計算する（ステップ９０）。p' = pであれば認証成功である（ステップ６７）。認証成功ステータス９４をカードリーダライタに送信して、鍵書き込み用認証処理を完了して鍵書き込み処理（ステップ８０）に移る。p'≠pであれば認証失敗であり、エラー処理（ステップ６６＿２）を行って終了（リセット）する。その後、図７の説明と同様の鍵書き込み処理（ステップ８０）を行う。
【０１４０】
認証の期待値であるpをＲＯＭ３に格納するのではなく、認証処理の度に内部で乱数として生成するので、セキュリティレベルはより高い。
【０１４１】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１４２】
例えば、実施形態２から４及び図４から６においては、暗号鍵の分割数を３として説明したが、これに制限されるものではない。暗号鍵の分割数は実施形態１で説明した通り、適切に定めればよい。また、図３を用いて単一の半導体チップ上に形成する実施形態について説明したが、これに限定されるものではなく、例えば複数チップを積層して形成したマルチチップモジュールなどに実装しても良い。
【符号の説明】
【０１４３】
１  暗号復号器
２  ＣＰＵ（ＣＰＵ）
３  電気的に書き換え不能な不揮発性メモリ（ＲＯＭ）
３１  非暗号化領域
３２  暗号化領域
４  電気的に書き換え可能な不揮発性メモリ（ＥＥＰＲＯＭ）
４１  システム領域
４２  ユーザ領域
５  通信インターフェース（ＵＡＲＴ）
６  揮発性メモリ（ＲＡＭ）
７  アドレスバス
８  データバス
９  ＬＳＩ
１１  暗号鍵
１２  分割鍵（ビット列に分割された暗号鍵）
１３  復号イネーブル制御ビット
１４  鍵書き込み済みフラグ
１５  鍵アドレス
１６  基点アドレス
１７  偏差
１８  鍵書き込み済みフラグ格納アドレス
１９  鍵格納アドレス
２０  鍵アドレス格納アドレス
２１  基点アドレス格納アドレス
２２  偏差格納アドレス
６０  リセットルーチン
６１  動作モード（システムモード／ユーザモード）判定ステップ
６３  暗号鍵書き込み済みフラグ判定ステップ
７０  暗号鍵読み込み処理
７１  ＥＥＰＲＯＭからの部分鍵の読み出し
７２  暗号復号器への部分鍵の書き込み
７３  鍵格納基点アドレスの読み出し
７４  鍵格納偏差の読み出し
７５  鍵の格納されているアドレスの読み出しまたは算出
８０  暗号鍵書き込み処理
８１  暗号鍵情報の受信
８２  鍵書き込み完了ステータスの返信
８３  鍵格納基点アドレスの受信
８４  鍵格納偏差の受信
９０  暗号鍵書き込み認証
９１  認証開始コマンドの受信
９２  認証用乱数の返信
９３  認証用データの受信
９４  認証成功ステータスの返信
【図１】
2014089640.tif 000011
【図２】
2014089640.tif 000012
【図３】
2014089640.tif 000013
【図４】
2014089640.tif 000014
【図５】
2014089640.tif 000015
【図６】
2014089640.tif 000016
【図７】
2014089640.tif 000017
【図８】
2014089640.tif 000018
【図９】
2014089640.tif 000019
【図１０】
2014089640.tif 000020
【図１１】
2014089640.tif 000021
【図１２】
2014089640.tif 000022
【図１３】
2014089640.tif 000023
【図１４】
2014089640.tif 000024
【図１５】
2014089640.tif 000025