(57)【要約】【課題】短時間でランダム性の高い乱数生成を実現する乱数生成装置を提供する。【解決手段】インバータまたはＮＡＮＤ素子を複数、直列接続した複数のインバータチェーンと、複数のインバータチェーン各々の出力を入力して入力値に対する排他的論理和（ＸＯＲ）演算を実行するＸＯＲ素子と、ＸＯＲ素子の出力を、サンプリングクロックに応じて出力する出力制御部を有し、ＸＯＲ素子の生成したＸＯＲ演算結果を複数のインバータチェーンにフィードバック入力し、出力制御部の出力信号を乱数として出力する。この構成により、高速な発振周期を持つＸＯＲ素子出力に基づいて短時間でランダム性の高い乱数の生成、出力を行うことが可能となる。【選択図】図３
2013182097.tif 000002
【特許請求の範囲】
【請求項１】
インバータまたはＮＡＮＤ素子を複数、直列接続した複数のインバータチェーンと、
前記複数のインバータチェーン各々の出力を入力して、入力値に対する排他的論理和（ＸＯＲ）演算を実行する排他的論理和（ＸＯＲ）素子と、
前記排他的論理和（ＸＯＲ）素子の出力を、サンプリングクロックに応じて出力する出力制御部を有し、
前記排他的論理和（ＸＯＲ）素子の生成した排他的論理和（ＸＯＲ）演算結果を前記複数のインバータチェーンにフィードバック入力し、前記出力制御部の出力信号を乱数として出力する乱数生成装置。
【請求項２】
前記複数のインバータチェーンは、
奇数個のインバータまたはＮＡＮＤ素子を直列接続した奇数段インバータチェーンを奇数本有する構成である請求項１に記載の乱数生成装置。
【請求項３】
前記複数のインバータチェーンは、
奇数本の奇数段インバータチェーンのみによって構成されている請求項２に記載の乱数生成装置。
【請求項４】
前記複数のインバータチェーンは、
奇数本の奇数段のインバータチェーンと、偶数個のインバータまたはＮＡＮＤ素子を直列接続した偶数段インバータチェーンを１本以上有する構成である請求項２に記載の乱数生成装置。
【請求項５】
前記出力制御部は、
前記前記排他的論理和（ＸＯＲ）素子の出力と、サンプリングクロック信号を入力して前記前記排他的論理和（ＸＯＲ）素子の出力を、サンプリングクロックに応じて出力するＤ型フリップフロップ（ＤＦＦ）である請求項１に記載の乱数生成装置。
【請求項６】
前記複数のインバータチェーンの構成素子は、ＮＡＮＤ素子を含まないインバータのみによって構成されている請求項１に記載の乱数生成装置。
【請求項７】
前記複数のインバータチェーンの構成素子は、前記ＸＯＲ素子からのフィードバック入力と、発振制御信号の２つの入力部を持つＮＡＮＤ素子を含む構成である請求項１に記載の乱数生成装置。
【請求項８】
前記複数のインバータチェーンの構成素子は、インバータからの入力と発振制御信号の２つの入力部を持つＮＡＮＤ素子を含む構成である請求項１に記載の乱数生成装置。
【請求項９】
前記複数のインバータチェーンの一部のインバータまたはＮＡＮＤ素子は、複数のインバータチェーンの共有構成である請求項１に記載の乱数生成装置。
【請求項１０】
前記複数のインバータチェーンの一部のインバータまたはＮＡＮＤ素子の共有構成は、多段多分木の構成法に従って構成されている請求項９に記載の乱数生成装置。
【請求項１１】
前記請求項１〜１０いずれかの構成を有する乱数生成部と、
前記乱数生成部の生成した乱数を適用した暗号処理を実行する暗号処理部と、
を有する暗号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、乱数生成装置、および暗号処理装置に関する。
【背景技術】
【０００２】
電子マネーや有料コンテンツ、個人情報等を取り扱う半導体集積回路（ＩＣ）においては、暗号化や署名、認証といった、各種セキュリティ機能を実現することが必要不可欠である。また、このようなセキュリティ機能を安全かつ適切に利用するためには乱数の存在が必要不可欠であるため、乱数生成機能もまた、ＩＣ上に実装されることが多い。
【０００３】
ＩＣ上で乱数を生成するための主な手法として、擬似乱数生成装置を利用した手法が知られている。
擬似乱数生成装置とは、ある入力値（ＳＥＥＤ）を特定のアルゴリズムに従って処理することにより、統計学的な観点から真の乱数と見分けがつきにくい値（擬似乱数）を出力するものである。
【０００４】
ここで、擬似乱数を生成するためのアルゴリズムは確定的アルゴリズムであるため、入力値（ＳＥＥＤ）が同じであれば、同一の擬似乱数系列を出力する。しかしながら、セキュリティの用途に擬似乱数を用いる場合、ＩＣ毎及び擬似乱数生成毎に出力される値が異なり、かつある出力値から次の出力値が予想できないことが必要となる。
このため、通常はＩＣに書き換え可能な不揮発性メモリを実装し、ＩＣ製造時にＩＣ毎に異なる入力値（ＳＥＥＤ）を書き込み、ＩＣ毎に異なる値の乱数出力を実現させている。
また、擬似乱数の生成処理毎に入力値（ＳＥＥＤ）を更新することで、擬似乱数を生成する処理毎に出力値を変更可能とした構成もある。
【０００５】
しかしながら、ＩＣ上に書き換え可能な不揮発性メモリを搭載することはＩＣコストの増大を招く。さらに、不揮発性メモリの書き換え回数には上限があり、乱数生成処理毎に書き換えを実行すると、メモリの劣化により耐用期間が短くなるという問題がある。
【０００６】
このような問題を解決するため、乱数生成時における入力値（ＳＥＥＤ）を利用することなく、ＩＣ毎かつ乱数生成毎に異なる値を出力可能とする構成が望ましい。
すなわち、入力値（ＳＥＥＤ）を利用することなく十分なランダム性を有する乱数出力を可能とした乱数生成装置（エントロピー源）の実現が望まれている。
【０００７】
ＩＣ上に実装可能な代表的な乱数生成装置（エントロピー源）としては、リングオシレータ（ＲＯ：Ｒｉｎｇ  Ｏｓｃｉｌｌａｔｏｒ）を利用したものがある。
リングオシレータ（ＲＯ）は、奇数個のインバータを直列接続したインバータチェーンにおいて、チェーンの末尾（最終段）における出力を、チェーンの先頭（１段目）における入力へとＲｉｎｇ状に接続することにより、出力を一定の周期で発振させるものである。
【０００８】
リングオシレータ（ＲＯ）の発振周期は、主に各インバータ及び配線における遅延値とチェーンを構成するインバータの個数（段数）、電圧、温度によって大まかに決定される。
しかしながら、実際にリングオシレータ（ＲＯ）を稼働させた場合、信号がＨｉｇｈからＬｏｗあるいはＬｏｗからＨｉｇｈに変化する変化位置（エッジ）がインバータを経由するたびに、温度、電圧、ランダムノイズ等の影響によりずれるという現象が発生する。すなわち、インバータの信号伝達に掛る時間の変化が発生する。これをジッタという。
リングオシレータ（ＲＯ）を用いた乱数生成装置は、主にこのジッタのランダム性を利用して出力をランダムな値に設定することを実現している。
【０００９】
リングオシレータ（ＲＯ）を利用した乱数生成装置の最も基本的な構成としては、例えば、非特許文献１（Ｒ．Ｃ．Ｆａｉｒｆｉｅｌｄ，Ｒ．Ｌ．Ｍｏｒｔｅｎｓｏｎ，ａｎｄ  Ｋ．Ｂ．Ｃｏｕｌｔｈａｔ，"Ａｎ  ＬＳＩ  Ｒａｎｄｏｍ  Ｎｕｍｂｅｒ  Ｇｅｎｅｒａｔｏｒ（ＲＮＧ），"Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＣＲＹＰＴＯ'８４  ｏｎ  Ａｄｖａｎｃｅｓ  ｉｎ  Ｃｒｙｐｔｏｌｏｇｙ．ｐｐ．２０３−２３０，１９８４．）に記載の構成がある。
【００１０】
この文献に記載の方式は、リングオシレータ（ＲＯ）を一定期間発振させた後、サンプリングクロック（ｓａｍｐｌｉｎｇ  ｃｌｏｃｋ）と呼ばれる一定周期の発振を利用してその出力値をＤタイプフリップフロップ（ＤＦＦ：Ｄ−ｔｙｐｅ  Ｆｌｉｐ−Ｆｌｏｐ）により取得（ｓａｍｐｌｉｎｇ）する構成である。
このような構成により、設計上同一の発振周期となるリングオシレータ（ＲＯ）を用いた場合であっても、実稼働時においては、ジッタの影響により発振にずれが生じ、サンプリング時の出力値０，１をランダムに変更することが可能となる。
【００１１】
このように、リングオシレータ（ＲＯ）を利用した乱数生成装置の基本構成では、ジッタのランダムな振る舞いによって、出力として取得する乱数値であるサンプリング時の０，１のランダムな変化を実現している。
【００１２】
しかしながら、現実的には、リングオシレータ（ＲＯ）を稼働させた場合、信号の変化（ｅｄｇｅ）がインバータを経由する際に発生するジッタ量は微量であるため、サンプリング結果としての出力乱数の値である０，１をランダムに変更させるためには、蓄積したジッタ量がサンプリング位置を十分に変動させうるまで待たなければならない。
【００１３】
結果として、上記の文献に記載の方式を適用しても、十分なエントロピーを有する乱数出力を得るためには、リングオシレータ（ＲＯ）の発振周期に対してサンプリング周期を十分に長くする必要がある。
これは即ち、十分なランダム性を有する乱数出力を取得するために長い時間を要することを意味する。
【００１４】
具体的には、実装するデバイスに依存するが、サンプリング周期を発振周期の数千倍から数万倍程度に設定する必要があるため、十分なランダム性を持つ乱数取得には長い時間が必要となってしまうという問題点がある。
【先行技術文献】
【非特許文献】
【００１５】
【非特許文献１】Ｒ．Ｃ．Ｆａｉｒｆｉｅｌｄ，Ｒ．Ｌ．Ｍｏｒｔｅｎｓｏｎ，ａｎｄ  Ｋ．Ｂ．Ｃｏｕｌｔｈａｔ，"Ａｎ  ＬＳＩ  Ｒａｎｄｏｍ  Ｎｕｍｂｅｒ  Ｇｅｎｅｒａｔｏｒ（ＲＮＧ），"Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＣＲＹＰＴＯ'８４  ｏｎ  Ａｄｖａｎｃｅｓ  ｉｎ  Ｃｒｙｐｔｏｌｏｇｙ．ｐｐ．２０３−２３０，１９８４．
【発明の概要】
【発明が解決しようとする課題】
【００１６】
本開示は、例えば上述の状況に鑑みてなされたものであり、より短い時間でランダム性の高い乱数出力を実現する乱数生成装置、および乱数生成部を有する暗号処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本開示の第１の側面は、
インバータまたはＮＡＮＤ素子を複数、直列接続した複数のインバータチェーンと、
前記複数のインバータチェーン各々の出力を入力して、入力値に対する排他的論理和（ＸＯＲ）演算を実行する排他的論理和（ＸＯＲ）素子と、
前記排他的論理和（ＸＯＲ）素子の出力を、サンプリングクロックに応じて出力する出力制御部を有し、
前記排他的論理和（ＸＯＲ）素子の生成した排他的論理和（ＸＯＲ）演算結果を前記複数のインバータチェーンにフィードバック入力し、前記出力制御部の出力信号を乱数として出力する乱数生成装置にある。
【００１８】
さらに、本開示の乱数生成装置の一実施態様において、前記複数のインバータチェーンは、奇数個のインバータまたはＮＡＮＤ素子を直列接続した奇数段インバータチェーンを奇数本有する構成である。
【００１９】
さらに、本開示の乱数生成装置の一実施態様において、前記複数のインバータチェーンは、奇数本の奇数段インバータチェーンのみによって構成されている。
【００２０】
さらに、本開示の乱数生成装置の一実施態様において、前記複数のインバータチェーンは、奇数本の奇数段のインバータチェーンと、偶数個のインバータまたはＮＡＮＤ素子を直列接続した偶数段インバータチェーンを１本以上有する構成である。
【００２１】
さらに、本開示の乱数生成装置の一実施態様において、前記出力制御部は、前記前記排他的論理和（ＸＯＲ）素子の出力と、サンプリングクロック信号を入力して前記前記排他的論理和（ＸＯＲ）素子の出力を、サンプリングクロックに応じて出力するＤ型フリップフロップ（ＤＦＦ）である。
【００２２】
さらに、本開示の乱数生成装置の一実施態様において、前記複数のインバータチェーンの構成素子は、ＮＡＮＤ素子を含まないインバータのみによって構成されている。
【００２３】
さらに、本開示の乱数生成装置の一実施態様において、前記複数のインバータチェーンの構成素子は、前記ＸＯＲ素子からのフィードバック入力と、発振制御信号の２つの入力部を持つＮＡＮＤ素子を含む構成である。
【００２４】
さらに、本開示の乱数生成装置の一実施態様において、前記複数のインバータチェーンの構成素子は、インバータからの入力と発振制御信号の２つの入力部を持つＮＡＮＤ素子を含む構成である。
【００２５】
さらに、本開示の乱数生成装置の一実施態様において、前記複数のインバータチェーンの一部のインバータまたはＮＡＮＤ素子は、複数のインバータチェーンの共有構成である。
【００２６】
さらに、本開示の乱数生成装置の一実施態様において、前記複数のインバータチェーンの一部のインバータまたはＮＡＮＤ素子の共有構成は、多段多分木の構成法に従って構成されている。
【００２７】
さらに、本開示の第２の側面は、上記いずれかの構成を有する乱数生成部と、前記乱数生成部の生成した乱数を適用した暗号処理を実行する暗号処理部とを有する暗号処理装置にある。
【００２８】
本開示のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【発明の効果】
【００２９】
本開示の一実施例の構成によれば、短時間でランダム性の高い乱数生成を実現する乱数生成装置が実現される。
具体的には、インバータまたはＮＡＮＤ素子を複数、直列接続した複数のインバータチェーンと、複数のインバータチェーン各々の出力を入力して入力値に対する排他的論理和（ＸＯＲ）演算を実行するＸＯＲ素子と、ＸＯＲ素子の出力を、サンプリングクロックに応じて出力する出力制御部を有し、ＸＯＲ素子の生成したＸＯＲ演算結果を複数のインバータチェーンにフィードバック入力し、出力制御部の出力信号を乱数として出力する。この構成により、高速な発振周期を持つＸＯＲ素子出力に基づいて短時間でランダム性の高い乱数の生成、出力を行うことが可能となる。
【図面の簡単な説明】
【００３０】
【図１】リングオシレータを用いた乱数生成装置の基本構成例について説明する図である。
【図２】リングオシレータを用いた乱数生成装置において、ジッタの有無に応じた出力サンプリング処理例について説明する図である。
【図３】本開示の乱数生成装置の構成例と処理について説明する図である。
【図４】ｍ本全てを奇数段インバータチェーンで構成した構成（タイプＡ）について説明する図である。
【図５】奇数段インバータチェーンと、偶数段インバータチェーンを組み合わせた構成（タイプＢ）について説明する図である。
【図６】サンプリング対象信号の発振周期とサンプリング値について説明する図である。
【図７】サンプリング対象信号の発振周期とサンプリング値について説明する図である。
【図８】従来構成のサンプリング処理例と、本開示構成のサンプリング処理例の比較について説明する図である。
【図９】本開示の乱数生成装置の構成例について説明する図である。
【図１０】図９に示す乱数生成装置のインバータ数を削減した構成例について説明する図である。
【図１１】インバータをＮＡＮＤ素子に置き換えた本開示の乱数生成装置の構成例について説明する図である。
【図１２】乱数生成部を有する暗号処理装置としてのＩＣモジュールの構成例を示す図である。
【発明を実施するための形態】
【００３１】
以下、図面を参照しながら本開示に係る乱数生成装置、および暗号処理装置の詳細について説明する。説明は、以下の項目に従って行う。
１．インバータを用いたリングオシレータ（ＲＯ）の基本構成例について
２．本開示の乱数生成装置の構成と処理について
２−１．本開示の乱数生成装置の概要
２−２．本開示の乱数生成装置の構成例と処理について
２−３．ｍ本全てを奇数段インバータチェーンで構成した構成（タイプＡ）について
２−４．奇数段インバータチェーンと、偶数段インバータチェーンを組み合わせた構成（タイプＢ）について
２−５．サンプリング対象信号の発振周期とサンプリング値について
２−６．従来構成と本開示構成の発振周期の比較と効果について
３．その他の実施例について
３−１．インバータの数を削減した実施例について
３−２．インバータをＮＡＮＤ素子に置き換えた実施例について
４．暗号処理装置の構成例について
５．本開示の構成のまとめ
【００３２】
［１．インバータを用いたリングオシレータ（ＲＯ）の基本構成例について］
まず、本開示の乱数生成装置の説明の前に、従来から知られるインバータを用いたリングオシレータ（ＲＯ）を用いた乱数生成装置の基本構成例について図１を参照して説明する。
【００３３】
図１に示す乱数生成装置１０は、複数のインバータ（ＮＯＴゲート）２１〜２３から構成されるリングオシレータ（ＲＯ）２０と、サンプリングクロック（ｓａｍｐｌｉｎｇ  ｃｌｏｃｋ）３０を入力するＤ型フリップフロップ（ＤＦＦ）４０によって構成される。
【００３４】
複数のインバータ（ＮＯＴゲート）２１〜２３から構成されるリングオシレータ（ＲＯ）２０を発振させ、リングオシレータ（ＲＯ）２０の出力をＤＦＦ４０に入力（Ｄ入力）する。
さらに、サンプリングクロック（ｓａｍｐｌｉｎｇ  ｃｌｏｃｋ）３０の生成するサンプリング周期毎にＤＦＦ４０の出力（Ｑ出力）を取得する。
このサンプリング周期毎のＤＦＦ４０の出力（Ｑ出力）をランダム値、すなわち乱数として出力する構成である。
【００３５】
なお、インバータ（ＮＯＴ素子）は、１入力１出力であり、入力を反転、すなわち、入力［１］に対して出力［０］を生成し、入力［０］に対して出力［１］を生成する素子である。
【００３６】
以下、このリングオシレータ（ＲＯ）を用いた乱数生成装置の基本構成とその問題点について説明する。
図１に示すように、リングオシレータ（ＲＯ）を用いた乱数生成装置１０は、ｒ個（ｒは奇数）のインバータ（ＮＯＴゲート）を用いたリングオシレータ（ＲＯ）２０と、
リングオシレータ（ＲＯ）２０の出力の取得間隔を決定するサンプリングクロック（ｓａｍｐｌｉｎｇ  ｃｌｏｃｋ）３０と、
サンプリングクロック（ｓａｍｐｌｉｎｇ  ｃｌｏｃｋ）３０に基づいてリングオシレータ（ＲＯ）２０の出力を取得、保持し、サンプリングクロックに応じて出力する出力制御部としてのＤ型フリップフロップ（ＤＦＦ）４０、
これらの３要素から構成される。
なお、図１に示す構成では、インバータ数ｒはｒ＝３の設定である。
【００３７】
図１に示すリングオシレータ（ＲＯ）を用いた乱数生成装置におけるリングオシレータ（ＲＯ）の理論的な発振周期ＲＴは、リングオシレータ（ＲＯ）を構成するインバータや配線における遅延、想定される電圧、温度等により算出することが可能である。
【００３８】
ここで、理論的な発振周期通りに発振するリングオシレータ（ＲＯ）の出力を複数回サンプリングした場合の、各サンプリング時におけるリングオシレータ（ＲＯ）の出力値である０または１の値は、以下の２つの周期の関係性のみによって決定される。
リングオシレータ（ＲＯ）の発振周期ＲＴと、
サンプリング周期ＳＴ、
これらの２つの周期の関係性のみによって決定される。
【００３９】
従って、複数回の連続するサンプリング結果として得られるリングオシレータ（ＲＯ）の出力値である０，１のビット列は、必ず一定のパターンを持つことになる。
【００４０】
しかしながら、現実的にはリングオシレータ（ＲＯ）の発振は、リングオシレータ（ＲＯ）の製造ばらつきに起因する各種遅延値のばらつきや、発振自体や外的要因による電圧、温度のばらつき、及びランダムノイズと呼ばれるＩＣ稼働時のばらつき等による乱れが発生する。
具体的には、０，１の変化点であるエッジが、リングオシレータ（ＲＯ）を構成する各インバータを通過する毎にランダムなジッタ、すなわちエッジずれが発生し、リングオシレータ（ＲＯ）の発振波形に時間的なずれが生じる。
【００４１】
このようなずれによって、リングオシレータ（ＲＯ）の発振波形は理論通りの波形になることはなく、ランダムにずれた波形となる。結果として、複数回の連続するサンプリング結果として得られるリングオシレータ（ＲＯ）の出力値である０，１のビット列はジッタの影響によってランダムな値となる。
【００４２】
この具体例について図２を参照して説明する。
図２には、
（１）ジッタの無い理想的なリングオシレータ（ＲＯ）の出力サンプリング処理例
（２）ジッタの有る現実のリングオシレータ（ＲＯ）の出力サンプリング処理例
これらの２つの処理例を示している。
【００４３】
（１）ジッタの無い理想的なリングオシレータ（ＲＯ）の出力サンプリング処理例には、
（１ａ）ジッタの無い理想的なリングオシレータ（ＲＯ）の出力波形、
（１ｂ）サンプリングクロックの出力波形
を示している。
【００４４】
（２）ジッタの有る現実のリングオシレータ（ＲＯ）の出力サンプリング処理例には、
（２ａ）ジッタの有る現実のリングオシレータ（ＲＯ）の出力波形、
（２ｂ）サンプリングクロックの出力波形
を示している。
【００４５】
なお、図１に示す乱数生成装置１０において、乱数は、ＤＦＦ４０の出力値（Ｑ出力）として得られる。このＤＦＦ４０の出力値（Ｑ出力）は、サンプリングクロックの立ち上がり部分、すなわち０から１への変化点（ＥＳＴ２，ＥＳＴ４・・・）におけるリングオシレータ（ＲＯ）の出力値に対応する。
【００４６】
図２には、
リングオシレータ（ＲＯ）の発振周期＝ＲＴ、
サンプリングクロックの周期＝ＳＴ、
として示している。
なお、図２では、簡単のため、サンプリング周期ＳＴを、リングオシレータ（ＲＯ）の発振周期ＲＴの２倍、すなわち、
ＳＴ＝２ＲＴ
としている。
また、図２（２）に示すジッタ有りの例では、リングオシレータ（ＲＯ）の発振時に発生するジッタの平均的な絶対値をＪと仮定して示している。
【００４７】
図２に示すＥＲＴｉ，ＥＳＴｊは以下の位置を示す。
ＥＲＴｉは、リングオシレータ（ＲＯ）の発振波形のｉ番目のエッジ（０，１の変化点）、
ＥＳＴｊは、サンプリングクロックの波形のｊ番目のエッジ（０，１の変化点）、
これらを示している。
【００４８】
なお、ジッタの影響を分かりやすくするため、図２に示す例では、サンプリングの開始時刻ｔ０を、リングオシレータ（ＲＯ）の発振波形の最初（ｉ＝０番目）のエッジＥＲＴ０よりｔ０分だけ、後にずらした位置に設定している。ただし、以下で説明するジッタに起因するサンプリング出力のランダム性は、任意のｔ０に対して同様の性質である。
【００４９】
まず、図２（１）に示す、
（１）ジッタの無い理想的なリングオシレータ（ＲＯ）の出力サンプリング処理例
について説明する。
時刻ｔ０においてサンプリングを開始し、図１に示すＤＦＦ４０からの出力（Ｑ出力）を乱数として取得する場合の出力値について考察する。
ＤＦＦ４０からの出力（Ｑ出力）は、（１ｂ）サンプリングクロックの出力波形の立ち上がり部分、すなわち０から１への変化点における［（１ａ）ジッタの無い理想的なリングオシレータ（ＲＯ）の出力波形］の値となる。
【００５０】
時刻ｔ０のサンプリング開始後、最初の値が取得されるのは、（１ｂ）サンプリングクロックのＥＳＴ２のタイミングであり、
そのサンプリング時刻は、
ｔ０＋ＳＴ＝ｔ０＋２ＲＴ、
となる。
【００５１】
すなわち、（１ａ）リングオシレータ（ＲＯ）出力波形において、図の矢印５１で示す位置であるＥＲＴ４よりｔ０分ずれたＨｉｇｈ区間の値、すなわち、１となる。なお、［（１ａ）リングオシレータ（ＲＯ）出力波形］において、Ｈｉｇｈ出力を１、Ｌｏｗ出力を０とする。
【００５２】
次のサンプリング位置は、さらにＳＴ後となる。
そのサンプリング時刻は、
ｔ０＋ＳＴ＋ＳＴ＝ｔ０＋４ＲＴ、
となる。
【００５３】
すなわち、（１ａ）リングオシレータ（ＲＯ）出力波形においては、図の矢印５２で示す位置であるＥＲＴ７よりｔ０分ずれたＨｉｇｈ区間の値、すなわち、前のサンプリング地と同じ１となる。
以降、同様の繰り返しによってサンプリングが実行される。
各サンプリング位置は、常に前回のサンブリング位置から２ＲＴ後の位置となり、サンプリング結果は常に１が出力されることとなる。
【００５４】
次に、
（２）ジッタの有る現実のリングオシレータ（ＲＯ）の出力サンプリング処理例
について説明する。
【００５５】
図２（２）のジッタ有りの例では、（２ａ）リングオシレータ（ＲＯ）出力波形には、１エッジ毎に平均＋Ｊまたは−Ｊのジッタが発生するとする。
図２の（２ａ）リングオシレータ（ＲＯ）出力波形の各エッジ（ＥＲＴｉ）に隣接する破線は、ジッタの影響によってエッジ（ＥＲＴｉ）がずれた場合に取り得るエッジ位置を示している。
【００５６】
前述した（１）ジッタ無しの例と同様、時刻ｔ０においてサンプリングを開始し、図１に示すＤＦＦ４０からの出力（Ｑ出力）を乱数として取得する。
ＤＦＦ４０からの出力（Ｑ出力）は、（２ｂ）サンプリングクロックの出力波形の立ち上がり部分、すなわち０から１への変化点における（２ａ）ジッタ有りリングオシレータ（ＲＯ）の出力波形の値となる。
【００５７】
時刻ｔ０のサンプリング開始後、最初の値が取得されるのは、（２ｂ）サンプリングクロックのＥＳＴ２のタイミングであり、
そのサンプリング時刻は、
ｔ０＋ＳＴ＝ｔ０＋２ＲＴ、
となる。
【００５８】
すなわち、（２ａ）リングオシレータ（ＲＯ）出力波形においては、図の矢印７１で示す位置であるＥＲＴ４よりｔ０分ずれた位置の値となる。
この位置の（２ａ）リングオシレータ（ＲＯ）出力値は、図から理解されるように、ジッタに応じて１（Ｈｉｇｈ）となる場合、０（Ｌｏｗ）となる場合の２つの場合が発生し得る。
【００５９】
すなわち、（２ａ）リングオシレータ（ＲＯ）出力値のエッジ（ＥＲＴ４）の位置は、ジッタの影響により、図に示すＥＲＴ４を中心として、
ＥＲＴ４−４Ｊから、
ＥＲＴ４＋４Ｊ、
この範囲で変化し得ることになる。
前述したように、図２（２）に示すジッタ有りの例では、リングオシレータ（ＲＯ）の発振時に発生するジッタの平均的な絶対値をＪとしている。（２ａ）リングオシレータ（ＲＯ）出力は、ＥＲＴ４までに４回のエッジがあるため、ＥＲＴ４における総ジッタ量は−４Ｊから＋４Ｊの範囲で変化する可能性がある。
【００６０】
ＥＲＴ４における総ジッタ量が−４Ｊから＋２Ｊまでの場合には、ＥＳＴ２におけるサンプリング結果はＨｉｇｈ即ち１となる。
しかし、ＥＲＴ４における総ジッタ量が＋４Ｊの場合には、ＥＳＴ２におけるサンプリング結果はＬｏｗ即ち０となる。
【００６１】
（２ａ）リングオシレータ（ＲＯ）出力の１エッジ当たり、＋Ｊおよび−Ｊのジッタが各々１／２の確率で発生すると仮定すると、ＥＳＴ２におけるサンプリング結果が０となる確率は１／１６＝６．２５％となる。
さらに、その後のサンプリング点では、サンプリング点が後にずれるに従って発生し得るジッタ量の幅は増加する。従って、サンプリング点が後にずれるほど、サンプリング結果が０となる確率と１となる確率は次第に等しくなる方向に近づいていくことになる。
【００６２】
このように、各エッジにおいて発生するジッタの蓄積によってサンプリング結果の０，１の取得確率は均等になる方向に変動する。従って、サンプリングを待機すれば、０，１の出現頻度をほぼ５０％にすることが可能となり、サンブリング時の値をランダムにすることが可能となる。
【００６３】
（リングオシレータを用いた基本構成の問題点について）
図１、図２を参照して説明したとおり、図１に示すリングオシレータ（ＲＯ）を用いた乱数発生装置の基本構成では、各サンプリング位置においてジッタによる乱れを発生させることにより、サンプリング結果としての出力乱数をランダムな値とすることが可能である。
【００６４】
しかしながら、現実問題として、例えば図２（２ａ）リングオシレータ（ＲＯ）出力の１エッジ当たりのジッタ量はリングオシレータ（ＲＯ）の発振周期ＲＴに対して非常に小さいという問題がある。
従って、サンプリング位置において、リングオシレータ（ＲＯ）出力として０と１とが十分なランダム性を持って出現させるためには、極めて多くのジッタを蓄積させる必要がある。これは即ち、リングオシレータ（ＲＯ）の発振周期ＲＴに対して、サンプリング周期ＳＴを非常に長く設定する必要があることを意味している。
【００６５】
具体的に説明すると、製造プロセス等にも依存するが、場合によってはサンプリング周期ＳＴを、リングオシレータ（ＲＯ）の発振周期ＲＴの数千倍から数万倍程度に設定する必要がある。
【００６６】
仮に、リングオシレータ（ＲＯ）の発振周期ＲＴ＝１０００ｐｓ、すなわちリングオシレータ（ＲＯ）が１ＧＨｚで発振するよう設計されている場合、サンプリング周期ＳＴは、例えば、その一万倍以上が必要となる。
この場合、例えば、サンプリングクロックは、１００ＫＨｚ以下となるよう設計する必要がある。
【００６７】
乱数発生装置の具体的な利用例としては、例えば暗号処理装置の実行する暗号処理に用いる乱数を生成する構成があるが、このような構成において必要となる乱数は１２８ビットや２５６ビットといった多数のビット列となる。暗号処理装置に供給する乱数を生成する乱数生成部では、このように１２８ビットや２５６ビット等の多数のビット列を規則性のないランダムな値として短時間に生成することが要求される。
【００６８】
例えば上記の１００ＫＨｚのサンプリングクロックを利用した場合、１２８ビットの乱数列を生成するためには、１．２８ｍｓの時間を要し、２５６ビットの乱数列を生成するためには、２．５６ｍｓの時間を要する。すなわち、非常に長い時間待つことが必要となる。このように、図１に示すリングオシレータ（ＲＯ）を持つ乱数生成装置の基本構成を利用した場合、十分なランダム性を有する乱数を取得するために必要な時間が非常に長くなるという大きな問題がある。
【００６９】
［２．本開示の乱数生成装置の構成と処理について］
［２−１．本開示の乱数生成装置の概要］
以下、上述したリングオシレータ（ＲＯ）を用いた乱数生成装置の基本構成における問題点を解決する本開示の乱数生成装置の構成と処理について説明する。
【００７０】
以下に説明する本開示の乱数生成装置は、サンプリング対象となる出力、具体的には、例えば図１に示すＤＦＦ４０に対する入力（Ｄ入力）の発振自体を高速化させることで、より短時間で十分なランダム性を持つ乱数を出力可能とした構成を持つ。
具体的には、図１に示すリングオシレータ（ＲＯ）２０の構成を変更して、ＤＦＦ４０に対する入力（Ｄ入力）の発振の高速化を実現している。
【００７１】
図１に示すリングオシレータ（ＲＯ）２０を変更して、以下のような構成とする。
奇数本の奇数段インバータチェーンにおける出力同士、または奇数本の奇数段インバータチェーンと一本以上の偶数段インバータチェーンにおける出力同士をＸＯＲし、さらにその結果を各インバータチェーンへの入力とする。この構成により、ＤＦＦに対する入力（Ｄ入力）の発振を高速化させ、より短時間で十分なランダム性を持つ乱数を出力（Ｑ出力）させる。
【００７２】
［２−２．本開示の乱数生成装置の構成例と処理について］
図３以下を参照して本開示の乱数生成装置の構成例と処理について説明する。
【００７３】
図３に示す乱数生成装置１００は、以下の構成要素を有する。
（１）各々、複数のインバータを直列接続したｍ本のインバータチェーン１１０〜１３０、
（２）ｍ本のインバータチェーンの出力を並列入力し、出力をＤ型フリップフロップ１６０のＤ入力部に入力するとともにｍ本のインバータチェーンにフィードバック入力（回帰入力）する構成を持つｍ本入力ＸＯＲ素子１５０、
（３）ＸＯＲ素子１５０の出力をＤ入力部に入力し、サンプリングクロックの立ち上がり位置のＤ入力部信号を出力（Ｑ出力）する出力制御部として機能するＤ型フリップフロップ（ＤＦＦ）１６０、
（４）Ｄ型フリップフロップ（ＤＦＦ）１６０に対してサンプリングクロック信号を入力するサンプリングクロック１４０、
これらの構成を有する。
【００７４】
なお、図にはインバータチェーンとして、１，２，ｍ本目の３本のみのインバータチェーンを代表して示しているが、３〜ｍ−１本目のインバータチェーンは図においては省略して示したものであり、図３の乱数生成装置１００は、ｍ本のインバータチェーンを有する。なお、ｍは２以上の整数であるとともに、インバータチェーンの構成に応じた条件を満た数とすることが必要となる。この条件については後述する。
【００７５】
図に示す３本のインバータチェーンは以下の構成である。
（１本目）ｒ１段のインバータ：インバータ１１１−１〜インバータ１１１−ｒ１を直列接続したインバータチェーン１１０、
（２本目）ｒ２段のインバータ：インバータ１２１−１〜インバータ１２１−ｒ２を直列接続したインバータチェーン１２０、
（ｍ本目）ｒｍ段のインバータ：インバータ１３１−１〜インバータ１３１−ｒｍを直列接続したインバータチェーン１３０、
この他、３〜ｍ−１本目のインバータチェーンを有する。
【００７６】
図３に示すように、各々ｒｉ（ｉ＝１、…、ｍ）段のインバータチェーンをｍ本利用し、各インバータチェーン１１０〜１３０の出力をＸＯＲ素子１５０に入力して、ｍ本のインバータチェーンの出力値の排他的論理和（ＸＯＲ）を行い、排他的論理和（ＸＯＲ）結果を、出力制御部としてのＤＦＦ１６０に入力（Ｄ入力）する。
さらに、ＸＯＲ素子１５０における（ＸＯＲ）結果の信号をインバータチェーン１１０〜１３０へとフィードバック入力（回帰入力）する。
【００７７】
なお、ＸＯＲ素子１５０は、ｍ本のインバータチェーン１１０〜１３０のｍ個の出力中に含まれる［１］の数が奇数（１，３，５・・・）の場合は［１］を出力し、ｍ本のインバータチェーン１１０〜１３０のｍ個の出力中に含まれる［１］の数が０または偶数（０，２，４・・・）の場合は［０］を出力する素子である。
【００７８】
ここで、ｍ本のインバータチェーンに関しては、
（Ａ）ｍ本全てを奇数段インバータチェーンで構成した構成（タイプＡ）、
（Ｂ）奇数段インバータチェーンと、偶数段インバータチェーンを組み合わせた構成（タイプＢ）、
これらの２種類のタイプのいずれかとする。
なお、インバータチェーンの本数（ｍ）は、上記のタイプＡ，Ｂのいずれのインバータチェーン構成を採用するかによって制約が異なる。
以下、それぞれのタイプを持つ乱数生成装置の詳細構成例について説明する。
【００７９】
［２−３．ｍ本全てを奇数段インバータチェーンで構成した構成（タイプＡ）について］
まず、ｍ本全てを奇数段インバータチェーンで構成した構成（タイプＡ）の構成例について説明する。
【００８０】
図３に示す乱数生成装置を、ｍ本の奇数段インバータチェーンのみを利用して構成する場合、
１〜ｍ本各々におけるインバータの段数（直列接続数）ｒｉ（ｉ＝１、・・・、ｍ）は、奇数とする。
さらに、インバータチェーンの本数ｍも、奇数にする必要がある。
【００８１】
これは、ｍが偶数であった場合、発振開始時における各インバータチェーンの出力値が同一の値となるため、ＸＯＲ後の値が常に０となり、発振しなくなってしまうためである。
【００８２】
前述したように、ＸＯＲ素子は、ｍ本のインバータチェーン１１０〜１３０のｍ個の出力中に含まれる［１］の数が奇数（１，３，５・・・）の場合は［１］を出力し、ｍ本のインバータチェーン１１０〜１３０のｍ個の出力中に含まれる［１］の数が０または偶数（０，２，４・・・）の場合は［０］を出力する素子である。
従って、ｍが偶数であり、発振開始時における各インバータチェーンの出力値が同一の値、すなわちオール０またはオール１である場合、ＸＯＲ素子の出力はいずれの場合も常に同じ値である０となってしまい、発振しなくなってしまうためである。
【００８３】
なお、ｍ本全てを奇数段インバータチェーンで構成した場合の各インバータチェーンに構成するインバータの段数ｒｉは、同一の値であってもよいが、各々異なる値を選択することが望ましい。これは、各インバータチェーンの各々に多様なジッタを発生させる可能性を高めるためである。
【００８４】
奇数段インバータチェーンのみを利用した構成を持つ乱数生成装置２００の構成例を図４に示す。
図４に示す乱数生成装置２００は、以下の構成のインバータチェーンを有する。
インバータチェーンの本数：ｍ＝３、
１本目のインバータチェーンのインバータ段数：ｒ１＝３、
２本目のインバータチェーンのインバータ段数：ｒ２＝５、
３本目のインバータチェーンのインバータ段数：ｒ３＝７、
図４に示す乱数生成装置２００は、上記設定のインバータチェーン構成を有する。
【００８５】
図４に示す乱数生成装置２００の全体構成について説明する。
乱数生成装置２００は、以下の構成要素を有する。
（１）各々、複数のインバータを直列接続した３本のインバータチェーン２０１〜２０３、
（２）３本のインバータチェーンの出力を並列入力し、出力をＤ型フリップフロップ２０６のＤ入力部に入力するとともに３本のインバータチェーン２０１〜２０３に回帰入力する構成を持つ３本入力ＸＯＲ素子２０５、
（３）ＸＯＲ素子２０５の出力をＤ入力部に入力し、サンプリングクロックの立ち上がり位置のＤ入力部信号を出力（Ｑ出力）する出力制御部として機能するＤ型フリップフロップ（ＤＦＦ）２０６、
（４）Ｄ型フリップフロップ（ＤＦＦ）２０６に対してサンプリングクロック信号を入力するサンプリングクロック２０４、
これらの構成を有する。
【００８６】
なお、３本のインバータチェーン２０１〜２０３は、以下の構成である。
（１本目）３段のインバータを直列接続したインバータチェーン２０１、
（２本目）５段のインバータを直列接続したインバータチェーン２０２、
（３本目）７段のインバータを直列接続したインバータチェーン２０３、
【００８７】
図４に示すように、各々３，５，７段のインバータチェーンを３本利用し、各インバータチェーン２０１〜２０３の出力をＸＯＲ素子２０５に入力して、３本のインバータチェーンの出力値の排他的論理和（ＸＯＲ）を行い、排他的論理和（ＸＯＲ）結果をＤＦＦ２０６に入力（Ｄ入力）する。
さらに、ＸＯＲ素子２０５における（ＸＯＲ）結果の信号をインバータチェーン２０１〜２０３へとフィードバック入力（回帰入力）する。
【００８８】
Ｄ型フリップフロップ（ＤＦＦ）２０６には、サンプリングクロック２０４が入力され、入力するサンプリングクロック２０４のクロック信号に応じて、Ｄ型フリップフロップ（ＤＦＦ）２０６に対する入力値（Ｄ入力）がサンプリングされて出力（Ｑ出力）される。この出力値が乱数として利用される。
【００８９】
なお、ＸＯＲ素子２０５は、３本のインバータチェーン２０１〜２０３の３個の出力中に含まれる［１］の数が奇数（１，３）の場合は［１］を出力し、３本のインバータチェーン２０１〜２０３の３個の出力中に含まれる［１］の数が０または偶数（０，２）の場合は［０］を出力する素子である。
【００９０】
［２−４．奇数段インバータチェーンと、偶数段インバータチェーンを組み合わせた構成（タイプＢ）について］
次に、奇数段インバータチェーンと、偶数段インバータチェーンを組み合わせた構成（タイプＢ）の構成例について説明する。
【００９１】
奇数段インバータチェーンと、偶数段インバータチェーンを組み合わせた構成（タイプＢ）では、奇数段インバータチェーンの本数を奇数本とする。
この制約がある。
インバータチェーンの総数ｍは、奇数、偶数いずれの設定としてもよいが、全インバータチェーンに含まれる奇数段インバータチェーンの本数を奇数本とする。
【００９２】
ただし、例えば図３に示すｍ本のインバータチェーンを有する乱数生成装置１００において、ｍ本のインバータチェーンのうち、奇数個のインバータを直列接続した「奇数段インバータチェーン」が奇数本、存在するなら、残りのインバータチェーンは、偶数個のインバータを直列接続した「偶数段インバータチェーン」としてもよい。
【００９３】
なお、複数の「奇数段インバータチェーン」を利用する場合、各インバータチェーンの段数は同一であってもよいが、異なる値を選択することが望ましい。一方、複数の「偶数段インバータチェーン」を含む場合、各「偶数段インバータチェーン」の段数（直列接続インバータ数）は任意の偶数を選択することが可能である。
【００９４】
奇数段と偶数段のインバータチェーンを組み合わせて利用した構成の具体的構成例を図５に示す。
図５に示す乱数生成装置３００は、以下の構成のインバータチェーンを有する。
インバータチェーンの本数：ｍ＝２、
１本目のインバータチェーンのインバータ段数：ｒ１＝３、
２本目のインバータチェーンのインバータ段数：ｒ２＝４、
図５に示す乱数生成装置３００は、上記設定のインバータチェーン構成を有する。
【００９５】
図５に示す乱数生成装置３００の全体構成について説明する。
乱数生成装置３００は、以下の構成要素を有する。
（１）各々、複数のインバータを直列接続した２本のインバータチェーン３０１〜３０２、
（２）２本のインバータチェーンの出力を並列入力し、出力をＤ型フリップフロップ３０６のＤ入力部に入力するとともに２本のインバータチェーン３０１〜３０２に回帰入力する構成を持つ２本入力ＸＯＲ素子３０５、
（３）ＸＯＲ素子３０５の出力をＤ入力部に入力し、サンプリングクロックの立ち上がり位置のＤ入力部信号を出力（Ｑ出力）する出力制御部として機能するＤ型フリップフロップ（ＤＦＦ）３０６、
（４）Ｄ型フリップフロップ（ＤＦＦ）３０６に対してサンプリングクロック信号を入力するサンプリングクロック３０４、
これらの構成を有する。
【００９６】
なお、２本のインバータチェーン３０１〜３０２は、以下の構成である。
（１本目）３段のインバータを直列接続したインバータチェーン３０１、
（２本目）４段のインバータを直列接続したインバータチェーン３０２、
【００９７】
図５に示すように、各々３，４段のインバータチェーンを２本利用し、各インバータチェーン３０１〜３０２の出力をＸＯＲ素子３０５に入力して、２本のインバータチェーンの出力値の排他的論理和（ＸＯＲ）を行い、排他的論理和（ＸＯＲ）結果をＤＦＦ３０６に入力（Ｄ入力）する。
さらに、ＸＯＲ素子３０５における（ＸＯＲ）結果の信号をインバータチェーン３０１〜３０２へとフィードバック入力（回帰入力）する。
【００９８】
Ｄ型フリップフロップ（ＤＦＦ）３０６には、サンプリングクロック３０４が入力され、入力するサンプリングクロック３０４のクロック信号に応じて、Ｄ型フリップフロップ（ＤＦＦ）３０６に対する入力値（Ｄ入力）がサンプリングされて出力（Ｑ出力）される。この出力値が乱数として利用される。
【００９９】
なお、ＸＯＲ素子３０５は、２本のインバータチェーン３０１〜３０２の２個の出力中に含まれる［１］の数が奇数（１）の場合は［１］を出力し、２本のインバータチェーン３０１〜３０２の２個の出力中に含まれる［１］の数が０または偶数（０，２）の場合は［０］を出力する素子である。
【０１００】
［２−５．サンプリング対象信号の発振周期とサンプリング値について］
先に、図１、図２を参照して説明した１本のインバータチェーンによって構成されるリングオシレータ（ＲＯ）を利用した乱数生成装置は、１本のインバータチェーンによって構成されるリングオシレータ（ＲＯ）を発振させて、その出力値をサンプリングしている。
【０１０１】
この１本のインバータチェーン構成を用いた場合、ジッタの影響により発振波形にずれを生じさせ、かつそのずれがサンプリング時の値（Ｈｉｇｈ（１）／Ｌｏｗ（０））に十分なランダム性を発揮させるためには、リングオシレータ（ＲＯ）の発振周期に対して非常に小さいジッタを十分な数、蓄積する必要があった。従って、リングオシレータ（ＲＯ）の発振周期に対して十分長いサンプリング周期を設定する必要が生じていた。
【０１０２】
これに対して、図３〜図５を参照して説明した本開示に従った乱数生成装置は、２本以上のｍ本のインバータチェーンを並列に接続して、ｍ本のインバータチェーンの出力をＸＯＲ素子に入力して、ＸＯＲ素子の出力をサンプリングするとともに、各インバータチェーンにフィードバック入力する構成としている。
【０１０３】
この構成により、サンプリング対象となるＸＯＲ素子の出力の発振周期自体を短くすることを可能としている。
すなわち、本開示の乱数生成装置は、サンプリング対象となる信号であるＸＯＲ素子の出力信号の発振そのものを高速にし、サンプリング周期を短く設定しても、十分なジッタの蓄積による出力値（＝サンプリング値）のランダム性を確保することを可能としている。
【０１０４】
この理由について、図６、図７を参照して説明する。図６は、先に説明した図２（２）と同様のジッタのある発振信号のサンプリング処理例を示す図である。
図６には、
（ａ）サンプリング対象信号（図３〜図５の構成ではＸＯＲ素子の出力）
（ｂ）サンプリングクロック
これらの各信号を示している。
（ａ）サンプリング対象信号の発振周期＝ＲＴ、
（ｂ）サンプリングクロックの周期＝ＳＴ
とする。
【０１０５】
図６に示すＥＲＴｉ，ＥＳＴｊは以下の位置を示す。
ＥＲＴｉは、（ａ）サンプリング対象信号の発振波形のｉ番目のエッジ（０，１の変化点）、
ＥＳＴｊは、サンプリングクロックの波形のｊ番目のエッジ（０，１の変化点）、
これらを示している。
【０１０６】
サンプリング対象信号の発振周期ＲＴにおけるＨｉｇｈ／Ｌｏｗ区間を各々ＲＴ／２、
サンプリング周期ＳＴ＝２ＲＴ、
とし、
サンプリング開始位置ｔ０が、
ｔ０＝ＥＲＴ０＋ＲＴ／４、
すなわち、発振周期ＲＴのＨｉｇｈ区間における中心点、となる場合を考える。
【０１０７】
次のサンプリング点は、サンプリングクロックのＥＳＴ２のタイミングであり、図６に示す（ｔ１）である。
ｔ１において、ジッタによってエッジの取り得る範囲がＲＴ／４以上まで広がらない限り、サンプリングされる値は変化しない。
時刻ｔ０のサンプリング開始後、最初の値が取得されるサンプリングクロックのＥＳＴ２のタイミングのサンプリング時刻ｔ１は、
ｔ１＝ｔ０＋ＳＴ＝ｔ０＋２ＲＴ、
となる。
図に示すように、このサンプリング時刻ｔ１において、ジッタによってエッジの取り得る範囲がＲＴ／４以上まで広がらない限り、サンプリングされる値は変化しない。
【０１０８】
図に示すように、（ａ）サンプリング対象信号出力の波形に応じて［０］，［１］，［０］の出力が得られるが、サンプリング時刻ｔ１では、サンプリングクロックのサンプリングタイミングＥＳＴ２からの矢印４０１に従った位置の（ａ）サンプリング対象信号の波形に応じて出力が得られる。
【０１０９】
全くジッタがなければサンプリングクロックのサンプリングタイミングＥＳＴ２からの矢印４０１に従った位置の（ａ）サンプリング対象信号はＨｉｇｈの位置であり、出力［１］が得られる。
しかし、（ａ）サンプリング対象信号がジッタの影響でずれている場合、例えば−ＲＴ／４以上のずれ、あるいは＋ＲＴ／４以上のずれが発生している場合は、サンプリングクロックのサンプリングタイミングＥＳＴ２からの矢印４０１に従った位置の（ａ）サンプリング対象信号はＬｏｗの位置であり、出力［０］が得られる。
【０１１０】
このように、サンプリング時刻ｔ１において、ジッタによってエッジの取り得る範囲がＲＴ／４以上まで広がらない限り、サンプリングされる値は変化しない。
【０１１１】
次に、図７に、（ａ）サンプリング対象信号（図３〜図５の構成ではＸＯＲ素子の出力）の発振周波数を２倍にした場合の発振信号のサンプリング処理例を示す。
図７には、図６と同様、
（ａ）サンプリング対象信号（図３〜図５の構成ではＸＯＲ素子の出力）
（ｂ）サンプリングクロック
これらの各信号を示している。
（ａ）サンプリング対象信号の発振周期＝ＲＴ／２、
（ｂ）サンプリングクロックの周期＝ＳＴ
とする。
【０１１２】
図７に示す例では、
サンプリング周期ＳＴ＝２ＲＴ、
としている。
サンプリング開始位置ｔ０は、
ｔ０＝ＥＲＴ０＋ＲＴ／８、
すなわち、図６と同様、発振周期ＲＴ／２のＨｉｇｈ区間における中心点とする。
【０１１３】
次のサンプリング点は、サンプリングクロックのＥＳＴ２のタイミングであり、図７に示す（ｔ１）である。
図７においては、サンプリング時間（ｔ１）において、ジッタによってエッジの取り得る範囲がＲＴ／８以上まで広がれば、サンプリングされる値が変化する。
時刻ｔ０のサンプリング開始後、最初の値が取得されるサンプリングクロックのＥＳＴ２のタイミングのサンプリング時刻ｔ１は、
ｔ１＝ｔ０＋ＳＴ＝ｔ０＋２ＲＴ、
となる。
図に示すように、このサンプリング時刻ｔ１において、ジッタによってエッジの取り得る範囲がＲＴ／８以上、広がればサンプリングされる値は変化する。
【０１１４】
図に示すように、（ａ）サンプリング対象信号出力の波形に応じて［０］，［１］，［０］の出力が得られるが、サンプリング時刻ｔ１では、サンプリングクロックのサンプリングタイミングＥＳＴ２からの矢印４０２に従った位置の（ａ）サンプリング対象信号の波形に応じて出力が得られる。
【０１１５】
全くジッタがなければサンプリングクロックのサンプリングタイミングＥＳＴ２からの矢印４０２に従った位置の（ａ）サンプリング対象信号はＨｉｇｈの位置であり、出力［１］が得られる。
しかし、（ａ）サンプリング対象信号がジッタの影響でずれている場合、例えば−ＲＴ／８以上のずれ、あるいは＋ＲＴ／８以上のずれが発生している場合は、サンプリングクロックのサンプリングタイミングＥＳＴ２からの矢印４０２に従った位置の（ａ）サンプリング対象信号はＬｏｗの位置であり、出力［０］が得られる。
【０１１６】
このように、サンプリング時刻ｔ１において、ジッタによってエッジの取り得る範囲がＲＴ／８以上まで広がればサンプリングされる値が変化する。
これは、先の図６の設定の半分のジッタで出力の変化が発生することを意味する。
【０１１７】
このように、（ａ）サンプリング対象信号（図３〜図５の構成ではＸＯＲ素子の出力）の発振を二倍にする、即ち発振周期をＲＴ／２にした場合、Ｈｉｇｈ／Ｌｏｗ区間は各々ＲＴ／４となり、ジッタの蓄積によって、ＲＴ／８以上のジッタ蓄積が発生すれば、サンプリングされる値が変更され得ることになる。
これは、同一の確率で０，１を変化させるために必要なジッタ量が少なくてすむことを意味する。
【０１１８】
このように（ａ）サンプリング対象信号（図３〜図５の構成ではＸＯＲ素子の出力）の発振周期を短くすることで、短時間に多くのジッタを蓄積可能となり、出力信号としての０と１の発生確率を均等に近づけることが可能となり、結果として、サンプリング周期を短くすることが可能となる。
【０１１９】
［２−６．従来構成と本開示構成の発振周期の比較と効果について］
本開示の構成では、複数のインバータチェーンを利用し、これらの出力をＸＯＲすることによって高速な発振を生成するとともに、さらにその発振を各インバータチェーンの入力に回帰させることによって、より高速な発振の生成を実現している。
本開示の構成において、サンプリング対象となるＸＯＲ素子の出力の発振が、先に図１、図２を参照して説明した構成よりも高速になることを、図８を参照して説明する。
【０１２０】
図８には、
（１）従来構成のサンプリング処理例、
（２）本開示構成のサンプリング処理例、
これら２つのサンプリング処理例を対比して示している。
【０１２１】
なお、
（１）従来構成のサンプリング処理例は、図１に示す構成、すなわち、３段のインバータチェーンからなるリングオシレータ（ＲＯ）を用いた基本構成におけるサンプリング処理例である。
（２）本開示構成のサンプリング処理例は、図５に示す構成、すなわち、
３段のインバータチェーン３０１と、
４段のインバータチェーン３０２、
これら２本のインバータチェーンの出力をＸＯＲ素子３０５に入力し、
ＸＯＲ素子３０５の出力をサンプリングしかつ各インバータチェーン３０１，３０２に回帰入力する構成におけるサンプリング処理例である。
【０１２２】
図８には、
（１）従来構成のサンプリング処理例として、
（１ａ）図１に示すリングオシレータ（ＲＯ）２０の出力信号波形（ＲＯ出力）、
（１ｂ）図１に示すサンプリングクロック３０の信号波形（ｓａｍｐｌｉｎｇ  ｃｌｏｃｋ）、
これらを示している。
また、（２）本開示構成のサンプリング処理例として、
（２ａ）図５に示す３段インバータチェーン３０１の出力に対応するＸＯＲ素子３０５の第１入力信号波形（ＸＯＲ第１入力）、
（２ｂ）図５に示す４段インバータチェーン３０２の出力に対応するＸＯＲ素子３０５の第２入力信号波形（ＸＯＲ第２入力）、
（２ｃ）図５に示すＸＯＲ素子３０５の出力信号波形（ＸＯＲ出力）、
これらを示している。
【０１２３】
なお、図１、図５に示す構成において用いられるインバータの遅延値は全て同一の値ｄであるとし、配線遅延およびジッタの影響による波形のずれは考えないものとする。
【０１２４】
図８の（１）従来構成のサンプリング処理例に示す（１ｂ）サンプリングクロック３０の信号波形の周期数を基準として考察する。
図８において、（１ａ）は、図１に示すリングオシレータ（ＲＯ）２０の出力信号波形を表している。
図１に示すリングオシレータ（ＲＯ）２０の段数は３段であり、図８（１ａ）の波形は、インバータの遅延３段分（３ｄ）毎にＨｉｇｈ／Ｌｏｗが反転する波形となっている。
【０１２５】
ここで、先に説明した図２と同様、図８（１ｂ）に示すサンプリングクロックのサンプリング周期ＳＴを、図８（１ａ）に示すリングオシレータ（ＲＯ）の周期ＲＴの２倍、すなわち、
ＳＴ＝２ＲＴ
とする。
【０１２６】
この設定において、サンプリングクロックの１つのサンプリング周期である１ＳＴ内には、リングオシレータ（ＲＯ）の周期ＲＴの２周期分（２ＲＴ）が含まれることとなる。
【０１２７】
次に、図８（２）の本開示に従ったサンプリング処理例について考察する。
図８（２）には、以下の各波形を示している。
（２ａ）図５に示す３段インバータチェーン３０１の出力に対応するＸＯＲ素子３０５の第１入力信号波形（ＸＯＲ第１入力）、
（２ｂ）図５に示す４段インバータチェーン３０２の出力に対応するＸＯＲ素子３０５の第２入力信号波形（ＸＯＲ第２入力）、
（２ｃ）図５に示すＸＯＲ素子３０５の出力信号波形（ＸＯＲ出力）、
これらを示している。
【０１２８】
図５に示すように、３段インバータチェーン３０１、および４段インバータチェーン３０２には、ＸＯＲ素子３０５における排他的論理和（ＸＯＲ）後の信号が再度、入力される。
【０１２９】
このフィードバック入力（回帰入力）によって、
図８に示す、
（２ａ）ＸＯＲ第１入力、
（２ｂ）ＸＯＲ第２入力、
これらの発振波形は、各々、
（２ｃ）ＸＯＲ出力において形成された周期の影響を受ける。
【０１３０】
例えば、図８に示す時刻ｔ０の（２ｃ）ＸＯＲ出力における信号［Ｈｉｇｈ］が、
図５に示す３段インバータチェーン３０１、および４段インバータチェーン３０２に入力されることにより、
（２ａ）ＸＯＲ第１入力では、ｔ０＋３ｄ後（図に示す位置Ｐ）、
（２ｂ）ＸＯＲ第２入力では、ｔ０＋４ｄ後（図に示す位置ｑ）、
これらの各位置でその影響が表れる。
【０１３１】
（２ａ）ＸＯＲ第１入力は、図５に示す３段インバータチェーン３０１の出力であり、３段インバータチェーン３０１の先頭の［Ｈｉｇｈ］の値は、３段のインバータを通過して［Ｌｏｗ］として出力される。この位置が、ｔ０＋３ｄ後であり、図に示す位置Ｐである。
【０１３２】
また、（２ｂ）ＸＯＲ第２入力は、図５に示す４段インバータチェーン３０２の出力であり、４段インバータチェーン３０２の先頭の［Ｈｉｇｈ］の値は、４段のインバータを通過して［Ｈｉｇｈ］として出力される。この位置が、ｔ０＋４ｄ後であり、図に示す位置ｑである。
【０１３３】
また、これらの波形、（２ａ）ＸＯＲ第１入力と、（２ｂ）ＸＯＲ第２入力は、図５に示すＸＯＲ素子３０５に入力されて排他的論理和（ＸＯＲ）演算がなされるため、（２ａ）ＸＯＲ第１入力と、（２ｂ）ＸＯＲ第２入力の差分として、（２ｃ）ＸＯＲ出力における時刻ｔ０＋３ｄからｔ０＋４ｄの部分に新たな周期が形成される。
以下、同様にして、これらの新たな周期による影響が各インバータチェーンに入力され、その結果によってまた新たな周期が（２ｃ）ＸＯＲ出力に形成される。
【０１３４】
このように、複数のインバータチェーンを利用し、その出力をＸＯＲするとともに、ＸＯＲ後の発振を各々のインバータチェーンへとフィードバック（回帰入力）することによって、インバータチェーン間における遅延差の影響を周期として生成することが可能となる。
【０１３５】
図８（１）の（１ｂ）に示す従来方式のサンプリングクロックの周期ＳＴの１ＳＴ内のリングオシレータ（ＲＯ）の出力の周期は２、すなわち、
ＳＴ＝２ＲＴ
であるのに対し、
図８（２）に示す例では、サンプリング対象である（２ｃ）ＸＯＲ出力は、図８（１ｂ）に示すサンプリングクロックの１ＳＴ区間であるＥＳＴ０からＥＳＴ２までの間に４周期（図に示す［１］〜［４］）設定されている。
【０１３６】
図８（１ｂ）のサンプリングクロックの１ＳＴ区間において発生する図８（２）に示す（２ｃ）ＸＯＲ出力の周期数は様々に変動するが、サンプリングクロックの１ＳＴ区間において発生する平均的な周期数は、図８（１）に示す（１ａ）のリングオシレータ（ＲＯ）の周期数（＝２）より多くなる。
【０１３７】
このように、図３〜図５を参照して説明した構成では、異なるジッタを発生させる複数のインバータチェーンの出力をＸＯＲ素子に入力してＸＯＲ素子の出力をサンプリングし、かつ各インバータチェーンにフィードバックすることで、ＸＯＲ素子の出力の発振周期を高めている。
従って、乱数として取得するＸＯＲ素子出力をより高速な発振信号として生成することが可能となり、ジッタに基づくランダム性をより短時間で実現することが可能となり、結果として短時間のサンプリング周期を設定してもランダム性の高い乱数出力を得ることが可能となる。
【０１３８】
［３．その他の実施例について］
［３−１．インバータの数を削減した実施例について］
上述した図３〜図５を参照して説明した乱数生成装置の構成では、複数のインバータチェーンを利用している。
従って、図１を参照して説明した従来型の１本のインバータチェーンによって構成される装置に比較して必要となるインバータの数は増加する。
例えば、６本のインバータチェーンを有する乱数生成装置の構成例を図９に示す。
【０１３９】
図９に示す乱数生成装置４００は、以下の構成のインバータチェーンを有する。
インバータチェーンの本数：ｍ＝６、
１本目のインバータチェーンのインバータ段数：ｒ１＝３、
２本目のインバータチェーンのインバータ段数：ｒ２＝４、
３本目のインバータチェーンのインバータ段数：ｒ３＝５、
４本目のインバータチェーンのインバータ段数：ｒ４＝６、
５本目のインバータチェーンのインバータ段数：ｒ５＝７、
６本目のインバータチェーンのインバータ段数：ｒ６＝８、
図９に示す乱数生成装置４００は、上記設定のインバータチェーン構成を有する。
【０１４０】
図９に示す乱数生成装置４００に用いられるインバータの数は、
３＋４＋５＋６＋７＋８＝３３
となる。
このように、本開示に従った乱数生成装置を構成しようとすると、インバータの数が従来構成、例えば図１に示す乱数生成装置１０に比較して増加してしまう。
【０１４１】
インバータ数の増加は、実装コストの増大に直結するため、できる限り利用するインバータ数を低減することが望ましい。
以下、インバータ数を削減した実施例について説明する。
【０１４２】
インバータ数を削減するためには、複数のインバータチェーンにおいて、同一段数にあるインバータを共有すればよい。
ただし、無秩序に共有した場合、単独のインバータに対して前段のインバータ出力が複数入力される等の状況が発生し得る。この場合、各インバータチェーンにおける発振そのものが実行されない可能性がある。
従って、インバータ数を削減するためには、発振可能な状態を保ちつつ、各段におけるインバータを共有する必要がある。
【０１４３】
図１０に発振可能な状態を維持し、各段のインバータを共有した乱数生成装置の構成例を示す。
図１０に示す乱数生成装置５００は、ｍ本のインバータチェーンを、分岐数として１及び２を含む多段多分木として再構成している。
この構成により、ＸＯＲ素子出力の発振を維持しながら、インバータの共有を行うものである。
【０１４４】
具体的には、ＸＯＲ素子をルートノードとし、各インバータチェーンにおける最終段をリーフノードとして設定した上で、各インバータを多段多分木におけるノードとして取り扱うことにより、インバータの共有と削減を実現する。
【０１４５】
図１０に示す乱数生成装置５００は、図９に示す構成と同様のインバータチェーン構成を少ないインバータで実現している。
すなわち、図１０に示す乱数生成装置５００は、
インバータチェーンの本数：ｍ＝６、
１本目のインバータチェーンのインバータ段数：ｒ１＝３、
２本目のインバータチェーンのインバータ段数：ｒ２＝４、
３本目のインバータチェーンのインバータ段数：ｒ３＝５、
４本目のインバータチェーンのインバータ段数：ｒ４＝６、
５本目のインバータチェーンのインバータ段数：ｒ５＝７、
６本目のインバータチェーンのインバータ段数：ｒ６＝８、
これらのインバータチェーンを持つ構成である。
このように、図１０に示す乱数生成装置５００は、図９に示す乱数生成装置４００と同様、上記設定のインバータチェーン構成を有する。
【０１４６】
ただし、図１０に示す乱数生成装置５００は、一部のインバータを各インバータチェーンで共通に利用する構成としている。具体的には以下のインバータを共有している。
インバータ５０１は、１〜６本目のインバータチェーンにおいて共通に利用する共有インバータである。
インバータ５０２は、１〜３本目のインバータチェーンにおいて共通に利用する共有インバータである。
インバータ５０３は、４〜６本目のインバータチェーンにおいて共通に利用する共有インバータである。
インバータ５０４〜５０６は、４〜５本目のインバータチェーンにおいて共通に利用する共有インバータである。
【０１４７】
このように、一部のインバータを複数のインバータチェーンで共通に利用する構成としている。この構成によって、必要とするインバータの数を削減している。
【０１４８】
１〜６本目のインバータチェーンの出力がＸＯＲ素子５２１に入力され、ＸＯＲ素子５２１において、インバータチェーンの出力値の排他的論理和（ＸＯＲ）を行い、排他的論理和（ＸＯＲ）結果を出力制御部として機能するＤＦＦ５２２に入力（Ｄ入力）する。
さらに、ＸＯＲ素子５２１における（ＸＯＲ）結果の信号を６本のインバータチェーンの共有インバータ５０１へとフィードバック入力（回帰入力）する。
【０１４９】
Ｄ型フリップフロップ（ＤＦＦ）５２２には、サンプリングクロック５１１が入力され、入力するサンプリングクロック５１１のクロック信号に応じて、Ｄ型フリップフロップ（ＤＦＦ）５２２に対する入力値（Ｄ入力）がサンプリングされて出力（Ｑ出力）される。この出力値が乱数として利用される。
【０１５０】
この図１０に示す乱数生成装置５００は、先に図５を参照して説明した奇数段インバータチェーンと、偶数段インバータチェーンを組み合わせた構成（タイプＢ）に相当する。
【０１５１】
図１０に示す乱数生成装置５００は、ＸＯＲ素子５２１をルートノードとし、ｍ＝６個のリーフ（ｌｅａｆ）に至るまでの分岐数を、１段目１、２段目２、３段目３及び２、４段目１、５段目１、６段目２及び１、７段目１、８段目１、として設定している。これにより、先に図９を参照して説明した構成においては３３個のインバータを利用しているのに対し、図１０に示す乱数生成装置５００は、必要なインバータの数を２１個へと減少させることが可能となる。
なお、各段における分岐数は、設計者が実装コストを鑑みた上で、多段多分木の構成を逸脱しない範囲で自由に設定できる。
【０１５２】
［３−２．インバータをＮＡＮＤ素子に置き換えた実施例について］
上述した実施例では、インバータチェーンを構成する素子は全てインバータ（ＮＯＴ素子）を利用していた。
このインバータ（ＮＯＴ素子）の代わりにＮＡＮＤ素子を利用する構成としてもよい。
【０１５３】
図１１に、インバータチェーンを構成するインバータ（ＮＯＴ素子）の一部をＮＡＮＤ素子に置き換えた構成を持つ乱数生成装置６００の構成例を示す。
インバータ（ＮＯＴ素子）は、１入力１出力であり、入力を反転、すなわち、入力［１］に対して出力［０］を生成し、入力［０］に対して出力［１］を生成する素子である。
一方ＮＡＮＤ素子は、２入力１出力であり、２つの入力が共に［１］である場合に出力［０］を生成し、それ以外はすべて［１］を出力する素子である。
【０１５４】
図１１には、ｍ本のインバータチェーン６０１〜６０３を設定した乱数生成装置６００を示している。
この構成は、基本的には、先に図３を参照して説明した構成と同様の構成であるが、各インバータチェーン６０１〜６０３の先頭のインバータをＮＡＮＤ素子に置き換えている。図に示すＮＡＮＤ素子６１１〜６１３である。
【０１５５】
ＮＡＮＤ素子６１１〜６１３の入力の一方は、ＸＯＲ素子６３１からのフィードバック信号（回帰信号）であり、もう一方の信号は、外部から入力する発振制御信号６２１である。
【０１５６】
発振制御信号６２１は、例えば、乱数生成装置６００を起動する際に、ＯＮすなわち出力［１］をＮＡＮＤ素子６１１〜６１３に入力する。
この処理によって、各インバータチェーン６０１〜６０３とＸＯＲ素子６２１によって構成される回路が発振を開始する。
【０１５７】
なお、図には１，２，ｍ本目の３本のみを示しているが、３〜ｍ−１本目は省略しており、ｍ本のインバータチェーンを有する。
【０１５８】
図に示す３本のインバータチェーンは以下の構成である。
（１本目）１つのＮＡＮＤ素子とｒ１−１個のインバータを直列接続したインバータチェーン６０１、
（２本目）１つのＮＡＮＤ素子とｒ２−１個のインバータを直列接続したインバータチェーン６０２、
（ｍ本目）１つのＮＡＮＤ素子とｒｍ−１個のインバータを直列接続したインバータチェーン６０３、
この他、３〜ｍ−１本目のインバータチェーンを同様に１つのＮＡＮＤ素子と１以上のインバータとの直列接続構成を有する。
【０１５９】
その他の構成と処理は、先に図３を参照して説明した処理と同様である。
すなわち、各インバータチェーン６０１〜６０３の出力をＸＯＲ素子６３１に入力して、ｍ本のインバータチェーンの出力値の排他的論理和（ＸＯＲ）を行い、排他的論理和（ＸＯＲ）結果を出力制御部として機能するＤＦＦ６３２に入力（Ｄ入力）する。
さらに、ＸＯＲ素子６３１における（ＸＯＲ）結果の信号をインバータチェーン６０１〜６０３へとフィードバック入力（回帰入力）する。
【０１６０】
Ｄ型フリップフロップ（ＤＦＦ）６３２には、サンプリングクロック６２２が入力され、入力するサンプリングクロック６２２のクロック信号に応じて、Ｄ型フリップフロップ（ＤＦＦ）６３２に対する入力値（Ｄ入力）がサンプリングされて出力（Ｑ出力）される。この出力値が乱数として利用される。
【０１６１】
なお、ｍ本のインバータチェーンに関しては、
（Ａ）ｍ本全てを奇数段インバータチェーンで構成した構成（タイプＡ）、
（Ｂ）奇数段インバータチェーンと、偶数段インバータチェーンを組み合わせた構成（タイプＢ）、
これらの２種類のタイプのいずれかとする。
なお、インバータチェーンの本数（ｍ）は、上記のタイプＡ，Ｂのいずれのインバータチェーン構成を採用するかによって制約が異なる。
これは、先に、図４、図５を参照して説明したと同様の制約となる。
【０１６２】
具体的には、
ｍ本の奇数段インバータチェーンのみを利用して構成する場合（タイプＡ）、インバータチェーンの本数：ｍもまた、奇数にする。
また、奇数段インバータチェーンと、偶数段インバータチェーンを組み合わせた構成（タイプＢ）では、インバータチェーンの総数ｍは、奇数、偶数いずれの設定としてもよいが、全インバータチェーンに含まれる奇数段インバータチェーンの本数を奇数本とする。
これらの制約に従って、インバータチェーンを設定する。
【０１６３】
なお、図１１に示す構成例では、ＮＡＮＤ素子を各インバータチェーンの先頭に設定した例を示しているが、ＮＡＮＤ素子の設定位置は、各インバータチェーンの先頭に限らず、任意の位置に設定してよい。また、各インバータチェーン内の複数のインバータをＮＡＮＤ素子に置き換えてもよい。
なお、ＮＡＮＤ素子に対する入力は、１つは、発振制御信号とし、もう１つはＸＯＲ素子からのフィードバック信号、あるいは直列接続されたインバータまたはＮＡＮＤ素子の出力とする。
【０１６４】
［４．暗号処理装置の構成例について］
最後に、上述した乱数生成処理を実行する乱数生成部を備えた暗号処理装置の構成例について説明する。
上述した実施例に従った乱数生成処理を実行する乱数生成部を備えた暗号処理装置は、暗号処理を実行する様々な情報処理装置に搭載可能である。具体的には、ＰＣ、ＴＶ、レコーダ、プレーヤ、通信機器、さらに、ＲＦＩＤ、スマートカード、センサネットワーク機器、各種認証モジュール、健康、医療機器、自立型ネットワーク機器等、例えばデータ処理や通信処理に伴う暗号処理を実行する様々な機器において利用可能である。
【０１６５】
暗号処理装置の一例としてのＩＣモジュール７００の構成例を図１２に示す。図１２に示すＩＣモジュール７００は、上記の様々な機器に搭載することが可能である。
【０１６６】
図１２に示すＣＰＵ（Ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）７０１は、暗号処理の開始や、終了、データの送受信の制御、各構成部間のデータ転送制御、その他の各種プログラムを実行するプロセッサである。メモリ７０２は、ＣＰＵ７０１が実行するプログラム、あるいは演算パラメータなどの固定データを格納するＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ−Ｍｅｍｏｒｙ）、ＣＰＵ７０１の処理において実行されるプログラム、およびプログラム処理において適宜変化するパラメータの格納エリア、ワーク領域として使用されるＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等からなる。また、メモリ７０２は暗号処理に必要な鍵データや、暗号処理において適用する変換テーブル（置換表）や変換行列に適用するデータ等の格納領域として使用可能である。なおデータ格納領域は、耐タンパ構造を持つメモリとして構成されることが好ましい。
【０１６７】
暗号処理部７０３は、上記において説明した乱数生成処理によって生成した乱数を適用した暗号処理、復号処理を実行する。なお、ここでは、暗号処理手段を個別モジュールとした例を示したが、このような独立した暗号処理モジュールを設けず、例えば暗号処理プログラムをＲＯＭに格納し、ＣＰＵ７０１がＲＯＭ格納プログラムを読み出して実行するように構成してもよい。
【０１６８】
乱数生成部７０４は、上述した実施例に従った乱数生成処理を実行する。例えば、暗号処理に必要となる鍵の生成などにおいて必要となる乱数の生成処理を実行する。
【０１６９】
送受信部７０５は、外部とのデータ通信を実行するデータ通信処理部であり、例えばリーダライタ等、ＩＣモジュールとのデータ通信を実行し、ＩＣモジュール内で生成した暗号文の出力、あるいは外部のリーダライタ等の機器からのデータ入力などを実行する。
【０１７０】
なお、暗号処理装置は、入力データとしての平文を暗号化する暗号化処理に適用可能であるのみならず、入力データとしての暗号文を平文に復元する復号処理にも適用可能である。
暗号化処理、復号処理、双方の処理において、上述した実施例において説明した構成を適用することが可能である。
【０１７１】
［５．本開示の構成のまとめ］
以上、特定の実施例を参照しながら、本開示の実施例について詳解してきた。しかしながら、本開示の要旨を逸脱しない範囲で当業者が実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本開示の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【０１７２】
なお、本明細書において開示した技術は、以下のような構成をとることができる。
（１）インバータまたはＮＡＮＤ素子を複数、直列接続した複数のインバータチェーンと、
前記複数のインバータチェーン各々の出力を入力して、入力値に対する排他的論理和（ＸＯＲ）演算を実行する排他的論理和（ＸＯＲ）素子と、
前記排他的論理和（ＸＯＲ）素子の出力を、サンプリングクロックに応じて出力する出力制御部を有し、
前記排他的論理和（ＸＯＲ）素子の生成した排他的論理和（ＸＯＲ）演算結果を前記複数のインバータチェーンにフィードバック入力し、前記出力制御部の出力信号を乱数として出力する乱数生成装置。
【０１７３】
（２）前記複数のインバータチェーンは、奇数個のインバータまたはＮＡＮＤ素子を直列接続した奇数段インバータチェーンを奇数本有する構成である前記（１）に記載の乱数生成装置。
（３）前記複数のインバータチェーンは、奇数本の奇数段インバータチェーンのみによって構成されている前記（２）に記載の乱数生成装置。
（４）前記複数のインバータチェーンは、奇数本の奇数段のインバータチェーンと、偶数個のインバータまたはＮＡＮＤ素子を直列接続した偶数段インバータチェーンを１本以上有する構成である前記（２）に記載の乱数生成装置。
【０１７４】
（５）前記出力制御部は、前記前記排他的論理和（ＸＯＲ）素子の出力と、サンプリングクロック信号を入力して前記前記排他的論理和（ＸＯＲ）素子の出力を、サンプリングクロックに応じて出力するＤ型フリップフロップ（ＤＦＦ）である前記（１）〜（４）いずれかに記載の乱数生成装置。
（６）前記複数のインバータチェーンの構成素子は、ＮＡＮＤ素子を含まないインバータのみによって構成されている前記（１）〜（５）ていずれかに記載の乱数生成装置。
【０１７５】
（７）前記複数のインバータチェーンの構成素子は、前記ＸＯＲ素子からのフィードバック入力と、発振制御信号の２つの入力部を持つＮＡＮＤ素子を含む構成である前記（１）〜（６）いずれかに記載の乱数生成装置。
（８）前記複数のインバータチェーンの構成素子は、インバータからの入力と発振制御信号の２つの入力部を持つＮＡＮＤ素子を含む構成である前記（１）〜（６）いずれかに記載の乱数生成装置。
【０１７６】
（９）前記複数のインバータチェーンの一部のインバータまたはＮＡＮＤ素子は、複数のインバータチェーンの共有構成である前記（１）〜（８）いずれかに記載の乱数生成装置。
（１０）前記複数のインバータチェーンの一部のインバータまたはＮＡＮＤ素子の共有構成は、多段多分木の構成法に従って構成されている前記（９）に記載の乱数生成装置。
【０１７７】
（１１）前記（１）〜（１０）いずれかの構成を有する乱数生成部と、
前記乱数生成部の生成した乱数を適用した暗号処理を実行する暗号処理部と、
を有する暗号処理装置。
【産業上の利用可能性】
【０１７８】
上述したように、本開示の一実施例の構成によれば、短時間でランダム性の高い乱数生成を実現する乱数生成装置が実現される。
具体的には、インバータまたはＮＡＮＤ素子を複数、直列接続した複数のインバータチェーンと、複数のインバータチェーン各々の出力を入力して入力値に対する排他的論理和（ＸＯＲ）演算を実行するＸＯＲ素子と、ＸＯＲ素子の出力を、サンプリングクロックに応じて出力する出力制御部を有し、ＸＯＲ素子の生成したＸＯＲ演算結果を複数のインバータチェーンにフィードバック入力し、出力制御部の出力信号を乱数として出力する。この構成により、高速な発振周期を持つＸＯＲ素子出力に基づいて短時間でランダム性の高い乱数の生成、出力を行うことが可能となる。
【符号の説明】
【０１７９】
１０  乱数生成装置
２０  リングオシレータ（ＲＯ）
２１〜２３  インバータ
３０  サンプリングクロック
４０  Ｄ型フリップフロップ（ＤＦＦ）
１００  乱数生成装置
１１０，１２０，１３０  インバータチェーン
１１１，１２１，１３１  インバータ
１４０  サンプリングクロック
１５０  ＸＯＲ素子
１６０  Ｄ型フリップフロップ（ＤＦＦ）
２００  乱数生成装置
２０１，２０２，２０３  インバータチェーン
２０４  サンプリングクロック
２０５  ＸＯＲ素子
２０６  Ｄ型フリップフロップ（ＤＦＦ）
３００  乱数生成装置
３０１，３０２  インバータチェーン
３０４  サンプリングクロック
３０５  ＸＯＲ素子
３０６  Ｄ型フリップフロップ（ＤＦＦ）
４００  乱数生成装置
５００  乱数生成装置
５０１〜５０６  インバータ
５１１  サンプリングクロック
５２１  ＸＯＲ素子
５２２  Ｄ型フリップフロップ（ＤＦＦ）
６００  乱数生成装置
６０１，６０２，６０３  インバータチェーン
６１１〜６１３  ＮＡＮＤ素子
６２１  発振制御信号
６２２  サンプリングクロック
６３１  ＸＯＲ素子
６３２  Ｄ型フリップフロップ（ＤＦＦ）
７００  ＩＣモジュール
７０１  ＣＰＵ（Ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）
７０２  メモリ
７０３  暗号処理部
７０４  乱数生成部
７０５  送受信部
【図１】
2013182097.tif 000003
【図２】
2013182097.tif 000004
【図３】
2013182097.tif 000005
【図４】
2013182097.tif 000006
【図５】
2013182097.tif 000007
【図６】
2013182097.tif 000008
【図７】
2013182097.tif 000009
【図８】
2013182097.tif 000010
【図９】
2013182097.tif 000011
【図１０】
2013182097.tif 000012
【図１１】
2013182097.tif 000013
【図１２】
2013182097.tif 000014