(57)【要約】【課題】発振起動時間の異なる２種類の発振器を備えた半導体集積回路において、比較的簡単に秘匿性の高い暗号鍵を生成し、その暗号鍵を用いてデータの入出力を行う半導体集積回路を提供する。【解決手段】第一の発振回路と、第二の発振回路と、第一の発振回路の発振開始によって動作を開始し第二の発振回路の発振開始によって出力を確定する乱数発生器と、乱数発生器の出力する乱数を暗号鍵に用いて暗号化してデータを出力し、乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路と、備えている。【選択図】図１
2010134248.tif 000002
【特許請求の範囲】
【請求項１】
第一の発振回路と、
第二の発振回路と、
前記第一の発振回路の発振開始によって動作を開始し、前記第二の発振回路の発振開始によって出力を確定する乱数発生器と、
前記乱数発生器の出力する乱数を暗号鍵に用いて暗号化してデータを出力し、前記乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路と、
を有することを特徴とする半導体集積回路。
【請求項２】
前記第一の発振回路が、発振安定前にもクロックを供給する第一の出力端子と、発振が安定してからクロックを供給する第二の出力端子とを備え、前記第一の出力端子が前記乱数発生器に接続され、前記第二の出力端子が前記乱数発生器以外の回路に接続されていることを特徴とする請求項１記載の半導体集積回路。
【請求項３】
前記第二の発振回路が、発振安定前にもクロックを供給する第三の出力端子と、発振が安定してからクロックを供給する第四の出力端子とを備え、前記第三の出力端子が前記乱数発生器に接続され、前記第四の出力端子が前記乱数発生器以外の回路に接続されていることを特徴とする請求項１又は２記載の半導体集積回路。
【請求項４】
前記論理回路は前記乱数を暗号鍵に用いて暗号化してデータを出力する第一の機能ブロックと、前記暗号化されたデータについて前記暗号鍵を用いて解読して入力する第二の機能ブロックを含むことを特徴とする請求項１乃至３いずれか１項記載の半導体集積回路。
【請求項５】
前記データを第一のデータとしたときに、前記第二の機能ブロックが第二のデータを前記暗号鍵を用いて暗号化して出力し、前記第一の機能ブロックが前記暗号化された第二のデータについて前記暗号鍵を用いて解読して入力することを特徴とする請求項４記載の半導体集積回路。
【請求項６】
前記論理回路は、ＣＰＵを含むことを特徴とする請求項１乃至５いずれか１項記載の半導体集積回路。
【請求項７】
前記乱数発生器が、前記第一の発振回路からクロックが供給されるリニアフィードバックシフトレジスタを含み、前記リニアフィードバックシフトレジスタの出力を前記第二の発振回路のクロックに同期してラッチすることにより前記乱数を生成することを特徴とする請求項１乃至６いずれか１項記載の半導体集積回路。
【請求項８】
前記乱数発生器が、前記第一の発振回路の発振開始により動作を開始するリングオシレータと、前記リングオシレータの生成するクロックをカウントし、前記第二の発振回路の発振開始により出力を確定するアドレスカウンタと、前記アドレスカウンタによってアドレスが指定され、前記乱数を出力する乱数メモリと、を備えたことを特徴とする請求項１乃至６いずれか１項記載の半導体集積回路。
【請求項９】
前記第一の発振回路は、前記第二の発振回路より高い周波数で発振するように構成された発振回路であることを特徴とする請求項１乃至８いずれか１項記載の半導体集積回路。
【請求項１０】
前記第一、第二の発振回路は圧電振動子を用いた発振回路であることを特徴とする請求項１乃至９いずれか１項記載の半導体集積回路。
【請求項１１】
第一、第二の発振器と、前記第一の発振器の発振開始によって動作を開始し、前記第二の発振器の発振開始によって出力データを確定し、暗号鍵として出力する乱数発生器と、を備えた暗号鍵生成器と、
前記暗号鍵を用いて暗号化してデータを出力し、前記暗号鍵を用いて暗号化されたデータを解読して入力する暗号処理部と、
を含むことを特徴とするデータの暗号化装置。
【請求項１２】
データを暗号化するための暗号鍵を生成する暗号鍵生成器であって、
第一の発振器と、
第二の発振器と、
前記第一の発振器の発振開始によって動作を開始し、前記第二の発振器の発振開始によって出力を確定し、前記暗号鍵として出力する乱数発生器と、
を備えたことを特徴とする暗号鍵生成器。
【請求項１３】
暗号化してデータを入出力する装置に用いられる暗号鍵を第一の発振器と第二の発振器とを用いて生成する暗号鍵の生成方法であって、前記第一の発振器の発振開始により暗号鍵の生成を開始し、前記第二の発振器の発振開始により暗号鍵を確定し、前記確定した暗号鍵を用いて暗号化したデータを入出力することを特徴とする暗号鍵の生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路、データの暗号化装置、暗号鍵の生成装置、及び暗号鍵の生成方法に関する。特に、複数の発振回路を備えた半導体集積回路において、暗号鍵を生成し、その暗号鍵を用いて暗号化されたデータを入出力する半導体集積回路、データの暗号化装置及びその暗号鍵の生成装置と生成方法に関する。
【背景技術】
【０００２】
半導体集積回路において、微細化、大規模化の技術の進展により、半導体集積回路に内蔵されるプログラムやデータの規模も膨大になってきており、そのプログラムやデータのソフトウェアとしての価値も高まって来ている。
【０００３】
一方で、半導体集積回路に対する外的なプロービングや異常な操作等によるハッキングによる盗用、改ざんによる被害が増大している。半導体集積回路の解析技術の進歩により、半導体集積回路パッケージの樹脂を開封し、半導体集積回路内部のデータバス上のデータの流れを解析装置を用いて解析することによって、半導体集積回路内部の動作を解析し、そこからハッキングするなど、従来は考えられなかったような高度の技術を用いたハッキングも考えられるようになって来ている。従って、プログラムやデータをハッキングによる盗用や改ざんから防ぐ解析耐性を高めることが重要である。
【０００４】
この様な半導体集積回路の内蔵されたプログラムやデータをハッキングから守るための技術としては、暗号鍵を用いて、暗号化してデータを入出力する技術がすでに開発されている。例えば、特許文献１には、マルチプロセス、マルチユーザ環境等に対応して、電源投入時、リセット時に乱数発生部が、外部から推測されない一時鍵を生成し、プロセス切り替え等の例外発生時にレジスタ群のコンテキストを上記一時鍵を用いて暗号化して外部メモリに退避させる。上記例外処理からの復帰時には、外部メモリに暗号化されて退避されたコンテキストを上記一時鍵を用いて、復号して復帰することが記載されている。また、上記一時鍵は、マイクロプロセッサの製造時のばらつき等に起因する電圧、タイミング等のばらつきに応じた乱数、または量子的なゆらぎを乱数の種としたり、マイクロプロセッサ内に不揮発性のエントロピープールを設け、これに応じて乱数を発生させ、この乱数を一時鍵とすることが記載されている。
【０００５】
また、特許文献２には、電源投入後、発振器の動作が不安定なときに動作を開始する乱数発生器を有する半導体装置が記載されている。
【特許文献１】特開２００３−５１８１９号公報
【特許文献２】特開平１１−３１２０７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
以下の分析は本発明において与えられる。上記特許文献１に記載されているように量子的なゆらぎを乱数の種に用いる場合、狙い通りに乱数が発生できれば、乱数発生のメカニズムがわかっていたとしても発生される乱数は予想できないのでその様な乱数は秘匿性が高いと言える。しかし、量子的なゆらぎ等を乱数の種にするためには、ゆらぎを測定する測定系の回路が必要となり、その回路が正常に動作するとは限らない。また、乱数が正常に発生しているか否かテストすることも困難である。テスト容易性を考慮すると量子的なゆらぎ等設計者や製造メーカですら、外部から設定も観測もできない値を乱数の種にすることはテスト容易化の観点から好ましくない。
【課題を解決するための手段】
【０００７】
本発明の１つの側面による半導体集積回路は、第一の発振回路と、第二の発振回路と、前記第一の発振回路の発振開始によって動作を開始し前記第二の発振回路の発振開始によって出力を確定する乱数発生器と、前記乱数発生器の出力する乱数を暗号鍵に用いて暗号化してデータを出力し前記乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路と、を有する。
また、本発明の他の側面によるデータの暗号化装置は、第一、第二の発振器と、前記第一の発振器の発振開始によって動作を開始し前記第二の発振器の発振開始によって出力データを確定して暗号鍵として出力する乱数発生器と、を備えた暗号鍵生成器と、前記暗号鍵を用いて暗号化してデータを出力し、前記暗号鍵を用いて暗号化されたデータを解読して入力する暗号処理部と、を含む。
本発明のさらに他の側面による暗号鍵生成器は、データを暗号化するための暗号鍵を生成する暗号鍵生成器であって、第一の発振器と、第二の発振器と、前記第一の発振器の発振開始によって動作を開始し、前記第二の発振器の発振開始によって出力を確定し、前記暗号鍵として出力する乱数発生器と、を備える。
本発明のさらに他の側面による暗号鍵の生成方法は、暗号化してデータを入出力する装置に用いられる暗号鍵を第一の発振器と第二の発振器とを用いて生成する暗号鍵の生成方法であって、前記第一の発振器の発振開始により暗号鍵の生成を開始し、前記第二の発振器の発振開始により暗号鍵を確定し、前記確定した暗号鍵を用いて暗号化したデータを入出力する。
【発明の効果】
【０００８】
本発明によれば、第一の発振回路の発振開始によって動作を開始し、第二の発振回路の発振開始によって出力を確定する乱数発生器を用いて暗号鍵を生成するので、秘匿性が高い暗号鍵を、確実に生成することができ、その暗号鍵に基づいて、秘匿性の高い暗号化を行う半導体集積回路を比較的容易に実現することができる。
【発明を実施するための最良の形態】
【０００９】
本発明の実施形態について、必要に応じて図面を参照して説明する。なお、実施形態の説明において引用する図面及び図面の符号は実施形態の一例として示すものであり、それにより本発明による実施形態のバリエーションを制限するものではない。
【００１０】
本発明の一実施形態による半導体集積回路１は、例えば図１に示すように、第一の発振回路３と、第二の発振回路４と、第一の発振回路３の発振開始によって動作を開始し第二の発振回路４の発振開始によって出力を確定する乱数発生器５と、乱数発生器５の出力する乱数を暗号鍵に用いて暗号化してデータを出力し、前記乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路（８、9）と、を有する。例えば、水晶発振器やセラミック発振器のような圧電振動子を用いる発振回路は、図４や図６にも記載するように圧電振動子に微小な機械的な振動等を与えることによって微小な起電力を生じ、それが発振回路により正帰還が係り徐々に振動が拡大し、最終的に安定した発振に至ることが知られている。また、この微小な発振を開始するまでの時間や発振が成長する速度は個体差や環境の微小な変化に大きく依存する。さらに、この振動が拡大し、安定した発振状態に至るまでの時間は、一般的に発振器の発振周波数に大きく依存することが知られている。従って、第一の発振回路３の発振開始によって動作を開始し第二の発振回路４の発振開始によって出力を確定する乱数発生器５を用いることにより、秘匿性が高い暗号鍵を、確実に生成することができ、その暗号鍵に基づいて、秘匿性の高い暗号化を行うことができる。
【００１１】
また、本発明の一実施形態による半導体集積回路１は、図１、図３に示すように、第一の発振回路３が、発振安定前にもクロックを供給する第一の出力端子ＭＣ１と、発振が安定してからクロックを供給する第二の出力端子ＭＣ２とを備え、第一の出力端子ＭＣ１が乱数発生器５に接続され、第二の出力端子が乱数発生器以外の回路（８、９、１０Ａ）に接続されている。すなわち、第一の発振回路は発振か安定する前に乱数発生器にクロックを供給し、発振が安定してから乱数発生器以外の回路にクロックを供給するので、乱数発生器以外の回路が動作する前に鍵データを生成することができる。
【００１２】
また、本発明の一実施形態による半導体集積回路１は、図１、図５に示すように、第二の発振回路４が、発振安定前にもクロックを供給する第三の出力端子ＳＣ１と、発振が安定してからクロックを供給する第四の出力端子ＳＣ２とを備え、第三の出力端子ＳＣ１が乱数発生器５に接続され、第四の出力端子ＳＣ２が乱数発生器以外の回路（８、１０Ｂ）に接続されている。従って、乱数発生器以外の回路が動作を開始する前に暗号鍵を確定することができるので、乱数発生器以外の論理回路は、その暗号鍵を用いて暗号化することができる。
【００１３】
また、本発明の一実施形態による半導体集積回路１は、図１に示すように、（乱数発生器５が生成した）乱数を暗号鍵に用いて暗号化してデータを出力する第一の機能ブロック（８または９）と、暗号化されたデータについて暗号鍵を用いて解読して入力する第二の機能ブロック（９または８）を含む。従って、半導体集積回路内のデータやプログラムの転送を暗号化して行うことができる。したがって、半導体集積回路内のデータバスの値を解析装置やＩＣＥなどのソフトウェアデバック装置を用いて取得できたとしても、半導体集積回路の内のデータやプログラムをハッキングすることはできない。
【００１４】
また、本発明の一実施形態による半導体集積回路１は、図１に示すように、上記半導体集積回路１において、上記第一の機能ブロック（８または９の一方）が暗号化して出力するデータを第一のデータとしたときに、第二の機能ブロック（８または９の他方）が第二のデータを上記暗号鍵を用いて暗号化して出力し、第一の機能ブロックが暗号化された第二のデータについて暗号鍵を用いて解読して入力する。従って、第一の機能ブロック、第二の機能ブロックが共に同じ暗号を用いて入出力を行い、双方向のデータ入出力を暗号化して行うことができる。
【００１５】
また、本発明の一実施形態による半導体集積回路１は、図１に示すように、上記論理回路がＣＰＵ８を含む。従って、ＣＰＵが入出力するデータについて暗号化することができる。
【００１６】
また、本発明の一実施形態による半導体集積回路１は、図８、図９等に示すように、乱数発生器５が、第一の発振回路３からクロックが供給されるリニアフィードバックシフトレジスタ１１を含み、リニアフィードバックシフトレジスタ１１の出力を第二の発振回路４のクロックＳＣ１に同期してラッチすることにより乱数を生成する。従って、リニアフィードバックレジスタの生成する擬似乱数を用いて乱数を生成するので、テストが比較的容易であり、かつ、乱数を生成するタイミングを第一、第二の発振回路の発振開始時間を用いて制御しているので、同じ暗号鍵を再現することが困難であり、ハッキングに対して強い暗号鍵を生成し、暗号化することができる。
【００１７】
また、本発明の別な実施形態による半導体集積回路１は、図１１〜図１３に示すように、乱数発生器５が、第一の発振回路３の発振開始により動作を開始するリングオシレータ１２と、リングオシレータの生成するクロックＲＣをカウントし、第二の発振回路４の発振開始により出力を確定するアドレスカウンタ（１３、１４）と、アドレスカウンタ（１３、１４）によってアドレスが指定され乱数を出力する乱数メモリ１５と、を備える。従って、この実施形態によれば、乱数発生器５の発生する乱数は、第一、第二の発振回路の発振開始時間に加えて、リングオシレータの発振周波数にも依存することになる。従って、さらに再現性のない秘匿性の高い暗号鍵を生成することができる。
【００１８】
また、本発明の一実施形態による半導体集積回路１は、図１を参照すると、第一の発振回路３は、第二の発振回路４より高い周波数で発振するように構成された発振回路である。なお、本発明において、第一の発振回路が、第二の発振回路より早く発振を開始するものであれば、かならずしも、上記構成に限定されるものではないが、上記構成によることにより、比較的容易に、確実に第一の発振回路が第二の発振回路より早く発振を開始する発振回路が得られる。
【００１９】
また、本発明の一実施形態による半導体集積回路１は、第一、第二の発振回路は圧電振動子を用いた発振回路である。図１に示すように、半導体集積回路１の発振回路３、４の端子に圧電振動子を接続することにより、所定の周波数で発振する発振器が得られる。本発明は、上記構成に限定されないが、上記構成の発振回路を用いれば、圧電振動子を用いた発振回路は、発振開始まで時間を要し、発振開始までの時間が圧電振動子の発振周波数に大きく依存するので、容易に、本発明の乱数発生回路を構成することができる。また、発振開始までの時間は、発振回路や圧電振動子の個体差や周囲の環境によって変動し、再現性がないことから、ハッキングに対して強く、本発明の発振回路として好適である。
【００２０】
また、本発明の一実施形態によるデータの暗号化装置１９は、図１に示すように、第一、第二の発振器（３、４、圧電振動子、容量）と、第一の発振器の発振開始によって動作を開始し、第二の発振器の発振開始によって出力データを確定し、暗号鍵として出力する乱数発生器５と、を備えた暗号鍵生成器２と、暗号鍵生成器２が生成した暗号鍵を用いて暗号化してデータを出力し、上記暗号鍵を用いて暗号化されたデータを解読して入力する暗号処理部６と、を含む。従って、第一の発振器の発振開始によって動作を開始し、第二の発振器の発振開始によって出力データを確定し、暗号鍵として出力するので、比較的容易にハッキングに対して強い暗号化装置が得られる。
【００２１】
また、本発明の一実施形態による暗号鍵生成器２は、図１に示すように、データを暗号化するための暗号鍵を生成する暗号鍵生成器２であって、第一の発振器（３、圧電振動子、容量）と、第二の発振器（４、圧電振動子、容量）と、第一の発振器の発振開始によって動作を開始し、第二の発振器の発振開始によって出力を確定し、前記暗号鍵として出力する乱数発生器５と、を備える。上記構成によれば、容易にハッキングできない暗号鍵生成器が得られる。
【００２２】
また、本発明の一実施形態による暗号鍵の生成方法は、図１、図７に示すように、暗号化してデータを入出力する装置１９に用いられる暗号鍵を第一の発振器（３、圧電振動子、容量）と第二の発振器（４、圧電振動子、容量）とを用いて生成する暗号鍵の生成方法であって、第一の発振器の発振開始により暗号鍵の生成を開始し（図７のステップＳ７）、第二の発振器の発振開始により暗号鍵を確定し（ステップＳ１１）、確定した暗号鍵を用いて暗号化したデータを入出力する（ステップＳ１４）。上記方法によれば、容易にハッキングできない暗号鍵を生成することができる。以下、上記実施形態について、実施例に即し、図面を参照してさらに詳しく説明する。
【実施例１】
【００２３】
図１は、実施例１によるデータの暗号化装置全体の構成を示すブロック図である。図１のデータの暗号化装置１９は、半導体集積回路１の半導体基板に形成されたメイン発振回路３、サブ発振回路４、乱数発生器５、ＣＰＵ８、メモリ９、周辺回路（１０Ａ、１０Ｂ）と、半導体集積回路１の圧電振動子接続端子（Ｘ１、Ｘ２、ＸＴ１、ＸＴ２）に接続された圧電振動子と容量から構成される。また、上記乱数発生器５と、メイン発振回路３、サブ発振回路４、及び圧電振動子、容量は、暗号鍵生成器２として機能する。
【００２４】
上記メイン発振回路３には、例えば、５０ＭＨｚなどの高周波で発振する圧電振動子が接続される。また、サブ発振回路４には、３２ＫＨｚなどの低周波数で発振する圧電振動子が接続される。この例では、メイン発振回路３の発振周波数は、サブ発振回路４の発振周波数の１０００倍以上高い周波数で発振することになる。メイン発振回路３には、発振が安定する前から出力される第一のメインクロック信号ＭＣ１と、発振が安定してから出力される第二のメインクロック信号ＭＣ２が備わっている。第一のメインクロック信号ＭＣ１は、乱数発生器５に接続され、第二のメインクロック信号ＭＣ２は、乱数発生器５以外の回路、具体的には、ＣＰＵ８、メモリ９、周辺回路１０Ａへ出力されている。
【００２５】
また、サブ発振回路４には、発振が安定する前から出力される第一のサブクロック信号ＳＣ１と、発振が安定してから出力される第二のサブクロック信号が備わっている。第一のサブクロック信号ＳＣ１は、乱数発生器５に接続され、第二のサブクロック信号ＳＣ２は、乱数発生器５以外の回路、具体的には、ＣＰＵ８、周辺回路１０Ｂへ出力されている。
【００２６】
ＣＰＵ８とメモリ９には、それぞれ暗号処理部６が設けられている。さらに、それぞれの暗号処理部６には、暗号鍵レジスタ７が設けられている。暗号鍵レジスタ７は、サブ発振回路４が発振を開始したときに乱数発生器５が出力する暗号鍵を格納する。ＣＰＵ８に設けられた暗号処理部６は、ＣＰＵがバス１８へ出力しようとするデータを暗号鍵レジスタ７に格納された暗号鍵を用いて暗号化して出力する。また、ＣＰＵ８に設けられた暗号処理部６は、バス１８上の暗号化されたデータを入力し、暗号鍵レジスタ７に格納された暗号鍵を用いて解読し、解読されたデータをＣＰＵ８へ伝える。
【００２７】
同様に、メモリ９に設けられた暗号処理部６は、メモリから読み出されたデータを暗号鍵レジスタ７に格納された暗号鍵を用いて暗号化してバス１８へ出力する。また、メモリ９に設けられた暗号処理部６は、バス１８上の暗号化されたデータ、アドレスを入力し、暗号鍵レジスタ７に格納された暗号鍵を用いて解読し、解読されたアドレスへ解読されたデータを書き込む。なお、ＣＰＵ８に設けられた暗号処理部６及び暗号鍵レジスタ７とメモリ９に設けられた暗号処理部６及び暗号鍵レジスタ７は同一の構成、機能を有している。
【００２８】
図２は、実施例１における暗号化の具体例を示す図面である。図１の暗号処理部６には、暗号鍵に基づいて、ビットの並びを変更するセレクタ回路が含まれる。図２において、２１は暗号する前のデータのビットの並びを示す。ここでは、１６ビットのデータを入出力するものとする。２２Ａ、２２Ｂはスクランブルして暗号化した後のデータである。（ａ）の例では、０〜１５ビットの並びを暗号鍵レジスタ７に格納された暗号鍵１を用いて、６、２、０、１、４、３、7、５、１４、１０、８、９、１２、１１、１５、１３ビットの並びに並べ替えて暗号化されたデータ２２Ａとしている。また、（ｂ）の例では、暗号鍵レジスタ７に格納された暗号鍵１が暗号鍵２に変わっていることが異なる。暗号鍵１と暗号鍵２は異なる値であるとする。（ｂ）では、（ａ）と異なった暗号鍵を用いてスクランブルして暗号化しているので、（ａ）とはスクランブルした後のビットの並び順も異なっている。具体的には、（ｂ）では、１、４、０、２、３、６、１２、５、１０、７、１２、１５、１１、１３、９、８ビットの並びに並べ替えて暗号化されたデータ２２Ｂとしている。なお、この例では、単純にビット列を入れ替えているだけであるが、必要に応じてもっと高度な暗号化を行うこともできる。
【００２９】
図３は、実施例１におけるメイン発振器（第一の発振器）の回路図である。メイン発振器２３は、半導体集積回路１の半導体基板に形成されたメイン発振回路（第一の発振回路）３と半導体集積回路１の外部端子である圧電振動子接続端子Ｘ１、Ｘ２を介して半導体集積回路１の外部に取り付けられた圧電振動子１７Ａと容量Ｃ１１、Ｃ１２で構成される。メイン発振回路３の出力するクロック信号は半導体集積回路１のメインクロック信号となる。圧電振動子１７Ａは、水晶やセラミックなどの応力を与えると起電力を生じ、逆に電圧を印加すると応力が生じる圧電振動体で構成されており、その物理的な形状により、固有の周波数で発振する。ここでは、メイン発振器２３に用いられる圧電振動子は５０ＭＨｚ程度の高周波の固有の周波数で発振するものとする。この圧電振動子１７Ａと圧電振動子１７Ａの両端とグランド電位との間に接続された容量Ｃ１１、Ｃ１２とメイン発振回路３内に設けられ、入力がＸ１端子、出力がＸ２端子に接続されたインバータＩ１１とＸ１端子とＸ２端子との間に接続された帰還抵抗により、発振器の基本的な部分が構成される。また、インバータＩ１１の出力信号はインバータＩ１２、Ｉ１３を介して第一のメインクロック信号ＭＣ１として乱数発生器５に接続される。
【００３０】
また、インバータＩ１１の出力信号はヒステリシス回路Ｈ１１に接続され、ヒステリシス回路Ｈ１１の出力信号はＢＦ１１〜ＢＦ１３からなるバイナリカウンタに入力される。バイナリカウンタの出力となるＢＦ１３のＱ出力は、ノア回路Ｒ１１、Ｒ１２で構成されるセットリセットフリップフロップのセット信号として入力される。このセットリセットフリップフロップの出力信号は、第一のメインクロック信号ＭＣ１とアンド回路Ａ１１により論理積が取られ、第二のメインクロック信号ＭＣ２として出力される。
【００３１】
図４は、図３のメイン発振器（第一の発振器）の動作タイミングチャートである。図４における第一のリセット信号Ｒ１は半導体集積回路１に設けられるリセット端子から入力されるリセット信号やパワーオンリセット回路（図示せず）によりハイレベルとなる信号で、この第一のリセット信号Ｒ１はハイレベルになった後、クロックが入力されるのを待たずにすぐ解除されるリセット信号である。第一のリセット信号Ｒ１は時刻ｔ１１にローレベルとなり、バイナリフリップフロップＢＦ１１〜ＢＦ１３、Ｒ１１、Ｒ１２で構成されるセットリセットフリップフロップ回路のリセット状態は解除される。
【００３２】
圧電振動子１７Ａは、時刻ｔ１１の後、固有の発振周波数により微小な機械的な振動を開始する。するとその機械的な振動により起電力を生じる。インバータＩ２１は入出力端子間に接続された帰還抵抗により、動作点にバイアスされているので、機械的な振動により生じた起電力を増幅する。インバータＩ１１、容量Ｃ１１、Ｃ１２、圧電振動子１７Ａにより正帰還ループが形成され、起電力により生じたＸ２端子の電圧の振幅は徐々に拡大する。時刻ｔ１２になると、インバータＩ１２、Ｉ１３がＸ２端子に生じた電圧の変化に反応して反転するようになり、以後第一のメインクロック信号ＭＣ１としてクロック信号を出力する。しかし、この段階での発振回路は、まだ非常に不安定であり、一度開始した発振が一端停止したり、固有の振動周波数以外の周波数で振動をしたりすることもある。
【００３３】
次に、ｔ１３になると、Ｘ２端子の振動はさらに拡大し、ヒステリシス回路Ｈ１１もＸ２端子の振動に応答してクロックＭＣＨを出力するようになる。ただし、ヒステリシス回路Ｈ１１を経由することにより、クロックＭＣＨの位相は、クロックＭＣ１の位相から遅延を生じている。次に、時刻ｔ１４になり、バイナリフリップフロップＢＦ１１〜ＢＦ１３がクロックＭＣＨを４発カウントすると、ＢＦ１３のＱ出力がハイレベルとなり、Ｒ１１とＲ１２で構成されるセットリセットフリップフロップがセットされ、メインクロックアクティブ信号ＭＣＡがハイレベルとなる。この時刻になると、メイン発振器の発振は安定したものとなっている。メインクロックアクティブ信号ＭＣＡがハイレベルになると、アンド回路Ａ１１が開き、時刻ｔ１５から第二のメインクロック信号ＭＣ２が出力される。
【００３４】
図５は、実施例１におけるサブ発振器（第二の発振器）の回路図である。サブ発振器２４は、半導体集積回路１の半導体基板に形成されたサブ発振回路（第二の発振回路）４と半導体集積回路１の外部端子である圧電振動子接続端子ＸＴ１、ＸＴ２を介して半導体集積回路１の外部に取り付けられた圧電振動子１７Ｂと容量Ｃ２１、Ｃ２２で構成される。サブ発振回路４の出力するクロック信号は半導体集積回路１のサブクロック信号となる。圧電振動子１７Ｂは、圧電振動子１７Ａと同様に、水晶やセラミックなどの圧電振動体で構成されており、固有の周波数で発振する。なお、サブ発振器２４は、３２ＫＨｚの発振周波数で発振し、メイン発振器である第一の発振器の１０００倍以上の周期で発振を行う。その他の回路構成は、発振周波数が大きく異なるものの、基本的な回路構成は、図３の第一の発振器とほぼ同一である。
【００３５】
ただし、サブ発振器２４では、第一のリセット信号Ｒ１によりリセットされ、メインクロックアクティブ信号ＭＣＡ、サブクロックアクティブ信号ＳＣＡが共にアクティブとなったときにリセットされるフリップフロップ回路（ノア回路Ｒ２３、Ｒ２４）を備えており、そのフリップフロップ回路が、第二のリセット信号Ｒ２信号を出力する。
【００３６】
図６は、図５のサブ発振器の動作タイミングチャートである。図４のタイミングチャートと同様に、第一のリセット信号Ｒ１は時刻ｔ１１でリセットされ、メインクロックアクティブ信号ＭＣＡは時刻ｔ１４で立ち上がる。圧電振動子１７Ｂは、時刻ｔ１１の後、振動を開始するが、メイン発振器２３の圧電振動子１７Ａより固有振動周波数が大幅に低いので、発振の成長も振動周波数に比例して遅い。従って、インバータＩ２２、Ｉ２３が、圧電振動子１７Ｂの振動に反応してクロック信号を出力するタイミングは、メインクロックアクティブ信号ＭＣＡが立ち上がり、メイン発振器２３が安定して発振するようになってからかなり後の時刻ｔ２２になる。その後、さらに発振が成長し、時刻ｔ２３では、ヒステリシス回路Ｈ２１が反応してクロック信号を生成する。さらに、時刻ｔ２４で、ヒステリシス回路Ｈ２１が出力するクロック信号を４発カウントしたところで、Ｒ２１とＲ２２で構成されるフリップフロップ回路から出力されるサブクロックアクティブ信号ＳＣＡがハイレベルに反転し、第二のリセット信号Ｒ２が解除されると共に、時刻ｔ２５から第二のサブクロック信号を出力する。
【００３７】
図７は、実施例１における乱数発生器の制御フローチャートである。図７を用いて、乱数発生器の制御フローチャートについて説明する。まず、ステップＳ１で半導体集積回路１に電源が投入される。すると、半導体集積回路１のパワーオンリセット回路（図示せず）が機能し、システム全体を第一のリセット信号Ｒ１により、イニシャライズする。半導体集積回路１がパワーオンリセット回路を備えていない場合は、半導体集積回路１のリセット端子（図示せず）からリセット信号を入力し、システム全体を第一のリセット信号Ｒ１によりイニシャライズする。第一のリセット信号Ｒ１は、パワーオンリセット回路のリセット終了によりステップＳ２ですぐ解除する。
【００３８】
次に、ステップＳ３では、メイン発振器の発振を起動させる、ただし、この時点では、発振が開始しているとしてもまだ、微小な発振であるので、発振は安定しておらず、ステップ５からステップＳ６へ進む。また、ステップＳ４では、サブ発振器について発振を起動させる。
【００３９】
ステップＳ６では、微小な発振にインバータＩ１２、Ｉ１３に反応して第一のメインクロックＭＣ１が出力されるまで待つ。第一のメインクロックＭＣ１が出力されるようになったならば、ステップＳ７へ進み、乱数発生器を起動させ、乱数の発生を開始する。さらに、ステップＳ１０、Ｓ８で、乱数発生器を動作させて乱数を発生させながら、サブ発振器が発振を開始して、第一のサブクロックＳＣ１が出力されるのを待つ。第一のサブクロックＳＣ１が出力されたところで乱数発生器が出力する暗号鍵を確定する（ステップＳ１１）。ステップＳ１２では、確定した暗号鍵を出力する。最後に、メインクロック、サブクロック、共に安定してクロックを出力するようになり、暗号鍵が確定すると、ステップＳ１４に進み、確定した暗号鍵を用いて、暗号処理の実行を開始する。以上の手順によれば、半導体集積回路が実際に動作を開始し、情報処理を開始するのは、メイン発振器、サブ発振器が安定して発振を開始するようになってからであるので、情報処理の開始までに、暗号鍵は確定しており、その暗号鍵を用いて暗号化してデータの入出力を行うことができる。
【００４０】
また、乱数発生器５は、第一の発振器（メイン発振器）の発振開始によって乱数の発生
を開始し、第二の発振器（サブ発振器）の発振開始により暗号鍵として用いる乱数を確定する乱数発生器５は同様な構成であってもよい。
【実施例２】
【００４１】
図８と図９は、実施例２の乱数発生器の回路図である。この実施例２の乱数発生器は、実施例１の半導体集積回路１における乱数発生器５として用いることができる。図８は、実施例２の乱数発生器における乱数発生部の回路図である。図８には、乱数発生器５の乱数発生部と、暗号鍵レジスタ７が記載されている。乱数発生器５には、リニアフィードバックシフトレジスタ（ＬＦＳＲ）１１とリニアフィードバックシフトレジスタ１１の出力を保持するデータフリップフロップＤＦ４１〜ＤＦ５０が含まれる。この図８では、暗号鍵レジスタ７もデータフリップフロップで構成している。リニアフィードバックシフトレジスタ１１は、必要に応じて、何ビットの構成でもよいし、また、具体的な構成も自由に選択することができる。ここでは、リニアフィードバックレジスタ１１は、１０個のデータフリップフロップ（ＤＦ３１〜ＤＦ４０）とエクスクルーシブノア回路Ｘ３１で構成される１０ビットのリニアフィードバックレジスタである。また、リニアフィードバックレジスタの各ビットの出力にはデータフリップフロップＤＦ４１〜ＤＦ５０が設けられている。このデータフリップフロップは、リニアフィードバックシフトレジスタの各ビットの値を保持し、リニアフィードバックシフトレジスタ１１が発生する擬似乱数の値を確定する。暗号鍵レジスタ７は乱数発生器が確定した擬似乱数の値を暗号鍵として格納し、この暗号鍵に基づいて、暗号化処理や暗号化されたデータの復号処理を行う。なお、暗号鍵レジスタは、半導体集積回路１内に複数の暗号処理部６が設けられる場合には、各暗号処理部にそれぞれに設ける。
【００４２】
図９は、実施例２の乱数発生器５のうち、制御部の構成を示す回路図である。図９の制御部は、第一のメインクロック、第一のサブクロックから、暗号鍵を確定する信号ＫＦと、確定した暗号鍵データを暗号鍵レジスタ７に格納する制御信号ＫＬを生成する。データフリップフロップＤＦ６１、ＤＦ６２、アンド回路６１は、第一のサブクロックの最初の立ち上がりを第一のメインクロックの立ち上がりに同期して捉え、暗号鍵を確定する信号ＫＦを生成する。また、アンド回路Ａ６２とデータフリップフロップＤＦ６３〜６５、Ｒ６１、Ｒ６２からなるセットリセットフリップフロップは、上記制御信号ＫＬを生成すると共に、暗号鍵を暗号鍵レジスタに格納した後、リニアフィードバックシフトレジスタ１１の出力を初期化する第三のリセット信号Ｒ３を出力する。
【００４３】
図１０は、第二の実施例の詳細なタイミングチャートである。図１０のタイミングチャートにおいて、時刻ｔ２２で第一のサブクロックＳＣ１がローレベルからハイレベルに立ち上がる。この時刻ｔ２２は、図６の時刻ｔ２２と同一の時刻である。第一のサブクロックＳＣ１が時刻ｔ２２で立ち上がると、その後の最初の第一のメインクロックＭＣ１の立ち上がり（時刻ｔ３１）でデータフリップフロップＤＤＦ６１のＱ出力がローレベルからハイレベルに立ち上がる。その立ち上がりに同期して、暗号鍵を確定する信号ＫＦがローレベルからハイレベルに立ち上がる。次の第一のメインクロックＭＣ１の立下り（時刻ｔ３２）で暗号鍵データを暗号鍵レジスタに格納する制御信号ＫＬをローレベルからハイレベルに立ち上げる。さらに、次の第一のメインクロックの立ち上がり（時刻ｔ３３）でデータフリップフロップＤＤＦ６１のＱ出力がハイレベルとなるので、暗号鍵を確定する信号ＫＦがハイレベルからローレベルに立ち下がり、乱数発生器５が出力暗号鍵を確定し、暗号鍵レジスタ７へ向けて出力する。さらに次の第一のメインクロックの立下り（時刻ｔ３４）で暗号鍵レジスタに暗号鍵を取り込むタイミングを決める制御信号ＫＬがハイレベルからローレベルに立ち下がり、暗号鍵レジスタ７に暗号鍵を取り込む。さらに、次の第一のメインクロックの立ち上がり（時刻ｔ３５）で、Ｒ６１、Ｒ６２で構成されるセットリセットフリップフロップがセットされて第三のリセット信号Ｒ３がローレベルからハイレベルに立ち上がる。すると、データフリップフロップＤＦ４１〜ＤＦ５０はリセットされ、乱数発生器の出力する暗号鍵はリセットされる。ただし、この第三のリセット信号Ｒ３は、暗号鍵レジスタ７のリセット信号とはなっていないので、暗号鍵レジスタに格納された暗号鍵はそのまま保持され、その暗号鍵レジスタに保持されている暗号鍵を用いて、暗号化してデータの入出力を行うことができる。
【実施例３】
【００４４】
乱数発生器５は、実施例２以外にも様々な構成が考えられる。実施例３は、乱数発生回路にリングオシレータと乱数メモリを用いる実施例である。図１１〜図１３に実施例３の乱数発生器の回路図を示す。図１１は実施例３における乱数発生器のリングオシレータ部の回路図である。図１１のリングオシレータ部は、第一のメインクロックを分周するバイナリフリップフロップＢＦ７１と、Ｒ７１とＲ７２で構成されるセットリセットフリップフロップと、リングオシレータ１２で構成される。第一のリセット信号Ｒ１が立ち下がった後の最初の第一のメインクロック信号の立下りにより、バイナリフリップフロップＢＦ７１のＱは立ち上がる。すると、Ｒ７１とＲ７２で構成されるフリップフロップ回路がセットされ、リングオシレータ１２の発振を起動させる。リングオシレータ１２は、リングオシレータのクロック信号ＲＣを出力する。
【００４５】
図１２は、実施例３の乱数発生器における乱数発生部の回路図である。乱数発生部は、リングオシレータのクロック信号ＲＣをカウントし、乱数メモリ１５のアドレスカウンタの機能を果たすバイナリカウンタ１３と、バイナリカウンタ１３の出力をラッチして乱数メモリのアドレスとするアドレスラッチ１４と、乱数メモリ１５と、乱数メモリの出力する暗号鍵を一時的にラッチする暗号鍵出力ラッチ１６と、暗号鍵出力ラッチ１６の出力データを暗号鍵として保持する暗号鍵レジスタ７を含んでいる。なお、暗号鍵レジスタ７は、乱数発生器５内部の構成ではなく、暗号処理部６内部の構成であるが、乱数発生器５と密接な関係があるため、図１２に記載している。
【００４６】
図１３は、実施例３の乱数発生器における制御部の回路図である。図１３の制御部は、図１２の乱数発生部の制御信号を生成する回路である。図１３には、第一のサブクロックの最初の立ち上がりエッジを第一のメインクロックに同期して捉える回路（ＤＦ８１、ＤＦ８２、Ａ８１、Ｒ８１、Ｒ８２）と、サブクロックの最初の立ち上がりエッジを捉えた後、リングオシレータの立ち上がりを第一のメインクロックに同期して捉え、乱数メモリ１５の入力アドレスを確定する回路（ＤＦ８３、ＤＦ８４、Ａ８３）と、乱数メモリが出力する暗号鍵出力ラッチ１６にラッチする信号ＫＦＡと暗号鍵出力ラッチ１６が出力するめ暗号鍵を暗号鍵レジスタ７にラッチする制御信号ＫＬＡと第三のリセット信号ＲＣを生成する回路を備えている。第三のリセット信号ＲＣは、暗号鍵レジスタに暗号鍵をラッチした後、暗号鍵出力ラッチ１６の暗号鍵データをクリアしてリセットする信号である。
【００４７】
図１４は、実施例３の乱数発生器の動作タイミングチャートである。図１４では、パワーリセット後に、すでに第一のメインクロックの発振が開始され、リングオシレータも動作しているが、サブクロックの発振がまだ始まっていない状態からスタートしている。図１４に示すように、第一のメインクロック信号ＭＣ１とリングオシレータのクロック信号ＲＣ、第一のサブクロックＳＣ１はそれぞれ非同期のクロックである。
図１４では、時刻ｔ８１で、第一のサブクロックＳＣ１が最初に立ち上がるところから動作がスタートする。第一のサブクロックＳＣ１が立ち上がると、その後の最初の第一のメインクロックＭＣ１の立下り（時刻ｔ８２）でデータフリップフロップＤＦ８１のＱ出力が立ち上がり、アンド回路Ａ８１の出力がハイレベルになることから、Ｒ８１、Ｒ８２で構成されるセットリセットフリップフロップがセットされ、アンド回路Ａ８２より第一のメインクロックＭＣ１に同期したクロックが出力されるようになる。次に、リングオシレータクロックＲＣの立ち上がりをアンド回路Ａ８２の出力クロックに同期してデータフリップフロップＤＦ８３とＤＦ８４で捉え、時刻ｔ８５から時刻ｔ８６までアドレスラッチ信号ＡＬをハイレベルにする。アドレスラッチ１４は、アドレスラッチ信号ＡＬの立ち下がり（時刻ｔ８６）でバイナリカウンタ１３の出力データをラッチし、乱数メモリ１５の入力アドレスを確定し、乱数メモリのデータを暗号鍵出力ラッチ１６へ読み出す。暗号鍵出力ラッチ１６は、時刻ｔ８６から時刻ｔ８７までハイレベルとなる暗号鍵を確定する信号ＫＦＡの立ち下がりに同期して乱数メモリのデータを暗号鍵としてラッチする。
【００４８】
さらに、暗号鍵レジスタ７のラッチ信号ＫＬＡが、時刻ｔ８７から時刻ｔ８８までハイレベルとなり、暗号鍵出力ラッチの出力する暗号鍵データを取り込み、ラッチ信号ＫＬＡが立ち下がる時刻ｔ８８までに確定させる。また、時刻ｔ８８では、第三のリセット信号Ｒ３が立ち上がり、暗号鍵出力ラッチ１６のデータはリセットされる。しかし、暗号鍵レジスタ７は、第三のリセット信号Ｒ３によってはリセットされないので、暗号鍵のデータを保持する。従って、時刻ｔ８８以降、暗号鍵レジスタ７に保持されている暗号鍵を用いて、暗号化してデータの入出力を行うことができる。
【００４９】
なお、実施例１では、ＣＰＵ８とメモリ９に共に暗号処理部を設け、ＣＰＵ８がメモリ９にデータを書き込む場合、ＣＰＵ８内の暗号処理部で書き込みデータを暗号化してメモリ９へ出力し、メモリ９は暗号化されたデータを暗号処理部によって復号してからメモリ９内へ格納している。また、ＣＰＵ８がメモリ９からデータを読み出す場合、メモリ９内の暗号処理部でメモリのデータを暗号化してからバス１８へ出力し、ＣＰＵ８は、メモリ９が出力する暗号化されたデータを暗号処理部により復号して入力する。
【００５０】
しかし、メモリ９側でデータの加工を行わず、ＣＰＵ８が書き込んだデータをメモリ９に書き込み、そのデータをＣＰＵが読み出すだけであるならば、暗号処理部６は、ＣＰＵ８だけに設け、メモリ９には、必ずしも設けなくともよい。すなわち、ＣＰＵはメモリ９に書き込みデータを暗号化してバス１８へ出力し、メモリ９は、その暗号化されたデータを暗号化されたままメモリ９に格納し、ＣＰＵはその暗号化されたメモリのデータをそのまま読み出し、ＣＰＵの側で暗号化されたデータを復号して取り込むことができる。この場合、メモリは半導体集積回路１の外部にあってもよい。暗号鍵をメモリに送る必要がないからである。
【００５１】
また、実施例１では、暗号化してデータの入出力するマクロがメモリ９のみであったが、メモリ９以外の周辺回路とＣＰＵとの間のデータ入出力、又は周辺回路間のデータ入出力を暗号化して行ってもよい。この場合、周辺回路の内部にも暗号処理部６を設け、さらにその暗号処理部６には、暗号鍵レジスタ７を設ける必要がある。
【００５２】
以上、本発明を実施例に即して説明したが、本発明は上記実施例の構成にのみ制限されるものでなく、本発明の範囲内で当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【図面の簡単な説明】
【００５３】
【図１】本発明の一実施例によるデータの暗号化装置全体の構成を示すブロック図である。
【図２】本発明の一実施例における暗号化の具体例を示す図面である。
【図３】本発明の一実施例における第一の発振器の回路図である。
【図４】本発明の一実施例における第一の発振器のタイミングチャートである。
【図５】本発明の一実施例における第二の発振器の回路図である。
【図６】本発明の一実施例における第二の発振器のタイミングチャートである。
【図７】本発明の一実施例における乱数発生器の制御フローチャートである。
【図８】本発明の一実施例における乱数発生器（乱数発生部）の回路図である。
【図９】本発明の一実施例における乱数発生器（制御部）の回路図である。
【図１０】本発明の一実施例における乱数発生器の動作タイミングチャートである。
【図１１】本発明の別な実施例における乱数発生器（リングオシレータ部）の回路図である。
【図１２】本発明の別な実施例における乱数発生器（乱数発生部）の回路図である。
【図１３】本発明の別な実施例における乱数発生器（制御部）の回路図である。
【図１４】本発明の別な実施例における乱数発生器の動作タイミングチャートである。
【符号の説明】
【００５４】
１：半導体集積回路
２：暗号鍵生成器
３：メイン発振回路（第一の発振回路）
４：サブ発振回路（第二の発振回路）
５：乱数発生器
６：暗号処理部
７：暗号鍵レジスタ
８：ＣＰＵ
９：メモリ
１０Ａ、１０Ｂ：周辺回路
１１：リニアフィードバックシフトレジスタ（ＬＦＳＲ）
１２：リングオシレータ
１３：バイナリカウンタ
１４：アドレスラッチ
１５：乱数メモリ
１６：暗号鍵出力ラッチ
１７Ａ、１７Ｂ：圧電振動子
１８：バス
１９：データの暗号化装置
２１：暗号化前のデータ（復号されたデータ）
２２Ａ、２２Ｂ：暗号化されたデータ（復号する前のデータ）
２３：メイン発振器（第一の発振器）
２４：サブ発振器（第二の発振器）
Ａ１１、Ａ２１、Ａ２２、Ａ６１、Ａ６２、Ａ８１、Ａ８２、Ａ８３：アンド回路
Ａ７１：ナンド回路
ＢＦ１１〜ＢＦ１３、ＢＦ２１〜ＢＦ２３、ＢＦ７１：バイナリフリップフロップ
Ｃ１１、Ｃ１２、Ｃ２１、Ｃ２２：容量
ＤＦ３１〜ＤＦ６５、ＤＦ８１〜ＤＦ８７：データフリップフロップ
Ｈ１１、Ｈ２１：ヒステリシス回路
Ｉ１１〜Ｉ１３、Ｉ２１〜Ｉ２３：インバータ回路
Ｏ８１：オア回路
Ｒ１１、Ｒ１２、Ｒ２１〜Ｒ２４、Ｒ６１、Ｒ６２、Ｒ７１、Ｒ７２、Ｒ８１、Ｒ８２：ノア回路
Ｘ３１：エクスクルーシブノア回路
【図１】
2010134248.tif 000003
【図２】
2010134248.tif 000004
【図３】
2010134248.tif 000005
【図４】
2010134248.tif 000006
【図５】
2010134248.tif 000007
【図６】
2010134248.tif 000008
【図７】
2010134248.tif 000009
【図８】
2010134248.tif 000010
【図９】
2010134248.tif 000011
【図１０】
2010134248.tif 000012
【図１１】
2010134248.tif 000013
【図１２】
2010134248.tif 000014
【図１３】
2010134248.tif 000015
【図１４】
2010134248.tif 000016