(57)【要約】【課題】処理速度の低下を抑制しつつ命令と消費電流の相関を小さくすることが可能なマイクロコンピューター及び電子機器等を提供すること。【解決手段】マイクロコンピューターは、インストラクション処理を行う処理部（ＣＰＵ３０）と、インストラクション処理の動作タイミングを変化させる制御データＣＴＬを生成する制御データ生成部２０と、を含む。制御データ生成部２０は、乱数データを発生する乱数発生部２１と、乱数データを加工して、同一論理のビットが所定数連続して発生しない制御データＣＴＬを生成するコード変換部２２と、を有する。処理部は、制御データＣＴＬに基づいて動作タイミングが変化するインストラクション処理を行う。【選択図】      図２
2015161969.tif 000002
【特許請求の範囲】
【請求項１】
インストラクション処理を行う処理部と、
前記インストラクション処理の動作タイミングを変化させる制御データを生成する制御データ生成部と、
を含み、
前記制御データ生成部は、
乱数データを発生する乱数発生部と、
前記乱数データを加工して、同一論理のビットが所定数連続して発生しない前記制御データを生成するコード変換部と、
を有し、
前記処理部は、
前記制御データに基づいて前記動作タイミングが変化する前記インストラクション処理を行うことを特徴とするマイクロコンピューター。
【請求項２】
請求項１において、
前記乱数発生部は、
ｎビット（ｎは２≦ｎの自然数）の乱数データを発生し、
前記コード変換部は、
同一論理のビットがｊビット（ｊは２≦ｊ＜ｎの自然数）連続して発生しないように前記乱数データを加工して、ｍビット（ｍはｎ＜ｍの自然数）の前記制御データを生成することを特徴とするマイクロコンピューター。
【請求項３】
請求項１又は２において、
前記制御データに基づいて周期を変化させたクロック信号を前記処理部に供給するクロック供給部を含み、
前記処理部が、前記クロック供給部からの前記クロック信号に基づいて前記インストラクション処理を行うことで、前記インストラクション処理の前記動作タイミングが変化することを特徴とするマイクロコンピューター。
【請求項４】
請求項３において、
前記クロック供給部は、
前記制御データが第１の論理レベルの場合に前記クロック信号の周期を増加させることを特徴とするマイクロコンピューター。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記コード変換部は、
前記乱数データを８ｂ１０ｂ方式で変換することで、同一論理のビットが所定数連続して発生しない前記制御データを生成する８ｂ１０ｂ変換部を含むことを特徴とするマイクロコンピューター。
【請求項６】
請求項１において、
前記乱数発生部は、
ｎビット（ｎは２≦ｎの自然数）の乱数データを発生し、
前記コード変換部は、
前記ｎビットの乱数データのうちのＭＳＢ側のｎ／２ビットの第１の乱数データが入力される第１の８ｂ１０ｂ変換部と、
前記ｎビットの乱数データのうちのＬＳＢ側のｎ／２ビットの第２の乱数データが入力される第２の８ｂ１０ｂ変換部と、
前記第１の８ｂ１０ｂ変換部からの第１の変換データと、前記第２の８ｂ１０ｂ変換部からの第２の変換データと、で構成される変換データから順次１ビットずつ選択して前記制御データとして出力するセレクターと、
を有することを特徴とするマイクロコンピューター。
【請求項７】
請求項６において、
前記処理部にクロック信号を供給するクロック供給部を含み、
前記クロック供給部は、
前記セレクターにより選択されたビットが第１の論理レベルの場合、前記クロック信号の周期を増加させることを特徴とするマイクロコンピューター。
【請求項８】
請求項１又は２において、
バスコントロールユニットを含み、
前記バスコントロールユニットが、前記処理部がバスにアクセスする際のアクセスタイミングを前記制御データに基づいて変化させることで、前記インストラクション処理の前記動作タイミングが変化することを特徴とするマイクロコンピューター。
【請求項９】
請求項１乃至８のいずれかに記載されたマイクロコンピューターを含むことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピューター及び電子機器等に関する。
【背景技術】
【０００２】
マイクロコンピューターでは、実行している命令（インストラクション）に応じて動作する回路素子が決まるため、実行している命令と電源の消費電流との間に相関がある。そのため、消費電流の時間変化を測定することによって、走行しているインストラクションを推測することができる。
【０００３】
例えば、セキュリティートークン等のセキュリティー対策用のハードウェアを上記の手法でハッキングされた場合、アルゴリズムの解読やパスワードの解読、その解読された情報を使ったハードウェアの複製が可能となり、セキュリティーが破られる危険性がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００２−５０８５４９号公報
【特許文献２】特開２０００−２５９７９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記のようなハッキングを妨害する手法として、乱数を用いて命令と消費電流の相関を減らす手法が知られている（例えば特許文献１、２）。例えば、発生した乱数を２進数のビット列とし、そのビット列から１ビットずつ取り出し、“１”の場合には動作タイミングをずらす手法が考えられる。
【０００６】
しかしながら、乱数は“０”又は“１”が連続して続く場合がある。そのため、“０”が続いた場合には通常の動作を行う期間が長く続いて命令と消費電流の間に相関が生じ、“１”が続いた場合には動作タイミングをずらす期間が長く続いて処理速度が落ちてしまうという課題がある。
【０００７】
本発明の幾つかの態様によれば、処理速度の低下を抑制しつつ命令と消費電流の相関を小さくすることが可能なマイクロコンピューター及び電子機器等を提供できる。
【課題を解決するための手段】
【０００８】
本発明の一態様は、インストラクション処理を行う処理部と、前記インストラクション処理の動作タイミングを変化させる制御データを生成する制御データ生成部と、を含み、前記制御データ生成部は、乱数データを発生する乱数発生部と、前記乱数データを加工して、同一論理のビットが所定数連続して発生しない前記制御データを生成するコード変換部と、を有し、前記処理部は、前記制御データに基づいて前記動作タイミングが変化する前記インストラクション処理を行うマイクロコンピューターに関係する。
【０００９】
本発明の一態様によれば、乱数データが加工されることで、同一論理のビットが所定数連続して発生しない制御データが生成され、その制御データに基づいてインストラクション処理の動作タイミングが変更される。これにより、動作タイミングが変更される場合又は変更されない場合が長期間続かないようにできるため、処理速度の低下を抑制しつつ命令と消費電流の相関を小さくすることが可能となる。
【００１０】
また本発明の一態様は、前記乱数発生部は、ｎビット（ｎは２≦ｎの自然数）の乱数データを発生し、前記コード変換部は、同一論理のビットがｊビット（ｊは２≦ｊ＜ｎの自然数）連続して発生しないように前記乱数データを加工して、ｍビット（ｍはｎ＜ｍの自然数）の前記制御データを生成してもよい。
【００１１】
インストラクション処理の動作タイミングが変更される場合には処理速度が低下し、変更されない場合には命令と消費電流の相関が大きくなる。この点、本発明の一態様によれば、制御データにおいて同一論理のビットが連続するビット数をｊビットより少なくできる。このビット数ｊは、乱数データのビット数ｎよりも小さいので、乱数データのビット列をそのまま制御データとして用いる場合よりも、同一論理のビットが連続するビット数を少なくできる。ビットの論理でインストラクション処理の動作タイミングを変更するか否かを制御するので、動作タイミングが変更される場合又は変更されない場合が続く期間を短くできる。
【００１２】
また本発明の一態様は、前記制御データに基づいて周期を変化させたクロック信号を前記処理部に供給するクロック供給部を含み、前記処理部が、前記クロック供給部からの前記クロック信号に基づいて前記インストラクション処理を行うことで、前記インストラクション処理の前記動作タイミングが変化してもよい。
【００１３】
このように処理部がインストラクション処理を実行するためのクロック信号の周期を、制御データに基づいて変更することで、インストラクション処理の動作タイミングを変化させることができる。制御データは同一論理が所定数連続しないので、周期が通常の場合と変更された場合が長期間連続せず、ランダムに分散されたクロック信号を供給できる。
【００１４】
また本発明の一態様は、前記クロック供給部は、前記制御データが第１の論理レベルの場合に前記クロック信号の周期を増加させてもよい。
【００１５】
このようにすれば、制御データが第２の論理レベルの場合にクロック信号の周期を変更せず、制御データが第１の論理レベルの場合にクロック信号の周期を増加できる。乱数データにより第１の論理レベルと第２の論理レベルがランダムに発生するので、命令と消費電流の相関が小さくなる。また、第２の論理レベルが連続すると処理速度が低下するが、同一論理は所定数連続しないので、処理速度のムラが分散される。
【００１６】
また本発明の一態様は、前記コード変換部は、前記乱数データを８ｂ１０ｂ方式で変換することで、同一論理のビットが所定数連続して発生しない前記制御データを生成する８ｂ１０ｂ変換部を含んでもよい。
【００１７】
８ｂ１０ｂ方式は８ビットのデータを１０ビットのデータに変換する手法であり、変換後は、同一論理のビットが最大でも５ビットしか連続しないデータとなる。この８ｂ１０ｂ方式により乱数データを変換することで、同一論理のビットが最大でも５ビットしか連続しない制御データを生成できる。
【００１８】
また本発明の一態様は、前記乱数発生部は、ｎビット（ｎは２≦ｎの自然数）の乱数データを発生し、前記コード変換部は、前記ｎビットの乱数データのうちのＭＳＢ側のｎ／２ビットの第１の乱数データが入力される第１の８ｂ１０ｂ変換部と、前記ｎビットの乱数データのうちのＬＳＢ側のｎ／２ビットの第２の乱数データが入力される第２の８ｂ１０ｂ変換部と、前記第１の８ｂ１０ｂ変換部からの第１の変換データと、前記第２の８ｂ１０ｂ変換部からの第２の変換データと、で構成される変換データから順次１ビットずつ選択して前記制御データとして出力するセレクターと、を有してもよい。
【００１９】
８ｂ１０ｂ方式を用いる場合、単純には８ビットの乱数データを用いることが考えられるが、８ビットでは乱数データの数が限られるという課題がある。この点、ＭＳＢ側の８ビットとＬＳＢ側の８ビットをそれぞれ８ｂ１０ｂ方式でコード変換することで、乱数の数を確保し、制御データのランダム性を向上できる。
【００２０】
また本発明の一態様は、前記処理部にクロック信号を供給するクロック供給部を含み、前記クロック供給部は、前記セレクターにより選択されたビットが第１の論理レベルの場合、前記クロック信号の周期を増加させてもよい。
【００２１】
このように、セレクターが制御データから順次１ビットずつ選択し、その選択したビットの論理レベルに応じてクロック信号の周期を制御することで、処理部が行うインストラクション処理の動作タイミングをランダムに変化させることができる。
【００２２】
また本発明の一態様は、バスコントロールユニットを含み、前記バスコントロールユニットが、前記処理部がバスにアクセスする際のアクセスタイミングを前記制御データに基づいて変化させることで、前記インストラクション処理の前記動作タイミングが変化してもよい。
【００２３】
このようにすれば、バスにアクセスする命令を処理部が処理する際、制御データの論理レベルに応じてバスアクセスのタイミングが変更される。制御データによりバスアクセスのタイミングがランダムに変更されるので、インストラクション処理のタイミングもランダムに変化させることができる。
【００２４】
また本発明の他の態様は、上記のいずれかに記載されるマイクロコンピューターを含む電子機器に関係する。
【図面の簡単な説明】
【００２５】
【図１】比較例の動作説明図。
【図２】本実施形態のマイクロコンピューターの構成例。
【図３】本実施形態の動作説明図。
【図４】乱数データの例。
【図５】コード変換の例。
【図６】本実施形態のマイクロコンピューターの第２の構成例。
【図７】クロック供給部及び制御データ生成部の詳細な構成例。
【図８】クロック供給部及び制御データ生成部の動作タイミングチャート。
【図９】電子機器の構成例。
【図１０】電子機器の構成例。
【発明を実施するための形態】
【００２６】
以下、本発明の好適な実施の形態について詳細に説明する。なお以下に説明する本実施形態は特許請求の範囲に記載された本発明の内容を不当に限定するものではなく、本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【００２７】
１．比較例
図１に、本実施形態の比較例の動作説明図を示す。
【００２８】
マイクロコンピューターは、命令を処理するＣＰＵ（Central Processing Unit）と、記憶装置やインターフェース等を含むペリフェラルとで構成される。ＣＰＵにはクロック信号ＣＫ＿ＣＰＵが供給され、そのクロック信号ＣＫ＿ＣＰＵの立ち上がりエッジに同期してＣＰＵが動作しているとする。
【００２９】
即ち、クロック信号ＣＫ＿ＣＰＵの立ち上がりで命令フェッチを行い、次の立ち上がりで、その命令をデコードし、アドレス計算を行う。アドレス計算では、例えば実行に用いるデータが格納された主記憶装置のアドレスを計算する。そして、次のクロック信号ＣＫ＿ＣＰＵの立ち上がりで命令を実行し、実行結果をレジスターに書き込む。命令の実行では、例えばアドレス計算で得られたアドレスからデータを読み出し、そのデータに対して演算装置が処理を行う。
【００３０】
パイプライン処理を行う場合には、第１命令、第２命令、・・・の処理を１クロック毎に開始し、複数の命令を並列処理する。この場合、１クロック毎に命令の実行結果が得られる。
【００３１】
このような動作では、マイクロコンピューターの消費電流（ＩＤＤ）が命令の内容に応じて異なっている。例えば、演算の内容が異なる命令では、演算装置で用いるロジック回路の個数や種類が異なり、そのロジック回路で消費する電流が異なる。或いは、演算装置を用いる命令と用いない命令、主記憶装置にアクセスする命令とアクセスしない命令では、動作する回路が異なるため消費電流が異なる。
【００３２】
上述のように、クロック信号ＣＫ＿ＣＰＵの立ち上がりに同期して命令を処理しているので、各クロックの立ち上がりで消費電流が発生し、その消費電流はそのときに実行している命令に応じたものとなる。そのため、この消費電流（例えば、その時間変化のパターン）を解析することで、マイクロコンピューターが実行している命令や、或いはその命令から構成されるアルゴリズムを推測することが可能となる。
【００３３】
２．マイクロコンピューター
図２に、このような課題を解決できる本実施形態のマイクロコンピューターの構成例を示す。
【００３４】
マイクロコンピューターは、クロック供給部１０（クロックジェネレーター）と、制御データ生成部２０と、ＣＰＵ３０（処理部）と、ＲＯＭ４０と、ＲＡＭ５０（主記憶装置）と、バス６０と、第１〜第ｓのペリフェラルＰＨ１〜ＰＨｓ（ｓは自然数）と、を含む。
【００３５】
ＣＰＵ３０は、インストラクション処理を行う処理部である。インストラクション処理とは、上述した命令フェッチ、デコード、アドレス計算、実行、レジスター書き込みの一連の処理である。ＣＰＵ３０は、例えば命令デコーダーやレジスター、演算装置（ALU: Arithmetic Logic Unit）等で構成される。ＣＰＵ３０はバス６０によりＲＡＭ５０やペリフェラルＰＨ１〜ＰＨｓ等の各部と接続されており、そのバス６０を介して各部との通信を行う。
【００３６】
ＲＯＭ４０とＲＡＭ５０はマイクロコンピューターの内部メモリーである。ＲＡＭ５０は、ＣＰＵ３０が処理するプログラムやデータを記憶する主記憶装置（一次記憶装置）として用いられる。
【００３７】
ペリフェラルＰＨ１〜ＰＨｓは、マイクロコンピューターの周辺機能を実現する装置であり、例えば、カウンターやタイマー、割り込みコントローラー、シリアルインターフェース（例えばUART: Universal Asynchronous Receiver Transmitter）、ＡＤコンバーター、ＤＡコンバーター、発振回路等である。
【００３８】
クロック供給部１０は、クロック源から供給されるクロック信号ＣＫＳ１〜ＣＫＳｔ（ｔは自然数）を受けて、複数のクロック信号を生成する。クロック源は、例えばマイクロコンピューター外部のクロック生成回路や、マイクロコンピューター内部の発振回路等である。クロック供給部１０は、生成したクロック信号ＣＫ＿ＰＨ１〜ＣＫ＿ＰＨｓ、ＣＫ＿ＳＹＳ、ＣＫ＿ＣＰＵを、それぞれペリフェラルＰＨ１〜ＰＨｓ、制御データ生成部２０、ＣＰＵ３０（及びＲＯＭ４０、ＲＡＭ５０）へ供給する。
【００３９】
制御データ生成部２０は、インストラクション処理の動作タイミングを変化させる制御データＣＴＬを生成する。ＣＰＵ３０は、その制御データＣＴＬに基づいて動作タイミングが変化するインストラクション処理を行う。
【００４０】
具体的には、制御データ生成部２０は、乱数データを発生する乱数発生部２１を含み、制御データ生成部２０は、その乱数データに基づいて制御データＣＴＬを出力する。クロック供給部１０は、その制御データＣＴＬに基づいてクロック信号ＣＫ＿ＣＰＵの周期を変化させる。そして、ＣＰＵ３０は、その周期が変化するクロック信号ＣＫ＿ＣＰＵでインストラクション処理を行うことで、インストラクション処理の動作タイミングを変化させる。
【００４１】
図３に、本実施形態の動作タイミングチャートを示す。
【００４２】
制御データ生成部２０は、乱数のビット列をＭＳＢ側（又はＬＳＢ側）から１ビットずつ制御データＣＴＬとして出力する。例えば乱数が１６進数の“４”である場合、２進数のビット列では“０１００”となるので、制御データＣＴＬは“０”、“１”、“０”、“０”の順に出力される。例えば、図３の例ではクロック信号ＣＫ＿ＳＹＳの２クロック毎に１ビットずつ出力する。
【００４３】
クロック供給部１０は、制御データＣＴＬが“０”の場合にはクロック信号ＣＫ＿ＣＰＵを基準の周期で出力する。図３の例では、クロック信号ＣＫ＿ＳＹＳと同一の周期である。一方、制御データＣＴＬが“１”の場合には、基準の周期よりも遅い周期でクロック信号ＣＫ＿ＣＰＵを出力する。図３の例では、基準の周期の半分の周期であり、クロック信号ＣＫ＿ＳＹＳの２つのパルスのうち２つ目のパルスを欠落させる。制御データＣＴＬは乱数データから生成されるので、周期が遅くなるタイミングはランダムである。
【００４４】
ＣＰＵ３０は、このランダムに周期が変化するクロック信号ＣＫ＿ＣＰＵで動作するので、マイクロコンピューターの消費電流（ＩＤＤ）の発生タイミングもランダムとなる。具体的には、クロック信号ＣＫ＿ＣＰＵのパルスが欠落したときにはインストラクション処理が次のステップに進まずにウェイト状態となるため、消費電流が小さくなり、そのタイミングがランダムであることによって、命令と消費電流の相関を小さくできる。
【００４５】
しかしながら、乱数を使うことによって以下のような課題がある。図４に示すように、例えば１６進数で“００００”〜“ＦＦＦＦ”の乱数データを発生させた場合、２進数では１６ビットのビット列となる。このビット列をそのまま制御データＣＴＬとして使ったとすると、乱数データには“００００”や“ＦＦＦＦ”が含まれるので、最大で“０”又は“１”のビットが１６回以上続くことになる。
【００４６】
ビット“０”が続いた場合、その間はＣＰＵ３０が通常のタイミングで動作するため、命令と消費電流の相関が大きくなる。そのため、消費電流の解析によりアルゴリズムやパスワードをハッキングされる可能性がある。一方、ビット“１”が続いた場合、その間はＣＰＵ３０の動作周波数が遅くなるため、マイクロコンピューターのパフォーマンス（処理速度）が低下して（又はパフォーマンスにムラが生じて）しまう。
【００４７】
そこで本実施形態では、制御データ生成部２０がコード変換部２２を含み、そのコード変換部２２が、乱数データを加工して、同一論理のビットが所定数連続して発生しない制御データＣＴＬを生成する。
【００４８】
図５に、コード変換の例を示す。この例では、乱数データを２０ビットのビット列に変換し、“０”又は“１”の同一論理のビットが５回以上連続して発生しないように制御データＣＴＬを生成する。例えば、乱数データが“００００”である場合には最大でビット“０”が３回続くのみであり、乱数データが“ＦＦＦＦ”である場合には最大でビット“１”が３回続くのみである。
【００４９】
このように、同一論理のビットが長く連続しないように乱数データを加工することで、“０”の連続によるハッキングの可能性と、“１”の連続によるパフォーマンスの低下とを、防ぐことができる。
【００５０】
より具体的には、コード変換部２２は、乱数データを８ｂ１０ｂ方式で変換する。８ｂ１０ｂ方式は、８ビットのビット列を１０ビットのビット列に変換するコード変換法である。本実施形態では、乱数データのＭＳＢ側（上位）８ビット、ＬＳＢ側（下位）８ビットを、それぞれ１０ビットに変換し、合わせて２０ビットのビット列を生成する。
【００５１】
８ｂ１０ｂ方式では、同一論理のビットが５ビットよりも多く続かないビット列を出力できる。これは、８ビットのビット列を変換した場合に成り立つだけでなく、それを連続させて８×２ビット、８×３ビット、・・・のビット列を変換した場合にも、同一論理のビットは５ビット以下となる。即ち、乱数データの列を変換した制御データＣＴＬのビット列では、どの部分をとっても同一論理のビットを最大で５ビットにできる。図５では、乱数“００”と“ＦＦ”の変換例をあげているが、図５に示す例の他に乱数“００”をビット列“１００１１１０１００”に変換する場合、乱数“ＦＦ”をビット列“１０１０１１０００１”に変換する場合がある。いずれのビット列に変換するかは、その直前の変換結果に応じて同一ビットが連続しないように決定される。なお、８ｂ１０ｂ方式については米国特許４４８６７３９に詳細に記載されている。
【００５２】
なお、コード変換の手法は上記に限定されない。即ち、乱数発生部２１は、ｎビット（ｎは２≦ｎの自然数）の乱数データを発生し、コード変換部２２は、同一論理のビットがｊビット（ｊは２≦ｊ＜ｎの自然数）連続して発生しないように乱数データを加工して、ｍビット（ｍはｎ＜ｍの自然数）の制御データＣＴＬを生成すればよい。
【００５３】
このようなコード変換を用いることで、制御データＣＴＬにおいて同一論理が続くビット数は、乱数データのビット数ｎよりも少ないビット数ｊとなる。即ち、乱数データのビット列をそのまま用いる場合よりも、同一論理が連続するビット数を少なくできるため、命令と消費電流の相関を減らすと共にパフォーマンスの低下を防ぐことができる。
【００５４】
３．動作タイミングを変更する手法の変形例
以上の実施形態では、ＣＰＵ３０に供給するクロック信号ＣＫ＿ＣＰＵの周期を変更することでＣＰＵ３０の動作タイミングを変更したが、動作タイミングの変更手法はこれに限定されない。
【００５５】
図６に、バスアクセスのタイミングを変更する場合のマイクロコンピューターの構成例を示す。
【００５６】
マイクロコンピューターは、クロック供給部１０と、制御データ生成部２０と、ＣＰＵ３０と、ＲＯＭ４０と、ＲＡＭ５０と、バス６０と、バスコントロールユニット７０と、第１〜第ｓのペリフェラルＰＨ１〜ＰＨｓと、を含む。なお、既に上述した構成要素と同一の構成要素については同一の符号を付し、適宜説明を省略する。
【００５７】
バスコントロールユニット７０は、データバスやアドレスバス等で構成されるバス６０を介した通信を制御するものである。この制御によって、ＣＰＵ３０と各部との間のデータ転送や制御が可能となる。本構成例では、バスコントロールユニット７０は、ＣＰＵ３０がバス６０にアクセスする際のアクセスタイミングを変化させる。
【００５８】
具体的には、制御データ生成部２０は、上述したビット列の制御データＣＴＬをバスコントロールユニット７０に出力する。バスコントロールユニット７０は、制御データＣＴＬが“０”の場合にはアクセスタイミングを変更せずに通常の制御を行い、制御データＣＴＬが“１”の場合にはアクセスタイミングを遅らせる。
【００５９】
例えば、ＣＰＵ３０が命令を実行する際にＲＡＭ５０（主記憶装置）からデータを読み出すとする。この場合、ＣＰＵ３０はバス６０を介してＲＡＭ５０にアクセスするが、制御データＣＴＬが“１”の場合にはバスコントロールユニット７０が、そのアクセスタイミングを遅らせる。例えば、ＣＰＵ３０からアクセス要求を受けてから、実際にＲＡＭ５０にアクセスするまでの時間を遅延させる。或いは、一時的にビジー信号をＣＰＵ３０に返すことによって、実質的にアクセスタイミングを変更する。
【００６０】
本実施形態によれば、バス６０を介してＲＡＭ５０やペリフェラルＰＨ１〜ＰＨｓにアクセスする命令を実行する場合には、上記のようにして乱数によりアクセスタイミングがランダムに変更される。これにより、インストラクション処理のタイミングがランダムに変更されることになるため、命令と消費電流の相関を減らすことができる。
【００６１】
４．クロック供給部、制御データ生成部
図７に、クロック供給部１０及び制御データ生成部２０の詳細な構成例を示す。
【００６２】
クロック供給部１０は、クロックギア出力部１７０と、クロックギア選択レジスター１８０と、クロック生成部１９０と、を含む。制御データ生成部２０は、オンオフ制御レジスター１１０と、１６ビット乱数発生部１２０と、分周部１３０と、第１の８ｂ１０ｂ変換部１４０と、第２の８ｂ１０ｂ変換部１５０と、セレクター１６０と、を含む。
【００６３】
オンオフ制御レジスター１１０には、制御データ生成のイネーブル／ディスエーブル信号が設定される。イネーブルが設定された場合には制御データ生成部２０はランダムな制御データＣＴＬを生成し、ディスエーブルが設定された場合には制御データ生成部２０は“０”を制御データＣＴＬとして出力する。
【００６４】
分周部１３０は、クロック信号ＣＫ＿ＣＰＵを４０分周するカウンターであり、４０カウント毎にシフト制御信号を１６ビット乱数発生部１２０に出力する。
【００６５】
１６ビット乱数発生部１２０は、分周部１３０からのシフト制御信号を受け取った場合に１６ビットの乱数データを更新する。１６ビット乱数発生部１２０は、例えば線形帰還シフトレジスター（LFSR: linear feedback shift register）で構成される。
【００６６】
第１の８ｂ１０ｂ変換部１４０は、１６ビットの乱数データのうちのＭＳＢ側の８ビットの第１の乱数データを８ｂ１０ｂ方式でコード変換し、２０ビットの変換データのうちのＭＳＢ側の１０ビットの第１の変換データとして出力する。第２の８ｂ１０ｂ変換部１５０は、１６ビットの乱数データのうちのＬＳＢ側の８ビットの第２の乱数データを８ｂ１０ｂ方式でコード変換し、２０ビットの変換データのうちのＬＳＢ側の１０ビットの第２の変換データとして出力する。
【００６７】
セレクター１６０は、分周部１３０のカウント値に基づいて２０ビットの変換データをＬＳＢ側から１ビットずつ選択し、制御データＣＴＬとして出力する。分周部１３０のカウント値は１０進数で“０”〜“３９”であり、セレクター１６０は２カウント毎に１ビットを選択する。
【００６８】
クロックギア選択レジスター１８０には、クロック信号ＣＫ＿ＳＹＳとクロック信号ＣＫ＿ＣＰＵの周波数比（ギア比）を選択する信号が設定される。例えば、設定値０、１、２、３が設定された場合、周波数比は１／１、１／２、１／４、１／８が設定される。
【００６９】
クロックギア出力部１７０は、制御データＣＴＬが“０”（第２の論理レベル）の場合には、クロックギア選択レジスター１８０の設定値をそのまま出力し、制御データＣＴＬが“１”（第１の論理レベル）の場合には、クロックギア選択レジスター１８０の設定値に１を加算して出力する。
【００７０】
クロック生成部１９０は、クロックギア出力部１７０からの設定値に対応する周波数比でクロック信号ＣＫ＿ＳＹＳを減速し、クロック信号ＣＫ＿ＣＰＵを出力する。例えば、クロックギア選択レジスター１８０の設定値が０の場合、制御データＣＴＬが“０”であればクロックギア出力部１７０は設定値０を出力するので、クロック生成部１９０はクロック信号ＣＫ＿ＳＹＳと同じ周波数のクロック信号ＣＫ＿ＣＰＵを出力する。一方、制御データＣＴＬが“１”であればクロックギア出力部１７０は設定値０＋１＝１を出力するので、クロック生成部１９０はクロック信号ＣＫ＿ＳＹＳの１／２の周波数のクロック信号ＣＫ＿ＣＰＵを出力する。
【００７１】
以上のようにして、２０ビットの変換データの中からセレクター１６０が１ビットずつ選択することで制御データＣＴＬを生成できる。そして、制御データＣＴＬが“１”（第１の論理レベル）の場合にクロック信号ＣＫ＿ＣＰＵの周期を増加させ、ランダムに周期が変化するクロック信号ＣＫ＿ＣＰＵを生成できる。
【００７２】
また、８ｂ１０ｂ方式は８ビットのデータを変換する手法であるが、その入力として８ビットの乱数データを用いた場合、乱数の数が限られてしまう。この点、１６ビットの乱数データを発生し、そのＭＳＢ側の８ビットとＬＳＢ側の８ビットをそれぞれ８ｂ１０ｂ方式でコード変換することで、乱数の数を確保し、制御データのランダム性を上げることができる。
【００７３】
図８に、上記のクロック供給部１０及び制御データ生成部２０の動作タイミングチャートを示す。
【００７４】
Ａ１に示すように、分周部１３０は、クロック信号ＣＫ＿ＣＰＵの立ち上がりでカウント値ｃｏｕｎｔ４０をカウントアップする。Ａ２に示すように、分周部１３０は、カウント値ｃｏｕｎｔ４０が０の場合にシフト制御信号ｓｈｉｆｔ＿ｅｎをアクティブ（Ｈレベル）にする。Ａ３に示すように、１６ビット乱数発生部１２０は、シフト制御信号ｓｈｉｆｔ＿ｅｎの立ち下がりで乱数データＬＦＳＲｏｕｔ［１５：０］を更新する。Ａ４に示すように、第１の８ｂ１０ｂ変換部１４０及び第２の８ｂ１０ｂ変換部１５０は、乱数データＬＦＳＲｏｕｔ［１５：０］を変換データ８ｂ１０ｂｏｕｔに変換する。
【００７５】
Ａ５に示すように、セレクター１６０は、例えばカウント値ｃｏｕｎｔ４０が３４、３５のときに位置（ｂｉｔ ｐｏｓｉｔｉｏｎ）１７のビットを選択する。ビット位置は０〜１９で指定されるので、ビット位置１７はＬＳＢ側から１８番目であり、制御データＣＴＬは“０”となる。Ａ６に示すように、クロックギア選択レジスター１８０の設定値ｃｇｅａｒ＿ｒ＿ｉｎ［１：０］が０の場合、Ａ７に示すように、クロックギア出力部１７０は、設定値ｃｇｅａｒ＿ｒ＿ｏｕｔ［１：０］＝０を出力する。
【００７６】
Ａ８に示すように、次のビット位置１８（ＬＳＢ側から１９番目）では制御データＣＴＬは“１”となる。Ａ９に示すように、クロックギア出力部１７０は、設定値ｃｇｅａｒ＿ｒ＿ｏｕｔ［１：０］＝１を出力する。設定値ｃｇｅａｒ＿ｒ＿ｏｕｔ［１：０］が０から１に変化するのは、Ａ１０に示すクロック信号ＣＫ＿ＣＰＵの立ち上がりである。その次のＡ１１に示す立ち上がりで、クロック生成部１９０は周波数比を切り替える。即ち、実際にクロック信号ＣＫ＿ＣＰＵの周期が変わるのは、制御データＣＴＬの論理レベルが変わってから、１クロック後である。
【００７７】
５．電子機器
図９、図１０に、本実施形態のマイクロコンピューターを適用できる電子機器の構成例を示す。なお以下ではセキュリティートークンに適用した場合を例に説明するが、これに限定されず、本実施形態のマイクロコンピューターは種々の電子機器に適用できる。
【００７８】
電子機器２００は、表示部２１０、マイクロコンピューター２２０（集積回路装置）、操作部２３０、記憶部２４０、通信部２５０を含む。
【００７９】
マイクロコンピューター２２０は、ユーザーが電子機器２００に対して特定の操作を行った場合に、ワンタイムパスワード等のセキュリティー情報を演算し、そのセキュリティー情報を表示部２１０に表示させる。
【００８０】
例えば、サーバーとの同期を行うタイプのトークンの場合、ユーザーが端末と電子機器２００を接触又は非接触の通信で接続すると、通信部２５０が端末と通信してサーバーから例えば鍵情報を取得し、マイクロコンピューター２２０は、その鍵情報を用いてセキュリティー情報を演算する。
【００８１】
或いは、単独でセキュリティー情報を発行するトークンの場合、記憶部２４０に例えば共通鍵情報が記憶されており、ユーザーが操作部２３０を操作する（例えばボタンを押す）と、マイクロコンピューター２２０は、記憶部２４０から共通鍵情報を読み出し、その共通鍵情報を用いてセキュリティー情報を演算する。
【００８２】
なお、上記のように本実施形態について詳細に説明したが、本発明の新規事項および効果から実体的に逸脱しない多くの変形が可能であることは当業者には容易に理解できるであろう。従って、このような変形例はすべて本発明の範囲に含まれるものとする。例えば、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語と共に記載された用語は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。また本実施形態及び変形例の全ての組み合わせも、本発明の範囲に含まれる。またクロック供給部、制御データ生成部、ＣＰＵ、マイクロコンピューター、電子機器の構成・動作等も、本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【符号の説明】
【００８３】
１０  クロック供給部、２０  制御データ生成部、２１  乱数発生部、
２２  コード変換部、３０  ＣＰＵ、４０  ＲＯＭ、５０  ＲＡＭ、６０  バス、
７０  バスコントロールユニット、１１０  オンオフ制御レジスター、
１３０  分周部、１４０  第１の８ｂ１０ｂ変換部、
１５０  第２の８ｂ１０ｂ変換部、１６０  セレクター、
１７０  クロックギア出力部、１８０  クロックギア選択レジスター、
１９０  クロック生成部、２００  電子機器、２１０  表示部、
２２０  マイクロコンピューター、２３０  操作部、２４０  記憶部、
２５０  通信部、
ＣＫ＿ＣＰＵ，ＣＫ＿ＳＹＳ  クロック信号、ＣＴＬ  制御データ、
ＩＤＤ  消費電流
【図１】
2015161969.tif 000003
【図２】
2015161969.tif 000004
【図３】
2015161969.tif 000005
【図４】
2015161969.tif 000006
【図５】
2015161969.tif 000007
【図６】
2015161969.tif 000008
【図７】
2015161969.tif 000009
【図８】
2015161969.tif 000010
【図９】
2015161969.tif 000011
【図１０】
2015161969.tif 000012