IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社東芝の特許一覧 ▶ 東芝デバイス&ストレージ株式会社の特許一覧

<>
  • 特開-乱数生成回路 図1
  • 特開-乱数生成回路 図2
  • 特開-乱数生成回路 図3
  • 特開-乱数生成回路 図4
  • 特開-乱数生成回路 図5
  • 特開-乱数生成回路 図6
  • 特開-乱数生成回路 図7
  • 特開-乱数生成回路 図8
  • 特開-乱数生成回路 図9
  • 特開-乱数生成回路 図10
  • 特開-乱数生成回路 図11
  • 特開-乱数生成回路 図12
  • 特開-乱数生成回路 図13
  • 特開-乱数生成回路 図14
  • 特開-乱数生成回路 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023143167
(43)【公開日】2023-10-06
(54)【発明の名称】乱数生成回路
(51)【国際特許分類】
   G06F 7/58 20060101AFI20230928BHJP
   G09C 1/00 20060101ALI20230928BHJP
【FI】
G06F7/58 680
G09C1/00 650B
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2022050403
(22)【出願日】2022-03-25
(71)【出願人】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(71)【出願人】
【識別番号】317011920
【氏名又は名称】東芝デバイス&ストレージ株式会社
(74)【代理人】
【識別番号】110002907
【氏名又は名称】弁理士法人イトーシン国際特許事務所
(72)【発明者】
【氏名】中野 寛生
(72)【発明者】
【氏名】アリ モハンマドベライェット
(57)【要約】
【課題】安定して高いエントロピーの乱数を発生する。
【解決手段】 実施形態の乱数生成回路は、リングオシレータの発振出力を第1クロックを用いて取り込んで乱数値を発生するサンプリング回路と、前記サンプリング回路出力の周期性を検出する周期性検出回路と、前記サンプリング回路出力の乱数性テストを行う乱数性テスト回路と、前記周期性検出回路の検出結果に基づいて前記発振出力の発振周期を変更すると共に、前記乱数出力を複数の分割乱数に分割して前記分割乱数毎に乱数生成を行い、前記分割乱数の生成毎に前記乱数性テストを実行させる制御回路と、を具備する。
【選択図】図1
【特許請求の範囲】
【請求項1】
リングオシレータの発振出力を第1クロックを用いて取り込んで乱数値を発生するサンプリング回路と、
前記サンプリング回路出力の周期性を検出する周期性検出回路と、
前記サンプリング回路出力の乱数性テストを行う乱数性テスト回路と、
前記周期性検出回路の検出結果に基づいて前記発振出力の発振周期を変更すると共に、前記乱数出力を複数の分割乱数に分割して前記分割乱数毎に乱数生成を行い、前記分割乱数の生成毎に前記乱数性テストを実行させる制御回路と、
を具備する乱数生成回路。
【請求項2】
前記制御回路は、
前記分割乱数の生成毎に前記乱数性テストを実行した結果エラーの発生を検出した場合には、前記周期性検出回路の検出結果に基づいて前記発振周期を変更した後、前記エラーの対象となった前記分割乱数を破棄して新たに前記分割乱数の生成及び前記乱数性テストを実行させる、
請求項1に記載の乱数生成回路。
【請求項3】
前記制御回路は、
前記乱数性テストの前に、前記周期性の1回以上の検出を行い、検出結果に基づいて前記発振周期を変更する、
請求項1又は2に記載の乱数生成回路。
【請求項4】
前記制御回路は、前記分割乱数の生成毎に前記乱数性テストを実行した結果エラーの発生を検出した場合には、エラーの発生回数をカウントしカウント値が上限値に到達した場合にはエラー通知を発生するように制御する
請求項2に記載の乱数生成回路。
【請求項5】
第1のリングオシレータと、
第2のリングオシレータと、
前記第1及び第2のリングオシレータの一方の発振出力を選択するセレクタと、
前記セレクタからの前記発振出力を第1クロックを用いて取り込んで乱数値を発生するサンプリング回路と、
前記サンプリング回路出力の周期性を検出する周期性検出回路と、
前記サンプリング回路出力の乱数性テストを行う乱数性テスト回路と、
前記周期性検出回路の検出結果に基づいて前記発振出力の発振周期を変更すると共に、前記乱数出力を複数の分割乱数に分割して前記分割乱数毎に乱数生成を行い、前記分割乱数の生成毎に前記乱数性テストを実行させる制御回路と、
を具備する乱数生成回路。
【請求項6】
前記制御回路は、周期性検出回路の検出結果に基づいて前記セレクタを制御する、
請求項5に記載の乱数生成回路。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、乱数生成回路に関する。
【背景技術】
【0002】
情報通信技術の発展に伴い、情報セキュリティに対する要求が大きくなっている。情報セキュリティ技術に欠かせない鍵生成や認証等においては乱数が使用されており、乱数の品質はセキュリティ上極めて重要である。一般的に、デジタル回路により構成される乱数生成器においては、リングオシレータ(以下、ROともいう)をノイズソースとして用いることが多い。ROは、高エントロピーのデータの発生源として高い信頼性が要求される。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特許第6034153号
【発明の概要】
【発明が解決しようとする課題】
【0004】
実施形態は、安定して高いエントロピーの乱数を発生することができる乱数生成回路を提供することを目的とする。
【課題を解決するための手段】
【0005】
実施形態の乱数生成回路は、リングオシレータの発振出力を第1クロックを用いて取り込んで乱数値を発生するサンプリング回路と、前記サンプリング回路出力の周期性を検出する周期性検出回路と、前記サンプリング回路出力の乱数性テストを行う乱数性テスト回路と、前記周期性検出回路の検出結果に基づいて前記発振出力の発振周期を変更すると共に、前記乱数出力を複数の分割乱数に分割して前記分割乱数毎に乱数生成を行い、前記分割乱数の生成毎に前記乱数性テストを実行させる制御回路と、を具備する。
【図面の簡単な説明】
【0006】
図1】本発明の一実施形態に係る乱数生成回路を示すブロック図。
図2図1中のイネーブル付きFF42の具体的な構成の一例を示す回路図。
図3図1中のイネーブル付きFF42の具体的な構成の一例を示す回路図。
図4】発振周期可変のRO21の具体的な構成の一例を示す回路図。
図5】周期性検出回路25及び乱数性テスト回路26の回路構成の一例を示す回路図。
図6】乱数性テスト回路26の回路構成の一例を示す回路図。
図7】周期性検出回路25及び乱数性テスト回路26の一部の回路構成の一例を示す回路図。
図8】周期性検出回路25及び乱数性テスト回路26の一部の回路構成の一例を示す回路図。
図9】本実施形態の動作を説明するためのフローチャート。
図10】本実施形態の動作タイミングを示すタイミングチャート。
図11】周期性検出時のタイミングチャート。
図12】乱数性テスト時のタイミングチャート。
図13】シフトレジスタ群40に供給されるイネーブル信号SHIFTENy_p3を説明するためのタイミングチャート。
図14】実施形態の動作の具体例を示すタイミングチャート。
図15】実施形態の動作の具体例を示すタイミングチャート。
【発明を実施するための形態】
【0007】
以下、図面を参照して本発明の実施形態について詳細に説明する。
【0008】
(実施形態)
図1は本発明の一実施形態に係る乱数生成回路を示すブロック図である。本実施形態は、リングオシレータ(RO)を含むROユニット内に乱数性テスト回路を設け、所定ビット数の乱数を複数に分割して生成し、分割した乱数(以下、分割乱数という)毎に乱数性テストを実施することで、RO発振などの発熱に伴うROの発振周期変化のドリフト量を低減して乱数性テストのエラー発生回数を削減し、安定して高いエントロピーの乱数を得ることを可能にするものである。
【0009】
図1において、乱数生成回路1は、制御回路10、複数のROユニット20_0,20_1…,20_n(以下、これらのROユニットを代表してROユニット20という)、後処理回路30、シフトレジスタ群40、リトライカウンタ50及び比較器60を含んで構成される。制御回路10は、ROユニット20とシフトレジスタ群40、リトライカウンタ50の動作の制御を行う。乱数生成回路1は、NAND回路やNOR回路、フリップフロップ回路などの論理回路で構成される。論理回路は一般的に、入力および出力信号の仕様とフローチャート、タイミングチャートを元にハードウェア記述言語でソースコードとして機能記述され、ソースコードを論理合成ツールにより論理回路に変換することにより実現される。なお、乱数生成回路1は、図示しないホスト装置等の上位システムにより、乱数生成の指示が与えられて、乱数を生成する。また、乱数生成回路1には、図示しないシステムクロックCKと非同期リセットRESETNが入力される。乱数生成回路1に使用されるフリップフロップ(以下、FF)のクロックにはシステムクロックCKが入力される。FFは、システムクロックCKの立ち上がりエッジでFFの入力を取り込み、FFの出力とする。非同期リセットRESETN=0で、乱数生成回路1内のFFは全て0に初期化される。
【0010】
ROユニット20_0~20_nの構成は相互に同一である。ROユニット20は、2つのリングオシレータ(RO)21a,21bを有する。RO21a,21bは、相互に同一構成であり、動作温度や電圧、回路構成や配線長、製造ばらつきなどに依存した周期で発振し、論理値“1”又は“0”を交互に出力する。なお、RO21aは主発振回路(主)であり、RO21bはRO21aのバックアップ発振回路(backup)である。
【0011】
RO21aの発振出力はFF22aに供給される。FF22aは、乱数生成回路1に入力されるシステムクロックCK(図示省略)に同期してRO21aの発振出力を取り込んでFF23aに出力する。FF23aは、システムクロックCKに同期してFF22aの出力を取り込んでセレクタ24の入力端(0)に出力する。また、RO21bの発振出力はFF22bに供給される。FF22bは、システムクロックCKに同期してRO21bの発振出力を取り込んでFF23bに出力する。FF23bは、システムクロックCKに同期してFF22bの出力を取り込んでセレクタ24の入力端(1)に出力する。セレクタ24は、制御回路10からの選択信号(Select)によって制御されて入力端(0)又は入力端(1)を選択することで、FF23aの出力か、又は、FF23bの出力のいずれかを出力する。
【0012】
RO21a,21bの発振出力(以下、RO発振出力)とシステムクロックCKとは非同期である。FF22a,22b(以下、これらのFFを代表してFF22という)は、それぞれRO発振出力を、RO発振出力と非同期のシステムクロックCKによりサンプリングする。RO発振出力の周期(以下、RO発振周期という)とシステムクロックCKのクロック周期が倍数の関係に近い場合には、RO発振出力とシステムクロックCKの位相関係が変わりにくく、システムクロックCKの立ち上がりエッジで取り込むRO発振出力の値が同じになり易く、FF22の出力には固定値が続き易くなる。RO発振周期とシステムクロックCKのクロック周期がちょうど倍数の関係の場合には、FF22の出力には固定値が続く。システムクロックCK周期がRO発振周期の倍数でない場合、FF22の出力はシステムクロックCK周期とRO発振周期の最小公倍数で決まる周期性を持ったデータとなる。また、システムクロックCKの立ち上がりエッジとRO発振出力の立ち上がりエッジまたは立下りエッジの重なるタイミングが現れることがあり、RO発振出力のジッター(ゆらぎ)やFF22のメタステーブルによって、FF22の出力は不規則な値となる。この不規則な値がエントロピーにつながり、乱数性の元となる。
【0013】
なお、FF22でメタステーブルが発生した場合、FF22の出力は一時的に不安定な状態になる。FF22a,FF22bの出力をそれぞれ2段目のFF23a,FF23b(以下、これらのFFを代表してFF23という)によって取り込むことで、メタステーブルが収まった後の確定したデータを得ることができる。こうして、FF22,23によりRO発振出力のサンプリング回路が構成される。RO発振出力のジッターやFF22のメタステーブルによって、FF23から不規則な値を得られる。この不規則さがエントロピーであり、上述したように、エントロピーが大きい程、乱数を用いた認証等におけるセキュリティ強度を向上させることができる。FF23から得られるエントロピーは少ないため、後処理回路30によりエントロピーの蓄積を行う。
【0014】
セレクタ24は、制御回路10から選択信号(Select)に基づいて選択したFF23の出力を後処理回路30に出力する。後処理回路30は、セレクタ24の出力(ROユニット出力)のエントロピーを蓄積し、シフトレジスタ群40に入力するエントロピーを増大させる。
【0015】
後処理回路30は、FF31_0,31_1…,31_n(以下、これらのFFを代表してFF31という)と排他的論理和回路(以下、EXORという)32_0,32_1…,32_n(以下、これらのEXORを代表してEXOR32という)とを含む。EXOR32_0,32_1…,32_nの一方入力端には、それぞれROユニット20_0,20_1,…、20_nの出力データが与えられる。FF31_0,31_1…,31_nは、それぞれEXOR32_0,32_1…,32_nの出力が入力され、入力されたデータをシステムクロックCKに同期して取り込んでそれぞれROユニット20_0,20_1,…、20_nの他方入力端に出力する。
【0016】
EXOR32_0,32_1,…,32_nは、2入力の排他的論理和演算を行って、FF31_0,31_1,…31_nに出力すると共にEXOR33にも出力する。EXOR33は、EXOR32_0,32_1…,32_nの出力が入力され、これらの入力の排他的論理和演算を行って、後処理回路30の出力としてシフトレジスタ群40に出力する。
【0017】
FF31とEXOR32とのループによる自己フィードバックにより、ROユニット出力が加算され、FF31にエントロピーが蓄積される。また、各EXOR32の出力をEXOR33によって加算する。EXOR33による加算により、各ROユニット20のROユニット出力のエントロピーを足し合わせることで、エントロピーを増大させたデータをシフトレジスタ群40に出力することが可能となる。すなわち、FF23出力のエントロピーが比較的低い場合でも、後処理回路30により高エントロピーのデータを得ることが可能になる。
【0018】
なお、FF31とEXOR32のフィードバックループでは、例えば、ROユニット出力を例えば4回繰り返し加算する。この場合、ROユニット20からはシステムクロックCKの1クロックで1ビットのデータが出力されるので、FF31とEXOR32のループからはシステムクロックCKで4クロックに1回、1ビットのデータが出力される。この1ビットのデータがEXOR33を介してシフトレジスタ群40に出力される。
【0019】
本実施形態においては、後述するように、乱数生成を分割する。例えば、乱数生成を4分割し4つの分割乱数を生成するものとし、シフトレジスタ群40は、この4つの分割乱数に対応する4段のシフトレジスタ41_0,41_1,41_2,41_3(以下、これらのシフトレジスタを代表してシフトレジスタ41という)を有する。なお、乱数のビット数及び分割乱数の数は4に限定されるものではなく、適宜の数を設定することができる。
【0020】
各シフトレジスタ41は相互に同一構成であり、m段(例えば256段)のイネーブル付きFF42を有する。シフトレジスタ41の初段のイネーブル付きFF42には、EXOR33の出力が入力される。イネーブル付きFF42は、イネーブル信号SHIFTENy_p3(yは0~3)によって入力端のデータ取り込みが許可され、システムクロックCKに同期して入力端のデータを出力端から出力する。各イネーブル付きFF42は、出力を次段のイネーブル付きFF42の入力端に出力する。初段から最終段までのイネーブル付きFF42の出力が、乱数生成回路1の出力(乱数出力)の各ビット値となる。
【0021】
図2及び図3図1中のイネーブル付きFF42の具体的な構成の一例を示す回路図である。図2の例はイネーブル付きFF42をセレクタ42a及びFF42bにより構成したものである。図3の例はイネーブル付きFF42をDラッチ43a、AND回路43b及びFF43cにより構成したものである。
【0022】
図2において、セレクタ42aは、入力端(1)にイネーブル付きFF42への入力信号DINが与えられ、入力端(0)にFF42bの出力が与えられる。セレクタ42aは、イネーブル信号SHIFTENy_p3によって、入力信号DIN又はFF42bの出力を選択してFF42bに出力する。イネーブル信号SHIFTENy_p3によってセレクタ42aの入力端(1)が選択される場合には、イネーブル付きFF42は、通常のFFとして機能する。また、イネーブル信号SHIFTENy_p3によってセレクタ42aの入力端(0)が選択される場合には、イネーブル付きFF42は、出力を保持する。
【0023】
後処理回路30からは例えばシステムクロックCKの4クロックに1回1ビットのデータが出力される。イネーブル信号SHIFTENy_p3は、後処理回路30の出力に対応するタイミングでセレクタ42aに後処理回路30の出力を取り込ませる。これにより、各シフトレジスタ41には、システムクロックCKの4クロック毎の後処理回路30の出力が順次入力されて、各イネーブル付きFF42に転送される。こうして、例えば、システムクロックCKの1024クロックで、256段の1つのシフトレジスタ41から256ビットの出力が得られる。後処理回路30からの出力を取り込むシフトレジスタ41をシフトレジスタ41_0,41_1,41_2,41_3で順次切換えることにより、各シフトレジスタ41により、256×4=1024ビットの乱数出力を得ることができる。
【0024】
図3において、Dラッチ43a及びAND回路43bにより、ゲーテッドクロックモジュールが構成される。このゲーテッドクロックモジュールは、システムクロックCKが“0”のタイミングでイネーブル信号SHIFTENy_p3を取り込んで、取り込んだイネーブル信号が“1”だった場合に、次にシステムクロックCKが“1”になるタイミングで、AND回路43bによりFF43cにシステムクロックCKを与える。これにより、FF43cは、イネーブル信号SHIFTENy_p3に指定される期間のシステムクロックCKによって、入力信号DINを出力する。このように、図3の回路においても、図2と同様のイネーブル付きFF42を構成することができる。
【0025】
本実施形態においては、各ROユニット20には、周期性検出回路25及び乱数性テスト回路26が設けられている。上述したように、システムクロックCKのクロック周期が倍数の関係に近い場合には、ROユニット出力は固定値が続き易く、エントロピーは小さい値となる。周期性検出回路25は、ROユニット出力の周期性を検出して、検出結果に基づいて制御回路10はRO21の発振周期を変化させる制御を行う。
【0026】
図4は発振周期可変のRO21の具体的な構成の一例を示す回路図である。
【0027】
図4において、RO21は、NOR回路N1、EXOR27、遅延素子IN1,IN2,IN3及びセレクタSE1により構成される。セレクタSE1には、端子(00)にEXOR27の出力が入力され、端子(01)に遅延素子IN1の出力が入力され、端子(10)に遅延素子IN2の出力が入力され、端子(11)に遅延素子IN3の出力が入力される。セレクタSE1は、制御回路10からの例えば2ビットの選択信号SEL[1:0]の(00)、(01)、(10)又は(11)によって、それぞれ端子(00)、端子(01)、端子(10)又は端子(11)の入力を選択して出力する。セレクタSE1の出力はNOR回路N1の一方入力端に供給されると共に、RO21の出力としてFF22に供給される。NOR回路N1の他方入力端には、制御回路10からの信号INITが入力される。EXOR27は、一方入力端にNOR回路N1の出力が入力され、他方入力端に制御回路10からの信号STOPが入力される。
【0028】
NOR回路N1は、信号INITが“0”の場合にはインバータとして機能し、信号INITが“1”の場合には、出力が“0”に固定される。また、EXOR27は、信号STOPが“0”の場合には入力をそのまま出力し、信号STOPが“1”の場合にはインバータとして機能する。
【0029】
いま、信号INITが“0”であり、信号STOPが“0”であるものとする。この場合には、EXOR27は、NOR回路N1の出力をそのまま出力する。いま、セレクタSE1が端子(00)を選択しているものとすると、NOR回路N1の出力は、EXOR27及びセレクタSE1を介してNOR回路N1の一方入力端に供給されることになり、RO21は1段のインバータにより構成されて、特定の周期で発振する。ここで、発振周期は動作温度や電圧以外に、回路の製造プロセスや使用回路の駆動能力、回路の接続に使用される配線幅や配線長、その他、製造ばらつきなどにも依存する。なお、信号STOPが“1”の場合には、EXOR27はインバータとして機能するので、RO21は2段のインバータにより構成されることになり発振を停止する。また、信号INITが“1”になると、NOR回路N1は固定値を出力することになり、RO21は発振を停止する。
【0030】
即ち、信号STOPは、“1”で発振停止、“0”で発振を制御するものである。また、信号INITは、“1”でRO発振出力の初期化と停止を制御し、通常動作時は“0”である。
【0031】
セレクタSE1が端子(01)を選択すると、NOR回路N1、EXOR27及びSE1のループ中に1段の遅延素子が挿入されることになり、RO21の発振周期が長くなる。また、セレクタSE1が端子(10)を選択すると、NOR回路N1、EXOR27及びSE1のループ中に2段の遅延素子が挿入されることになり、RO21の発振周期が更に長くなる。更に、セレクタSE1が端子(11)を選択すると、NOR回路N1、EXOR27及びSE1のループ中に3段の遅延素子が挿入されることになり、RO21の発振周期が最も長くなる。
【0032】
例えば、システムクロックCKの周期(以下、システムクロック周期という)が120nsであり、選択信号SEL[1:0]=(00)をセレクタSE1に与えた場合のRO発振周期が10nsであるものとする。また、選択信号SELを1段階変えてNOR回路N1、EXOR27及びSE1のループ中の遅延素子の個数を1個増加させると、RO発振周期が2ns長くなるものとする。即ち、この場合には、選択信号SEL[1:0]=(01)をセレクタSE1に与えるとRO発振周期は12nsとなり、選択信号SEL[1:0]=(10)をセレクタSE1に与えるとRO発振周期は14nsとなり、選択信号SEL[1:0]=(11)をセレクタSE1に与えるとRO発振周期は16nsとなる。
【0033】
即ち、選択信号SEL[1:0]=(00),(01)の場合には、システムクロック周期とRO発振周期とは倍数の関係であるが、選択信号SEL[1:0]=(10),(11)の場合には、システムクロック周期とRO発振周期とは倍数の関係にならない。つまり、選択信号SELを変化させることで、システムクロック周期とRO発振周期とが倍数の関係になることを防止することが可能である。
【0034】
なお、図4ではRO21がRO発振周期として4つの周期を発生可能な例を示したが、RO21が発生可能な周期は4つに限定されるものではなく、適宜の数のRO発振周期を発生可能に構成されていてもよい。
【0035】
(周期性検出回路/乱数性テスト回路)
周期性検出回路25は、ROユニット出力について、例えば、以下の(a1),(b1)の2つの条件を判定する周期性検出を実施する。周期性検出回路25は、(a1),(b1)のいずれか一方の条件を満足すると、ワーニング(Warning)を制御回路10に出力する。
【0036】
(a1)同一論理の1ビットが連続10回続いた場合
(b1)同一論理の3ビットまたは同一論理の4ビットが連続24クロック続いた場合
周期性検出回路25からワーニングが出力されると、制御回路10は、RO21の発振周期を変化させる。これによりワーニングを解消できる場合がある。
【0037】
乱数性テスト回路26は、ROユニット出力について、例えば、以下の(a2)~(c2)の3つの条件を判定する乱数性テストを実施する。乱数性テスト回路26は、(a2)~(c2)のいずれか1つの条件を満足すると、エラー(Error)を制御回路10に出力する。
【0038】
(a2)同一論理の1ビットが連続21回続いた場合
(b2)先頭ビットと同じ値が1024ビット中に、589回以上または435回以下で出現した場合
(c2)同一論理の10ビット、12ビット、14ビット、16ビットが連続152クロック続いた場合
制御回路10は、乱数を分割した分割乱数を生成するように各部を制御しており、乱数性テスト回路26は、分割乱数の元となるROユニット出力について乱数性テストを実施する。乱数性テスト回路26により分割乱数の元となるROユニット出力についての乱数性テストによりエラーが検出されると、制御回路10は、当該エラーとなった分割乱数を再生成するようになっている。
【0039】
ROユニット20のRO21に生じるジッター(RO発振周期のゆらぎやRO発振出力の立ち上がり、立下りエッジのタイミングのゆらぎ)やFF22で発生するメタステーブルがエントロピーの発生源となるが、RO発振時などの発熱により、RO発振周期は変化する。RO発振周期の変化量が多いと、RO発振周期とシステムクロックCKのクロック周期が倍数の関係になる機会が増えて、RO発振周期とシステムクロックCKのクロック周期が倍数の関係に近い場合は、FF23の出力に固定値が続き、FF23からエントロピーを得にくくなり、乱数性テスト回路26でもエラーが発生しやすくなる。本実施形態においては、乱数生成を分割して乱数性テスト期間を短くすることで、発熱等の影響によるRO発振周期変化の変化量を低減し、乱数性テストにおいてエラーを生じにくくし、エラーが発生しても当該エラーとなった分割乱数を再生成することで、高エントロピーの乱数を得るようになっている。
【0040】
図5は上記(a1)又は(a2)の条件(同一論理の1ビットが連続C回)による周期性検出及び乱数性テストを可能にする周期性検出回路25及び乱数性テスト回路26の回路構成の一例を示す回路図である。
【0041】
図5において、xはROユニット出力であり、en1stは、周期性検出/乱数性テスト開始時に1クロックだけ“1”となる信号であり、en2nd_to_lastは、周期性検出/乱数性開始後の次のクロックから、周期性検出/乱数性終了まで“1”となる信号である。また、aは、xをEN=“1”(en1st=“1”またはx_a_not_equal=“1”)で取り込んだ値であり、x_a_not_equalは、xとaが異なる場合に“1”となる信号である。
【0042】
周期性検出/乱数性テストの開始時にen1stが“1”となることによって、OR回路70の出力により、入力されたxは、FF71に取り込まれてaとして比較器72に出力される。比較器72は、xとaとを比較して一致しているか否かの比較結果をAND回路73に出力する。AND回路73にはen2nd_to_lastも入力されており、x=aの場合には、AND回路73からはシステムクロックCK毎に“1”が出力される。同期カウンタ75は、UPに“1”が入力されると、保持している値に1を加算し、加算結果を比較器76に出力する。
【0043】
比較器72の出力はインバータ74にも与えられており、インバータ74は、順次入力されるxの論理値が変化することによって、“1”となるx_a_not_equalを出力する。x_a_not_equalの“1”により、FF71は、xを取り込んで比較器72にaを出力する。また、同期カウンタ75は、“1”のx_a_not_equalがSET1に入力されると、保持している値を1に初期化する。こうして、同期カウンタ75のカウント値は、xの論理が反転するまで増加することになる。
【0044】
比較器76は設定値Cが与えられており、同期カウンタ75のカウント値、即ち、同一論理が連続する数が設定値に到達すると、“1”を出力する。設定値Cは、周期性検出回路25では例えば10とし、乱数性テスト回路26では、21とする。
【0045】
比較器76の“1”出力は、OR回路77を介してAND回路78の一方入力端に与えられる。AND回路78の他方入力端にはインバータ80を介してen1stの反転信号が入力され、AND回路78は、周期性検出/乱数性テストの開始後において、OR回路77からの1出力をFF79に出力する。FF79は、AND回路78からの“1”出力をシステムクロックCKの立ち上がりエッジのタイミングで、エラー(Error)又はワーニング(warning)として出力する。なお、FF79の出力は、en1stが“1”となるまで保持される。即ち、FF79の出力は、上記(a1)又は(a2)の条件によるワーニング(warning)又はエラー(Error)出力を示す。
【0046】
図6は上記(b2)の条件による乱数性テストを可能にする乱数性テスト回路26の回路構成の一例を示す回路図である。図6において図5と同一の構成要素及び同一の信号には同一符号を付して説明を省略する。
【0047】
図6において、enlast_p1は、周期性検出/乱数性テスト終了後に1クロックだけ“1”となる信号である。周期性検出/乱数性テストの開始時にen1stが“1”となることによって、入力されたxはFF71に取り込まれてa(先頭ビットの値)として比較器72に出力される。比較器72は、a(先頭ビットの値)と入力されるxとを比較し、xが先頭ビットと同一論理の場合に“1”をAND回路73を介して同期カウンタ75に出力する。
【0048】
同期カウンタ75は、UPに“1”が入力されると、保持している値に1を加算し、加算結果を比較器76に出力する。同期カウンタ75は、“1”のen1stがSET1に入力されると、保持している値を1に初期化する。こうして、同期カウンタ75のカウント値は、周期性検出/乱数性テストの開始時の先頭ビットの論理値と同じ論理値のビット数を示すものとなる。
【0049】
同期カウンタ75の出力は比較器82,83に与えられる。比較器82は、同期カウンタ75のカウント値と設定値C1とを比較し、カウント値が設定値C1以上になると“1”をOR回路77に出力する。また、比較器83は、同期カウンタ75のカウント値と設定値C2とを比較し、カウント値が設定値C2以下になると“1”をOR回路77に出力する。OR回路77は、2入力の少なくとも一方が“1”になると、“1”をFF84に出力する。設定値C1は589とし、設定値C2は435とする。FF84は、OR回路77からの“1”出力を、enlast_p1が“1”の期間にシステムクロックCKの立ち上がりエッジのタイミングで、エラー(Error)として出力する。即ち、FF84の出力は、上記(b2)の条件によるエラー(Error)出力を示す。
【0050】
図7及び図8は上記(b1)又は(c2)の条件(同一論理のnビットがTクロック連続)による周期性検出及び乱数性テストを可能にする周期性検出回路25及び乱数性テスト回路26の回路構成の一例を示す回路図である。図7及び図8において図5と同一の構成要素及び同一の信号には同一符号を付して説明を省略する。周期性検出回路25及び乱数性テスト回路26の回路は、図7及び図8に示す回路を含む。
【0051】
図7はシフトレジスタを示している。図7のシフトレジスタは縦続接続された2n個のFFを含む。これらのFFは、入力を次段のFFに出力する。各FFの出力は、R1[X]、R2[X](Xは0~n-1)である。初段のFFにはROユニット出力xが入力される。初段からn個のFFは、ROユニット出力をnシステムクロックCKだけ順次シフトさせ、第n段からn個のFFは、第n-1段の出力R1[n-1]をnシステムクロックCKだけ順次シフトさせる。従って、R1[X]とR2[X]とは、nビットずれたROユニット出力を示している。
【0052】
図8は複数の比較器72_0,72_1,…,72_n(以下、これらの比較器を代表して比較器72という)を含む。比較器72_0にはR1[0]とR2[0]とが入力される。また、比較器72_1には、R1[1]とR1[2]とが入力される。同様に、比較器72には、R1[X]とR2[X]とが入力される。各比較器72は、2入力の論理が一致している場合に“1”をAND回路81に出力する。AND回路81は、全比較器72の出力が“1”の場合に“1”を出力する。即ち、AND回路81は、連続するROユニット出力のnビットが同一論理であると共に、連続するROユニット出力のnビット同士が同一論理である場合には“1”を出力する。即ち、AND回路81の出力の“1”は、同一論理のnビットが連続した状態を示す。
【0053】
AND回路81の出力はdet信号としてAND回路85及びインバータ86に与えられる。AND回路85は、en2nd_to_lastが“1”になった以降において、AND回路81の出力を同期カウンタ75に与える。インバータ86は、AND回路81の出力を反転させてOR回路87に出力する。OR回路87は、周期性検出/乱数性テスト開始時に1クロックだけ“1”となる信号en1stとインバータ86の出力の論理和をAND回路78のSET1端子に出力する。これにより、同期カウンタ75は、周期性検出/乱数性テストの開始後に、AND回路81の出力の“1”により初期化されて、AND回路85の“1”をカウントアップする。
【0054】
こうして、同期カウンタ75は、ROユニット出力の同一論理のnビットが連続何クロック続いたかを示すカウント値を出力する。同期カウンタ75の出力は比較器76に供給される。比較器76は設定値T-2nが与えられており、同期カウンタ75のカウント値、即ち、同一論理のnビットが連続するクロック数が設定値に到達すると、“1”を出力する。比較器76の出力がOR回路77及びAND回路78を介してFF79から出力される。即ち、FF79からは、上記(b1)又は(b3)の条件によるワーニング(warning)又はエラー(Error)出力が出力される。
【0055】
なお、同一論理の3ビットが連続24クロック続くことを検出する場合には、n=3、T=24とし、同一論理の4ビットが連続24クロック続くことを検出する場合には、n=4、T=24とし、同一論理の10ビットが連続152クロック続くことを検出する場合には、n=10、T=152とし、同一論理の12ビットが連続152クロック続くことを検出する場合には、n=12、T=152とし、同一論理の14ビットが連続152クロック続くことを検出する場合には、n=14、T=152とし、同一論理の16ビットが連続152クロック続くことを検出する場合には、n=16、T=152として、各部を構成すればよい。
【0056】
全ての周期性検出及び乱数性テストを実施する場合には、単純には6通りの構成を実装すればよいが、シフトレジスタはn=16(FFは32個)用の構成があれば、共用可能である。また、同期カウンタ75についても、先に1になったdet信号を優先することにより共用可能である。
【0057】
乱数生成の開始時には、制御回路10は、先ず、セレクタ24に端子(0)を選択させる。これにより、RO21aの出力に基づくROユニット出力について周期性検出回路25による周期性検出が実施される。周期性検出回路25からワーニングが発生すると、制御回路10はSEL[1:0]の値を+1する。周期性検出で4回のワーニングが発生すると、制御回路10はSEL[1:0]の値を“0”にし、選択信号Selectによりセレクタ24に端子(1)を選択させる。これにより、以後、RO21bの出力に基づくROユニット出力について周期性検出回路25による周期性検出が実施される。選択信号SelectをSEL[2]とすると、制御回路10は、ワーニング発生でSEL[2:0]の値を+1する動作を行うことになる。
【0058】
制御回路10は、ROユニット20からエラーが発生すると、リトライカウンタ50にエラー回数をカウントさせる。リトライカウンタ50は、エラー回数をカウントし、カウント結果を比較器60に出力する。比較器60は、リトライカウンタ50のカウント結果が所定の閾値を超えると、乱数生成にエラーが生じたことを示すエラー出力(エラー通知)を図示しないホスト装置等の上位システムに出力する。
【0059】
(作用)
次に、このように構成された実施形態の動作について図9から図15を参照して説明する。図9は本実施形態の動作を説明するためのフローチャートである。図10は本実施形態の動作タイミングを示すタイミングチャートである。
【0060】
本実施形態においては、1024ビットの乱数出力を各256ビットずつの4つの分割乱数に分割して生成する例について説明する。後処理回路30は4クロックで1ビットを出力するので、ROユニット20から1024ビットのROユニット出力が出力されることで、1つの分割乱数が生成される。
【0061】
(概要)
図10は1024ビットの乱数出力を得るまでの動作タイミングを示している。なお、図10の例は、乱数性テストの結果、エラーが発生していないと判定された場合を示している。図10では図示しないホスト装置等の上位システムから供給される乱数生成の開始を指示するスタート信号(START)及び制御回路10から出力されるビジー信号(BUSY)に対応させて各動作のタイミングを矢印の期間によって示している。
【0062】
スタート信号のパルスによって、乱数生成が開始される。先ず、256クロック(以下、クロックはシステムクロックCKを示す)の助走期間において、7回の周期性検出が実施される。助走期間が終了すると、1024クロックの期間で出力される1024ビットのROユニット出力を用いて256ビットの分割乱数が生成されると共に乱数性テストが実施される。次の34クロックで乱数性テストのエラーチェック及び周期性検出等が行われる。以後、分割乱数の生成及びエラーチェック等が3回繰返されて、1024ビットの乱数出力が得られる。
【0063】
(助走期間)
図9において、制御回路10は、スタート信号のパルスが入力されると、シフトレジスタ群40を制御するイネーブル信号SHIFTENy_p3のyを先ずy=0とする(S1)。次に、制御回路10は、助走期間を実施する(S2)。
【0064】
(周期性検出)
高エントロピーの乱数出力を得るためには、システムクロック周期とRO発振周期とが倍数の関係にならないようにする必要がある。そこで、乱数生成の前に256クロックの助走期間を設けて、RO発振周期を調整する。図4の例では、RO21a,21bはそれぞれ発振周期を4つの周期に設定可能である。従って、RO発振周期を最大7回切り替えることで、RO21により発生可能なRO発振出力に基づくROユニット出力の周期性テストを行うことができる。このRO発振周期の変更に用いる選択信号SELとして3ビットの選択信号SEL[2:0]を用い、下位2ビットの選択信号SEL[1:0]をRO21の周期変更に用い、上位1ビットの選択信号SEL[2]をセレクタ24の切り替えに用いる。
【0065】
具体的には、制御回路10は、RO21aに対する選択信号SEL[1:0]を(00)から(01),(10),(11)に順次切換え、また、RO21bに対する選択信号SEL[1:0]を(00)から(01),(10),(11)に順次切換える。なお、RO21bに対する最後の選択信号SEL[1:0]=(11)を設定した場合には、以後切り替えるべき周期が存在しないので、この選択信号SEL[1:0]=(11)に基づくRO発振周期のRO発振出力が以後の分割乱数の生成に用いられる。
【0066】
図11は周期性検出時のタイミングチャートを示している。図11は、選択信号SEL[2:0]、信号INIT、信号PDET_en1st及び信号PDET_en2nd_to_lastを示している。なお、図11では、周期性検出回路25に供給される図5及び図8の信号en1st及びen2nd_to_lastをそれぞれ信号PDET_en1st及び信号PDET_en2nd_to_lastとして示している。
【0067】
制御回路10は、スタート信号のパルスの入力によって、信号INITを“0”から“1”にして、RO発振出力を初期化した後、信号INITを“0”に戻す。制御回路10はこの初期化後の最初の4クロックは助走期間として待機する。次に、制御回路10は、周期性検出開始を示すen1stを1クロックだけ“1”にした後、信号en2nd_to_lastを周期性検出開始の次のクロックから、周期性検出終了まで“1”にする。周期性検出回路25は、これらの信号が入力されて、周期性検出を実施する。図11の例では、周期性検出回路25は、24クロックで周期性検出を行い、次の3クロックで条件を満足するか否かの判定と、制御回路11への判定結果通知を行う。こうして、周期性検出回路25は、32クロックで1回の周期性検出を行う。
【0068】
周期性検出回路25から周期性検出の結果のワーニングが制御回路10に供給された場合には、制御回路10は、選択信号SEL[2:0]を+1する。例えば、スタート信号のパルス入力直後は、選択信号SEL[2:0]=(000)であり、ワーニングが発生する毎に選択信号SEL[2:0]は、(001),(010),(011),…と変化する。こうして、ワーニングが発生すると、RO21のRO発振周期が切り替わる。なお、例えば、スタート信号のパルス入力直後はセレクタ24には選択信号Select(SEL[2]=(0))が供給されてRO21aからのFF23出力が選択されるが、4回目のワーニングの発生によって、制御回路10は選択信号SEL[2]=(1)に変更してRO21bからのFF23出力を選択する。なお、この場合には、以後、乱数生成が終了するまで、選択信号Select[2]は(1)のままとなる。
【0069】
ワーニングの有無に拘わらず、周期性検出は7回実施される。制御回路10は7回の周期性検出が終了すると、32クロックの待機期間の後、乱数生成及び乱数性テストに移行する(S3)。
【0070】
(分割乱数生成及び乱数性テスト)
図12は乱数性テスト時のタイミングチャートを示している。図12は、信号RTEST_en1st、信号RTEST_en2nd_to_last及びRTEST_enlast_p1を示している。なお、図12では、周期性検出回路26に供給される図5図6及び図8の信号en1st、信号en2nd_to_last及びenlast_p1をそれぞれ信号RTEST_en1st、信号RTEST_en2nd_to_last及びRTEST_enlast_p1として示している。
【0071】
制御回路10は、分割乱数生成及び乱数性テストの期間の開始時に、シフトレジスタ群40を制御するイネーブル信号SHIFTENy_p3のyを先ずy=0とする。1クロック毎にROユニット出力は、後処理回路30及び乱数性テスト回路26に出力される。後処理回路30のFF31及びEXOR32は、4クロック期間ROユニット出力を加算して加算結果をEXOR33に出力する。EXOR33は、全EXOR32の出力を加算して出力する。EXOR33からの出力は、4クロックに1回1ビットのデータとしてシフトレジスタ群40に取り込まれる。従って、1024ビットのROユニット出力によって、256ビットの分割乱数が生成される。EXOR33からのデータ出力は、分割乱数として先ずシフトレジスタ41_0に記憶される。
【0072】
図13はシフトレジスタ群40に供給されるイネーブル信号SHIFTENy_p3を説明するためのタイミングチャートである。制御回路10は、信号SHIFTENyが“1”の期間に、イネーブル信号SHIFTENy_p3を発生する。制御回路10は、信号SHIFTENy=1からシステムクロックCKで4クロックに1回のSHIFTENy_p0を発生させる。さらにSHIFTENy_p0をシステムクロックCKで1クロックずつ遅延させて、SHIFTENy_p1,SHIFTENy_p2,SHIFTENy_p3を生成し、4クロックに1回発生するSHIFTENy_p3をシフトレジスタ群40に供給する。上述したように、シフトレジスタ41_0~4の各イネーブル付きFF42は、それぞれ、イネーブル信号SHIFTEN0_p3,SHIFTEN1_p3,SHIFTEN2_p3,SHIFTEN3_p3の“1”によって、入力データを取り込んで出力する。
【0073】
分割乱数生成及び乱数性テストの期間の開始時には、イネーブル信号SHIFTEN0_P3により、4クロックに1回、EXOR33からのデータ出力は各イネーブル付きFF42に順次転送される。こうして、シフトレジスタ41_0において、256ビットの分割乱数が保持される。
【0074】
分割乱数生成及び乱数性テストの期間の開始時には、図12に示すように、制御回路10は、乱数性テスト開始を示すen1stを1クロックだけ“1”にした後、信号en2nd_to_lastを乱数性テスト開始の次のクロックから、乱数性テスト終了まで“1”にする。1クロック毎にROユニット出力は、乱数性テスト回路26に入力される。乱数性テスト回路26は、図12に示す各信号が入力されて、乱数性テストを実施する。
【0075】
即ち、乱数性テスト回路26は、分割乱数を生成する1024ビットのROユニット出力について乱数性テストを実施する。乱数性テスト回路26は、図10に示すように、ROユニット出力1024ビットについての乱数テストの次の2クロックで乱数性テストの結果をチェックする(S4)。乱数性テストの結果がエラー無しであった場合(S4のNO判定)には、制御回路10は、ホスト装置等から要求されたビット数の乱数出力が生成されたか否かの終了条件を判定する(S7)。乱数性テストにエラーが無く、シフトレジスタ群40の全てのシフトレジスタ41に分割乱数が記憶された場合、即ち、y=3の場合には1024ビットの乱数出力が生成されており、終了条件を満足する(S7のYES判定)ので、制御回路10は処理を終了する(正常終了)。
【0076】
乱数性テストにエラーが無く、終了条件を満足しない場合(S7のNO判定)には、制御回路10は、次のS8において、yをインクリメントした後、周期性検出を1回実施する。この場合には、図10に示すように、エラーチェックの2クロック期間後の32クロックにおいて、図11の周期性検出が1回実施される。周期性検出においてワーニングが発生しない場合(S9のNO判定)には、制御回路10は、S3に処理を戻して、イネーブル信号SHIFTENy_p3(y=1)を4クロックに1回“1”にして、次に生成される分割乱数をシフトレジスタ41_1に転送する。以後、同様の動作により、全てのシフトレジスタ41に分割乱数を転送して、1024ビットの乱数出力を得る。一方、周期性検出において、ワーニングが発生した場合(S9のYES判定)には、制御回路10は、S2に移行して助走期間を実施して、次の乱数生成を実施する。なお、乱数性テストの結果のチェックの2クロック期間とこれに続く32クロックの周期性検出の期間又は助走期間とにおけるROユニット出力は乱数性テスト及び乱数出力には用いられない。
【0077】
一方、乱数性テストの結果がエラー有りであった場合(S4のYES判定)には、乱数性テスト回路26は、エラーを制御回路10に出力する。この場合には、制御回路10は、リトライカウンタ50にリトライカウンタのカウントアップを指示(S5)する。比較器60は、リトライカウンタ50のカウント値が上限に達したか否かを判定する(S6)。リトライカウンタ50カウント値が上限に達していない場合(S6のNO判定)には、制御回路10は、S2に移行して助走期間を実施し、更に、分割乱数の生成と乱数性テストとを繰り返す。なお、この場合には、前回の乱数性テストにおいてエラー有りと判定された分割乱数については破棄し、新たに生成された分割乱数を乱数出力に用いる。リトライカウンタ50のカウント値が上限に達した場合(S6のYES判定)には、比較器60は、リトライカウンタ50の出力に基づいて、エラー出力(エラー通知)を発生して、乱数生成処理を終了する。なお、エラー出力は、ホスト装置等に供給される。
【0078】
(動作の具体例)
次に、図14及び図15のタイミングチャートを参照して動作の具体例について説明する。図14は助走期間における2回目の周期性検出においてワーニングが発生した場合の乱数生成を示すタイミングチャートである。また、図15は助走期間における2回目の周期性検出においてワーニングが発生し、更に、1つ目の分割乱数を生成するROユニット出力に対する乱数性テストによってエラーが発生した場合の乱数生成を示すタイミングチャートである。なお、図14及び図15における信号名は、上記説明における信号名と同様である。なお、イネーブル信号SHIFTENy_p3をイネーブル信号SHIFTENy(y=0~3)と表記する。また、周期性検出回路25からのワーニングは、PDET_warningと表記し、乱数性テスト回路26からのエラーは、RTEST_errorと表記する。また、リトライカウンタ50のカウント値の上限値を超えた場合の比較器60からのエラーは、RNG_ERRORと表記し、分割乱数を含む乱数出力は、RNG_OUT[1023:0]と表記する。
【0079】
図14において、スタート信号(START)のパルス入力の後、信号INITによりRO発振出力が初期化され、選択信号SEL[2:0]=(000)により、RO21aのRO発振周期が設定される。PDET_en1stにより周期性検出が開始され、PDET_en2nd_to_lastの“1”の期間に周期性検出が実施される。図14に示すように、ワーニングの発生の有無に拘わらず、32×7クロックの助走期間において、7回の周期性検出が実施される。
【0080】
図14の例では、2回目の周期性検出の後、周期性検出回路25からワーニング(PDET_warnning)が発生したことを示している。これにより、選択信号SEL[2:0]が(001)に変化し、RO21aのRO発振周期が変更される。以後、助走期間においては、周期性検出回路25からのワーニングは発生しておらず、選択信号SEL[2:0]=(001)に基づくRO発振周期のRO発振出力が乱数生成に用いられる。
【0081】
助走期間から32クロックの後、RTEST_en1stにより乱数性テストが開始され、RTEST_en2nd_to_lastの“1”の期間、RTEST_enlast_p1による乱数性テストの終了までの期間において、分割乱数生成及びこの分割乱数を生成するROユニット出力に対する乱数性テストが実施される。
【0082】
図14の例では、乱数性テスト回路26からはエラーは発生しておらず、分割乱数生成及び乱数性テスト後において、PDET_en1st及びPDET_en2nd_to_lastによる1回の周期性検出が実行される。以後、分割乱数生成及び乱数性テストと周期性検出が繰り返される。4回目の分割乱数生成時の乱数性テストに対してエラーが発生していないことから、図14の例では乱数生成が終了し、ビジー信号(BUSY)が“0”となる。こうして、図14の例では、256ビットの分割乱数が4回生成されて、1024ビット乱数出力が得られる。
【0083】
図15において、助走期間の動作は図14と同じである。また、図14と同様に、助走期間から32クロックの後、RTEST_en1stにより乱数性テストが開始され、RTEST_en2nd_to_lastの“1”の期間、RTEST_enlast_p1による乱数性テストの終了までの期間において、分割乱数生成及びこの分割乱数を生成するROユニット出力に対する乱数性テストが実施される。
【0084】
図15の例では、1つ目の分割乱数生成時の乱数性テストのエラーチェックの結果、乱数性テスト回路26からRTEST_errorが発生したことを示している。制御回路10は、このRTEST_errorを受信すると、再度助走期間を設定する。即ち、図15に示すように、制御回路10は、信号INITによりRO発振出力を初期化し、選択信号SEL[2:0]=(000)により、セレクタ24の端子(0)を選択すると共に、RO21aのRO発振周期を初期の状態に戻す。制御回路10は、PDET_en1stにより周期性検出を開始し、PDET_en2nd_to_lastの“1”の期間に周期性検出を実施する。図15に示すように、ワーニングの発生の有無に拘わらず、32×7クロックの助走期間において、7回の周期性検出が実施される。
【0085】
図15の例では、7回目の周期性検出の期間、周期性検出回路25からワーニング(PDET_warnning)は発生しておらず、RO21aのRO発振周期は変更されていない。従って、選択信号SEL[2:0]=(000)に基づくRO発振周期のRO発振出力が乱数生成に用いられる。
【0086】
助走期間から32クロックの後、RTEST_en1stにより乱数性テストが開始され、RTEST_en2nd_to_lastの“1”の期間、RTEST_enlast_p1による乱数性テストの終了までの期間において、分割乱数生成及びこの分割乱数を生成するROユニット出力に対する乱数性テストが実施される。なお、この場合には、前回エラーとなった1つ目の分割乱数を破棄し、新たな1つ目の分割乱数の生成及びこの分割乱数を生成する1024ビットのROユニット出力に対する乱数性テストが行われる。
【0087】
図15の例では、以後、乱数性テスト回路26からはエラーは発生しておらず、分割乱数生成及び乱数性テスト後において、PDET_en1st及びPDET_en2nd_to_lastによる1回の周期性検出が実行される。そして、分割乱数生成及び乱数性テストと周期性検出が繰り返される。4回目の分割乱数生成時の乱数性テストに対してエラーが発生していないことから、図15の例では乱数生成が終了し、ビジー信号(BUSY)が“0”となる。こうして、図15の例においても、256ビットの分割乱数が4回生成されて、1024ビット乱数出力が得られる。
【0088】
図15の例では1つ目の分割乱数生成時の乱数性テストにおいてエラーが発生したので1つ目の分割乱数生成から再開したが、乱数性テストにおいてエラーが発生した分割乱数について分割乱数生成を再開すればよい。例えば、3つ目の分割乱数生成時の乱数性テストにおいてエラーが発生した場合には、再度3つ目の分割乱数生成から乱数生成を行えばよい。なお、乱数性テストのエラー発生毎にリトライカウンタ50のカウント値がカウントアップされ、カウント値が上限に達すると乱数生成にエラーが発生したことを示すRNG_ERRORが発生して、乱数生成は終了する。
【0089】
このように本実施形態においては、乱数を所定ビット数の分割乱数に分割して生成し、ROユニット内に乱数性テスト回路を設けて、分割乱数を生成するROユニット出力に対して乱数性テストを実施する。分割乱数は、分割しなかった場合の乱数生成時間よりも短時間で生成されることから、発熱等の影響によるRO発振周期変化の変化量を制限することができ、乱数性テストのエラー発生を低減し、高いエントロピー値の乱数を得ることができる。また、分割乱数の生成毎に周期性検出を実施していることから、高エントロピーを得やすいRO発振周期に設定変更を行うことができる。また、乱数性テストのエラーが生じた場合でもエラーを回避するRO発振周期の設定が可能であるので、発熱等の影響によるRO発振周期変化で偶発的に乱数性テストのエラーが生じた場合において、乱数性テストのエラーカウント数が上限値に到達するまで上位システムに対するエラー通知を行わないことにより、乱数生成の効率化を図ることができる。また、乱数性テストのエラーカウント数が上限値に達した場合には、故障として上位システムに通知することが可能である。また、ROとして主発振回路用とバックアップ発振回路用の2系統を設けているので、故障や劣化に対し、信頼性が高いという効果もある。
【0090】
本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適当な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【符号の説明】
【0091】
1…乱数生成回路、10…制御回路、20…ROユニット、21,21a,、21b…RO、22,22a,22b,23,23a,23b,31…FF、24…セレクタ、25…周期性検出回路、26…乱数性テスト回路、27,32,33…EXOR、30…後処理回路、40…シフトレジスタ群、41…シフトレジスタ、42…イネーブル付きFF、50…リトライカウンタ、60…比較器。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15