(57)【要約】      （修正有）【課題】不正なアクセスによるデータの漏洩を防ぐことが可能な半導体装置を提供する。【解決手段】半導体装置（マイクロコンピュータ１００）は、データバスＢＳ１またはＢＳ８を介して受信した暗号鍵を用いて平文データを暗号化する暗号処理部１２と、暗号鍵を生成し、生成した暗号鍵を第１又は第２の読出要求に応じてデータバスＢＳ１またはＢＳ８に送出する暗号鍵生成部１３と、第１の読出要求を暗号鍵生成部１３に供給し、暗号鍵生成部１３から送出された暗号鍵をデータバスＢＳ１を介して暗号処理部１２に転送するＣＰＵ１４と、第２の読出要求を暗号鍵生成部１３に供給し、暗号鍵生成部１３から送出された暗号鍵をデータバスＢＳ８を介して暗号処理部１２に転送するセキュアＤＭＡＣ２１と、を含む。暗号鍵生成部１３は、第１の及び第２の読出要求のうちの一方の読出要求を受けた場合に、暗号鍵の値を他の値に変更する。【選択図】図１
2019118064.tif 000002
【特許請求の範囲】
【請求項１】
データバスを介して受けた暗号鍵を用いて平文データを暗号化する暗号処理部と、
前記暗号鍵を生成し、生成した前記暗号鍵を第１の読出要求又は第２の読出要求に応じて前記データバスに送出する暗号鍵生成部と、
前記第１の読出要求を前記暗号鍵生成部に供給し、前記暗号鍵生成部から送出された前記暗号鍵を前記データバスを介して前記暗号処理部に転送する第１の転送制御部と、
前記第２の読出要求を前記暗号鍵生成部に供給し、前記暗号鍵生成部から送出された前記暗号鍵を前記データバスを介して前記暗号処理部に転送する第２の転送制御部と、を含み、
前記暗号鍵生成部は、前記第１の読出要求及び前記第２の読出要求のうちの一方の読出要求を受けた場合に、前記暗号鍵の値を他の値に変更することを特徴とする半導体装置。
【請求項２】
前記暗号鍵生成部は、
所定期間毎に乱数値が変化する乱数を生成し、乱数変更信号に応答して前記乱数値を他の乱数値に変更する乱数生成部と、
前記乱数を保持し、保持した前記乱数を暗号鍵として出力するレジスタと、
前記第１の読出要求又は前記第２の読出要求を受けた場合に前記レジスタから出力された前記暗号鍵を前記データバスに送出すると共に、前記第１の読出要求及び前記第２の読出要求のうちの一方の読出要求を受けた場合に前記乱数変更信号を前記乱数生成部に供給する出力制御部と、を含むことを特徴とする請求項１に記載の半導体装置。
【請求項３】
前記第１の転送制御部はＣＰＵであり、前記第２の転送制御部はＤＭＡＣ（direct memory access controller）であることを特徴とする請求項１又は２に記載の半導体装置。
【請求項４】
データバスを介して受けた暗号鍵を用いて平文データを暗号化する暗号処理部と、
前記暗号鍵を生成し、生成した前記暗号鍵を第１の読出要求又は第２の読出要求に応じて前記データバスに送出する暗号鍵生成部と、
前記第１の読出要求を前記暗号鍵生成部に供給し、前記暗号鍵生成部から送出された前記暗号鍵を前記データバスを介して前記暗号処理部に転送する第１の転送制御部と、
前記第２の読出要求を前記暗号鍵生成部に供給し、前記暗号鍵生成部から送出された前記暗号鍵を前記データバスを介して前記暗号処理部に転送する第２の転送制御部と、を含み、
前記暗号鍵生成部は、所定期間毎に、前記所定期間内において前記第１の読出要求を受けた後に前記第２の読出要求を受けた場合には、前記第２の読出要求に応じて前記暗号鍵に代えてエラー応答を前記データバスに送出することを特徴とする半導体装置。
【請求項５】
前記暗号鍵生成部は、
前記所定期間毎に乱数値が変化する乱数を生成する乱数生成部と、
前記乱数を保持し、保持した前記乱数を暗号鍵として出力する第１のレジスタと、
前記読出要求を受けたか否かを表すフラグが保持される第２のレジスタと、
前記第１の読出要求又は前記第２の読出要求を受けた場合に前記第１のレジスタから出力された前記暗号鍵を前記データバスに送出すると共に、前記所定期間毎に前記第２のレジスタに保持されている前記フラグを前記読出要求を受けていないことを表す状態に初期化する出力制御部と、を含み、
前記出力制御部は、
前記第１の読出要求を受けた場合には、前記第２のレジスタに保持されている前記フラグを前記読出要求を受けたことを表す状態に書き換え、
前記第２の読出要求を受けた場合には、前記第２のレジスタに保持されている前記フラグが前記読出要求を受けたことを表す場合に、前記暗号鍵に代えて前記エラー応答を前記データバスに送出することを特徴とする請求項４に記載の半導体装置。
【請求項６】
前記データバスに送出された前記暗号鍵を保持する鍵保持部と、
前記データバスを介して前記エラー応答を受けたときに、前記鍵保持部、前記第１の転送制御部及び前記第２の転送制御部をリセットするリセット制御部と、を含むことを特徴とする請求項４又は５に記載の半導体装置。
【請求項７】
前記第１の転送制御部及び前記第２の転送制御部のうちの一方はＣＰＵであり、他方はＤＭＡＣ（direct memory access controller）であることを特徴とする請求項４〜６のいずれか１に記載の半導体装置。
【請求項８】
データバスを介して受けた暗号鍵を用いて平文データを暗号化する際の前記暗号鍵の制御方法であって、
前記暗号鍵を生成し、生成した前記暗号鍵を第１の読出要求又は第２の読出要求に応じて前記データバスに送出すると共に、前記第１の読出要求及び前記第２の読出要求のうちの一方の読出要求を受けたときに前記暗号鍵の値を他の値に変更することを特徴とする暗号鍵の制御方法。
【請求項９】
データバスを介して受けた暗号鍵を用いて平文データを暗号化する際の前記暗号鍵の制御方法であって、
前記暗号鍵を生成し、生成した前記暗号鍵を第１の読出要求又は第２の読出要求に応じて前記データバスに送出し、
所定期間毎に、前記所定期間内において前記第１の読出要求を受けた後に前記第２の読出要求を受けた場合には、前記第２の読出要求に応じて前記暗号鍵に代えてエラー応答を前記データバスに送出することを特徴とする暗号鍵の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置、特に暗号鍵を用いたデータの暗号化機能を有する半導体装置、及び暗号鍵の制御方法に関する。
【背景技術】
【０００２】
現在、スクランブルキーを用いて平文データをスクランブルしたものをメモリに記憶し、当該平文データを用いたデータ処理を行うときに、このスクランブルされた平文データをデスクランブルして元の平文データを復元するデータ処理装置が提案されている（例えば、特許文献１参照）。
【０００３】
このデータ処理装置では、平文データをクランブルする場合、ＣＰＵ（central processing unit）が、平文データをススクランブル回路にてスクランブルさせる。この際、スクランブル回路は、レジスタに保持されているスクランブルキーを読み出し、このスクランブルキーを用いて平文データをスクランブルする。
【０００４】
また、平文データを用いたデータ処理を行う場合には、このデータ処理装置では、ＣＰＵが、上記したようにスクランブルされた平文データを、スクランブル回路によってデスクランブルさせる。この際、スクランブル回路は、レジスタに保持されているスクランブルキーを読み出し、当該スクランブルキーを用いて、スクランブルされた平文データをデスクランブルすることにより元の平文データを復元する。ＣＰＵは、このように復元された平文データを用いて所定のデータ処理を実行する。
【０００５】
更に、当該データ処理装置では、スクランブル及びデスクランブル処理で用いるスクランブルキーの漏洩を防止するために、ＣＰＵが上記したような所定のデータ処理を終了したら、スクランブルキーの値を他の値に変更する。つまり、上記したレジスタに保持されているスクランブルキーの値を変更した新たなスクランブルキーを、このレジスタに上書きする。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−９２１１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、上記したようなＣＰＵを有するデータ処理装置には、ＣＰＵを介在することなく周辺回路とのデータ転送制御を行う、いわゆるＤＭＡＣ（direct memory access controller）が搭載されている場合がある。
【０００８】
この際、ＤＭＡＣによるデータ転送を行う場合にも、平文データの漏洩を防止するために、暗号鍵としてのスクランブルキーを用いた暗号化（スクランブル）又は復号化（デスクランブル）を実施する。
【０００９】
よって、ＣＰＵが、暗号鍵（スクランブルキー）によって復号化（デスクランブル）された平文データに基づくデータ処理の実行中に、ＤＭＡＣが、他の平文データを周辺回路に転送する場合が生じる。この際、ＤＭＡＣによるデータ転送時にも、上記した他の平文データを復元するために、レジスタから暗号鍵（スクランブルキー）を読み出す必要がある。
【００１０】
したがって、このような場合、同一値の暗号鍵（スクランブルキー）が２回連続してレジスタから読み出されることになり、暗号鍵の漏洩を招く可能性が高くなる。よって、不正に取得した暗号鍵により上記した平文データが漏洩する虞があった。
【００１１】
そこで、本発明は、不正なアクセスによるデータの漏洩を防ぐことが可能な半導体装置、及び暗号鍵の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明に係る半導体装置は、データバスを介して受けた暗号鍵を用いて平文データを暗号化する暗号処理部と、前記暗号鍵を生成し、生成した前記暗号鍵を第１の読出要求又は第２の読出要求に応じて前記データバスに送出する暗号鍵生成部と、前記第１の読出要求を前記暗号鍵生成部に供給し、前記暗号鍵生成部から送出された前記暗号鍵を前記データバスを介して前記暗号処理部に転送する第１の転送制御部と、前記第２の読出要求を前記暗号鍵生成部に供給し、前記暗号鍵生成部から送出された前記暗号鍵を前記データバスを介して前記暗号処理部に転送する第２の転送制御部と、を含み、前記暗号鍵生成部は、前記第１の読出要求及び前記第２の読出要求のうちの一方の読出要求を受けた場合に、前記暗号鍵の値を他の値に変更する。
【００１３】
また、本発明に係る半導体装置は、データバスを介して受けた暗号鍵を用いて平文データを暗号化する暗号処理部と、前記暗号鍵を生成し、生成した前記暗号鍵を第１の読出要求又は第２の読出要求に応じて前記データバスに送出する暗号鍵生成部と、前記第１の読出要求を前記暗号鍵生成部に供給し、前記暗号鍵生成部から送出された前記暗号鍵を前記データバスを介して前記暗号処理部に転送する第１の転送制御部と、前記第２の読出要求を前記暗号鍵生成部に供給し、前記暗号鍵生成部から送出された前記暗号鍵を前記データバスを介して前記暗号処理部に転送する第２の転送制御部と、を含み、前記暗号鍵生成部は、所定期間毎に、前記所定期間内において前記第１の読出要求を受けた後に前記第２の読出要求を受けた場合には、前記第２の読出要求に応じて前記暗号鍵に代えてエラー応答を前記データバスに送出する。
【００１４】
また、本発明に係る暗号鍵の制御方法は、データバスを介して受けた暗号鍵を用いて平文データを暗号化する際の前記暗号鍵の制御方法であって、前記暗号鍵を生成し、生成した前記暗号鍵を第１の読出要求又は第２の読出要求に応じて前記データバスに送出すると共に、前記第１の読出要求及び前記第２の読出要求のうちの一方の読出要求を受けたときに前記暗号鍵の値を他の値に変更する。
【００１５】
また、本発明に係る暗号鍵の制御方法は、データバスを介して受けた暗号鍵を用いて平文データを暗号化する際の前記暗号鍵の制御方法であって、前記暗号鍵を生成し、生成した前記暗号鍵を第１の読出要求又は第２の読出要求に応じて前記データバスに送出し、所定期間毎に、前記所定期間内において前記第１の読出要求を受けた後に前記第２の読出要求を受けた場合には、前記第２の読出要求に応じて前記暗号鍵に代えてエラー応答を前記データバスに送出する。
【発明の効果】
【００１６】
本発明では、データバスを介して受けた暗号鍵を用いて平文データを暗号化するにあたり、生成した暗号鍵を第１又は第２の読出要求に応じてデータバスに送出すると共に、第１及び第２の読出要求のうちの一方を受けたときに暗号鍵の値を他の値に変更する。
【００１７】
また、本発明では、所定期間毎に、この所定期間内において第１の読出要求を受けた後に第２の読出要求を受けた場合には、第２の読出要求に応じて、暗号鍵に代えてエラー応答をデータバスに送出する。
【００１８】
これにより、例えばＣＰＵ（又はＤＭＡＣ）から暗号鍵を取得する第１の読出要求が為され、引き続きＤＭＡＣ（又はＣＰＵ）から暗号鍵を取得する第２の読出要求が為されても、同一値の暗号鍵が２回連続してデータバスに送出されることはない。
【００１９】
よって、暗号鍵の漏洩を招く可能性が低くなるので、不正なアクセスによる平文データの漏洩を防ぐことが可能となる。
【図面の簡単な説明】
【００２０】
【図１】本発明に係る半導体装置の一例としてのマイクロコンピュータ１００の構成を示すブロック図である。
【図２】暗号鍵生成部１３の内部構成の一例を示すブロック図である。
【図３】セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送動作を表す図である。
【図４】ＣＰＵ１４による暗号鍵取得の為のデータ転送動作を表す図である。
【図５】暗号鍵生成部１３の内部動作の一例を表すタイムチャートである。
【図６】暗号鍵生成部１３の内部動作の他の一例を表すタイムチャートである。
【図７】半導体装置の他の一例としてのマイクロコンピュータ１００の構成を示すブロック図である。
【図８】暗号鍵生成部１３Ａの内部構成の一例を示すブロック図である。
【図９】図７に示すマイクロコンピュータ１００における、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送動作の一例を表す図である。
【図１０】図７に示すマイクロコンピュータ１００における、ＣＰＵ１４による暗号鍵取得の為のデータ転送動作の一例を表す図である。
【図１１】暗号鍵生成部１３Ａの内部動作の一例を表すタイムチャートである。
【図１２】図７に示すマイクロコンピュータ１００における、ＣＰＵ１４による暗号鍵取得の為のデータ転送動作の他の一例を表す図である。
【図１３】図７に示すマイクロコンピュータ１００における、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送動作の他の一例を表す図である。
【図１４】暗号鍵生成部１３Ａの内部動作の他の一例を表すタイムチャートである。
【図１５】図７に示すマイクロコンピュータ１００の変形例を示すブロック図である。
【図１６】図１５に示すマイクロコンピュータ１００における、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送動作の一例を表す図である。
【図１７】図１５に示すマイクロコンピュータ１００における、ＣＰＵ１４による暗号鍵取得の為のデータ転送動作の一例を表す図である。
【図１８】図１５に示すマイクロコンピュータ１００における、ＣＰＵ１４による暗号鍵取得の為のデータ転送動作の他の一例を表す図である。
【図１９】図１５に示すマイクロコンピュータ１００における、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送動作の他の一例を表す図である。
【発明を実施するための形態】
【００２１】
図１は、本発明に係る半導体装置に含まれるマイクロコンピュータ１００の構成を示すブロック図である。
【００２２】
マイクロコンピュータ１００は、暗号処理部１２、暗号鍵生成部１３、ＣＰＵ（central processing unit）１４、ＲＡＭ（random access memory）１５、ＲＯＭ（read only memory）制御部１６、ＲＯＭ１７、セキュアＲＡＭ１９、セキュアＲＯＭ２０、セキュアＤＭＡＣ（direct memory access controller）２１、及びキーストレージ２２を有する。
【００２３】
更に、マイクロコンピュータ１００は、２系統のデータバスＢＳ１及びＢＳ８を含む。マイクロコンピュータ１００は、外部接続された機器とのデータ通信が可能であり、当該データバスＢＳ１を介して各種データの送信又は受信を行う。
【００２４】
データバスＢＳ１には、暗号処理部１２、暗号鍵生成部１３、ＣＰＵ１４、ＲＡＭ１５、ＲＯＭ制御部１６、ＲＯＭ１７、セキュアＲＡＭ１９、及びキーストレージ２２が接続されている。
【００２５】
データバスＢＳ８は、データバスＢＳ１には接続されておらず、且つマイクロコンピュータ１００の外部からのアクセス不可な独立したバスである。データバスＢＳ８は、秘匿性を要求される暗号鍵生成部１３、セキュアＲＡＭ１９、セキュアＲＯＭ２０、セキュアＤＭＡＣ２１及びキーストレージ２２、並びに暗号処理部１２に接続されている。
【００２６】
暗号処理部１２は、データバスＢＳ１を介して受けた暗号化前の平文データ片を、暗号鍵を用いて暗号化することにより暗号化データ片を得て、これをデータバスＢＳ１に送出する。また、暗号処理部１２は、データバスＢＳ１を介して受けた暗号化データ片を、この暗号鍵を用いて復号することにより、暗号化前の平文データ片を復元する。尚、暗号処理部１２は、このような暗号化又は復号化処理を行うにあたり、その実行前に、キーストレージ２２から暗号鍵を取得しておく。
【００２７】
暗号鍵生成部１３は、暗号鍵を生成しこれをデータバスＢＳ１又はＢＳ８に送出する。
【００２８】
図２は、暗号鍵生成部１３の内部構成の一例を示すブロック図である。
【００２９】
図２に示す一例では、暗号鍵生成部１３は、乱数生成部１３１、レジスタ１３２及び出力制御部１３３を含む。
【００３０】
乱数生成部１３１は、所定期間毎に乱数値が変化する乱数ＲＮＤを生成し、これをレジスタ１３２に供給する。尚、乱数生成部１３１は、乱数変更信号ＣＨを受けた場合には、上記した所定期間の経過を待つことなく、当該乱数変更信号ＣＨを受けた時点で、乱数ＲＮＤにて示される乱数値を他の乱数値に変更する。
【００３１】
レジスタ１３２は、乱数ＲＮＤを保持しつつ、当該乱数ＲＮＤにて表される乱数値を有する暗号鍵ＣＲＫを出力制御部１３３に供給する。
【００３２】
出力制御部１３３は、データバスＢＳ１を介して暗号鍵読出要求ＲＱ１を受けた場合には、レジスタ１３２から供給された暗号鍵ＣＲＫをデータバスＢＳ１に送出し、引き続き、乱数変更信号ＣＨを乱数生成部１３１に供給する。また、出力制御部１３３は、データバスＢＳ８を介して暗号鍵読出要求ＲＱ２を受けた場合には、レジスタ１３２から供給された暗号鍵ＣＲＫをデータバスＢＳ８に送出する。
【００３３】
図１に示すＣＰＵ１４は、このマイクロコンピュータ１００の中央演算処理装置であり、ＲＯＭ１７に格納されているプログラムに従った演算或いはデータ転送の為の各種制御を行う。
【００３４】
ＲＡＭ１５は、データ書き込みが可能な記憶素子であり、ＣＰＵ１４によってデータの書込又は読出が行われる。
【００３５】
ＲＯＭ制御部１６は、ＲＯＭ１７に対して、データの書き込み、又はデータが正しく書き込まれたか否かを確認するベリファイ、或いは書き込まれたデータの消去等を行う。
【００３６】
ＲＯＭ１７には、ＣＰＵ１４が実行するプログラムを表すプログラムデータが書き込まれている。
【００３７】
セキュアＲＡＭ１９は、セキュアＤＭＡＣ２１からのデータ書込アクセスに応じて、データバスＢＳ８を介して受けたデータを記憶する。また、セキュアＲＡＭ１９は、セキュアＤＭＡＣ２１からのデータ読出アクセスに応じて、自身に記憶されているデータを読み出し、これをデータバスＢＳ８に送出する。また、セキュアＲＡＭ１９は、ＣＰＵ１４からのデータ書込アクセスに応じて、データバスＢＳ１を介して受けたデータを記憶する。尚、セキュアＲＡＭ１９は、ＣＰＵ１４からのデータ読出アクセスは受け付けない。
【００３８】
セキュアＲＯＭ２０は、セキュアＤＭＡＣ２１からのデータ読出アクセスに応じて、自身に格納されているデータを読み出し、これをデータバスＢＳ８に送出する。また、セキュアＲＯＭ２０は、ＲＯＭ制御部１６又はセキュアＤＭＡＣ２１からのデータ書込アクセスに応じて、データバスＢＳ８を介して受けたデータを書き込む。
【００３９】
セキュアＤＭＡＣ２１は、データバスＢＳ８を介して、暗号処理部１２、暗号鍵生成部１３、セキュアＲＡＭ１９、セキュアＲＯＭ２０、及びキーストレージ２２間のデータ転送を行う。
【００４０】
キーストレージ２２は、データバスＢＳ８を介して受けた暗号鍵を保持する。また、キーストレージ２２は、暗号鍵読出要求に応じて、保持されている暗号鍵を読み出し、データバスＢＳ８に送出する。
【００４１】
上記した構成により、マイクロコンピュータ１００は、ＲＯＭ１７に格納されているプログラムに従って、上記した暗号鍵を用いた平文データの暗号又は暗号化データの復号処理を含む各種のデータ処理を行う。
【００４２】
以下に、データバスＢＳ１上の平文データ片を暗号化する場合を例にとって、マイクロコンピュータ１００内で行われるデータ転送動作について説明する。
【００４３】
先ず、セキュアＤＭＡＣ２１が、暗号鍵を取得する為の暗号鍵読出要求ＲＱ２を、図３の太線矢印に示すようにデータバスＢＳ８を介して暗号鍵生成部１３に供給する。暗号鍵読出要求ＲＱ２に応じて、暗号鍵生成部１３は、暗号鍵ＣＲＫを、図３の太線矢印に示すようにデータバスＢＳ８を介してセキュアＤＭＡＣ２１に供給する。
【００４４】
セキュアＤＭＡＣ２１は、取得した暗号鍵ＣＲＫをデータバスＢＳ８を介してキーストレージ２２に転送し、当該暗号鍵ＣＲＫをキーストレージ２２に保持させる。次に、セキュアＤＭＡＣ２１は、キーストレージ２２に保持されている暗号鍵ＣＲＫをセキュアＲＡＭ１９及びセキュアＲＯＭ２０の各々に転送し、当該暗号鍵ＣＲＫをこれらセキュアＲＡＭ１９及びセキュアＲＯＭ２０に書き込ませる。そして、セキュアＤＭＡＣ２１は、セキュアＲＡＭ１９に書き込まれた暗号鍵ＣＲＫを、データバスＢＳ８を介して暗号処理部１２に供給する。
【００４５】
これにより、暗号処理部１２は、上記のようにデータバスＢＳ８を介してセキュアＤＭＡＣ２１が取得した暗号鍵ＣＲＫを用いて、データバスＢＳ１上の平文データ片を暗号化した暗号化データ片を生成し、これをデータバスＢＳ１に送出する。この際、ＣＰＵ１４は、当該暗号化データ片をデータバスＢＳ１を介してＲＡＭ１５に供給し、この暗号化データ片をＲＡＭ１５に書き込ませる。
【００４６】
よって、上記した一連の処理により、平文データ片を暗号化した暗号化データ片が生成される。
【００４７】
ところで、マイクロコンピュータ１００では、セキュアＤＭＡＣ２１のみならずＣＰＵ１４でも、上述したような平文データの暗号化、又は暗号化データの復号化の為のデータ転送制御を行うことが可能である。
【００４８】
例えば、データバスＢＳ１上の平文データ片を暗号化する場合、先ず、ＣＰＵ１４は、暗号鍵を取得する為の暗号鍵読出要求ＲＱ１を、図４の太線矢印に示すようにデータバスＢＳ１を介して暗号鍵生成部１３に供給する。暗号鍵読出要求ＲＱ１に応じて、暗号鍵生成部１３は、暗号鍵ＣＲＫを、図４の太線矢印に示すようにデータバスＢＳ１を介してＣＰＵ１４に供給する。
【００４９】
ＣＰＵ１４は、取得した暗号鍵ＣＲＫをデータバスＢＳ１を介してキーストレージ２２に転送し、当該暗号鍵ＣＲＫをキーストレージ２２に保持させる。次に、ＣＰＵ１４は、キーストレージ２２に保持されている暗号鍵ＣＲＫをＲＡＭ１５に転送し、当該暗号鍵ＣＲＫをＲＡＭ１５に書き込ませる。そして、ＣＰＵ１４は、ＲＡＭ１５に書き込まれた暗号鍵ＣＲＫを、データバスＢＳ１を介して暗号処理部１２に供給する。
【００５０】
これにより、暗号処理部１２は、図４に示すようにデータバスＢＳ１を介してＣＰＵ１４が取得した暗号鍵ＣＲＫを用いて、データバスＢＳ１上の平文データ片を暗号化した暗号化データ片を生成し、これをデータバスＢＳ１に送出する。この際、ＣＰＵ１４は、当該暗号化データ片をデータバスＢＳ１を介してＲＡＭ１５に供給し、この暗号化データ片をＲＡＭ１５に書き込ませる。
【００５１】
このように、マイクロコンピュータ１００では、セキュアＤＭＡＣ２１及びＣＰＵ１４の双方で、データの暗号化又は復号化の為のデータ転送を行うことが可能である。
【００５２】
よって、セキュアＤＭＡＣ２１によって図３に示すような暗号鍵を取得する為のデータ転送が終了した後、当該暗号鍵を用いた暗号処理部１２による暗号化処理が終了する前に、ＣＰＵ１４により図４に示すような暗号鍵取得の為のデータ転送が行われる場合がある。
【００５３】
以下に、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送（図３）、及びＣＰＵ１４による暗号鍵取得の為のデータ転送（図４）が連続した場合における暗号鍵生成部１３の内部動作を、図５に示すタイムチャートを参照しつつ説明する。
【００５４】
尚、最初に暗号鍵生成部１３の乱数生成部１３１が、図５に示すように乱数値Ｑ１を示す乱数ＲＮＤを生成しているものとする。よって、レジスタ１３２は、当該乱数ＲＮＤを保持しつつ、この乱数ＲＮＤによって表される乱数値Ｑ１を有する暗号鍵ＣＲＫを出力制御部１３３に供給する。
【００５５】
先ず、暗号鍵生成部１３が、図３に示すようにセキュアＤＭＡＣ２１から送出された暗号鍵読出要求ＲＱ２をデータバスＢＳ８を介して受ける。すると、暗号鍵生成部１３の出力制御部１３３は、図５に示すように、乱数値Ｑ１を有する暗号鍵ＣＲＫをデータバスＢＳ８に送出する。これにより、当該暗号鍵ＣＲＫが図３に示すようにデータバスＢＳ８を介してセキュアＤＭＡＣ２１に供給される。
【００５６】
更に、出力制御部１３３は、当該暗号鍵読出要求ＲＱ２に応答し、且つ暗号鍵ＣＲＫをデータバスＢＳ８に送出した直後に、図５に示すように論理レベル０から論理レベル１の状態に遷移する２値の乱数変更信号ＣＨを乱数生成部１３１に供給する。すなわち、出力制御部１３３は、暗号鍵の変更を促す乱数変更信号ＣＨを乱数生成部１３１に供給する。
【００５７】
当該乱数変更信号ＣＨに応答して、乱数生成部１３１は、図５に示すように、現時点での乱数ＲＮＤの乱数値Ｑ１を乱数値Ｑ２に変更する。
【００５８】
これにより、レジスタ１３２は、保持している内容を乱数値Ｑ２で上書きする。つまり、レジスタ１３２は、その直前まで保持していた乱数値Ｑ１を削除し、当該乱数値Ｑ１に代えて乱数値Ｑ２を保持する。よって、この際、レジスタ１３２は、図５に示す乱数値Ｑ２を有する暗号鍵ＣＰＫを出力制御部１３３に供給する。
【００５９】
その後、暗号鍵生成部１３が、図４に示すようにＣＰＵ１４から送出された暗号鍵読出要求ＲＱ１をデータバスＢＳ１を介して受ける。すると、暗号鍵生成部１３の出力制御部１３３は、図５に示すように、乱数値Ｑ２を有する暗号鍵ＣＲＫをデータバスＢＳ１に送出する。これにより、当該暗号鍵ＣＲＫが図４に示すようにデータバスＢＳ１を介してＣＰＵ１４に供給される。
【００６０】
よって、ＣＰＵ１４からの暗号鍵読出要求ＲＱ１に応じて暗号鍵生成部１３が送出した暗号鍵ＣＲＫの値（Ｑ２）は、その直前に、セキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２に応じて暗号鍵生成部１３が送出した暗号鍵ＣＲＫの値（Ｑ１）とは異なる。
【００６１】
従って、図３に示すようなセキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２に続き、図４に示すようなＣＰＵ１４からの暗号鍵読出要求ＲＱ１が行われても、同一値を有する暗号鍵ＣＲＫが２回連続して暗号鍵生成部１３から送出されることはない。よって、暗号鍵ＣＲＫがマイクロコンピュータ１００の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
【００６２】
尚、上記した一例では、暗号鍵生成部１３は、セキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２に応じて、暗号鍵ＣＲＫの値（Ｑ１）を他の値（Ｑ２）に変更している。しかしながら、ＣＰＵ１４からの暗号鍵読出要求ＲＱ１に応じて、暗号鍵ＣＲＫの値を他の値に変更しても良い。この際、暗号鍵生成部１３としては、以下の動作を行う出力制御部１３３を採用する。
【００６３】
すなわち、出力制御部１３３は、データバスＢＳ１を介してＣＰＵ１４からの暗号鍵読出要求ＲＱ１を受けた場合には、レジスタ１３２から供給された暗号鍵ＣＲＫをデータバスＢＳ１に送出し、引き続き、乱数変更信号ＣＨを乱数生成部１３１に供給する。また、出力制御部１３３は、データバスＢＳ８を介してセキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２を受けた場合には、レジスタ１３２から供給された暗号鍵ＣＲＫをデータバスＢＳ８に送出する。
【００６４】
図６は、ＣＰＵ１４による暗号鍵取得の為のデータ転送（図４）の直後に、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送（図３）が連続した場合における暗号鍵生成部１３の内部動作を表すタイムチャートである。
【００６５】
先ず、暗号鍵生成部１３の出力制御部１３３は、図４に示すようにＣＰＵ１４から送出された暗号鍵読出要求ＲＱ１をデータバスＢＳ１を介して受けると、図６に示すように、乱数値Ｑ１を有する暗号鍵ＣＲＫをデータバスＢＳ１に送出する。これにより、当該暗号鍵ＣＲＫが、図４に示すようにデータバスＢＳ１を介してＣＰＵ１４に供給される。
【００６６】
更に、出力制御部１３３は、当該暗号鍵読出要求ＲＱ１に応答し、且つ暗号鍵ＣＲＫをデータバスＢＳ１に送出した直後に、図６に示すように、論理レベル０から論理レベル１の状態に遷移する２値の乱数変更信号ＣＨを乱数生成部１３１に供給する。当該乱数変更信号ＣＨに応答して、乱数生成部１３１は、図６に示すように、現時点での乱数ＲＮＤの乱数値Ｑ１を乱数値Ｑ２に変更する。これにより、レジスタ１３２は、保持している内容を乱数値Ｑ２で上書きする。つまり、レジスタ１３２は、その直前まで保持していた乱数値Ｑ１を削除し、当該乱数値Ｑ１に代えて乱数値Ｑ２を保持する。よって、この際、レジスタ１３２は、図６に示すように乱数値Ｑ２を有する暗号鍵ＣＰＫを出力制御部１３３に供給する。
【００６７】
その後、暗号鍵生成部１３の出力制御部１３３は、図３に示すようにセキュアＤＭＡＣ２１から送出された暗号鍵読出要求ＲＱ２をデータバスＢＳ８を介して受けると、図６に示すように、乱数値Ｑ２を有する暗号鍵ＣＲＫをデータバスＢＳ８に送出する。これにより、当該暗号鍵ＣＲＫが、図３に示すようにデータバスＢＳ８を介してセキュアＤＭＡＣ２１に供給される。
【００６８】
よって、セキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２に応じて暗号鍵生成部１３が送出した暗号鍵ＣＲＫの値（Ｑ２）は、その直前に、ＣＰＵ１４からの暗号鍵読出要求ＲＱ１に応じて暗号鍵生成部１３が送出した暗号鍵ＣＲＫの値（Ｑ１）とは異なる。
【００６９】
従って、図４に示すようなＣＰＵ１４からの暗号鍵読出要求ＲＱ１に続き、図３に示すようなセキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２が行われても、同一値を有する暗号鍵ＣＲＫが２回連続して暗号鍵生成部１３から送出されることはない。よって、暗号鍵ＣＲＫがマイクロコンピュータ１００の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
【００７０】
尚、上記した実施例では、暗号鍵生成部１３で生成された暗号鍵ＣＲＫを読み出し、これをデータバス（ＢＳ１、ＢＳ８）を介して暗号処理部１２に転送する転送制御部として、ＣＰＵ１４及びＤＭＡＣ２１を用いている。しかしながら、上記したような暗号鍵取得の為のデータ転送を行うことができるものであれば、転送制御部としてはＣＰＵや、ＤＭＡＣ等に限定されない。
【００７１】
また、図１及び図２に示す実施例では、暗号鍵取得の為のデータ転送を２つのデータバスＢＳ１及びＢＳ８を用いて行っているが、単一のデータバスによっても同様に実施することが可能である。
【００７２】
要するに、図１に示すマイクロコンピュータ１００としては、以下の暗号処理部、暗号鍵生成部、第１及び第２の転送制御部を含むものであれば良い。
【００７３】
つまり、暗号処理部（１２）は、データバス（ＢＳ１、ＢＳ８）を介して受けた暗号鍵（ＣＲＫ）を用いて平文データを暗号化する。暗号鍵生成部（１３）は、暗号鍵（ＣＲＫ）を生成し、生成した暗号鍵を第１の読出要求（ＲＱ１又はＲＱ２）又は第２の読出要求（ＲＱ２又はＲＱ１）に応じてデータバスに送出する。第１の転送制御部（１４又は２１）は、第１の読出要求を暗号鍵生成部に供給し、暗号鍵生成部から送出された暗号鍵をデータバスを介して暗号処理部に転送する。第２の転送制御部（２１又は１４）は、第２の読出要求を暗号鍵生成部に供給し、暗号鍵生成部から送出された暗号鍵をデータバスを介して暗号処理部に転送する。ここで、暗号鍵生成部は、第１の読出要求及び第２の読出要求のうちの一方の読出要求を受けた場合に、暗号鍵の値を他の値に変更する。
【００７４】
更に、図２に示す暗号鍵生成部１３としては、以下の乱数生成部、レジスタ、及び出力制御部を含むものであれば良い。
【００７５】
つまり、乱数生成部（１３１）は、所定期間毎に乱数値が変化する乱数（ＲＮＤ）を生成し、乱数変更信号（ＣＨ）を受けた場合に乱数値を他の乱数値に変更する。レジスタ（１３２）は、この乱数を保持し、保持した乱数を暗号鍵（ＣＲＫ）として出力する。出力制御部（１３３）は、第１又は第２の読出要求を受けた場合にレジスタ（１３２）から出力された暗号鍵をデータバスに送出する。更に、出力制御部は、第１及び第２の読出要求のうちの一方の読出要求を受けた場合に乱数変更信号（ＣＨ）を乱数生成部に供給する。
【００７６】
図７は、マイクロコンピュータ１００の他の構成を示すブロック図である。尚、図７に示される構成では、暗号鍵生成部１３に代えて暗号鍵生成部１３Ａを採用した点を除く他の構成は図１に示されるものと同一である。よって、以下に暗号鍵生成部１３Ａの構成を中心に、図７に示す構成におけるマイクロコンピュータ１００の内部動作を説明する。
【００７７】
図８は、暗号鍵生成部１３Ａの内部構成を示すブロック図である。
【００７８】
図８に示すように、暗号鍵生成部１３Ａは、乱数生成部１３１Ａ、レジスタ１３２、出力制御部１３３Ａ、及びフラグレジスタ１３４を含む。
【００７９】
乱数生成部１３１Ａは、所定期間毎に乱数値が変化する乱数ＲＮＤを生成し、これをレジスタ１３２に供給する。尚、乱数生成部１３１Ａは、乱数ＲＮＤの乱数値が変化するタイミングで、この乱数値が変化したことを表す乱数変化信号ＶＡを出力制御部１３３Ａに供給する。
【００８０】
レジスタ１３２は、乱数ＲＮＤを保持しつつ、当該乱数ＲＮＤにて表される乱数値を有する暗号鍵ＣＲＫを出力制御部１３３Ａに供給する。
【００８１】
フラグレジスタ１３４には、上記した所定期間毎に、その所定期間内で暗号鍵読出要求を受けたか否かを表すフラグＦＧが保持されている。例えば、暗号鍵読出要求を受けた場合には論理レベル１、暗号鍵読出要求を受けていない場合には論理レベル０を有する２値のフラグＦＧがフラグレジスタ１３４に保持される。尚、電源投入時には、論理レベル０を有するフラグＦＧがフラグレジスタ１３４に保持される。
【００８２】
出力制御部１３３Ａは、セキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２をデータバスＢＳ８を介して受けた場合には、レジスタ１３２から供給された暗号鍵ＣＲＫをデータバスＢＳ８に送出する。更に、出力制御部１３３Ａは、この暗号鍵読出要求ＲＱ２に応じて、フラグレジスタ１３４に保持されているフラグＦＧを、暗号鍵読出要求を受けたことを表す論理レベル１に書き換える。
【００８３】
また、出力制御部１３３Ａは、ＣＰＵ１４からの暗号鍵読出要求ＲＱ１をデータバスＢＳ１を介して受けた場合には、先ず、フラグレジスタ１３４に保持されているフラグＦＧが論理レベル０であるか、或いは論理レベル１であるのかを判定する。
【００８４】
ここで、フラグＦＧが論理レベル０であると判定した場合、つまり暗号鍵読出要求を受けていないと判定した場合には、出力制御部１３３Ａは、レジスタ１３２から供給された暗号鍵ＣＲＫをデータバスＢＳ１に送出する。
【００８５】
一方、フラグＦＧが論理レベル１であると判定した場合、つまり暗号鍵読出要求を既に受けていると判定したら、出力制御部１３３Ａは、暗号鍵ＣＲＫに代えて、暗号鍵の読出エラーを表すエラー応答ＥＲＲを、データバスＢＳ１に送出する。この際、データバスＢＳ１を介してエラー応答ＥＲＲがＣＰＵ１４に供給される。
【００８６】
更に、出力制御部１３３Ａは、乱数ＲＮＤの乱数値が変化したことを表す乱数変化信号ＶＡを受けた場合には、フラグレジスタ１３４に保持されているフラグＦＧを論理レベル０の状態に初期化する。
【００８７】
以下に、図７及び図８に示される構成において、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送に引き続き、ＣＰＵ１４による暗号鍵取得の為のデータ転送が実施された場合での動作について、図９〜図１１を参照しつつ説明する。
【００８８】
尚、図９は、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送動作を表し、図１０は、図９に示すデータ転送の直後に行われる、ＣＰＵ１４による暗号鍵取得の為のデータ転送動作を表す図である。
【００８９】
また、図１１は、図９に示すデータ転送の直後に図１０に示すデータ転送が行われた場合における、暗号鍵生成部１３Ａの内部動作を表すタイムチャートである。
【００９０】
尚、図１１に示す一例では、暗号鍵生成部１３Ａの乱数生成部１３１Ａが、先ず、乱数値Ｑ１を示す乱数ＲＮＤを所定期間ＴＵに亘りレジスタ１３２に供給し、当該所定期間ＴＵの経過後に乱数値Ｑ２を示す乱数ＲＮＤをレジスタ１３２に供給するものとする。よって、レジスタ１３２は、所定期間ＴＵに亘り乱数値Ｑ１を有する暗号鍵ＣＲＫを出力制御部１３３Ａに供給し、所定期間ＴＵの経過後に乱数値Ｑ２を有する暗号鍵ＣＲＫを出力制御部１３３Ａに供給する。更に、暗号鍵生成部１３１Ａは、乱数ＲＮＤにて示される乱数値が変化する時点で、図１１に示すように、論理レベル０の状態から論理レベル１の状態に遷移し、論理レベル０の状態に戻る２値の乱数変化信号ＶＡを出力制御部１３３Ａに供給する。
【００９１】
先ず、暗号鍵生成部１３Ａが、図９の太線矢印に示すようにセキュアＤＭＡＣ２１から送出された暗号鍵読出要求ＲＱ２をデータバスＢＳ８を介して受ける。すると、暗号鍵生成部１３Ａの出力制御部１３３Ａは、図１１に示すように、乱数値Ｑ１を有する暗号鍵ＣＲＫをデータバスＢＳ８に送出する。これにより、当該暗号鍵ＣＲＫが図９の太線矢印に示すようにデータバスＢＳ８を介してセキュアＤＭＡＣ２１に供給される。更に、出力制御部１３３Ａは、暗号鍵読出要求ＲＱ２に応じて、フラグレジスタ１３４に保持されているフラグＦＧを図１１に示すように、暗号鍵読出要求を受けたことを表す論理レベル１に書き換える。
【００９２】
その後、暗号鍵生成部１３Ａが、図１０の太線矢印に示すようにＣＰＵ１４から送出された暗号鍵読出要求ＲＱ１をデータバスＢＳ１を介して受ける。すると、暗号鍵生成部１３Ａの出力制御部１３３Ａは、図１１に示すように、暗号鍵読出要求ＲＱ１を受けた時点でフラグＦＧが論理レベル１であることから、エラー応答ＥＲＲをデータバスＢＳ１に送出する。この際、暗号鍵生成部１３Ａから送出されたエラー応答ＥＲＲは、図１０の太線矢印に示すようにデータバスＢＳ１を介してＣＰＵ１４に供給される。エラー応答ＥＲＲを受けたＣＰＵ１４は、暗号鍵生成部１３Ａからの暗号鍵の読出に失敗したと判断する。尚、上記したように暗号鍵読出要求ＲＱ１を受けた時点でフラグＦＧが論理レベル１である場合には、出力制御部１３３Ａは、その時点で暗号鍵の送出は行わない。
【００９３】
このように、暗号鍵生成部１３Ａは、セキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２に応じて暗号鍵ＣＲＫをデータバスＢＳ８に送出する。この際、引き続きＣＰＵ１４からの暗号鍵読出要求ＲＱ１を受けた場合には、暗号鍵生成部１３Ａは、この暗号鍵読出要求ＲＱ１に応じて、暗号鍵ＣＲＫに代えてエラー応答ＥＲＲをデータバスＢＳ１に送出する。
【００９４】
これにより、図９に示すようなセキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２に続き、図１０に示すようなＣＰＵ１４からの暗号鍵読出要求ＲＱ１が行われても、同一値を有する暗号鍵ＣＲＫが２回連続して暗号鍵生成部１３Ａから送出されることはない。よって、暗号鍵ＣＲＫがマイクロコンピュータ１００の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
【００９５】
その後、乱数生成部１３１Ａが乱数ＲＮＤにて示される乱数値を、図１１に示すようにＱ１からＱ２に変更すると、出力制御部１３３Ａは、フラグレジスタ１３４に保持されているフラグＦＧの内容を論理レベル１から論理レベル０に書き換える。
【００９６】
よって、その後、暗号鍵生成部１３Ａは、ＣＰＵ１４からの暗号鍵読出要求ＲＱ１をデータバスＢＳ１を介して受けると、図１１に示すように暗号鍵読出要求ＲＱ１を受けた時点でフラグＦＧが論理レベル０であることから、乱数値Ｑ２を有する暗号鍵ＣＲＫをデータバスＢＳ１に送出する。
【００９７】
この際、ＣＰＵ１４からの暗号鍵読出要求ＲＱ１に応じて暗号鍵生成部１３Ａが送出した暗号鍵ＣＲＫの値（Ｑ２）は、その直前に、セキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２に応じて暗号鍵生成部１３Ａが送出した暗号鍵ＣＲＫの値（Ｑ１）とは異なる。
【００９８】
よって、同一の値を有する暗号鍵ＣＲＫが２回連続して暗号鍵生成部１３Ａから送出されることはないので、暗号鍵ＣＲＫがマイクロコンピュータ１００の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
【００９９】
ところで、図９及び図１０に示す一例では、暗号鍵生成部１３Ａは、セキュアＤＭＡＣ２１からの暗号鍵読出要求を受けた直後に、ＣＰＵ１４からの暗号鍵読出要求を受けた場合にエラー応答ＥＲＲを行うようにしている。しかしながら、暗号鍵生成部１３Ａとしては、ＣＰＵ１４から暗号鍵読出要求を受けた直後に、セキュアＤＭＡＣ２１から暗号鍵読出要求を受けた場合にエラー応答ＥＲＲを行うようにしても良い。
【０１００】
この際、暗号鍵生成部１３Ａとしては、以下のような出力制御部１３３Ａを採用する。
【０１０１】
すなわち、出力制御部１３３Ａは、ＣＰＵ１４からの暗号鍵読出要求ＲＱ１を受けた場合には、暗号鍵ＣＲＫをデータバスＢＳ１に送出する。更に、暗号鍵読出要求ＲＱ１に応じて、出力制御部１３３Ａは、フラグレジスタ１３４に保持されているフラグＦＧを、暗号鍵読出要求を受けたことを表す論理レベル１に書き換える。
【０１０２】
また、出力制御部１３３Ａは、セキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２を受けた場合には、先ず、フラグレジスタ１３４に保持されているフラグＦＧが論理レベル１であるか、或いは論理レベル０であるかを判定する。ここで、フラグＦＧが論理レベル０であると判定した場合、つまり、暗号鍵読出要求を受けていないと判定した場合、出力制御部１３３Ａは、暗号鍵ＣＲＫをデータバスＢＳ８に送出する。
【０１０３】
一方、フラグＦＧが論理レベル１であると判定した場合、つまり暗号鍵読出要求を既に受けていると判定したら、出力制御部１３３Ａは、暗号鍵の読出エラーを表すエラー応答ＥＲＲを、データバスＢＳ８に送出する。この際、データバスＢＳ８を介してエラー応答ＥＲＲがセキュアＤＭＡＣ２１に供給される。
【０１０４】
更に、出力制御部１３３Ａは、乱数生成部１３１Ａから、乱数ＲＮＤの乱数値が変化したことを表す乱数変化信号ＶＡが供給された場合には、フラグレジスタ１３４に保持されているフラグＦＧを論理レベル０の状態に初期化する。
【０１０５】
以下に、ＣＰＵ１４による暗号鍵取得の為のデータ転送の直後に、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送が連続した場合での動作について、図１２〜図１４を参照しつつ説明する。
【０１０６】
尚、図１２は、ＣＰＵ１４による暗号鍵取得の為のデータ転送動作を表し、図１３は、図１２に示すデータ転送の直後に行われるセキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送動作を表す図である。
【０１０７】
また、図１４は、図１２に示すデータ転送の直後に図１３に示すデータ転送が行われた場合における、暗号鍵生成部１３Ａの内部動作を表すタイムチャートである。
【０１０８】
先ず、暗号鍵生成部１３Ａが、図１２の太線矢印に示すようにＣＰＵ１４から送出された暗号鍵読出要求ＲＱ１をデータバスＢＳ１を介して受ける。すると、暗号鍵生成部１３Ａの出力制御部１３３Ａは、図１４に示すように、乱数値Ｑ１を有する暗号鍵ＣＲＫをデータバスＢＳ１に送出する。これにより、当該暗号鍵ＣＲＫが図１２の太線矢印に示すようにデータバスＢＳ１を介してＣＰＵ１４に供給される。更に、出力制御部１３３Ａは、暗号鍵読出要求ＲＱ１に応じて、フラグレジスタ１３４に保持されているフラグＦＧを図１４に示すように、暗号鍵読出要求を受けたことを表す論理レベル１に書き換える。
【０１０９】
その後、暗号鍵生成部１３Ａが、図１３の太線矢印に示すようにセキュアＤＭＡＣ２１から送出された暗号鍵読出要求ＲＱ２をデータバスＢＳ８を介して受ける。すると、暗号鍵生成部１３Ａの出力制御部１３３Ａは、図１４に示すように、暗号鍵読出要求ＲＱ２を受けた時点でフラグＦＧが論理レベル１であることから、暗号鍵ＣＲＫに代えてエラー応答ＥＲＲをデータバスＢＳ８に送出する。この際、暗号鍵生成部１３Ａから送出されたエラー応答ＥＲＲは、図１３の太線矢印に示すようにデータバスＢＳ８を介してセキュアＤＭＡＣ２１に供給される。このエラー応答ＥＲＲを受けたセキュアＤＭＡＣ２１は、暗号鍵生成部１３Ａからの暗号鍵の読出に失敗したと判断する。尚、上記したように暗号鍵読出要求ＲＱ２を受けた時点でフラグＦＧが論理レベル１である場合には、出力制御部１３３Ａは、その時点で暗号鍵の送出は行わない。
【０１１０】
このように、暗号鍵生成部１３Ａは、ＣＰＵ１４からの暗号鍵読出要求に応じて暗号鍵ＣＲＫを送出した直後に、セキュアＤＭＡＣ２１からの暗号鍵読出要求を受けた場合には、暗号鍵ＣＲＫの送出は行わず、エラー応答ＥＲＲを送出する。
【０１１１】
これにより、図１２に示すようなＣＰＵ１４からの暗号鍵読出要求ＲＱ１に続き、図１３に示すようなセキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２が行われても、同一値を有する暗号鍵ＣＲＫが２回連続して暗号鍵生成部１３Ａから送出されることはない。よって、暗号鍵ＣＲＫがマイクロコンピュータ１００の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
【０１１２】
その後、乱数生成部１３１Ａが乱数ＲＮＤにて示される乱数値を、図１４に示すようにＱ１からＱ２に変更すると、出力制御部１３３Ａは、フラグレジスタ１３４に保持されているフラグＦＧの内容を論理レベル１から論理レベル０に書き換える。
【０１１３】
よって、引き続き、暗号鍵生成部１３Ａは、セキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２をデータバスＢＳ８を介して受けると、図１４に示すように暗号鍵読出要求ＲＱ２を受けた時点でフラグＦＧが論理レベル０であることから、乱数値Ｑ２を有する暗号鍵ＣＲＫをデータバスＢＳ８に送出する。
【０１１４】
この際、セキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２に応じて暗号鍵生成部１３Ａが送出した暗号鍵ＣＲＫの値（Ｑ２）は、その直前に、ＣＰＵ１４からの暗号鍵読出要求ＲＱ１に応じて暗号鍵生成部１３Ａが送出した暗号鍵ＣＲＫの値（Ｑ１）とは異なる。
【０１１５】
よって、同一の値を有する暗号鍵ＣＲＫが２回連続して暗号鍵生成部１３Ａから送出されることはないので、暗号鍵ＣＲＫがマイクロコンピュータ１００の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
【０１１６】
以上のように、図７に示すマイクロコンピュータ１００では、図２に示される暗号鍵生成部１３に代えて、図８に示される暗号鍵生成部１３Ａを採用している。当該暗号鍵生成部（１３Ａ）では、所定期間（ＴＵ）毎に、この所定期間内において第１の読出要求（ＲＱ１又はＲＱ２）を受けた後に第２の読出要求（ＲＱ２又はＲＱ１）を受けた場合には、この第２の読出要求に応じて暗号鍵（ＣＲＫ）に代えてエラー応答（ＥＲＲ）をデータバス（ＢＳ１、ＢＳ８）に送出する。
【０１１７】
更に、マイクロコンピュータ１００では、図８に示す暗号鍵生成部１３Ａとして、以下の乱数生成部と、第１及び第２のレジスタと、出力制御部とを含むものを採用している。
【０１１８】
つまり、乱数生成部（１３１Ａ）は、所定期間（ＴＵ）毎に乱数値が変化する乱数（ＲＮＤ）を生成する。第１のレジスタ（１３２）は、この乱数を保持し、保持した乱数を暗号鍵（ＣＲＫ）として出力する。第２のレジスタ（１３４）は、読出要求（ＲＱ１又はＲＱ２）を受けたか否かを表すフラグ（ＦＧ）が保持される。
【０１１９】
出力制御部（１３３Ａ）は、第１の読出要求又は前記第２の読出要求を受けた場合に第１のレジスタから出力された暗号鍵をデータバス（ＢＳ１、ＢＳ８）に送出すると共に、所定期間（ＴＵ）毎に第２のレジスタに保持されているフラグを読出要求を受けていないことを表す状態（例えば論理レベル０）に初期化する。ここで、出力制御部は、第１の読出要求を受けた場合には、第２のレジスタに保持されているフラグを読出要求を受けたことを表す状態（例えば論理レベル１）に書き換える。また、出力制御部は、第２の読出要求を受けた場合には、第２のレジスタに保持されているフラグが読出要求を受けたことを表す場合に、暗号鍵に代えてエラー応答（ＥＲＲ）をデータバスに送出する。
【０１２０】
図１５は、図７に示すマイクロコンピュータ１００の変形例を示すブロック図である。尚、図１５に示される構成では、リセット制御部２３を追加した点を除く他の構成は図７に示すものと同一である。
【０１２１】
図１５において、リセット制御部２３は、データバスＢＳ１又はＢＳ８を介して上記したエラー応答ＥＲＲを受けた場合に、リセット信号ＲＳを暗号鍵生成部１３Ａ、ＣＰＵ１４、及びキーストレージ２２に供給する。暗号鍵生成部１３Ａ、ＣＰＵ１４、及びキーストレージ２２は、リセット信号ＲＳに応じて自身の状態をリセットする。
【０１２２】
以下に、図１５に示す構成において、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送に引き続き、ＣＰＵ１４による暗号鍵取得の為のデータ転送が実施された場合での動作について、図１６、図１７、並びに上記した図１１を参照しつつ説明する。
【０１２３】
尚、図１６は、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送動作を表し、図１７は、図１６に示すデータ転送の直後に連続して行われる、ＣＰＵ１４による暗号鍵取得の為のデータ転送動作を表す図である。
【０１２４】
先ず、暗号鍵生成部１３Ａが、図１６の太線矢印に示すようにセキュアＤＭＡＣ２１から送出された暗号鍵読出要求ＲＱ２をデータバスＢＳ８を介して受ける。すると、暗号鍵生成部１３Ａの出力制御部１３３Ａは、乱数値Ｑ１を有する暗号鍵ＣＲＫをデータバスＢＳ８に送出する。これにより、当該暗号鍵ＣＲＫが図１６の太線矢印に示すようにデータバスＢＳ８を介してセキュアＤＭＡＣ２１に供給される。更に、出力制御部１３３Ａは、暗号鍵読出要求ＲＱ２に応じて、フラグレジスタ１３４に保持されているフラグＦＧを図１１に示すように、暗号鍵読出要求を受けたことを表す論理レベル１に書き換える。
【０１２５】
その後、暗号鍵生成部１３Ａが、図１７の太線矢印に示すようにＣＰＵ１４から送出された暗号鍵読出要求ＲＱ１をデータバスＢＳ１を介して受ける。すると、暗号鍵生成部１３Ａの出力制御部１３３Ａは、図１１に示すように、暗号鍵読出要求ＲＱ１を受けた時点でフラグＦＧが論理レベル１であることから、エラー応答ＥＲＲをデータバスＢＳ１に送出する。この際、暗号鍵生成部１３Ａから送出されたエラー応答ＥＲＲは、図１７の太線矢印に示すようにデータバスＢＳ１を介してリセット制御部２３に供給される。
【０１２６】
エラー応答ＥＲＲを受けたリセット制御部２３は、リセット信号ＲＳを暗号鍵生成部１３Ａ、ＣＰＵ１４、及びキーストレージ２２に供給する。暗号鍵生成部１３Ａ、ＣＰＵ１４、及びキーストレージ２２は、リセット信号ＲＳに応じて自身の状態をリセットする。
【０１２７】
このように、暗号鍵生成部１３Ａは、セキュアＤＭＡＣ２１からの暗号鍵読出要求に応じて暗号鍵ＣＲＫを送出した直後に、ＣＰＵ１４からの暗号鍵読出要求を受けた場合には、暗号鍵ＣＲＫの送出は行わず、エラー応答ＥＲＲを送出する。この際、エラー応答ＥＲＲを受けたリセット制御部２３は、暗号鍵生成部１３Ａ、ＣＰＵ１４、及びキーストレージ２２各々の状態をリセットする。
【０１２８】
これにより、図１６に示すようなセキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２に続き、図１７に示すようなＣＰＵ１４からの暗号鍵読出要求ＲＱ１が行われても、同一値を有する暗号鍵ＣＲＫが２回連続して暗号鍵生成部１３Ａから送出されることはない。よって、暗号鍵ＣＲＫがマイクロコンピュータ１００の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
【０１２９】
尚、図１６及び図１７に示す一例では、暗号鍵生成部１３Ａは、セキュアＤＭＡＣ２１からの暗号鍵読出要求を受けた直後に、ＣＰＵ１４からの暗号鍵読出要求を受けた場合に、リセット制御部２３にエラー応答ＥＲＲを行うようにしている。しかしながら、暗号鍵生成部１３Ａとしては、ＣＰＵ１４から暗号鍵読出要求を受けた直後に、セキュアＤＭＡＣ２１から暗号鍵読出要求を受けた場合に、リセット制御部２３に対してエラー応答ＥＲＲを行うようにしても良い。
【０１３０】
この際、暗号鍵生成部１３Ａとしては、以下の動作を行う出力制御部１３３Ａを採用する。
【０１３１】
すなわち、出力制御部１３３Ａは、ＣＰＵ１４からの暗号鍵読出要求ＲＱ１を受けた場合には、暗号鍵ＣＲＫをデータバスＢＳ１に送出する。更に、暗号鍵読出要求ＲＱ１に応じて、出力制御部１３３Ａは、フラグレジスタ１３４に保持されているフラグＦＧを、暗号鍵読出要求を受けたことを表す論理レベル１に書き換える。
【０１３２】
また、出力制御部１３３Ａは、セキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２を受けた場合には、先ず、フラグレジスタ１３４に保持されているフラグＦＧが論理レベル０であるか、或いは論理レベル１であるのかを判定する。ここで、フラグＦＧが論理レベル０であると判定した場合、つまり暗号鍵読出要求を受けていないと判定した場合に、出力制御部１３３Ａは、暗号鍵ＣＲＫをデータバスＢＳ８に送出する。
【０１３３】
一方、フラグＦＧが論理レベル１であると判定した場合、つまり暗号鍵読出要求を既に受けていると判定したら、出力制御部１３３Ａは、暗号鍵ＣＲＫに代えて、暗号鍵の読出エラーを表すエラー応答ＥＲＲをデータバスＢＳ８に送出する。この際、データバスＢＳ８を介してエラー応答ＥＲＲがリセット制御部２３に供給される。
【０１３４】
以下に、図１５に示す構成において、ＣＰＵ１４による暗号鍵取得の為のデータ転送に引き続き、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送が実施された場合での動作について、図１８、図１９、並びに上記した図１４を参照しつつ説明する。
【０１３５】
尚、図１８は、ＣＰＵ１４による暗号鍵取得の為のデータ転送動作を表し、図１９は、図１８に示すデータ転送の直後に行われる、セキュアＤＭＡＣ２１による暗号鍵取得の為のデータ転送動作を表す図である。
【０１３６】
先ず、暗号鍵生成部１３Ａが、図１８の太線矢印に示すようにＣＰＵ１４から送出された暗号鍵読出要求ＲＱ１をデータバスＢＳ１を介して受ける。すると、暗号鍵生成部１３Ａの出力制御部１３３Ａは、乱数値Ｑ１を有する暗号鍵ＣＲＫをデータバスＢＳ１に送出する。これにより、当該暗号鍵ＣＲＫが図１８の太線矢印に示すようにデータバスＢＳ１を介してＣＰＵ１４に供給される。更に、出力制御部１３３Ａは、この暗号鍵読出要求ＲＱ１に応じて、フラグレジスタ１３４に保持されているフラグＦＧを図１４に示すように、暗号鍵読出要求を受けたことを表す論理レベル１に書き換える。
【０１３７】
その後、暗号鍵生成部１３Ａが、図１９の太線矢印に示すようにセキュアＤＭＡＣ２１から送出された暗号鍵読出要求ＲＱ２をデータバスＢＳ８を介して受ける。すると、暗号鍵生成部１３Ａの出力制御部１３３Ａは、図１４に示すように、この暗号鍵読出要求ＲＱ２を受けた時点でフラグＦＧが論理レベル１であることから、エラー応答ＥＲＲをデータバスＢＳ８に送出する。この際、暗号鍵生成部１３Ａから送出されたエラー応答ＥＲＲは、図１９の太線矢印に示すようにデータバスＢＳ８を介してリセット制御部２３に供給される。
【０１３８】
エラー応答ＥＲＲを受けたリセット制御部２３は、リセット信号ＲＳを暗号鍵生成部１３Ａ、ＣＰＵ１４、及びキーストレージ２２に供給する。暗号鍵生成部１３Ａ、ＣＰＵ１４、及びキーストレージ２２は、リセット信号ＲＳに応じて自身の状態をリセットする。
【０１３９】
このように、暗号鍵生成部１３Ａは、ＣＰＵ１４からの暗号鍵読出要求に応じて暗号鍵ＣＲＫを送出した直後に、セキュアＤＭＡＣ２１からの暗号鍵読出要求を受けた場合には、暗号鍵ＣＲＫの送出は行わず、エラー応答ＥＲＲを送出する。この際、エラー応答ＥＲＲを受けたリセット制御部２３は、暗号鍵生成部１３Ａ、ＣＰＵ１４、及びキーストレージ２２各々の状態をリセットする。
【０１４０】
これにより、図１８に示すようなＣＰＵ１４からの暗号鍵読出要求ＲＱ１に続き、図１９に示すようなセキュアＤＭＡＣ２１からの暗号鍵読出要求ＲＱ２が行われても、同一値を有する暗号鍵ＣＲＫが２回連続して暗号鍵生成部１３Ａから送出されることはない。よって、暗号鍵ＣＲＫがマイクロコンピュータ１００の外部へ漏洩される可能性が低くなり、平文データの漏洩を防ぐことが可能となる。
【符号の説明】
【０１４１】
１２                暗号処理部
１３、１３Ａ        暗号鍵生成部
１４                ＣＰＵ
２１                セキュアＤＭＡＣ
１３１              乱数生成部
１３３              出力制御部
【図１】
2019118064.tif 000003
【図２】
2019118064.tif 000004
【図３】
2019118064.tif 000005
【図４】
2019118064.tif 000006
【図５】
2019118064.tif 000007
【図６】
2019118064.tif 000008
【図７】
2019118064.tif 000009
【図８】
2019118064.tif 000010
【図９】
2019118064.tif 000011
【図１０】
2019118064.tif 000012
【図１１】
2019118064.tif 000013
【図１２】
2019118064.tif 000014
【図１３】
2019118064.tif 000015
【図１４】
2019118064.tif 000016
【図１５】
2019118064.tif 000017
【図１６】
2019118064.tif 000018
【図１７】
2019118064.tif 000019
【図１８】
2019118064.tif 000020
【図１９】
2019118064.tif 000021