半導体集積回路、データの暗号化装置、暗号鍵の生成装置、及び暗号鍵の生成方法
【課題】発振起動時間の異なる2種類の発振器を備えた半導体集積回路において、比較的簡単に秘匿性の高い暗号鍵を生成し、その暗号鍵を用いてデータの入出力を行う半導体集積回路を提供する。
【解決手段】第一の発振回路と、第二の発振回路と、第一の発振回路の発振開始によって動作を開始し第二の発振回路の発振開始によって出力を確定する乱数発生器と、乱数発生器の出力する乱数を暗号鍵に用いて暗号化してデータを出力し、乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路と、備えている。
【解決手段】第一の発振回路と、第二の発振回路と、第一の発振回路の発振開始によって動作を開始し第二の発振回路の発振開始によって出力を確定する乱数発生器と、乱数発生器の出力する乱数を暗号鍵に用いて暗号化してデータを出力し、乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路と、備えている。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体集積回路、データの暗号化装置、暗号鍵の生成装置、及び暗号鍵の生成方法に関する。特に、複数の発振回路を備えた半導体集積回路において、暗号鍵を生成し、その暗号鍵を用いて暗号化されたデータを入出力する半導体集積回路、データの暗号化装置及びその暗号鍵の生成装置と生成方法に関する。
【背景技術】
【0002】
半導体集積回路において、微細化、大規模化の技術の進展により、半導体集積回路に内蔵されるプログラムやデータの規模も膨大になってきており、そのプログラムやデータのソフトウェアとしての価値も高まって来ている。
【0003】
一方で、半導体集積回路に対する外的なプロービングや異常な操作等によるハッキングによる盗用、改ざんによる被害が増大している。半導体集積回路の解析技術の進歩により、半導体集積回路パッケージの樹脂を開封し、半導体集積回路内部のデータバス上のデータの流れを解析装置を用いて解析することによって、半導体集積回路内部の動作を解析し、そこからハッキングするなど、従来は考えられなかったような高度の技術を用いたハッキングも考えられるようになって来ている。従って、プログラムやデータをハッキングによる盗用や改ざんから防ぐ解析耐性を高めることが重要である。
【0004】
この様な半導体集積回路の内蔵されたプログラムやデータをハッキングから守るための技術としては、暗号鍵を用いて、暗号化してデータを入出力する技術がすでに開発されている。例えば、特許文献1には、マルチプロセス、マルチユーザ環境等に対応して、電源投入時、リセット時に乱数発生部が、外部から推測されない一時鍵を生成し、プロセス切り替え等の例外発生時にレジスタ群のコンテキストを上記一時鍵を用いて暗号化して外部メモリに退避させる。上記例外処理からの復帰時には、外部メモリに暗号化されて退避されたコンテキストを上記一時鍵を用いて、復号して復帰することが記載されている。また、上記一時鍵は、マイクロプロセッサの製造時のばらつき等に起因する電圧、タイミング等のばらつきに応じた乱数、または量子的なゆらぎを乱数の種としたり、マイクロプロセッサ内に不揮発性のエントロピープールを設け、これに応じて乱数を発生させ、この乱数を一時鍵とすることが記載されている。
【0005】
また、特許文献2には、電源投入後、発振器の動作が不安定なときに動作を開始する乱数発生器を有する半導体装置が記載されている。
【特許文献1】特開2003−51819号公報
【特許文献2】特開平11−312078号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
以下の分析は本発明において与えられる。上記特許文献1に記載されているように量子的なゆらぎを乱数の種に用いる場合、狙い通りに乱数が発生できれば、乱数発生のメカニズムがわかっていたとしても発生される乱数は予想できないのでその様な乱数は秘匿性が高いと言える。しかし、量子的なゆらぎ等を乱数の種にするためには、ゆらぎを測定する測定系の回路が必要となり、その回路が正常に動作するとは限らない。また、乱数が正常に発生しているか否かテストすることも困難である。テスト容易性を考慮すると量子的なゆらぎ等設計者や製造メーカですら、外部から設定も観測もできない値を乱数の種にすることはテスト容易化の観点から好ましくない。
【課題を解決するための手段】
【0007】
本発明の1つの側面による半導体集積回路は、第一の発振回路と、第二の発振回路と、前記第一の発振回路の発振開始によって動作を開始し前記第二の発振回路の発振開始によって出力を確定する乱数発生器と、前記乱数発生器の出力する乱数を暗号鍵に用いて暗号化してデータを出力し前記乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路と、を有する。
また、本発明の他の側面によるデータの暗号化装置は、第一、第二の発振器と、前記第一の発振器の発振開始によって動作を開始し前記第二の発振器の発振開始によって出力データを確定して暗号鍵として出力する乱数発生器と、を備えた暗号鍵生成器と、前記暗号鍵を用いて暗号化してデータを出力し、前記暗号鍵を用いて暗号化されたデータを解読して入力する暗号処理部と、を含む。
本発明のさらに他の側面による暗号鍵生成器は、データを暗号化するための暗号鍵を生成する暗号鍵生成器であって、第一の発振器と、第二の発振器と、前記第一の発振器の発振開始によって動作を開始し、前記第二の発振器の発振開始によって出力を確定し、前記暗号鍵として出力する乱数発生器と、を備える。
本発明のさらに他の側面による暗号鍵の生成方法は、暗号化してデータを入出力する装置に用いられる暗号鍵を第一の発振器と第二の発振器とを用いて生成する暗号鍵の生成方法であって、前記第一の発振器の発振開始により暗号鍵の生成を開始し、前記第二の発振器の発振開始により暗号鍵を確定し、前記確定した暗号鍵を用いて暗号化したデータを入出力する。
【発明の効果】
【0008】
本発明によれば、第一の発振回路の発振開始によって動作を開始し、第二の発振回路の発振開始によって出力を確定する乱数発生器を用いて暗号鍵を生成するので、秘匿性が高い暗号鍵を、確実に生成することができ、その暗号鍵に基づいて、秘匿性の高い暗号化を行う半導体集積回路を比較的容易に実現することができる。
【発明を実施するための最良の形態】
【0009】
本発明の実施形態について、必要に応じて図面を参照して説明する。なお、実施形態の説明において引用する図面及び図面の符号は実施形態の一例として示すものであり、それにより本発明による実施形態のバリエーションを制限するものではない。
【0010】
本発明の一実施形態による半導体集積回路1は、例えば図1に示すように、第一の発振回路3と、第二の発振回路4と、第一の発振回路3の発振開始によって動作を開始し第二の発振回路4の発振開始によって出力を確定する乱数発生器5と、乱数発生器5の出力する乱数を暗号鍵に用いて暗号化してデータを出力し、前記乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路(8、9)と、を有する。例えば、水晶発振器やセラミック発振器のような圧電振動子を用いる発振回路は、図4や図6にも記載するように圧電振動子に微小な機械的な振動等を与えることによって微小な起電力を生じ、それが発振回路により正帰還が係り徐々に振動が拡大し、最終的に安定した発振に至ることが知られている。また、この微小な発振を開始するまでの時間や発振が成長する速度は個体差や環境の微小な変化に大きく依存する。さらに、この振動が拡大し、安定した発振状態に至るまでの時間は、一般的に発振器の発振周波数に大きく依存することが知られている。従って、第一の発振回路3の発振開始によって動作を開始し第二の発振回路4の発振開始によって出力を確定する乱数発生器5を用いることにより、秘匿性が高い暗号鍵を、確実に生成することができ、その暗号鍵に基づいて、秘匿性の高い暗号化を行うことができる。
【0011】
また、本発明の一実施形態による半導体集積回路1は、図1、図3に示すように、第一の発振回路3が、発振安定前にもクロックを供給する第一の出力端子MC1と、発振が安定してからクロックを供給する第二の出力端子MC2とを備え、第一の出力端子MC1が乱数発生器5に接続され、第二の出力端子が乱数発生器以外の回路(8、9、10A)に接続されている。すなわち、第一の発振回路は発振か安定する前に乱数発生器にクロックを供給し、発振が安定してから乱数発生器以外の回路にクロックを供給するので、乱数発生器以外の回路が動作する前に鍵データを生成することができる。
【0012】
また、本発明の一実施形態による半導体集積回路1は、図1、図5に示すように、第二の発振回路4が、発振安定前にもクロックを供給する第三の出力端子SC1と、発振が安定してからクロックを供給する第四の出力端子SC2とを備え、第三の出力端子SC1が乱数発生器5に接続され、第四の出力端子SC2が乱数発生器以外の回路(8、10B)に接続されている。従って、乱数発生器以外の回路が動作を開始する前に暗号鍵を確定することができるので、乱数発生器以外の論理回路は、その暗号鍵を用いて暗号化することができる。
【0013】
また、本発明の一実施形態による半導体集積回路1は、図1に示すように、(乱数発生器5が生成した)乱数を暗号鍵に用いて暗号化してデータを出力する第一の機能ブロック(8または9)と、暗号化されたデータについて暗号鍵を用いて解読して入力する第二の機能ブロック(9または8)を含む。従って、半導体集積回路内のデータやプログラムの転送を暗号化して行うことができる。したがって、半導体集積回路内のデータバスの値を解析装置やICEなどのソフトウェアデバック装置を用いて取得できたとしても、半導体集積回路の内のデータやプログラムをハッキングすることはできない。
【0014】
また、本発明の一実施形態による半導体集積回路1は、図1に示すように、上記半導体集積回路1において、上記第一の機能ブロック(8または9の一方)が暗号化して出力するデータを第一のデータとしたときに、第二の機能ブロック(8または9の他方)が第二のデータを上記暗号鍵を用いて暗号化して出力し、第一の機能ブロックが暗号化された第二のデータについて暗号鍵を用いて解読して入力する。従って、第一の機能ブロック、第二の機能ブロックが共に同じ暗号を用いて入出力を行い、双方向のデータ入出力を暗号化して行うことができる。
【0015】
また、本発明の一実施形態による半導体集積回路1は、図1に示すように、上記論理回路がCPU8を含む。従って、CPUが入出力するデータについて暗号化することができる。
【0016】
また、本発明の一実施形態による半導体集積回路1は、図8、図9等に示すように、乱数発生器5が、第一の発振回路3からクロックが供給されるリニアフィードバックシフトレジスタ11を含み、リニアフィードバックシフトレジスタ11の出力を第二の発振回路4のクロックSC1に同期してラッチすることにより乱数を生成する。従って、リニアフィードバックレジスタの生成する擬似乱数を用いて乱数を生成するので、テストが比較的容易であり、かつ、乱数を生成するタイミングを第一、第二の発振回路の発振開始時間を用いて制御しているので、同じ暗号鍵を再現することが困難であり、ハッキングに対して強い暗号鍵を生成し、暗号化することができる。
【0017】
また、本発明の別な実施形態による半導体集積回路1は、図11〜図13に示すように、乱数発生器5が、第一の発振回路3の発振開始により動作を開始するリングオシレータ12と、リングオシレータの生成するクロックRCをカウントし、第二の発振回路4の発振開始により出力を確定するアドレスカウンタ(13、14)と、アドレスカウンタ(13、14)によってアドレスが指定され乱数を出力する乱数メモリ15と、を備える。従って、この実施形態によれば、乱数発生器5の発生する乱数は、第一、第二の発振回路の発振開始時間に加えて、リングオシレータの発振周波数にも依存することになる。従って、さらに再現性のない秘匿性の高い暗号鍵を生成することができる。
【0018】
また、本発明の一実施形態による半導体集積回路1は、図1を参照すると、第一の発振回路3は、第二の発振回路4より高い周波数で発振するように構成された発振回路である。なお、本発明において、第一の発振回路が、第二の発振回路より早く発振を開始するものであれば、かならずしも、上記構成に限定されるものではないが、上記構成によることにより、比較的容易に、確実に第一の発振回路が第二の発振回路より早く発振を開始する発振回路が得られる。
【0019】
また、本発明の一実施形態による半導体集積回路1は、第一、第二の発振回路は圧電振動子を用いた発振回路である。図1に示すように、半導体集積回路1の発振回路3、4の端子に圧電振動子を接続することにより、所定の周波数で発振する発振器が得られる。本発明は、上記構成に限定されないが、上記構成の発振回路を用いれば、圧電振動子を用いた発振回路は、発振開始まで時間を要し、発振開始までの時間が圧電振動子の発振周波数に大きく依存するので、容易に、本発明の乱数発生回路を構成することができる。また、発振開始までの時間は、発振回路や圧電振動子の個体差や周囲の環境によって変動し、再現性がないことから、ハッキングに対して強く、本発明の発振回路として好適である。
【0020】
また、本発明の一実施形態によるデータの暗号化装置19は、図1に示すように、第一、第二の発振器(3、4、圧電振動子、容量)と、第一の発振器の発振開始によって動作を開始し、第二の発振器の発振開始によって出力データを確定し、暗号鍵として出力する乱数発生器5と、を備えた暗号鍵生成器2と、暗号鍵生成器2が生成した暗号鍵を用いて暗号化してデータを出力し、上記暗号鍵を用いて暗号化されたデータを解読して入力する暗号処理部6と、を含む。従って、第一の発振器の発振開始によって動作を開始し、第二の発振器の発振開始によって出力データを確定し、暗号鍵として出力するので、比較的容易にハッキングに対して強い暗号化装置が得られる。
【0021】
また、本発明の一実施形態による暗号鍵生成器2は、図1に示すように、データを暗号化するための暗号鍵を生成する暗号鍵生成器2であって、第一の発振器(3、圧電振動子、容量)と、第二の発振器(4、圧電振動子、容量)と、第一の発振器の発振開始によって動作を開始し、第二の発振器の発振開始によって出力を確定し、前記暗号鍵として出力する乱数発生器5と、を備える。上記構成によれば、容易にハッキングできない暗号鍵生成器が得られる。
【0022】
また、本発明の一実施形態による暗号鍵の生成方法は、図1、図7に示すように、暗号化してデータを入出力する装置19に用いられる暗号鍵を第一の発振器(3、圧電振動子、容量)と第二の発振器(4、圧電振動子、容量)とを用いて生成する暗号鍵の生成方法であって、第一の発振器の発振開始により暗号鍵の生成を開始し(図7のステップS7)、第二の発振器の発振開始により暗号鍵を確定し(ステップS11)、確定した暗号鍵を用いて暗号化したデータを入出力する(ステップS14)。上記方法によれば、容易にハッキングできない暗号鍵を生成することができる。以下、上記実施形態について、実施例に即し、図面を参照してさらに詳しく説明する。
【実施例1】
【0023】
図1は、実施例1によるデータの暗号化装置全体の構成を示すブロック図である。図1のデータの暗号化装置19は、半導体集積回路1の半導体基板に形成されたメイン発振回路3、サブ発振回路4、乱数発生器5、CPU8、メモリ9、周辺回路(10A、10B)と、半導体集積回路1の圧電振動子接続端子(X1、X2、XT1、XT2)に接続された圧電振動子と容量から構成される。また、上記乱数発生器5と、メイン発振回路3、サブ発振回路4、及び圧電振動子、容量は、暗号鍵生成器2として機能する。
【0024】
上記メイン発振回路3には、例えば、50MHzなどの高周波で発振する圧電振動子が接続される。また、サブ発振回路4には、32KHzなどの低周波数で発振する圧電振動子が接続される。この例では、メイン発振回路3の発振周波数は、サブ発振回路4の発振周波数の1000倍以上高い周波数で発振することになる。メイン発振回路3には、発振が安定する前から出力される第一のメインクロック信号MC1と、発振が安定してから出力される第二のメインクロック信号MC2が備わっている。第一のメインクロック信号MC1は、乱数発生器5に接続され、第二のメインクロック信号MC2は、乱数発生器5以外の回路、具体的には、CPU8、メモリ9、周辺回路10Aへ出力されている。
【0025】
また、サブ発振回路4には、発振が安定する前から出力される第一のサブクロック信号SC1と、発振が安定してから出力される第二のサブクロック信号が備わっている。第一のサブクロック信号SC1は、乱数発生器5に接続され、第二のサブクロック信号SC2は、乱数発生器5以外の回路、具体的には、CPU8、周辺回路10Bへ出力されている。
【0026】
CPU8とメモリ9には、それぞれ暗号処理部6が設けられている。さらに、それぞれの暗号処理部6には、暗号鍵レジスタ7が設けられている。暗号鍵レジスタ7は、サブ発振回路4が発振を開始したときに乱数発生器5が出力する暗号鍵を格納する。CPU8に設けられた暗号処理部6は、CPUがバス18へ出力しようとするデータを暗号鍵レジスタ7に格納された暗号鍵を用いて暗号化して出力する。また、CPU8に設けられた暗号処理部6は、バス18上の暗号化されたデータを入力し、暗号鍵レジスタ7に格納された暗号鍵を用いて解読し、解読されたデータをCPU8へ伝える。
【0027】
同様に、メモリ9に設けられた暗号処理部6は、メモリから読み出されたデータを暗号鍵レジスタ7に格納された暗号鍵を用いて暗号化してバス18へ出力する。また、メモリ9に設けられた暗号処理部6は、バス18上の暗号化されたデータ、アドレスを入力し、暗号鍵レジスタ7に格納された暗号鍵を用いて解読し、解読されたアドレスへ解読されたデータを書き込む。なお、CPU8に設けられた暗号処理部6及び暗号鍵レジスタ7とメモリ9に設けられた暗号処理部6及び暗号鍵レジスタ7は同一の構成、機能を有している。
【0028】
図2は、実施例1における暗号化の具体例を示す図面である。図1の暗号処理部6には、暗号鍵に基づいて、ビットの並びを変更するセレクタ回路が含まれる。図2において、21は暗号する前のデータのビットの並びを示す。ここでは、16ビットのデータを入出力するものとする。22A、22Bはスクランブルして暗号化した後のデータである。(a)の例では、0〜15ビットの並びを暗号鍵レジスタ7に格納された暗号鍵1を用いて、6、2、0、1、4、3、7、5、14、10、8、9、12、11、15、13ビットの並びに並べ替えて暗号化されたデータ22Aとしている。また、(b)の例では、暗号鍵レジスタ7に格納された暗号鍵1が暗号鍵2に変わっていることが異なる。暗号鍵1と暗号鍵2は異なる値であるとする。(b)では、(a)と異なった暗号鍵を用いてスクランブルして暗号化しているので、(a)とはスクランブルした後のビットの並び順も異なっている。具体的には、(b)では、1、4、0、2、3、6、12、5、10、7、12、15、11、13、9、8ビットの並びに並べ替えて暗号化されたデータ22Bとしている。なお、この例では、単純にビット列を入れ替えているだけであるが、必要に応じてもっと高度な暗号化を行うこともできる。
【0029】
図3は、実施例1におけるメイン発振器(第一の発振器)の回路図である。メイン発振器23は、半導体集積回路1の半導体基板に形成されたメイン発振回路(第一の発振回路)3と半導体集積回路1の外部端子である圧電振動子接続端子X1、X2を介して半導体集積回路1の外部に取り付けられた圧電振動子17Aと容量C11、C12で構成される。メイン発振回路3の出力するクロック信号は半導体集積回路1のメインクロック信号となる。圧電振動子17Aは、水晶やセラミックなどの応力を与えると起電力を生じ、逆に電圧を印加すると応力が生じる圧電振動体で構成されており、その物理的な形状により、固有の周波数で発振する。ここでは、メイン発振器23に用いられる圧電振動子は50MHz程度の高周波の固有の周波数で発振するものとする。この圧電振動子17Aと圧電振動子17Aの両端とグランド電位との間に接続された容量C11、C12とメイン発振回路3内に設けられ、入力がX1端子、出力がX2端子に接続されたインバータI11とX1端子とX2端子との間に接続された帰還抵抗により、発振器の基本的な部分が構成される。また、インバータI11の出力信号はインバータI12、I13を介して第一のメインクロック信号MC1として乱数発生器5に接続される。
【0030】
また、インバータI11の出力信号はヒステリシス回路H11に接続され、ヒステリシス回路H11の出力信号はBF11〜BF13からなるバイナリカウンタに入力される。バイナリカウンタの出力となるBF13のQ出力は、ノア回路R11、R12で構成されるセットリセットフリップフロップのセット信号として入力される。このセットリセットフリップフロップの出力信号は、第一のメインクロック信号MC1とアンド回路A11により論理積が取られ、第二のメインクロック信号MC2として出力される。
【0031】
図4は、図3のメイン発振器(第一の発振器)の動作タイミングチャートである。図4における第一のリセット信号R1は半導体集積回路1に設けられるリセット端子から入力されるリセット信号やパワーオンリセット回路(図示せず)によりハイレベルとなる信号で、この第一のリセット信号R1はハイレベルになった後、クロックが入力されるのを待たずにすぐ解除されるリセット信号である。第一のリセット信号R1は時刻t11にローレベルとなり、バイナリフリップフロップBF11〜BF13、R11、R12で構成されるセットリセットフリップフロップ回路のリセット状態は解除される。
【0032】
圧電振動子17Aは、時刻t11の後、固有の発振周波数により微小な機械的な振動を開始する。するとその機械的な振動により起電力を生じる。インバータI21は入出力端子間に接続された帰還抵抗により、動作点にバイアスされているので、機械的な振動により生じた起電力を増幅する。インバータI11、容量C11、C12、圧電振動子17Aにより正帰還ループが形成され、起電力により生じたX2端子の電圧の振幅は徐々に拡大する。時刻t12になると、インバータI12、I13がX2端子に生じた電圧の変化に反応して反転するようになり、以後第一のメインクロック信号MC1としてクロック信号を出力する。しかし、この段階での発振回路は、まだ非常に不安定であり、一度開始した発振が一端停止したり、固有の振動周波数以外の周波数で振動をしたりすることもある。
【0033】
次に、t13になると、X2端子の振動はさらに拡大し、ヒステリシス回路H11もX2端子の振動に応答してクロックMCHを出力するようになる。ただし、ヒステリシス回路H11を経由することにより、クロックMCHの位相は、クロックMC1の位相から遅延を生じている。次に、時刻t14になり、バイナリフリップフロップBF11〜BF13がクロックMCHを4発カウントすると、BF13のQ出力がハイレベルとなり、R11とR12で構成されるセットリセットフリップフロップがセットされ、メインクロックアクティブ信号MCAがハイレベルとなる。この時刻になると、メイン発振器の発振は安定したものとなっている。メインクロックアクティブ信号MCAがハイレベルになると、アンド回路A11が開き、時刻t15から第二のメインクロック信号MC2が出力される。
【0034】
図5は、実施例1におけるサブ発振器(第二の発振器)の回路図である。サブ発振器24は、半導体集積回路1の半導体基板に形成されたサブ発振回路(第二の発振回路)4と半導体集積回路1の外部端子である圧電振動子接続端子XT1、XT2を介して半導体集積回路1の外部に取り付けられた圧電振動子17Bと容量C21、C22で構成される。サブ発振回路4の出力するクロック信号は半導体集積回路1のサブクロック信号となる。圧電振動子17Bは、圧電振動子17Aと同様に、水晶やセラミックなどの圧電振動体で構成されており、固有の周波数で発振する。なお、サブ発振器24は、32KHzの発振周波数で発振し、メイン発振器である第一の発振器の1000倍以上の周期で発振を行う。その他の回路構成は、発振周波数が大きく異なるものの、基本的な回路構成は、図3の第一の発振器とほぼ同一である。
【0035】
ただし、サブ発振器24では、第一のリセット信号R1によりリセットされ、メインクロックアクティブ信号MCA、サブクロックアクティブ信号SCAが共にアクティブとなったときにリセットされるフリップフロップ回路(ノア回路R23、R24)を備えており、そのフリップフロップ回路が、第二のリセット信号R2信号を出力する。
【0036】
図6は、図5のサブ発振器の動作タイミングチャートである。図4のタイミングチャートと同様に、第一のリセット信号R1は時刻t11でリセットされ、メインクロックアクティブ信号MCAは時刻t14で立ち上がる。圧電振動子17Bは、時刻t11の後、振動を開始するが、メイン発振器23の圧電振動子17Aより固有振動周波数が大幅に低いので、発振の成長も振動周波数に比例して遅い。従って、インバータI22、I23が、圧電振動子17Bの振動に反応してクロック信号を出力するタイミングは、メインクロックアクティブ信号MCAが立ち上がり、メイン発振器23が安定して発振するようになってからかなり後の時刻t22になる。その後、さらに発振が成長し、時刻t23では、ヒステリシス回路H21が反応してクロック信号を生成する。さらに、時刻t24で、ヒステリシス回路H21が出力するクロック信号を4発カウントしたところで、R21とR22で構成されるフリップフロップ回路から出力されるサブクロックアクティブ信号SCAがハイレベルに反転し、第二のリセット信号R2が解除されると共に、時刻t25から第二のサブクロック信号を出力する。
【0037】
図7は、実施例1における乱数発生器の制御フローチャートである。図7を用いて、乱数発生器の制御フローチャートについて説明する。まず、ステップS1で半導体集積回路1に電源が投入される。すると、半導体集積回路1のパワーオンリセット回路(図示せず)が機能し、システム全体を第一のリセット信号R1により、イニシャライズする。半導体集積回路1がパワーオンリセット回路を備えていない場合は、半導体集積回路1のリセット端子(図示せず)からリセット信号を入力し、システム全体を第一のリセット信号R1によりイニシャライズする。第一のリセット信号R1は、パワーオンリセット回路のリセット終了によりステップS2ですぐ解除する。
【0038】
次に、ステップS3では、メイン発振器の発振を起動させる、ただし、この時点では、発振が開始しているとしてもまだ、微小な発振であるので、発振は安定しておらず、ステップ5からステップS6へ進む。また、ステップS4では、サブ発振器について発振を起動させる。
【0039】
ステップS6では、微小な発振にインバータI12、I13に反応して第一のメインクロックMC1が出力されるまで待つ。第一のメインクロックMC1が出力されるようになったならば、ステップS7へ進み、乱数発生器を起動させ、乱数の発生を開始する。さらに、ステップS10、S8で、乱数発生器を動作させて乱数を発生させながら、サブ発振器が発振を開始して、第一のサブクロックSC1が出力されるのを待つ。第一のサブクロックSC1が出力されたところで乱数発生器が出力する暗号鍵を確定する(ステップS11)。ステップS12では、確定した暗号鍵を出力する。最後に、メインクロック、サブクロック、共に安定してクロックを出力するようになり、暗号鍵が確定すると、ステップS14に進み、確定した暗号鍵を用いて、暗号処理の実行を開始する。以上の手順によれば、半導体集積回路が実際に動作を開始し、情報処理を開始するのは、メイン発振器、サブ発振器が安定して発振を開始するようになってからであるので、情報処理の開始までに、暗号鍵は確定しており、その暗号鍵を用いて暗号化してデータの入出力を行うことができる。
【0040】
また、乱数発生器5は、第一の発振器(メイン発振器)の発振開始によって乱数の発生
を開始し、第二の発振器(サブ発振器)の発振開始により暗号鍵として用いる乱数を確定する乱数発生器5は同様な構成であってもよい。
【実施例2】
【0041】
図8と図9は、実施例2の乱数発生器の回路図である。この実施例2の乱数発生器は、実施例1の半導体集積回路1における乱数発生器5として用いることができる。図8は、実施例2の乱数発生器における乱数発生部の回路図である。図8には、乱数発生器5の乱数発生部と、暗号鍵レジスタ7が記載されている。乱数発生器5には、リニアフィードバックシフトレジスタ(LFSR)11とリニアフィードバックシフトレジスタ11の出力を保持するデータフリップフロップDF41〜DF50が含まれる。この図8では、暗号鍵レジスタ7もデータフリップフロップで構成している。リニアフィードバックシフトレジスタ11は、必要に応じて、何ビットの構成でもよいし、また、具体的な構成も自由に選択することができる。ここでは、リニアフィードバックレジスタ11は、10個のデータフリップフロップ(DF31〜DF40)とエクスクルーシブノア回路X31で構成される10ビットのリニアフィードバックレジスタである。また、リニアフィードバックレジスタの各ビットの出力にはデータフリップフロップDF41〜DF50が設けられている。このデータフリップフロップは、リニアフィードバックシフトレジスタの各ビットの値を保持し、リニアフィードバックシフトレジスタ11が発生する擬似乱数の値を確定する。暗号鍵レジスタ7は乱数発生器が確定した擬似乱数の値を暗号鍵として格納し、この暗号鍵に基づいて、暗号化処理や暗号化されたデータの復号処理を行う。なお、暗号鍵レジスタは、半導体集積回路1内に複数の暗号処理部6が設けられる場合には、各暗号処理部にそれぞれに設ける。
【0042】
図9は、実施例2の乱数発生器5のうち、制御部の構成を示す回路図である。図9の制御部は、第一のメインクロック、第一のサブクロックから、暗号鍵を確定する信号KFと、確定した暗号鍵データを暗号鍵レジスタ7に格納する制御信号KLを生成する。データフリップフロップDF61、DF62、アンド回路61は、第一のサブクロックの最初の立ち上がりを第一のメインクロックの立ち上がりに同期して捉え、暗号鍵を確定する信号KFを生成する。また、アンド回路A62とデータフリップフロップDF63〜65、R61、R62からなるセットリセットフリップフロップは、上記制御信号KLを生成すると共に、暗号鍵を暗号鍵レジスタに格納した後、リニアフィードバックシフトレジスタ11の出力を初期化する第三のリセット信号R3を出力する。
【0043】
図10は、第二の実施例の詳細なタイミングチャートである。図10のタイミングチャートにおいて、時刻t22で第一のサブクロックSC1がローレベルからハイレベルに立ち上がる。この時刻t22は、図6の時刻t22と同一の時刻である。第一のサブクロックSC1が時刻t22で立ち上がると、その後の最初の第一のメインクロックMC1の立ち上がり(時刻t31)でデータフリップフロップDDF61のQ出力がローレベルからハイレベルに立ち上がる。その立ち上がりに同期して、暗号鍵を確定する信号KFがローレベルからハイレベルに立ち上がる。次の第一のメインクロックMC1の立下り(時刻t32)で暗号鍵データを暗号鍵レジスタに格納する制御信号KLをローレベルからハイレベルに立ち上げる。さらに、次の第一のメインクロックの立ち上がり(時刻t33)でデータフリップフロップDDF61のQ出力がハイレベルとなるので、暗号鍵を確定する信号KFがハイレベルからローレベルに立ち下がり、乱数発生器5が出力暗号鍵を確定し、暗号鍵レジスタ7へ向けて出力する。さらに次の第一のメインクロックの立下り(時刻t34)で暗号鍵レジスタに暗号鍵を取り込むタイミングを決める制御信号KLがハイレベルからローレベルに立ち下がり、暗号鍵レジスタ7に暗号鍵を取り込む。さらに、次の第一のメインクロックの立ち上がり(時刻t35)で、R61、R62で構成されるセットリセットフリップフロップがセットされて第三のリセット信号R3がローレベルからハイレベルに立ち上がる。すると、データフリップフロップDF41〜DF50はリセットされ、乱数発生器の出力する暗号鍵はリセットされる。ただし、この第三のリセット信号R3は、暗号鍵レジスタ7のリセット信号とはなっていないので、暗号鍵レジスタに格納された暗号鍵はそのまま保持され、その暗号鍵レジスタに保持されている暗号鍵を用いて、暗号化してデータの入出力を行うことができる。
【実施例3】
【0044】
乱数発生器5は、実施例2以外にも様々な構成が考えられる。実施例3は、乱数発生回路にリングオシレータと乱数メモリを用いる実施例である。図11〜図13に実施例3の乱数発生器の回路図を示す。図11は実施例3における乱数発生器のリングオシレータ部の回路図である。図11のリングオシレータ部は、第一のメインクロックを分周するバイナリフリップフロップBF71と、R71とR72で構成されるセットリセットフリップフロップと、リングオシレータ12で構成される。第一のリセット信号R1が立ち下がった後の最初の第一のメインクロック信号の立下りにより、バイナリフリップフロップBF71のQは立ち上がる。すると、R71とR72で構成されるフリップフロップ回路がセットされ、リングオシレータ12の発振を起動させる。リングオシレータ12は、リングオシレータのクロック信号RCを出力する。
【0045】
図12は、実施例3の乱数発生器における乱数発生部の回路図である。乱数発生部は、リングオシレータのクロック信号RCをカウントし、乱数メモリ15のアドレスカウンタの機能を果たすバイナリカウンタ13と、バイナリカウンタ13の出力をラッチして乱数メモリのアドレスとするアドレスラッチ14と、乱数メモリ15と、乱数メモリの出力する暗号鍵を一時的にラッチする暗号鍵出力ラッチ16と、暗号鍵出力ラッチ16の出力データを暗号鍵として保持する暗号鍵レジスタ7を含んでいる。なお、暗号鍵レジスタ7は、乱数発生器5内部の構成ではなく、暗号処理部6内部の構成であるが、乱数発生器5と密接な関係があるため、図12に記載している。
【0046】
図13は、実施例3の乱数発生器における制御部の回路図である。図13の制御部は、図12の乱数発生部の制御信号を生成する回路である。図13には、第一のサブクロックの最初の立ち上がりエッジを第一のメインクロックに同期して捉える回路(DF81、DF82、A81、R81、R82)と、サブクロックの最初の立ち上がりエッジを捉えた後、リングオシレータの立ち上がりを第一のメインクロックに同期して捉え、乱数メモリ15の入力アドレスを確定する回路(DF83、DF84、A83)と、乱数メモリが出力する暗号鍵出力ラッチ16にラッチする信号KFAと暗号鍵出力ラッチ16が出力するめ暗号鍵を暗号鍵レジスタ7にラッチする制御信号KLAと第三のリセット信号RCを生成する回路を備えている。第三のリセット信号RCは、暗号鍵レジスタに暗号鍵をラッチした後、暗号鍵出力ラッチ16の暗号鍵データをクリアしてリセットする信号である。
【0047】
図14は、実施例3の乱数発生器の動作タイミングチャートである。図14では、パワーリセット後に、すでに第一のメインクロックの発振が開始され、リングオシレータも動作しているが、サブクロックの発振がまだ始まっていない状態からスタートしている。図14に示すように、第一のメインクロック信号MC1とリングオシレータのクロック信号RC、第一のサブクロックSC1はそれぞれ非同期のクロックである。
図14では、時刻t81で、第一のサブクロックSC1が最初に立ち上がるところから動作がスタートする。第一のサブクロックSC1が立ち上がると、その後の最初の第一のメインクロックMC1の立下り(時刻t82)でデータフリップフロップDF81のQ出力が立ち上がり、アンド回路A81の出力がハイレベルになることから、R81、R82で構成されるセットリセットフリップフロップがセットされ、アンド回路A82より第一のメインクロックMC1に同期したクロックが出力されるようになる。次に、リングオシレータクロックRCの立ち上がりをアンド回路A82の出力クロックに同期してデータフリップフロップDF83とDF84で捉え、時刻t85から時刻t86までアドレスラッチ信号ALをハイレベルにする。アドレスラッチ14は、アドレスラッチ信号ALの立ち下がり(時刻t86)でバイナリカウンタ13の出力データをラッチし、乱数メモリ15の入力アドレスを確定し、乱数メモリのデータを暗号鍵出力ラッチ16へ読み出す。暗号鍵出力ラッチ16は、時刻t86から時刻t87までハイレベルとなる暗号鍵を確定する信号KFAの立ち下がりに同期して乱数メモリのデータを暗号鍵としてラッチする。
【0048】
さらに、暗号鍵レジスタ7のラッチ信号KLAが、時刻t87から時刻t88までハイレベルとなり、暗号鍵出力ラッチの出力する暗号鍵データを取り込み、ラッチ信号KLAが立ち下がる時刻t88までに確定させる。また、時刻t88では、第三のリセット信号R3が立ち上がり、暗号鍵出力ラッチ16のデータはリセットされる。しかし、暗号鍵レジスタ7は、第三のリセット信号R3によってはリセットされないので、暗号鍵のデータを保持する。従って、時刻t88以降、暗号鍵レジスタ7に保持されている暗号鍵を用いて、暗号化してデータの入出力を行うことができる。
【0049】
なお、実施例1では、CPU8とメモリ9に共に暗号処理部を設け、CPU8がメモリ9にデータを書き込む場合、CPU8内の暗号処理部で書き込みデータを暗号化してメモリ9へ出力し、メモリ9は暗号化されたデータを暗号処理部によって復号してからメモリ9内へ格納している。また、CPU8がメモリ9からデータを読み出す場合、メモリ9内の暗号処理部でメモリのデータを暗号化してからバス18へ出力し、CPU8は、メモリ9が出力する暗号化されたデータを暗号処理部により復号して入力する。
【0050】
しかし、メモリ9側でデータの加工を行わず、CPU8が書き込んだデータをメモリ9に書き込み、そのデータをCPUが読み出すだけであるならば、暗号処理部6は、CPU8だけに設け、メモリ9には、必ずしも設けなくともよい。すなわち、CPUはメモリ9に書き込みデータを暗号化してバス18へ出力し、メモリ9は、その暗号化されたデータを暗号化されたままメモリ9に格納し、CPUはその暗号化されたメモリのデータをそのまま読み出し、CPUの側で暗号化されたデータを復号して取り込むことができる。この場合、メモリは半導体集積回路1の外部にあってもよい。暗号鍵をメモリに送る必要がないからである。
【0051】
また、実施例1では、暗号化してデータの入出力するマクロがメモリ9のみであったが、メモリ9以外の周辺回路とCPUとの間のデータ入出力、又は周辺回路間のデータ入出力を暗号化して行ってもよい。この場合、周辺回路の内部にも暗号処理部6を設け、さらにその暗号処理部6には、暗号鍵レジスタ7を設ける必要がある。
【0052】
以上、本発明を実施例に即して説明したが、本発明は上記実施例の構成にのみ制限されるものでなく、本発明の範囲内で当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【図面の簡単な説明】
【0053】
【図1】本発明の一実施例によるデータの暗号化装置全体の構成を示すブロック図である。
【図2】本発明の一実施例における暗号化の具体例を示す図面である。
【図3】本発明の一実施例における第一の発振器の回路図である。
【図4】本発明の一実施例における第一の発振器のタイミングチャートである。
【図5】本発明の一実施例における第二の発振器の回路図である。
【図6】本発明の一実施例における第二の発振器のタイミングチャートである。
【図7】本発明の一実施例における乱数発生器の制御フローチャートである。
【図8】本発明の一実施例における乱数発生器(乱数発生部)の回路図である。
【図9】本発明の一実施例における乱数発生器(制御部)の回路図である。
【図10】本発明の一実施例における乱数発生器の動作タイミングチャートである。
【図11】本発明の別な実施例における乱数発生器(リングオシレータ部)の回路図である。
【図12】本発明の別な実施例における乱数発生器(乱数発生部)の回路図である。
【図13】本発明の別な実施例における乱数発生器(制御部)の回路図である。
【図14】本発明の別な実施例における乱数発生器の動作タイミングチャートである。
【符号の説明】
【0054】
1:半導体集積回路
2:暗号鍵生成器
3:メイン発振回路(第一の発振回路)
4:サブ発振回路(第二の発振回路)
5:乱数発生器
6:暗号処理部
7:暗号鍵レジスタ
8:CPU
9:メモリ
10A、10B:周辺回路
11:リニアフィードバックシフトレジスタ(LFSR)
12:リングオシレータ
13:バイナリカウンタ
14:アドレスラッチ
15:乱数メモリ
16:暗号鍵出力ラッチ
17A、17B:圧電振動子
18:バス
19:データの暗号化装置
21:暗号化前のデータ(復号されたデータ)
22A、22B:暗号化されたデータ(復号する前のデータ)
23:メイン発振器(第一の発振器)
24:サブ発振器(第二の発振器)
A11、A21、A22、A61、A62、A81、A82、A83:アンド回路
A71:ナンド回路
BF11〜BF13、BF21〜BF23、BF71:バイナリフリップフロップ
C11、C12、C21、C22:容量
DF31〜DF65、DF81〜DF87:データフリップフロップ
H11、H21:ヒステリシス回路
I11〜I13、I21〜I23:インバータ回路
O81:オア回路
R11、R12、R21〜R24、R61、R62、R71、R72、R81、R82:ノア回路
X31:エクスクルーシブノア回路
【技術分野】
【0001】
本発明は、半導体集積回路、データの暗号化装置、暗号鍵の生成装置、及び暗号鍵の生成方法に関する。特に、複数の発振回路を備えた半導体集積回路において、暗号鍵を生成し、その暗号鍵を用いて暗号化されたデータを入出力する半導体集積回路、データの暗号化装置及びその暗号鍵の生成装置と生成方法に関する。
【背景技術】
【0002】
半導体集積回路において、微細化、大規模化の技術の進展により、半導体集積回路に内蔵されるプログラムやデータの規模も膨大になってきており、そのプログラムやデータのソフトウェアとしての価値も高まって来ている。
【0003】
一方で、半導体集積回路に対する外的なプロービングや異常な操作等によるハッキングによる盗用、改ざんによる被害が増大している。半導体集積回路の解析技術の進歩により、半導体集積回路パッケージの樹脂を開封し、半導体集積回路内部のデータバス上のデータの流れを解析装置を用いて解析することによって、半導体集積回路内部の動作を解析し、そこからハッキングするなど、従来は考えられなかったような高度の技術を用いたハッキングも考えられるようになって来ている。従って、プログラムやデータをハッキングによる盗用や改ざんから防ぐ解析耐性を高めることが重要である。
【0004】
この様な半導体集積回路の内蔵されたプログラムやデータをハッキングから守るための技術としては、暗号鍵を用いて、暗号化してデータを入出力する技術がすでに開発されている。例えば、特許文献1には、マルチプロセス、マルチユーザ環境等に対応して、電源投入時、リセット時に乱数発生部が、外部から推測されない一時鍵を生成し、プロセス切り替え等の例外発生時にレジスタ群のコンテキストを上記一時鍵を用いて暗号化して外部メモリに退避させる。上記例外処理からの復帰時には、外部メモリに暗号化されて退避されたコンテキストを上記一時鍵を用いて、復号して復帰することが記載されている。また、上記一時鍵は、マイクロプロセッサの製造時のばらつき等に起因する電圧、タイミング等のばらつきに応じた乱数、または量子的なゆらぎを乱数の種としたり、マイクロプロセッサ内に不揮発性のエントロピープールを設け、これに応じて乱数を発生させ、この乱数を一時鍵とすることが記載されている。
【0005】
また、特許文献2には、電源投入後、発振器の動作が不安定なときに動作を開始する乱数発生器を有する半導体装置が記載されている。
【特許文献1】特開2003−51819号公報
【特許文献2】特開平11−312078号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
以下の分析は本発明において与えられる。上記特許文献1に記載されているように量子的なゆらぎを乱数の種に用いる場合、狙い通りに乱数が発生できれば、乱数発生のメカニズムがわかっていたとしても発生される乱数は予想できないのでその様な乱数は秘匿性が高いと言える。しかし、量子的なゆらぎ等を乱数の種にするためには、ゆらぎを測定する測定系の回路が必要となり、その回路が正常に動作するとは限らない。また、乱数が正常に発生しているか否かテストすることも困難である。テスト容易性を考慮すると量子的なゆらぎ等設計者や製造メーカですら、外部から設定も観測もできない値を乱数の種にすることはテスト容易化の観点から好ましくない。
【課題を解決するための手段】
【0007】
本発明の1つの側面による半導体集積回路は、第一の発振回路と、第二の発振回路と、前記第一の発振回路の発振開始によって動作を開始し前記第二の発振回路の発振開始によって出力を確定する乱数発生器と、前記乱数発生器の出力する乱数を暗号鍵に用いて暗号化してデータを出力し前記乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路と、を有する。
また、本発明の他の側面によるデータの暗号化装置は、第一、第二の発振器と、前記第一の発振器の発振開始によって動作を開始し前記第二の発振器の発振開始によって出力データを確定して暗号鍵として出力する乱数発生器と、を備えた暗号鍵生成器と、前記暗号鍵を用いて暗号化してデータを出力し、前記暗号鍵を用いて暗号化されたデータを解読して入力する暗号処理部と、を含む。
本発明のさらに他の側面による暗号鍵生成器は、データを暗号化するための暗号鍵を生成する暗号鍵生成器であって、第一の発振器と、第二の発振器と、前記第一の発振器の発振開始によって動作を開始し、前記第二の発振器の発振開始によって出力を確定し、前記暗号鍵として出力する乱数発生器と、を備える。
本発明のさらに他の側面による暗号鍵の生成方法は、暗号化してデータを入出力する装置に用いられる暗号鍵を第一の発振器と第二の発振器とを用いて生成する暗号鍵の生成方法であって、前記第一の発振器の発振開始により暗号鍵の生成を開始し、前記第二の発振器の発振開始により暗号鍵を確定し、前記確定した暗号鍵を用いて暗号化したデータを入出力する。
【発明の効果】
【0008】
本発明によれば、第一の発振回路の発振開始によって動作を開始し、第二の発振回路の発振開始によって出力を確定する乱数発生器を用いて暗号鍵を生成するので、秘匿性が高い暗号鍵を、確実に生成することができ、その暗号鍵に基づいて、秘匿性の高い暗号化を行う半導体集積回路を比較的容易に実現することができる。
【発明を実施するための最良の形態】
【0009】
本発明の実施形態について、必要に応じて図面を参照して説明する。なお、実施形態の説明において引用する図面及び図面の符号は実施形態の一例として示すものであり、それにより本発明による実施形態のバリエーションを制限するものではない。
【0010】
本発明の一実施形態による半導体集積回路1は、例えば図1に示すように、第一の発振回路3と、第二の発振回路4と、第一の発振回路3の発振開始によって動作を開始し第二の発振回路4の発振開始によって出力を確定する乱数発生器5と、乱数発生器5の出力する乱数を暗号鍵に用いて暗号化してデータを出力し、前記乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路(8、9)と、を有する。例えば、水晶発振器やセラミック発振器のような圧電振動子を用いる発振回路は、図4や図6にも記載するように圧電振動子に微小な機械的な振動等を与えることによって微小な起電力を生じ、それが発振回路により正帰還が係り徐々に振動が拡大し、最終的に安定した発振に至ることが知られている。また、この微小な発振を開始するまでの時間や発振が成長する速度は個体差や環境の微小な変化に大きく依存する。さらに、この振動が拡大し、安定した発振状態に至るまでの時間は、一般的に発振器の発振周波数に大きく依存することが知られている。従って、第一の発振回路3の発振開始によって動作を開始し第二の発振回路4の発振開始によって出力を確定する乱数発生器5を用いることにより、秘匿性が高い暗号鍵を、確実に生成することができ、その暗号鍵に基づいて、秘匿性の高い暗号化を行うことができる。
【0011】
また、本発明の一実施形態による半導体集積回路1は、図1、図3に示すように、第一の発振回路3が、発振安定前にもクロックを供給する第一の出力端子MC1と、発振が安定してからクロックを供給する第二の出力端子MC2とを備え、第一の出力端子MC1が乱数発生器5に接続され、第二の出力端子が乱数発生器以外の回路(8、9、10A)に接続されている。すなわち、第一の発振回路は発振か安定する前に乱数発生器にクロックを供給し、発振が安定してから乱数発生器以外の回路にクロックを供給するので、乱数発生器以外の回路が動作する前に鍵データを生成することができる。
【0012】
また、本発明の一実施形態による半導体集積回路1は、図1、図5に示すように、第二の発振回路4が、発振安定前にもクロックを供給する第三の出力端子SC1と、発振が安定してからクロックを供給する第四の出力端子SC2とを備え、第三の出力端子SC1が乱数発生器5に接続され、第四の出力端子SC2が乱数発生器以外の回路(8、10B)に接続されている。従って、乱数発生器以外の回路が動作を開始する前に暗号鍵を確定することができるので、乱数発生器以外の論理回路は、その暗号鍵を用いて暗号化することができる。
【0013】
また、本発明の一実施形態による半導体集積回路1は、図1に示すように、(乱数発生器5が生成した)乱数を暗号鍵に用いて暗号化してデータを出力する第一の機能ブロック(8または9)と、暗号化されたデータについて暗号鍵を用いて解読して入力する第二の機能ブロック(9または8)を含む。従って、半導体集積回路内のデータやプログラムの転送を暗号化して行うことができる。したがって、半導体集積回路内のデータバスの値を解析装置やICEなどのソフトウェアデバック装置を用いて取得できたとしても、半導体集積回路の内のデータやプログラムをハッキングすることはできない。
【0014】
また、本発明の一実施形態による半導体集積回路1は、図1に示すように、上記半導体集積回路1において、上記第一の機能ブロック(8または9の一方)が暗号化して出力するデータを第一のデータとしたときに、第二の機能ブロック(8または9の他方)が第二のデータを上記暗号鍵を用いて暗号化して出力し、第一の機能ブロックが暗号化された第二のデータについて暗号鍵を用いて解読して入力する。従って、第一の機能ブロック、第二の機能ブロックが共に同じ暗号を用いて入出力を行い、双方向のデータ入出力を暗号化して行うことができる。
【0015】
また、本発明の一実施形態による半導体集積回路1は、図1に示すように、上記論理回路がCPU8を含む。従って、CPUが入出力するデータについて暗号化することができる。
【0016】
また、本発明の一実施形態による半導体集積回路1は、図8、図9等に示すように、乱数発生器5が、第一の発振回路3からクロックが供給されるリニアフィードバックシフトレジスタ11を含み、リニアフィードバックシフトレジスタ11の出力を第二の発振回路4のクロックSC1に同期してラッチすることにより乱数を生成する。従って、リニアフィードバックレジスタの生成する擬似乱数を用いて乱数を生成するので、テストが比較的容易であり、かつ、乱数を生成するタイミングを第一、第二の発振回路の発振開始時間を用いて制御しているので、同じ暗号鍵を再現することが困難であり、ハッキングに対して強い暗号鍵を生成し、暗号化することができる。
【0017】
また、本発明の別な実施形態による半導体集積回路1は、図11〜図13に示すように、乱数発生器5が、第一の発振回路3の発振開始により動作を開始するリングオシレータ12と、リングオシレータの生成するクロックRCをカウントし、第二の発振回路4の発振開始により出力を確定するアドレスカウンタ(13、14)と、アドレスカウンタ(13、14)によってアドレスが指定され乱数を出力する乱数メモリ15と、を備える。従って、この実施形態によれば、乱数発生器5の発生する乱数は、第一、第二の発振回路の発振開始時間に加えて、リングオシレータの発振周波数にも依存することになる。従って、さらに再現性のない秘匿性の高い暗号鍵を生成することができる。
【0018】
また、本発明の一実施形態による半導体集積回路1は、図1を参照すると、第一の発振回路3は、第二の発振回路4より高い周波数で発振するように構成された発振回路である。なお、本発明において、第一の発振回路が、第二の発振回路より早く発振を開始するものであれば、かならずしも、上記構成に限定されるものではないが、上記構成によることにより、比較的容易に、確実に第一の発振回路が第二の発振回路より早く発振を開始する発振回路が得られる。
【0019】
また、本発明の一実施形態による半導体集積回路1は、第一、第二の発振回路は圧電振動子を用いた発振回路である。図1に示すように、半導体集積回路1の発振回路3、4の端子に圧電振動子を接続することにより、所定の周波数で発振する発振器が得られる。本発明は、上記構成に限定されないが、上記構成の発振回路を用いれば、圧電振動子を用いた発振回路は、発振開始まで時間を要し、発振開始までの時間が圧電振動子の発振周波数に大きく依存するので、容易に、本発明の乱数発生回路を構成することができる。また、発振開始までの時間は、発振回路や圧電振動子の個体差や周囲の環境によって変動し、再現性がないことから、ハッキングに対して強く、本発明の発振回路として好適である。
【0020】
また、本発明の一実施形態によるデータの暗号化装置19は、図1に示すように、第一、第二の発振器(3、4、圧電振動子、容量)と、第一の発振器の発振開始によって動作を開始し、第二の発振器の発振開始によって出力データを確定し、暗号鍵として出力する乱数発生器5と、を備えた暗号鍵生成器2と、暗号鍵生成器2が生成した暗号鍵を用いて暗号化してデータを出力し、上記暗号鍵を用いて暗号化されたデータを解読して入力する暗号処理部6と、を含む。従って、第一の発振器の発振開始によって動作を開始し、第二の発振器の発振開始によって出力データを確定し、暗号鍵として出力するので、比較的容易にハッキングに対して強い暗号化装置が得られる。
【0021】
また、本発明の一実施形態による暗号鍵生成器2は、図1に示すように、データを暗号化するための暗号鍵を生成する暗号鍵生成器2であって、第一の発振器(3、圧電振動子、容量)と、第二の発振器(4、圧電振動子、容量)と、第一の発振器の発振開始によって動作を開始し、第二の発振器の発振開始によって出力を確定し、前記暗号鍵として出力する乱数発生器5と、を備える。上記構成によれば、容易にハッキングできない暗号鍵生成器が得られる。
【0022】
また、本発明の一実施形態による暗号鍵の生成方法は、図1、図7に示すように、暗号化してデータを入出力する装置19に用いられる暗号鍵を第一の発振器(3、圧電振動子、容量)と第二の発振器(4、圧電振動子、容量)とを用いて生成する暗号鍵の生成方法であって、第一の発振器の発振開始により暗号鍵の生成を開始し(図7のステップS7)、第二の発振器の発振開始により暗号鍵を確定し(ステップS11)、確定した暗号鍵を用いて暗号化したデータを入出力する(ステップS14)。上記方法によれば、容易にハッキングできない暗号鍵を生成することができる。以下、上記実施形態について、実施例に即し、図面を参照してさらに詳しく説明する。
【実施例1】
【0023】
図1は、実施例1によるデータの暗号化装置全体の構成を示すブロック図である。図1のデータの暗号化装置19は、半導体集積回路1の半導体基板に形成されたメイン発振回路3、サブ発振回路4、乱数発生器5、CPU8、メモリ9、周辺回路(10A、10B)と、半導体集積回路1の圧電振動子接続端子(X1、X2、XT1、XT2)に接続された圧電振動子と容量から構成される。また、上記乱数発生器5と、メイン発振回路3、サブ発振回路4、及び圧電振動子、容量は、暗号鍵生成器2として機能する。
【0024】
上記メイン発振回路3には、例えば、50MHzなどの高周波で発振する圧電振動子が接続される。また、サブ発振回路4には、32KHzなどの低周波数で発振する圧電振動子が接続される。この例では、メイン発振回路3の発振周波数は、サブ発振回路4の発振周波数の1000倍以上高い周波数で発振することになる。メイン発振回路3には、発振が安定する前から出力される第一のメインクロック信号MC1と、発振が安定してから出力される第二のメインクロック信号MC2が備わっている。第一のメインクロック信号MC1は、乱数発生器5に接続され、第二のメインクロック信号MC2は、乱数発生器5以外の回路、具体的には、CPU8、メモリ9、周辺回路10Aへ出力されている。
【0025】
また、サブ発振回路4には、発振が安定する前から出力される第一のサブクロック信号SC1と、発振が安定してから出力される第二のサブクロック信号が備わっている。第一のサブクロック信号SC1は、乱数発生器5に接続され、第二のサブクロック信号SC2は、乱数発生器5以外の回路、具体的には、CPU8、周辺回路10Bへ出力されている。
【0026】
CPU8とメモリ9には、それぞれ暗号処理部6が設けられている。さらに、それぞれの暗号処理部6には、暗号鍵レジスタ7が設けられている。暗号鍵レジスタ7は、サブ発振回路4が発振を開始したときに乱数発生器5が出力する暗号鍵を格納する。CPU8に設けられた暗号処理部6は、CPUがバス18へ出力しようとするデータを暗号鍵レジスタ7に格納された暗号鍵を用いて暗号化して出力する。また、CPU8に設けられた暗号処理部6は、バス18上の暗号化されたデータを入力し、暗号鍵レジスタ7に格納された暗号鍵を用いて解読し、解読されたデータをCPU8へ伝える。
【0027】
同様に、メモリ9に設けられた暗号処理部6は、メモリから読み出されたデータを暗号鍵レジスタ7に格納された暗号鍵を用いて暗号化してバス18へ出力する。また、メモリ9に設けられた暗号処理部6は、バス18上の暗号化されたデータ、アドレスを入力し、暗号鍵レジスタ7に格納された暗号鍵を用いて解読し、解読されたアドレスへ解読されたデータを書き込む。なお、CPU8に設けられた暗号処理部6及び暗号鍵レジスタ7とメモリ9に設けられた暗号処理部6及び暗号鍵レジスタ7は同一の構成、機能を有している。
【0028】
図2は、実施例1における暗号化の具体例を示す図面である。図1の暗号処理部6には、暗号鍵に基づいて、ビットの並びを変更するセレクタ回路が含まれる。図2において、21は暗号する前のデータのビットの並びを示す。ここでは、16ビットのデータを入出力するものとする。22A、22Bはスクランブルして暗号化した後のデータである。(a)の例では、0〜15ビットの並びを暗号鍵レジスタ7に格納された暗号鍵1を用いて、6、2、0、1、4、3、7、5、14、10、8、9、12、11、15、13ビットの並びに並べ替えて暗号化されたデータ22Aとしている。また、(b)の例では、暗号鍵レジスタ7に格納された暗号鍵1が暗号鍵2に変わっていることが異なる。暗号鍵1と暗号鍵2は異なる値であるとする。(b)では、(a)と異なった暗号鍵を用いてスクランブルして暗号化しているので、(a)とはスクランブルした後のビットの並び順も異なっている。具体的には、(b)では、1、4、0、2、3、6、12、5、10、7、12、15、11、13、9、8ビットの並びに並べ替えて暗号化されたデータ22Bとしている。なお、この例では、単純にビット列を入れ替えているだけであるが、必要に応じてもっと高度な暗号化を行うこともできる。
【0029】
図3は、実施例1におけるメイン発振器(第一の発振器)の回路図である。メイン発振器23は、半導体集積回路1の半導体基板に形成されたメイン発振回路(第一の発振回路)3と半導体集積回路1の外部端子である圧電振動子接続端子X1、X2を介して半導体集積回路1の外部に取り付けられた圧電振動子17Aと容量C11、C12で構成される。メイン発振回路3の出力するクロック信号は半導体集積回路1のメインクロック信号となる。圧電振動子17Aは、水晶やセラミックなどの応力を与えると起電力を生じ、逆に電圧を印加すると応力が生じる圧電振動体で構成されており、その物理的な形状により、固有の周波数で発振する。ここでは、メイン発振器23に用いられる圧電振動子は50MHz程度の高周波の固有の周波数で発振するものとする。この圧電振動子17Aと圧電振動子17Aの両端とグランド電位との間に接続された容量C11、C12とメイン発振回路3内に設けられ、入力がX1端子、出力がX2端子に接続されたインバータI11とX1端子とX2端子との間に接続された帰還抵抗により、発振器の基本的な部分が構成される。また、インバータI11の出力信号はインバータI12、I13を介して第一のメインクロック信号MC1として乱数発生器5に接続される。
【0030】
また、インバータI11の出力信号はヒステリシス回路H11に接続され、ヒステリシス回路H11の出力信号はBF11〜BF13からなるバイナリカウンタに入力される。バイナリカウンタの出力となるBF13のQ出力は、ノア回路R11、R12で構成されるセットリセットフリップフロップのセット信号として入力される。このセットリセットフリップフロップの出力信号は、第一のメインクロック信号MC1とアンド回路A11により論理積が取られ、第二のメインクロック信号MC2として出力される。
【0031】
図4は、図3のメイン発振器(第一の発振器)の動作タイミングチャートである。図4における第一のリセット信号R1は半導体集積回路1に設けられるリセット端子から入力されるリセット信号やパワーオンリセット回路(図示せず)によりハイレベルとなる信号で、この第一のリセット信号R1はハイレベルになった後、クロックが入力されるのを待たずにすぐ解除されるリセット信号である。第一のリセット信号R1は時刻t11にローレベルとなり、バイナリフリップフロップBF11〜BF13、R11、R12で構成されるセットリセットフリップフロップ回路のリセット状態は解除される。
【0032】
圧電振動子17Aは、時刻t11の後、固有の発振周波数により微小な機械的な振動を開始する。するとその機械的な振動により起電力を生じる。インバータI21は入出力端子間に接続された帰還抵抗により、動作点にバイアスされているので、機械的な振動により生じた起電力を増幅する。インバータI11、容量C11、C12、圧電振動子17Aにより正帰還ループが形成され、起電力により生じたX2端子の電圧の振幅は徐々に拡大する。時刻t12になると、インバータI12、I13がX2端子に生じた電圧の変化に反応して反転するようになり、以後第一のメインクロック信号MC1としてクロック信号を出力する。しかし、この段階での発振回路は、まだ非常に不安定であり、一度開始した発振が一端停止したり、固有の振動周波数以外の周波数で振動をしたりすることもある。
【0033】
次に、t13になると、X2端子の振動はさらに拡大し、ヒステリシス回路H11もX2端子の振動に応答してクロックMCHを出力するようになる。ただし、ヒステリシス回路H11を経由することにより、クロックMCHの位相は、クロックMC1の位相から遅延を生じている。次に、時刻t14になり、バイナリフリップフロップBF11〜BF13がクロックMCHを4発カウントすると、BF13のQ出力がハイレベルとなり、R11とR12で構成されるセットリセットフリップフロップがセットされ、メインクロックアクティブ信号MCAがハイレベルとなる。この時刻になると、メイン発振器の発振は安定したものとなっている。メインクロックアクティブ信号MCAがハイレベルになると、アンド回路A11が開き、時刻t15から第二のメインクロック信号MC2が出力される。
【0034】
図5は、実施例1におけるサブ発振器(第二の発振器)の回路図である。サブ発振器24は、半導体集積回路1の半導体基板に形成されたサブ発振回路(第二の発振回路)4と半導体集積回路1の外部端子である圧電振動子接続端子XT1、XT2を介して半導体集積回路1の外部に取り付けられた圧電振動子17Bと容量C21、C22で構成される。サブ発振回路4の出力するクロック信号は半導体集積回路1のサブクロック信号となる。圧電振動子17Bは、圧電振動子17Aと同様に、水晶やセラミックなどの圧電振動体で構成されており、固有の周波数で発振する。なお、サブ発振器24は、32KHzの発振周波数で発振し、メイン発振器である第一の発振器の1000倍以上の周期で発振を行う。その他の回路構成は、発振周波数が大きく異なるものの、基本的な回路構成は、図3の第一の発振器とほぼ同一である。
【0035】
ただし、サブ発振器24では、第一のリセット信号R1によりリセットされ、メインクロックアクティブ信号MCA、サブクロックアクティブ信号SCAが共にアクティブとなったときにリセットされるフリップフロップ回路(ノア回路R23、R24)を備えており、そのフリップフロップ回路が、第二のリセット信号R2信号を出力する。
【0036】
図6は、図5のサブ発振器の動作タイミングチャートである。図4のタイミングチャートと同様に、第一のリセット信号R1は時刻t11でリセットされ、メインクロックアクティブ信号MCAは時刻t14で立ち上がる。圧電振動子17Bは、時刻t11の後、振動を開始するが、メイン発振器23の圧電振動子17Aより固有振動周波数が大幅に低いので、発振の成長も振動周波数に比例して遅い。従って、インバータI22、I23が、圧電振動子17Bの振動に反応してクロック信号を出力するタイミングは、メインクロックアクティブ信号MCAが立ち上がり、メイン発振器23が安定して発振するようになってからかなり後の時刻t22になる。その後、さらに発振が成長し、時刻t23では、ヒステリシス回路H21が反応してクロック信号を生成する。さらに、時刻t24で、ヒステリシス回路H21が出力するクロック信号を4発カウントしたところで、R21とR22で構成されるフリップフロップ回路から出力されるサブクロックアクティブ信号SCAがハイレベルに反転し、第二のリセット信号R2が解除されると共に、時刻t25から第二のサブクロック信号を出力する。
【0037】
図7は、実施例1における乱数発生器の制御フローチャートである。図7を用いて、乱数発生器の制御フローチャートについて説明する。まず、ステップS1で半導体集積回路1に電源が投入される。すると、半導体集積回路1のパワーオンリセット回路(図示せず)が機能し、システム全体を第一のリセット信号R1により、イニシャライズする。半導体集積回路1がパワーオンリセット回路を備えていない場合は、半導体集積回路1のリセット端子(図示せず)からリセット信号を入力し、システム全体を第一のリセット信号R1によりイニシャライズする。第一のリセット信号R1は、パワーオンリセット回路のリセット終了によりステップS2ですぐ解除する。
【0038】
次に、ステップS3では、メイン発振器の発振を起動させる、ただし、この時点では、発振が開始しているとしてもまだ、微小な発振であるので、発振は安定しておらず、ステップ5からステップS6へ進む。また、ステップS4では、サブ発振器について発振を起動させる。
【0039】
ステップS6では、微小な発振にインバータI12、I13に反応して第一のメインクロックMC1が出力されるまで待つ。第一のメインクロックMC1が出力されるようになったならば、ステップS7へ進み、乱数発生器を起動させ、乱数の発生を開始する。さらに、ステップS10、S8で、乱数発生器を動作させて乱数を発生させながら、サブ発振器が発振を開始して、第一のサブクロックSC1が出力されるのを待つ。第一のサブクロックSC1が出力されたところで乱数発生器が出力する暗号鍵を確定する(ステップS11)。ステップS12では、確定した暗号鍵を出力する。最後に、メインクロック、サブクロック、共に安定してクロックを出力するようになり、暗号鍵が確定すると、ステップS14に進み、確定した暗号鍵を用いて、暗号処理の実行を開始する。以上の手順によれば、半導体集積回路が実際に動作を開始し、情報処理を開始するのは、メイン発振器、サブ発振器が安定して発振を開始するようになってからであるので、情報処理の開始までに、暗号鍵は確定しており、その暗号鍵を用いて暗号化してデータの入出力を行うことができる。
【0040】
また、乱数発生器5は、第一の発振器(メイン発振器)の発振開始によって乱数の発生
を開始し、第二の発振器(サブ発振器)の発振開始により暗号鍵として用いる乱数を確定する乱数発生器5は同様な構成であってもよい。
【実施例2】
【0041】
図8と図9は、実施例2の乱数発生器の回路図である。この実施例2の乱数発生器は、実施例1の半導体集積回路1における乱数発生器5として用いることができる。図8は、実施例2の乱数発生器における乱数発生部の回路図である。図8には、乱数発生器5の乱数発生部と、暗号鍵レジスタ7が記載されている。乱数発生器5には、リニアフィードバックシフトレジスタ(LFSR)11とリニアフィードバックシフトレジスタ11の出力を保持するデータフリップフロップDF41〜DF50が含まれる。この図8では、暗号鍵レジスタ7もデータフリップフロップで構成している。リニアフィードバックシフトレジスタ11は、必要に応じて、何ビットの構成でもよいし、また、具体的な構成も自由に選択することができる。ここでは、リニアフィードバックレジスタ11は、10個のデータフリップフロップ(DF31〜DF40)とエクスクルーシブノア回路X31で構成される10ビットのリニアフィードバックレジスタである。また、リニアフィードバックレジスタの各ビットの出力にはデータフリップフロップDF41〜DF50が設けられている。このデータフリップフロップは、リニアフィードバックシフトレジスタの各ビットの値を保持し、リニアフィードバックシフトレジスタ11が発生する擬似乱数の値を確定する。暗号鍵レジスタ7は乱数発生器が確定した擬似乱数の値を暗号鍵として格納し、この暗号鍵に基づいて、暗号化処理や暗号化されたデータの復号処理を行う。なお、暗号鍵レジスタは、半導体集積回路1内に複数の暗号処理部6が設けられる場合には、各暗号処理部にそれぞれに設ける。
【0042】
図9は、実施例2の乱数発生器5のうち、制御部の構成を示す回路図である。図9の制御部は、第一のメインクロック、第一のサブクロックから、暗号鍵を確定する信号KFと、確定した暗号鍵データを暗号鍵レジスタ7に格納する制御信号KLを生成する。データフリップフロップDF61、DF62、アンド回路61は、第一のサブクロックの最初の立ち上がりを第一のメインクロックの立ち上がりに同期して捉え、暗号鍵を確定する信号KFを生成する。また、アンド回路A62とデータフリップフロップDF63〜65、R61、R62からなるセットリセットフリップフロップは、上記制御信号KLを生成すると共に、暗号鍵を暗号鍵レジスタに格納した後、リニアフィードバックシフトレジスタ11の出力を初期化する第三のリセット信号R3を出力する。
【0043】
図10は、第二の実施例の詳細なタイミングチャートである。図10のタイミングチャートにおいて、時刻t22で第一のサブクロックSC1がローレベルからハイレベルに立ち上がる。この時刻t22は、図6の時刻t22と同一の時刻である。第一のサブクロックSC1が時刻t22で立ち上がると、その後の最初の第一のメインクロックMC1の立ち上がり(時刻t31)でデータフリップフロップDDF61のQ出力がローレベルからハイレベルに立ち上がる。その立ち上がりに同期して、暗号鍵を確定する信号KFがローレベルからハイレベルに立ち上がる。次の第一のメインクロックMC1の立下り(時刻t32)で暗号鍵データを暗号鍵レジスタに格納する制御信号KLをローレベルからハイレベルに立ち上げる。さらに、次の第一のメインクロックの立ち上がり(時刻t33)でデータフリップフロップDDF61のQ出力がハイレベルとなるので、暗号鍵を確定する信号KFがハイレベルからローレベルに立ち下がり、乱数発生器5が出力暗号鍵を確定し、暗号鍵レジスタ7へ向けて出力する。さらに次の第一のメインクロックの立下り(時刻t34)で暗号鍵レジスタに暗号鍵を取り込むタイミングを決める制御信号KLがハイレベルからローレベルに立ち下がり、暗号鍵レジスタ7に暗号鍵を取り込む。さらに、次の第一のメインクロックの立ち上がり(時刻t35)で、R61、R62で構成されるセットリセットフリップフロップがセットされて第三のリセット信号R3がローレベルからハイレベルに立ち上がる。すると、データフリップフロップDF41〜DF50はリセットされ、乱数発生器の出力する暗号鍵はリセットされる。ただし、この第三のリセット信号R3は、暗号鍵レジスタ7のリセット信号とはなっていないので、暗号鍵レジスタに格納された暗号鍵はそのまま保持され、その暗号鍵レジスタに保持されている暗号鍵を用いて、暗号化してデータの入出力を行うことができる。
【実施例3】
【0044】
乱数発生器5は、実施例2以外にも様々な構成が考えられる。実施例3は、乱数発生回路にリングオシレータと乱数メモリを用いる実施例である。図11〜図13に実施例3の乱数発生器の回路図を示す。図11は実施例3における乱数発生器のリングオシレータ部の回路図である。図11のリングオシレータ部は、第一のメインクロックを分周するバイナリフリップフロップBF71と、R71とR72で構成されるセットリセットフリップフロップと、リングオシレータ12で構成される。第一のリセット信号R1が立ち下がった後の最初の第一のメインクロック信号の立下りにより、バイナリフリップフロップBF71のQは立ち上がる。すると、R71とR72で構成されるフリップフロップ回路がセットされ、リングオシレータ12の発振を起動させる。リングオシレータ12は、リングオシレータのクロック信号RCを出力する。
【0045】
図12は、実施例3の乱数発生器における乱数発生部の回路図である。乱数発生部は、リングオシレータのクロック信号RCをカウントし、乱数メモリ15のアドレスカウンタの機能を果たすバイナリカウンタ13と、バイナリカウンタ13の出力をラッチして乱数メモリのアドレスとするアドレスラッチ14と、乱数メモリ15と、乱数メモリの出力する暗号鍵を一時的にラッチする暗号鍵出力ラッチ16と、暗号鍵出力ラッチ16の出力データを暗号鍵として保持する暗号鍵レジスタ7を含んでいる。なお、暗号鍵レジスタ7は、乱数発生器5内部の構成ではなく、暗号処理部6内部の構成であるが、乱数発生器5と密接な関係があるため、図12に記載している。
【0046】
図13は、実施例3の乱数発生器における制御部の回路図である。図13の制御部は、図12の乱数発生部の制御信号を生成する回路である。図13には、第一のサブクロックの最初の立ち上がりエッジを第一のメインクロックに同期して捉える回路(DF81、DF82、A81、R81、R82)と、サブクロックの最初の立ち上がりエッジを捉えた後、リングオシレータの立ち上がりを第一のメインクロックに同期して捉え、乱数メモリ15の入力アドレスを確定する回路(DF83、DF84、A83)と、乱数メモリが出力する暗号鍵出力ラッチ16にラッチする信号KFAと暗号鍵出力ラッチ16が出力するめ暗号鍵を暗号鍵レジスタ7にラッチする制御信号KLAと第三のリセット信号RCを生成する回路を備えている。第三のリセット信号RCは、暗号鍵レジスタに暗号鍵をラッチした後、暗号鍵出力ラッチ16の暗号鍵データをクリアしてリセットする信号である。
【0047】
図14は、実施例3の乱数発生器の動作タイミングチャートである。図14では、パワーリセット後に、すでに第一のメインクロックの発振が開始され、リングオシレータも動作しているが、サブクロックの発振がまだ始まっていない状態からスタートしている。図14に示すように、第一のメインクロック信号MC1とリングオシレータのクロック信号RC、第一のサブクロックSC1はそれぞれ非同期のクロックである。
図14では、時刻t81で、第一のサブクロックSC1が最初に立ち上がるところから動作がスタートする。第一のサブクロックSC1が立ち上がると、その後の最初の第一のメインクロックMC1の立下り(時刻t82)でデータフリップフロップDF81のQ出力が立ち上がり、アンド回路A81の出力がハイレベルになることから、R81、R82で構成されるセットリセットフリップフロップがセットされ、アンド回路A82より第一のメインクロックMC1に同期したクロックが出力されるようになる。次に、リングオシレータクロックRCの立ち上がりをアンド回路A82の出力クロックに同期してデータフリップフロップDF83とDF84で捉え、時刻t85から時刻t86までアドレスラッチ信号ALをハイレベルにする。アドレスラッチ14は、アドレスラッチ信号ALの立ち下がり(時刻t86)でバイナリカウンタ13の出力データをラッチし、乱数メモリ15の入力アドレスを確定し、乱数メモリのデータを暗号鍵出力ラッチ16へ読み出す。暗号鍵出力ラッチ16は、時刻t86から時刻t87までハイレベルとなる暗号鍵を確定する信号KFAの立ち下がりに同期して乱数メモリのデータを暗号鍵としてラッチする。
【0048】
さらに、暗号鍵レジスタ7のラッチ信号KLAが、時刻t87から時刻t88までハイレベルとなり、暗号鍵出力ラッチの出力する暗号鍵データを取り込み、ラッチ信号KLAが立ち下がる時刻t88までに確定させる。また、時刻t88では、第三のリセット信号R3が立ち上がり、暗号鍵出力ラッチ16のデータはリセットされる。しかし、暗号鍵レジスタ7は、第三のリセット信号R3によってはリセットされないので、暗号鍵のデータを保持する。従って、時刻t88以降、暗号鍵レジスタ7に保持されている暗号鍵を用いて、暗号化してデータの入出力を行うことができる。
【0049】
なお、実施例1では、CPU8とメモリ9に共に暗号処理部を設け、CPU8がメモリ9にデータを書き込む場合、CPU8内の暗号処理部で書き込みデータを暗号化してメモリ9へ出力し、メモリ9は暗号化されたデータを暗号処理部によって復号してからメモリ9内へ格納している。また、CPU8がメモリ9からデータを読み出す場合、メモリ9内の暗号処理部でメモリのデータを暗号化してからバス18へ出力し、CPU8は、メモリ9が出力する暗号化されたデータを暗号処理部により復号して入力する。
【0050】
しかし、メモリ9側でデータの加工を行わず、CPU8が書き込んだデータをメモリ9に書き込み、そのデータをCPUが読み出すだけであるならば、暗号処理部6は、CPU8だけに設け、メモリ9には、必ずしも設けなくともよい。すなわち、CPUはメモリ9に書き込みデータを暗号化してバス18へ出力し、メモリ9は、その暗号化されたデータを暗号化されたままメモリ9に格納し、CPUはその暗号化されたメモリのデータをそのまま読み出し、CPUの側で暗号化されたデータを復号して取り込むことができる。この場合、メモリは半導体集積回路1の外部にあってもよい。暗号鍵をメモリに送る必要がないからである。
【0051】
また、実施例1では、暗号化してデータの入出力するマクロがメモリ9のみであったが、メモリ9以外の周辺回路とCPUとの間のデータ入出力、又は周辺回路間のデータ入出力を暗号化して行ってもよい。この場合、周辺回路の内部にも暗号処理部6を設け、さらにその暗号処理部6には、暗号鍵レジスタ7を設ける必要がある。
【0052】
以上、本発明を実施例に即して説明したが、本発明は上記実施例の構成にのみ制限されるものでなく、本発明の範囲内で当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【図面の簡単な説明】
【0053】
【図1】本発明の一実施例によるデータの暗号化装置全体の構成を示すブロック図である。
【図2】本発明の一実施例における暗号化の具体例を示す図面である。
【図3】本発明の一実施例における第一の発振器の回路図である。
【図4】本発明の一実施例における第一の発振器のタイミングチャートである。
【図5】本発明の一実施例における第二の発振器の回路図である。
【図6】本発明の一実施例における第二の発振器のタイミングチャートである。
【図7】本発明の一実施例における乱数発生器の制御フローチャートである。
【図8】本発明の一実施例における乱数発生器(乱数発生部)の回路図である。
【図9】本発明の一実施例における乱数発生器(制御部)の回路図である。
【図10】本発明の一実施例における乱数発生器の動作タイミングチャートである。
【図11】本発明の別な実施例における乱数発生器(リングオシレータ部)の回路図である。
【図12】本発明の別な実施例における乱数発生器(乱数発生部)の回路図である。
【図13】本発明の別な実施例における乱数発生器(制御部)の回路図である。
【図14】本発明の別な実施例における乱数発生器の動作タイミングチャートである。
【符号の説明】
【0054】
1:半導体集積回路
2:暗号鍵生成器
3:メイン発振回路(第一の発振回路)
4:サブ発振回路(第二の発振回路)
5:乱数発生器
6:暗号処理部
7:暗号鍵レジスタ
8:CPU
9:メモリ
10A、10B:周辺回路
11:リニアフィードバックシフトレジスタ(LFSR)
12:リングオシレータ
13:バイナリカウンタ
14:アドレスラッチ
15:乱数メモリ
16:暗号鍵出力ラッチ
17A、17B:圧電振動子
18:バス
19:データの暗号化装置
21:暗号化前のデータ(復号されたデータ)
22A、22B:暗号化されたデータ(復号する前のデータ)
23:メイン発振器(第一の発振器)
24:サブ発振器(第二の発振器)
A11、A21、A22、A61、A62、A81、A82、A83:アンド回路
A71:ナンド回路
BF11〜BF13、BF21〜BF23、BF71:バイナリフリップフロップ
C11、C12、C21、C22:容量
DF31〜DF65、DF81〜DF87:データフリップフロップ
H11、H21:ヒステリシス回路
I11〜I13、I21〜I23:インバータ回路
O81:オア回路
R11、R12、R21〜R24、R61、R62、R71、R72、R81、R82:ノア回路
X31:エクスクルーシブノア回路
【特許請求の範囲】
【請求項1】
第一の発振回路と、
第二の発振回路と、
前記第一の発振回路の発振開始によって動作を開始し、前記第二の発振回路の発振開始によって出力を確定する乱数発生器と、
前記乱数発生器の出力する乱数を暗号鍵に用いて暗号化してデータを出力し、前記乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路と、
を有することを特徴とする半導体集積回路。
【請求項2】
前記第一の発振回路が、発振安定前にもクロックを供給する第一の出力端子と、発振が安定してからクロックを供給する第二の出力端子とを備え、前記第一の出力端子が前記乱数発生器に接続され、前記第二の出力端子が前記乱数発生器以外の回路に接続されていることを特徴とする請求項1記載の半導体集積回路。
【請求項3】
前記第二の発振回路が、発振安定前にもクロックを供給する第三の出力端子と、発振が安定してからクロックを供給する第四の出力端子とを備え、前記第三の出力端子が前記乱数発生器に接続され、前記第四の出力端子が前記乱数発生器以外の回路に接続されていることを特徴とする請求項1又は2記載の半導体集積回路。
【請求項4】
前記論理回路は前記乱数を暗号鍵に用いて暗号化してデータを出力する第一の機能ブロックと、前記暗号化されたデータについて前記暗号鍵を用いて解読して入力する第二の機能ブロックを含むことを特徴とする請求項1乃至3いずれか1項記載の半導体集積回路。
【請求項5】
前記データを第一のデータとしたときに、前記第二の機能ブロックが第二のデータを前記暗号鍵を用いて暗号化して出力し、前記第一の機能ブロックが前記暗号化された第二のデータについて前記暗号鍵を用いて解読して入力することを特徴とする請求項4記載の半導体集積回路。
【請求項6】
前記論理回路は、CPUを含むことを特徴とする請求項1乃至5いずれか1項記載の半導体集積回路。
【請求項7】
前記乱数発生器が、前記第一の発振回路からクロックが供給されるリニアフィードバックシフトレジスタを含み、前記リニアフィードバックシフトレジスタの出力を前記第二の発振回路のクロックに同期してラッチすることにより前記乱数を生成することを特徴とする請求項1乃至6いずれか1項記載の半導体集積回路。
【請求項8】
前記乱数発生器が、前記第一の発振回路の発振開始により動作を開始するリングオシレータと、前記リングオシレータの生成するクロックをカウントし、前記第二の発振回路の発振開始により出力を確定するアドレスカウンタと、前記アドレスカウンタによってアドレスが指定され、前記乱数を出力する乱数メモリと、を備えたことを特徴とする請求項1乃至6いずれか1項記載の半導体集積回路。
【請求項9】
前記第一の発振回路は、前記第二の発振回路より高い周波数で発振するように構成された発振回路であることを特徴とする請求項1乃至8いずれか1項記載の半導体集積回路。
【請求項10】
前記第一、第二の発振回路は圧電振動子を用いた発振回路であることを特徴とする請求項1乃至9いずれか1項記載の半導体集積回路。
【請求項11】
第一、第二の発振器と、前記第一の発振器の発振開始によって動作を開始し、前記第二の発振器の発振開始によって出力データを確定し、暗号鍵として出力する乱数発生器と、を備えた暗号鍵生成器と、
前記暗号鍵を用いて暗号化してデータを出力し、前記暗号鍵を用いて暗号化されたデータを解読して入力する暗号処理部と、
を含むことを特徴とするデータの暗号化装置。
【請求項12】
データを暗号化するための暗号鍵を生成する暗号鍵生成器であって、
第一の発振器と、
第二の発振器と、
前記第一の発振器の発振開始によって動作を開始し、前記第二の発振器の発振開始によって出力を確定し、前記暗号鍵として出力する乱数発生器と、
を備えたことを特徴とする暗号鍵生成器。
【請求項13】
暗号化してデータを入出力する装置に用いられる暗号鍵を第一の発振器と第二の発振器とを用いて生成する暗号鍵の生成方法であって、前記第一の発振器の発振開始により暗号鍵の生成を開始し、前記第二の発振器の発振開始により暗号鍵を確定し、前記確定した暗号鍵を用いて暗号化したデータを入出力することを特徴とする暗号鍵の生成方法。
【請求項1】
第一の発振回路と、
第二の発振回路と、
前記第一の発振回路の発振開始によって動作を開始し、前記第二の発振回路の発振開始によって出力を確定する乱数発生器と、
前記乱数発生器の出力する乱数を暗号鍵に用いて暗号化してデータを出力し、前記乱数を暗号鍵に用いて暗号化されたデータを解読して入力する論理回路と、
を有することを特徴とする半導体集積回路。
【請求項2】
前記第一の発振回路が、発振安定前にもクロックを供給する第一の出力端子と、発振が安定してからクロックを供給する第二の出力端子とを備え、前記第一の出力端子が前記乱数発生器に接続され、前記第二の出力端子が前記乱数発生器以外の回路に接続されていることを特徴とする請求項1記載の半導体集積回路。
【請求項3】
前記第二の発振回路が、発振安定前にもクロックを供給する第三の出力端子と、発振が安定してからクロックを供給する第四の出力端子とを備え、前記第三の出力端子が前記乱数発生器に接続され、前記第四の出力端子が前記乱数発生器以外の回路に接続されていることを特徴とする請求項1又は2記載の半導体集積回路。
【請求項4】
前記論理回路は前記乱数を暗号鍵に用いて暗号化してデータを出力する第一の機能ブロックと、前記暗号化されたデータについて前記暗号鍵を用いて解読して入力する第二の機能ブロックを含むことを特徴とする請求項1乃至3いずれか1項記載の半導体集積回路。
【請求項5】
前記データを第一のデータとしたときに、前記第二の機能ブロックが第二のデータを前記暗号鍵を用いて暗号化して出力し、前記第一の機能ブロックが前記暗号化された第二のデータについて前記暗号鍵を用いて解読して入力することを特徴とする請求項4記載の半導体集積回路。
【請求項6】
前記論理回路は、CPUを含むことを特徴とする請求項1乃至5いずれか1項記載の半導体集積回路。
【請求項7】
前記乱数発生器が、前記第一の発振回路からクロックが供給されるリニアフィードバックシフトレジスタを含み、前記リニアフィードバックシフトレジスタの出力を前記第二の発振回路のクロックに同期してラッチすることにより前記乱数を生成することを特徴とする請求項1乃至6いずれか1項記載の半導体集積回路。
【請求項8】
前記乱数発生器が、前記第一の発振回路の発振開始により動作を開始するリングオシレータと、前記リングオシレータの生成するクロックをカウントし、前記第二の発振回路の発振開始により出力を確定するアドレスカウンタと、前記アドレスカウンタによってアドレスが指定され、前記乱数を出力する乱数メモリと、を備えたことを特徴とする請求項1乃至6いずれか1項記載の半導体集積回路。
【請求項9】
前記第一の発振回路は、前記第二の発振回路より高い周波数で発振するように構成された発振回路であることを特徴とする請求項1乃至8いずれか1項記載の半導体集積回路。
【請求項10】
前記第一、第二の発振回路は圧電振動子を用いた発振回路であることを特徴とする請求項1乃至9いずれか1項記載の半導体集積回路。
【請求項11】
第一、第二の発振器と、前記第一の発振器の発振開始によって動作を開始し、前記第二の発振器の発振開始によって出力データを確定し、暗号鍵として出力する乱数発生器と、を備えた暗号鍵生成器と、
前記暗号鍵を用いて暗号化してデータを出力し、前記暗号鍵を用いて暗号化されたデータを解読して入力する暗号処理部と、
を含むことを特徴とするデータの暗号化装置。
【請求項12】
データを暗号化するための暗号鍵を生成する暗号鍵生成器であって、
第一の発振器と、
第二の発振器と、
前記第一の発振器の発振開始によって動作を開始し、前記第二の発振器の発振開始によって出力を確定し、前記暗号鍵として出力する乱数発生器と、
を備えたことを特徴とする暗号鍵生成器。
【請求項13】
暗号化してデータを入出力する装置に用いられる暗号鍵を第一の発振器と第二の発振器とを用いて生成する暗号鍵の生成方法であって、前記第一の発振器の発振開始により暗号鍵の生成を開始し、前記第二の発振器の発振開始により暗号鍵を確定し、前記確定した暗号鍵を用いて暗号化したデータを入出力することを特徴とする暗号鍵の生成方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【公開番号】特開2010−134248(P2010−134248A)
【公開日】平成22年6月17日(2010.6.17)
【国際特許分類】
【出願番号】特願2008−310958(P2008−310958)
【出願日】平成20年12月5日(2008.12.5)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】
【公開日】平成22年6月17日(2010.6.17)
【国際特許分類】
【出願日】平成20年12月5日(2008.12.5)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】
[ Back to top ]