図1は、本発明に係る半導体装置に含まれるマイクロコンピュータ100の構成を示すブロック図である。
マイクロコンピュータ100は、暗号処理部12、暗号鍵生成部13、CPU(central processing unit)14、RAM(random access memory)15、ROM(read only memory)制御部16、ROM17、セキュアRAM19、セキュアROM20、セキュアDMAC(direct memory access controller)21、及びキーストレージ22を有する。
更に、マイクロコンピュータ100は、2系統のデータバスBS1及びBS8を含む。マイクロコンピュータ100は、外部接続された機器とのデータ通信が可能であり、当該データバスBS1を介して各種データの送信又は受信を行う。
データバスBS1には、暗号処理部12、暗号鍵生成部13、CPU14、RAM15、ROM制御部16、ROM17、セキュアRAM19、及びキーストレージ22が接続されている。
データバスBS8は、データバスBS1には接続されておらず、且つマイクロコンピュータ100の外部からのアクセス不可な独立したバスである。データバスBS8は、秘匿性を要求される暗号鍵生成部13、セキュアRAM19、セキュアROM20、セキュアDMAC21及びキーストレージ22、並びに暗号処理部12に接続されている。
暗号処理部12は、データバスBS1を介して受けた暗号化前の平文データ片を、暗号鍵を用いて暗号化することにより暗号化データ片を得て、これをデータバスBS1に送出する。また、暗号処理部12は、データバスBS1を介して受けた暗号化データ片を、この暗号鍵を用いて復号することにより、暗号化前の平文データ片を復元する。尚、暗号処理部12は、このような暗号化又は復号化処理を行うにあたり、その実行前に、キーストレージ22から暗号鍵を取得しておく。
暗号鍵生成部13は、暗号鍵を生成しこれをデータバスBS1又はBS8に送出する。
図2は、暗号鍵生成部13の内部構成の一例を示すブロック図である。
図2に示す一例では、暗号鍵生成部13は、乱数生成部131、レジスタ132及び出力制御部133を含む。
乱数生成部131は、所定期間毎に乱数値が変化する乱数RNDを生成し、これをレジスタ132に供給する。尚、乱数生成部131は、乱数変更信号CHを受けた場合には、上記した所定期間の経過を待つことなく、当該乱数変更信号CHを受けた時点で、乱数RNDにて示される乱数値を他の乱数値に変更する。
レジスタ132は、乱数RNDを保持しつつ、当該乱数RNDにて表される乱数値を有する暗号鍵CRKを出力制御部133に供給する。
出力制御部133は、データバスBS1を介して暗号鍵読出要求RQ1を受けた場合には、レジスタ132から供給された暗号鍵CRKをデータバスBS1に送出し、引き続き、乱数変更信号CHを乱数生成部131に供給する。また、出力制御部133は、データバスBS8を介して暗号鍵読出要求RQ2を受けた場合には、レジスタ132から供給された暗号鍵CRKをデータバスBS8に送出する。
図1に示すCPU14は、このマイクロコンピュータ100の中央演算処理装置であり、ROM17に格納されているプログラムに従った演算或いはデータ転送の為の各種制御を行う。
RAM15は、データ書き込みが可能な記憶素子であり、CPU14によってデータの書込又は読出が行われる。
ROM制御部16は、ROM17に対して、データの書き込み、又はデータが正しく書き込まれたか否かを確認するベリファイ、或いは書き込まれたデータの消去等を行う。
ROM17には、CPU14が実行するプログラムを表すプログラムデータが書き込まれている。
セキュアRAM19は、セキュアDMAC21からのデータ書込アクセスに応じて、データバスBS8を介して受けたデータを記憶する。また、セキュアRAM19は、セキュアDMAC21からのデータ読出アクセスに応じて、自身に記憶されているデータを読み出し、これをデータバスBS8に送出する。また、セキュアRAM19は、CPU14からのデータ書込アクセスに応じて、データバスBS1を介して受けたデータを記憶する。尚、セキュアRAM19は、CPU14からのデータ読出アクセスは受け付けない。
セキュアROM20は、セキュアDMAC21からのデータ読出アクセスに応じて、自身に格納されているデータを読み出し、これをデータバスBS8に送出する。また、セキュアROM20は、ROM制御部16又はセキュアDMAC21からのデータ書込アクセスに応じて、データバスBS8を介して受けたデータを書き込む。
セキュアDMAC21は、データバスBS8を介して、暗号処理部12、暗号鍵生成部13、セキュアRAM19、セキュアROM20、及びキーストレージ22間のデータ転送を行う。
キーストレージ22は、データバスBS8を介して受けた暗号鍵を保持する。また、キーストレージ22は、暗号鍵読出要求に応じて、保持されている暗号鍵を読み出し、データバスBS8に送出する。
上記した構成により、マイクロコンピュータ100は、ROM17に格納されているプログラムに従って、上記した暗号鍵を用いた平文データの暗号又は暗号化データの復号処理を含む各種のデータ処理を行う。
以下に、データバスBS1上の平文データ片を暗号化する場合を例にとって、マイクロコンピュータ100内で行われるデータ転送動作について説明する。
先ず、セキュアDMAC21が、暗号鍵を取得する為の暗号鍵読出要求RQ2を、図3の太線矢印に示すようにデータバスBS8を介して暗号鍵生成部13に供給する。暗号鍵読出要求RQ2に応じて、暗号鍵生成部13は、暗号鍵CRKを、図3の太線矢印に示すようにデータバスBS8を介してセキュアDMAC21に供給する。
セキュアDMAC21は、取得した暗号鍵CRKをデータバスBS8を介してキーストレージ22に転送し、当該暗号鍵CRKをキーストレージ22に保持させる。次に、セキュアDMAC21は、キーストレージ22に保持されている暗号鍵CRKをセキュアRAM19及びセキュアROM20の各々に転送し、当該暗号鍵CRKをこれらセキュアRAM19及びセキュアROM20に書き込ませる。そして、セキュアDMAC21は、セキュアRAM19に書き込まれた暗号鍵CRKを、データバスBS8を介して暗号処理部12に供給する。
これにより、暗号処理部12は、上記のようにデータバスBS8を介してセキュアDMAC21が取得した暗号鍵CRKを用いて、データバスBS1上の平文データ片を暗号化した暗号化データ片を生成し、これをデータバスBS1に送出する。この際、CPU14は、当該暗号化データ片をデータバスBS1を介してRAM15に供給し、この暗号化データ片をRAM15に書き込ませる。
よって、上記した一連の処理により、平文データ片を暗号化した暗号化データ片が生成される。
ところで、マイクロコンピュータ100では、セキュアDMAC21のみならずCPU14でも、上述したような平文データの暗号化、又は暗号化データの復号化の為のデータ転送制御を行うことが可能である。
例えば、データバスBS1上の平文データ片を暗号化する場合、先ず、CPU14は、暗号鍵を取得する為の暗号鍵読出要求RQ1を、図4の太線矢印に示すようにデータバスBS1を介して暗号鍵生成部13に供給する。暗号鍵読出要求RQ1に応じて、暗号鍵生成部13は、暗号鍵CRKを、図4の太線矢印に示すようにデータバスBS1を介してCPU14に供給する。
CPU14は、取得した暗号鍵CRKをデータバスBS1を介してキーストレージ22に転送し、当該暗号鍵CRKをキーストレージ22に保持させる。次に、CPU14は、キーストレージ22に保持されている暗号鍵CRKをRAM15に転送し、当該暗号鍵CRKをRAM15に書き込ませる。そして、CPU14は、RAM15に書き込まれた暗号鍵CRKを、データバスBS1を介して暗号処理部12に供給する。
これにより、暗号処理部12は、図4に示すようにデータバスBS1を介してCPU14が取得した暗号鍵CRKを用いて、データバスBS1上の平文データ片を暗号化した暗号化データ片を生成し、これをデータバスBS1に送出する。この際、CPU14は、当該暗号化データ片をデータバスBS1を介してRAM15に供給し、この暗号化データ片をRAM15に書き込ませる。
このように、マイクロコンピュータ100では、セキュアDMAC21及びCPU14の双方で、データの暗号化又は復号化の為のデータ転送を行うことが可能である。
よって、セキュアDMAC21によって図3に示すような暗号鍵を取得する為のデータ転送が終了した後、当該暗号鍵を用いた暗号処理部12による暗号化処理が終了する前に、CPU14により図4に示すような暗号鍵取得の為のデータ転送が行われる場合がある。
以下に、セキュアDMAC21による暗号鍵取得の為のデータ転送(図3)、及びCPU14による暗号鍵取得の為のデータ転送(図4)が連続した場合における暗号鍵生成部13の内部動作を、図5に示すタイムチャートを参照しつつ説明する。
尚、最初に暗号鍵生成部13の乱数生成部131が、図5に示すように乱数値Q1を示す乱数RNDを生成しているものとする。よって、レジスタ132は、当該乱数RNDを保持しつつ、この乱数RNDによって表される乱数値Q1を有する暗号鍵CRKを出力制御部133に供給する。
先ず、暗号鍵生成部13が、図3に示すようにセキュアDMAC21から送出された暗号鍵読出要求RQ2をデータバスBS8を介して受ける。すると、暗号鍵生成部13の出力制御部133は、図5に示すように、乱数値Q1を有する暗号鍵CRKをデータバスBS8に送出する。これにより、当該暗号鍵CRKが図3に示すようにデータバスBS8を介してセキュアDMAC21に供給される。
更に、出力制御部133は、当該暗号鍵読出要求RQ2に応答し、且つ暗号鍵CRKをデータバスBS8に送出した直後に、図5に示すように論理レベル0から論理レベル1の状態に遷移する2値の乱数変更信号CHを乱数生成部131に供給する。すなわち、出力制御部133は、暗号鍵の変更を促す乱数変更信号CHを乱数生成部131に供給する。
当該乱数変更信号CHに応答して、乱数生成部131は、図5に示すように、現時点での乱数RNDの乱数値Q1を乱数値Q2に変更する。
これにより、レジスタ132は、保持している内容を乱数値Q2で上書きする。つまり、レジスタ132は、その直前まで保持していた乱数値Q1を削除し、当該乱数値Q1に代えて乱数値Q2を保持する。よって、この際、レジスタ132は、図5に示す乱数値Q2を有する暗号鍵CPKを出力制御部133に供給する。
その後、暗号鍵生成部13が、図4に示すようにCPU14から送出された暗号鍵読出要求RQ1をデータバスBS1を介して受ける。すると、暗号鍵生成部13の出力制御部133は、図5に示すように、乱数値Q2を有する暗号鍵CRKをデータバスBS1に送出する。これにより、当該暗号鍵CRKが図4に示すようにデータバスBS1を介してCPU14に供給される。
よって、CPU14からの暗号鍵読出要求RQ1に応じて暗号鍵生成部13が送出した暗号鍵CRKの値(Q2)は、その直前に、セキュアDMAC21からの暗号鍵読出要求RQ2に応じて暗号鍵生成部13が送出した暗号鍵CRKの値(Q1)とは異なる。
従って、図3に示すようなセキュアDMAC21からの暗号鍵読出要求RQ2に続き、図4に示すようなCPU14からの暗号鍵読出要求RQ1が行われても、同一値を有する暗号鍵CRKが2回連続して暗号鍵生成部13から送出されることはない。よって、暗号鍵CRKがマイクロコンピュータ100の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
尚、上記した一例では、暗号鍵生成部13は、セキュアDMAC21からの暗号鍵読出要求RQ2に応じて、暗号鍵CRKの値(Q1)を他の値(Q2)に変更している。しかしながら、CPU14からの暗号鍵読出要求RQ1に応じて、暗号鍵CRKの値を他の値に変更しても良い。この際、暗号鍵生成部13としては、以下の動作を行う出力制御部133を採用する。
すなわち、出力制御部133は、データバスBS1を介してCPU14からの暗号鍵読出要求RQ1を受けた場合には、レジスタ132から供給された暗号鍵CRKをデータバスBS1に送出し、引き続き、乱数変更信号CHを乱数生成部131に供給する。また、出力制御部133は、データバスBS8を介してセキュアDMAC21からの暗号鍵読出要求RQ2を受けた場合には、レジスタ132から供給された暗号鍵CRKをデータバスBS8に送出する。
図6は、CPU14による暗号鍵取得の為のデータ転送(図4)の直後に、セキュアDMAC21による暗号鍵取得の為のデータ転送(図3)が連続した場合における暗号鍵生成部13の内部動作を表すタイムチャートである。
先ず、暗号鍵生成部13の出力制御部133は、図4に示すようにCPU14から送出された暗号鍵読出要求RQ1をデータバスBS1を介して受けると、図6に示すように、乱数値Q1を有する暗号鍵CRKをデータバスBS1に送出する。これにより、当該暗号鍵CRKが、図4に示すようにデータバスBS1を介してCPU14に供給される。
更に、出力制御部133は、当該暗号鍵読出要求RQ1に応答し、且つ暗号鍵CRKをデータバスBS1に送出した直後に、図6に示すように、論理レベル0から論理レベル1の状態に遷移する2値の乱数変更信号CHを乱数生成部131に供給する。当該乱数変更信号CHに応答して、乱数生成部131は、図6に示すように、現時点での乱数RNDの乱数値Q1を乱数値Q2に変更する。これにより、レジスタ132は、保持している内容を乱数値Q2で上書きする。つまり、レジスタ132は、その直前まで保持していた乱数値Q1を削除し、当該乱数値Q1に代えて乱数値Q2を保持する。よって、この際、レジスタ132は、図6に示すように乱数値Q2を有する暗号鍵CPKを出力制御部133に供給する。
その後、暗号鍵生成部13の出力制御部133は、図3に示すようにセキュアDMAC21から送出された暗号鍵読出要求RQ2をデータバスBS8を介して受けると、図6に示すように、乱数値Q2を有する暗号鍵CRKをデータバスBS8に送出する。これにより、当該暗号鍵CRKが、図3に示すようにデータバスBS8を介してセキュアDMAC21に供給される。
よって、セキュアDMAC21からの暗号鍵読出要求RQ2に応じて暗号鍵生成部13が送出した暗号鍵CRKの値(Q2)は、その直前に、CPU14からの暗号鍵読出要求RQ1に応じて暗号鍵生成部13が送出した暗号鍵CRKの値(Q1)とは異なる。
従って、図4に示すようなCPU14からの暗号鍵読出要求RQ1に続き、図3に示すようなセキュアDMAC21からの暗号鍵読出要求RQ2が行われても、同一値を有する暗号鍵CRKが2回連続して暗号鍵生成部13から送出されることはない。よって、暗号鍵CRKがマイクロコンピュータ100の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
尚、上記した実施例では、暗号鍵生成部13で生成された暗号鍵CRKを読み出し、これをデータバス(BS1、BS8)を介して暗号処理部12に転送する転送制御部として、CPU14及びDMAC21を用いている。しかしながら、上記したような暗号鍵取得の為のデータ転送を行うことができるものであれば、転送制御部としてはCPUや、DMAC等に限定されない。
また、図1及び図2に示す実施例では、暗号鍵取得の為のデータ転送を2つのデータバスBS1及びBS8を用いて行っているが、単一のデータバスによっても同様に実施することが可能である。
要するに、図1に示すマイクロコンピュータ100としては、以下の暗号処理部、暗号鍵生成部、第1及び第2の転送制御部を含むものであれば良い。
つまり、暗号処理部(12)は、データバス(BS1、BS8)を介して受けた暗号鍵(CRK)を用いて平文データを暗号化する。暗号鍵生成部(13)は、暗号鍵(CRK)を生成し、生成した暗号鍵を第1の読出要求(RQ1又はRQ2)又は第2の読出要求(RQ2又はRQ1)に応じてデータバスに送出する。第1の転送制御部(14又は21)は、第1の読出要求を暗号鍵生成部に供給し、暗号鍵生成部から送出された暗号鍵をデータバスを介して暗号処理部に転送する。第2の転送制御部(21又は14)は、第2の読出要求を暗号鍵生成部に供給し、暗号鍵生成部から送出された暗号鍵をデータバスを介して暗号処理部に転送する。ここで、暗号鍵生成部は、第1の読出要求及び第2の読出要求のうちの一方の読出要求を受けた場合に、暗号鍵の値を他の値に変更する。
更に、図2に示す暗号鍵生成部13としては、以下の乱数生成部、レジスタ、及び出力制御部を含むものであれば良い。
つまり、乱数生成部(131)は、所定期間毎に乱数値が変化する乱数(RND)を生成し、乱数変更信号(CH)を受けた場合に乱数値を他の乱数値に変更する。レジスタ(132)は、この乱数を保持し、保持した乱数を暗号鍵(CRK)として出力する。出力制御部(133)は、第1又は第2の読出要求を受けた場合にレジスタ(132)から出力された暗号鍵をデータバスに送出する。更に、出力制御部は、第1及び第2の読出要求のうちの一方の読出要求を受けた場合に乱数変更信号(CH)を乱数生成部に供給する。
図7は、マイクロコンピュータ100の他の構成を示すブロック図である。尚、図7に示される構成では、暗号鍵生成部13に代えて暗号鍵生成部13Aを採用した点を除く他の構成は図1に示されるものと同一である。よって、以下に暗号鍵生成部13Aの構成を中心に、図7に示す構成におけるマイクロコンピュータ100の内部動作を説明する。
図8は、暗号鍵生成部13Aの内部構成を示すブロック図である。
図8に示すように、暗号鍵生成部13Aは、乱数生成部131A、レジスタ132、出力制御部133A、及びフラグレジスタ134を含む。
乱数生成部131Aは、所定期間毎に乱数値が変化する乱数RNDを生成し、これをレジスタ132に供給する。尚、乱数生成部131Aは、乱数RNDの乱数値が変化するタイミングで、この乱数値が変化したことを表す乱数変化信号VAを出力制御部133Aに供給する。
レジスタ132は、乱数RNDを保持しつつ、当該乱数RNDにて表される乱数値を有する暗号鍵CRKを出力制御部133Aに供給する。
フラグレジスタ134には、上記した所定期間毎に、その所定期間内で暗号鍵読出要求を受けたか否かを表すフラグFGが保持されている。例えば、暗号鍵読出要求を受けた場合には論理レベル1、暗号鍵読出要求を受けていない場合には論理レベル0を有する2値のフラグFGがフラグレジスタ134に保持される。尚、電源投入時には、論理レベル0を有するフラグFGがフラグレジスタ134に保持される。
出力制御部133Aは、セキュアDMAC21からの暗号鍵読出要求RQ2をデータバスBS8を介して受けた場合には、レジスタ132から供給された暗号鍵CRKをデータバスBS8に送出する。更に、出力制御部133Aは、この暗号鍵読出要求RQ2に応じて、フラグレジスタ134に保持されているフラグFGを、暗号鍵読出要求を受けたことを表す論理レベル1に書き換える。
また、出力制御部133Aは、CPU14からの暗号鍵読出要求RQ1をデータバスBS1を介して受けた場合には、先ず、フラグレジスタ134に保持されているフラグFGが論理レベル0であるか、或いは論理レベル1であるのかを判定する。
ここで、フラグFGが論理レベル0であると判定した場合、つまり暗号鍵読出要求を受けていないと判定した場合には、出力制御部133Aは、レジスタ132から供給された暗号鍵CRKをデータバスBS1に送出する。
一方、フラグFGが論理レベル1であると判定した場合、つまり暗号鍵読出要求を既に受けていると判定したら、出力制御部133Aは、暗号鍵CRKに代えて、暗号鍵の読出エラーを表すエラー応答ERRを、データバスBS1に送出する。この際、データバスBS1を介してエラー応答ERRがCPU14に供給される。
更に、出力制御部133Aは、乱数RNDの乱数値が変化したことを表す乱数変化信号VAを受けた場合には、フラグレジスタ134に保持されているフラグFGを論理レベル0の状態に初期化する。
以下に、図7及び図8に示される構成において、セキュアDMAC21による暗号鍵取得の為のデータ転送に引き続き、CPU14による暗号鍵取得の為のデータ転送が実施された場合での動作について、図9〜図11を参照しつつ説明する。
尚、図9は、セキュアDMAC21による暗号鍵取得の為のデータ転送動作を表し、図10は、図9に示すデータ転送の直後に行われる、CPU14による暗号鍵取得の為のデータ転送動作を表す図である。
また、図11は、図9に示すデータ転送の直後に図10に示すデータ転送が行われた場合における、暗号鍵生成部13Aの内部動作を表すタイムチャートである。
尚、図11に示す一例では、暗号鍵生成部13Aの乱数生成部131Aが、先ず、乱数値Q1を示す乱数RNDを所定期間TUに亘りレジスタ132に供給し、当該所定期間TUの経過後に乱数値Q2を示す乱数RNDをレジスタ132に供給するものとする。よって、レジスタ132は、所定期間TUに亘り乱数値Q1を有する暗号鍵CRKを出力制御部133Aに供給し、所定期間TUの経過後に乱数値Q2を有する暗号鍵CRKを出力制御部133Aに供給する。更に、暗号鍵生成部131Aは、乱数RNDにて示される乱数値が変化する時点で、図11に示すように、論理レベル0の状態から論理レベル1の状態に遷移し、論理レベル0の状態に戻る2値の乱数変化信号VAを出力制御部133Aに供給する。
先ず、暗号鍵生成部13Aが、図9の太線矢印に示すようにセキュアDMAC21から送出された暗号鍵読出要求RQ2をデータバスBS8を介して受ける。すると、暗号鍵生成部13Aの出力制御部133Aは、図11に示すように、乱数値Q1を有する暗号鍵CRKをデータバスBS8に送出する。これにより、当該暗号鍵CRKが図9の太線矢印に示すようにデータバスBS8を介してセキュアDMAC21に供給される。更に、出力制御部133Aは、暗号鍵読出要求RQ2に応じて、フラグレジスタ134に保持されているフラグFGを図11に示すように、暗号鍵読出要求を受けたことを表す論理レベル1に書き換える。
その後、暗号鍵生成部13Aが、図10の太線矢印に示すようにCPU14から送出された暗号鍵読出要求RQ1をデータバスBS1を介して受ける。すると、暗号鍵生成部13Aの出力制御部133Aは、図11に示すように、暗号鍵読出要求RQ1を受けた時点でフラグFGが論理レベル1であることから、エラー応答ERRをデータバスBS1に送出する。この際、暗号鍵生成部13Aから送出されたエラー応答ERRは、図10の太線矢印に示すようにデータバスBS1を介してCPU14に供給される。エラー応答ERRを受けたCPU14は、暗号鍵生成部13Aからの暗号鍵の読出に失敗したと判断する。尚、上記したように暗号鍵読出要求RQ1を受けた時点でフラグFGが論理レベル1である場合には、出力制御部133Aは、その時点で暗号鍵の送出は行わない。
このように、暗号鍵生成部13Aは、セキュアDMAC21からの暗号鍵読出要求RQ2に応じて暗号鍵CRKをデータバスBS8に送出する。この際、引き続きCPU14からの暗号鍵読出要求RQ1を受けた場合には、暗号鍵生成部13Aは、この暗号鍵読出要求RQ1に応じて、暗号鍵CRKに代えてエラー応答ERRをデータバスBS1に送出する。
これにより、図9に示すようなセキュアDMAC21からの暗号鍵読出要求RQ2に続き、図10に示すようなCPU14からの暗号鍵読出要求RQ1が行われても、同一値を有する暗号鍵CRKが2回連続して暗号鍵生成部13Aから送出されることはない。よって、暗号鍵CRKがマイクロコンピュータ100の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
その後、乱数生成部131Aが乱数RNDにて示される乱数値を、図11に示すようにQ1からQ2に変更すると、出力制御部133Aは、フラグレジスタ134に保持されているフラグFGの内容を論理レベル1から論理レベル0に書き換える。
よって、その後、暗号鍵生成部13Aは、CPU14からの暗号鍵読出要求RQ1をデータバスBS1を介して受けると、図11に示すように暗号鍵読出要求RQ1を受けた時点でフラグFGが論理レベル0であることから、乱数値Q2を有する暗号鍵CRKをデータバスBS1に送出する。
この際、CPU14からの暗号鍵読出要求RQ1に応じて暗号鍵生成部13Aが送出した暗号鍵CRKの値(Q2)は、その直前に、セキュアDMAC21からの暗号鍵読出要求RQ2に応じて暗号鍵生成部13Aが送出した暗号鍵CRKの値(Q1)とは異なる。
よって、同一の値を有する暗号鍵CRKが2回連続して暗号鍵生成部13Aから送出されることはないので、暗号鍵CRKがマイクロコンピュータ100の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
ところで、図9及び図10に示す一例では、暗号鍵生成部13Aは、セキュアDMAC21からの暗号鍵読出要求を受けた直後に、CPU14からの暗号鍵読出要求を受けた場合にエラー応答ERRを行うようにしている。しかしながら、暗号鍵生成部13Aとしては、CPU14から暗号鍵読出要求を受けた直後に、セキュアDMAC21から暗号鍵読出要求を受けた場合にエラー応答ERRを行うようにしても良い。
この際、暗号鍵生成部13Aとしては、以下のような出力制御部133Aを採用する。
すなわち、出力制御部133Aは、CPU14からの暗号鍵読出要求RQ1を受けた場合には、暗号鍵CRKをデータバスBS1に送出する。更に、暗号鍵読出要求RQ1に応じて、出力制御部133Aは、フラグレジスタ134に保持されているフラグFGを、暗号鍵読出要求を受けたことを表す論理レベル1に書き換える。
また、出力制御部133Aは、セキュアDMAC21からの暗号鍵読出要求RQ2を受けた場合には、先ず、フラグレジスタ134に保持されているフラグFGが論理レベル1であるか、或いは論理レベル0であるかを判定する。ここで、フラグFGが論理レベル0であると判定した場合、つまり、暗号鍵読出要求を受けていないと判定した場合、出力制御部133Aは、暗号鍵CRKをデータバスBS8に送出する。
一方、フラグFGが論理レベル1であると判定した場合、つまり暗号鍵読出要求を既に受けていると判定したら、出力制御部133Aは、暗号鍵の読出エラーを表すエラー応答ERRを、データバスBS8に送出する。この際、データバスBS8を介してエラー応答ERRがセキュアDMAC21に供給される。
更に、出力制御部133Aは、乱数生成部131Aから、乱数RNDの乱数値が変化したことを表す乱数変化信号VAが供給された場合には、フラグレジスタ134に保持されているフラグFGを論理レベル0の状態に初期化する。
以下に、CPU14による暗号鍵取得の為のデータ転送の直後に、セキュアDMAC21による暗号鍵取得の為のデータ転送が連続した場合での動作について、図12〜図14を参照しつつ説明する。
尚、図12は、CPU14による暗号鍵取得の為のデータ転送動作を表し、図13は、図12に示すデータ転送の直後に行われるセキュアDMAC21による暗号鍵取得の為のデータ転送動作を表す図である。
また、図14は、図12に示すデータ転送の直後に図13に示すデータ転送が行われた場合における、暗号鍵生成部13Aの内部動作を表すタイムチャートである。
先ず、暗号鍵生成部13Aが、図12の太線矢印に示すようにCPU14から送出された暗号鍵読出要求RQ1をデータバスBS1を介して受ける。すると、暗号鍵生成部13Aの出力制御部133Aは、図14に示すように、乱数値Q1を有する暗号鍵CRKをデータバスBS1に送出する。これにより、当該暗号鍵CRKが図12の太線矢印に示すようにデータバスBS1を介してCPU14に供給される。更に、出力制御部133Aは、暗号鍵読出要求RQ1に応じて、フラグレジスタ134に保持されているフラグFGを図14に示すように、暗号鍵読出要求を受けたことを表す論理レベル1に書き換える。
その後、暗号鍵生成部13Aが、図13の太線矢印に示すようにセキュアDMAC21から送出された暗号鍵読出要求RQ2をデータバスBS8を介して受ける。すると、暗号鍵生成部13Aの出力制御部133Aは、図14に示すように、暗号鍵読出要求RQ2を受けた時点でフラグFGが論理レベル1であることから、暗号鍵CRKに代えてエラー応答ERRをデータバスBS8に送出する。この際、暗号鍵生成部13Aから送出されたエラー応答ERRは、図13の太線矢印に示すようにデータバスBS8を介してセキュアDMAC21に供給される。このエラー応答ERRを受けたセキュアDMAC21は、暗号鍵生成部13Aからの暗号鍵の読出に失敗したと判断する。尚、上記したように暗号鍵読出要求RQ2を受けた時点でフラグFGが論理レベル1である場合には、出力制御部133Aは、その時点で暗号鍵の送出は行わない。
このように、暗号鍵生成部13Aは、CPU14からの暗号鍵読出要求に応じて暗号鍵CRKを送出した直後に、セキュアDMAC21からの暗号鍵読出要求を受けた場合には、暗号鍵CRKの送出は行わず、エラー応答ERRを送出する。
これにより、図12に示すようなCPU14からの暗号鍵読出要求RQ1に続き、図13に示すようなセキュアDMAC21からの暗号鍵読出要求RQ2が行われても、同一値を有する暗号鍵CRKが2回連続して暗号鍵生成部13Aから送出されることはない。よって、暗号鍵CRKがマイクロコンピュータ100の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
その後、乱数生成部131Aが乱数RNDにて示される乱数値を、図14に示すようにQ1からQ2に変更すると、出力制御部133Aは、フラグレジスタ134に保持されているフラグFGの内容を論理レベル1から論理レベル0に書き換える。
よって、引き続き、暗号鍵生成部13Aは、セキュアDMAC21からの暗号鍵読出要求RQ2をデータバスBS8を介して受けると、図14に示すように暗号鍵読出要求RQ2を受けた時点でフラグFGが論理レベル0であることから、乱数値Q2を有する暗号鍵CRKをデータバスBS8に送出する。
この際、セキュアDMAC21からの暗号鍵読出要求RQ2に応じて暗号鍵生成部13Aが送出した暗号鍵CRKの値(Q2)は、その直前に、CPU14からの暗号鍵読出要求RQ1に応じて暗号鍵生成部13Aが送出した暗号鍵CRKの値(Q1)とは異なる。
よって、同一の値を有する暗号鍵CRKが2回連続して暗号鍵生成部13Aから送出されることはないので、暗号鍵CRKがマイクロコンピュータ100の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
以上のように、図7に示すマイクロコンピュータ100では、図2に示される暗号鍵生成部13に代えて、図8に示される暗号鍵生成部13Aを採用している。当該暗号鍵生成部(13A)では、所定期間(TU)毎に、この所定期間内において第1の読出要求(RQ1又はRQ2)を受けた後に第2の読出要求(RQ2又はRQ1)を受けた場合には、この第2の読出要求に応じて暗号鍵(CRK)に代えてエラー応答(ERR)をデータバス(BS1、BS8)に送出する。
更に、マイクロコンピュータ100では、図8に示す暗号鍵生成部13Aとして、以下の乱数生成部と、第1及び第2のレジスタと、出力制御部とを含むものを採用している。
つまり、乱数生成部(131A)は、所定期間(TU)毎に乱数値が変化する乱数(RND)を生成する。第1のレジスタ(132)は、この乱数を保持し、保持した乱数を暗号鍵(CRK)として出力する。第2のレジスタ(134)は、読出要求(RQ1又はRQ2)を受けたか否かを表すフラグ(FG)が保持される。
出力制御部(133A)は、第1の読出要求又は前記第2の読出要求を受けた場合に第1のレジスタから出力された暗号鍵をデータバス(BS1、BS8)に送出すると共に、所定期間(TU)毎に第2のレジスタに保持されているフラグを読出要求を受けていないことを表す状態(例えば論理レベル0)に初期化する。ここで、出力制御部は、第1の読出要求を受けた場合には、第2のレジスタに保持されているフラグを読出要求を受けたことを表す状態(例えば論理レベル1)に書き換える。また、出力制御部は、第2の読出要求を受けた場合には、第2のレジスタに保持されているフラグが読出要求を受けたことを表す場合に、暗号鍵に代えてエラー応答(ERR)をデータバスに送出する。
図15は、図7に示すマイクロコンピュータ100の変形例を示すブロック図である。尚、図15に示される構成では、リセット制御部23を追加した点を除く他の構成は図7に示すものと同一である。
図15において、リセット制御部23は、データバスBS1又はBS8を介して上記したエラー応答ERRを受けた場合に、リセット信号RSを暗号鍵生成部13A、CPU14、及びキーストレージ22に供給する。暗号鍵生成部13A、CPU14、及びキーストレージ22は、リセット信号RSに応じて自身の状態をリセットする。
以下に、図15に示す構成において、セキュアDMAC21による暗号鍵取得の為のデータ転送に引き続き、CPU14による暗号鍵取得の為のデータ転送が実施された場合での動作について、図16、図17、並びに上記した図11を参照しつつ説明する。
尚、図16は、セキュアDMAC21による暗号鍵取得の為のデータ転送動作を表し、図17は、図16に示すデータ転送の直後に連続して行われる、CPU14による暗号鍵取得の為のデータ転送動作を表す図である。
先ず、暗号鍵生成部13Aが、図16の太線矢印に示すようにセキュアDMAC21から送出された暗号鍵読出要求RQ2をデータバスBS8を介して受ける。すると、暗号鍵生成部13Aの出力制御部133Aは、乱数値Q1を有する暗号鍵CRKをデータバスBS8に送出する。これにより、当該暗号鍵CRKが図16の太線矢印に示すようにデータバスBS8を介してセキュアDMAC21に供給される。更に、出力制御部133Aは、暗号鍵読出要求RQ2に応じて、フラグレジスタ134に保持されているフラグFGを図11に示すように、暗号鍵読出要求を受けたことを表す論理レベル1に書き換える。
その後、暗号鍵生成部13Aが、図17の太線矢印に示すようにCPU14から送出された暗号鍵読出要求RQ1をデータバスBS1を介して受ける。すると、暗号鍵生成部13Aの出力制御部133Aは、図11に示すように、暗号鍵読出要求RQ1を受けた時点でフラグFGが論理レベル1であることから、エラー応答ERRをデータバスBS1に送出する。この際、暗号鍵生成部13Aから送出されたエラー応答ERRは、図17の太線矢印に示すようにデータバスBS1を介してリセット制御部23に供給される。
エラー応答ERRを受けたリセット制御部23は、リセット信号RSを暗号鍵生成部13A、CPU14、及びキーストレージ22に供給する。暗号鍵生成部13A、CPU14、及びキーストレージ22は、リセット信号RSに応じて自身の状態をリセットする。
このように、暗号鍵生成部13Aは、セキュアDMAC21からの暗号鍵読出要求に応じて暗号鍵CRKを送出した直後に、CPU14からの暗号鍵読出要求を受けた場合には、暗号鍵CRKの送出は行わず、エラー応答ERRを送出する。この際、エラー応答ERRを受けたリセット制御部23は、暗号鍵生成部13A、CPU14、及びキーストレージ22各々の状態をリセットする。
これにより、図16に示すようなセキュアDMAC21からの暗号鍵読出要求RQ2に続き、図17に示すようなCPU14からの暗号鍵読出要求RQ1が行われても、同一値を有する暗号鍵CRKが2回連続して暗号鍵生成部13Aから送出されることはない。よって、暗号鍵CRKがマイクロコンピュータ100の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
尚、図16及び図17に示す一例では、暗号鍵生成部13Aは、セキュアDMAC21からの暗号鍵読出要求を受けた直後に、CPU14からの暗号鍵読出要求を受けた場合に、リセット制御部23にエラー応答ERRを行うようにしている。しかしながら、暗号鍵生成部13Aとしては、CPU14から暗号鍵読出要求を受けた直後に、セキュアDMAC21から暗号鍵読出要求を受けた場合に、リセット制御部23に対してエラー応答ERRを行うようにしても良い。
この際、暗号鍵生成部13Aとしては、以下の動作を行う出力制御部133Aを採用する。
すなわち、出力制御部133Aは、CPU14からの暗号鍵読出要求RQ1を受けた場合には、暗号鍵CRKをデータバスBS1に送出する。更に、暗号鍵読出要求RQ1に応じて、出力制御部133Aは、フラグレジスタ134に保持されているフラグFGを、暗号鍵読出要求を受けたことを表す論理レベル1に書き換える。
また、出力制御部133Aは、セキュアDMAC21からの暗号鍵読出要求RQ2を受けた場合には、先ず、フラグレジスタ134に保持されているフラグFGが論理レベル0であるか、或いは論理レベル1であるのかを判定する。ここで、フラグFGが論理レベル0であると判定した場合、つまり暗号鍵読出要求を受けていないと判定した場合に、出力制御部133Aは、暗号鍵CRKをデータバスBS8に送出する。
一方、フラグFGが論理レベル1であると判定した場合、つまり暗号鍵読出要求を既に受けていると判定したら、出力制御部133Aは、暗号鍵CRKに代えて、暗号鍵の読出エラーを表すエラー応答ERRをデータバスBS8に送出する。この際、データバスBS8を介してエラー応答ERRがリセット制御部23に供給される。
以下に、図15に示す構成において、CPU14による暗号鍵取得の為のデータ転送に引き続き、セキュアDMAC21による暗号鍵取得の為のデータ転送が実施された場合での動作について、図18、図19、並びに上記した図14を参照しつつ説明する。
尚、図18は、CPU14による暗号鍵取得の為のデータ転送動作を表し、図19は、図18に示すデータ転送の直後に行われる、セキュアDMAC21による暗号鍵取得の為のデータ転送動作を表す図である。
先ず、暗号鍵生成部13Aが、図18の太線矢印に示すようにCPU14から送出された暗号鍵読出要求RQ1をデータバスBS1を介して受ける。すると、暗号鍵生成部13Aの出力制御部133Aは、乱数値Q1を有する暗号鍵CRKをデータバスBS1に送出する。これにより、当該暗号鍵CRKが図18の太線矢印に示すようにデータバスBS1を介してCPU14に供給される。更に、出力制御部133Aは、この暗号鍵読出要求RQ1に応じて、フラグレジスタ134に保持されているフラグFGを図14に示すように、暗号鍵読出要求を受けたことを表す論理レベル1に書き換える。
その後、暗号鍵生成部13Aが、図19の太線矢印に示すようにセキュアDMAC21から送出された暗号鍵読出要求RQ2をデータバスBS8を介して受ける。すると、暗号鍵生成部13Aの出力制御部133Aは、図14に示すように、この暗号鍵読出要求RQ2を受けた時点でフラグFGが論理レベル1であることから、エラー応答ERRをデータバスBS8に送出する。この際、暗号鍵生成部13Aから送出されたエラー応答ERRは、図19の太線矢印に示すようにデータバスBS8を介してリセット制御部23に供給される。
エラー応答ERRを受けたリセット制御部23は、リセット信号RSを暗号鍵生成部13A、CPU14、及びキーストレージ22に供給する。暗号鍵生成部13A、CPU14、及びキーストレージ22は、リセット信号RSに応じて自身の状態をリセットする。
このように、暗号鍵生成部13Aは、CPU14からの暗号鍵読出要求に応じて暗号鍵CRKを送出した直後に、セキュアDMAC21からの暗号鍵読出要求を受けた場合には、暗号鍵CRKの送出は行わず、エラー応答ERRを送出する。この際、エラー応答ERRを受けたリセット制御部23は、暗号鍵生成部13A、CPU14、及びキーストレージ22各々の状態をリセットする。
これにより、図18に示すようなCPU14からの暗号鍵読出要求RQ1に続き、図19に示すようなセキュアDMAC21からの暗号鍵読出要求RQ2が行われても、同一値を有する暗号鍵CRKが2回連続して暗号鍵生成部13Aから送出されることはない。よって、暗号鍵CRKがマイクロコンピュータ100の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。