(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-10-01
(45)【発行日】2024-10-09
(54)【発明の名称】疑似乱数生成装置及び疑似乱数生成用プログラム
(51)【国際特許分類】
G06F 7/58 20060101AFI20241002BHJP
G09C 1/00 20060101ALI20241002BHJP
【FI】
G06F7/58 620
G09C1/00 650B
(21)【出願番号】P 2023059318
(22)【出願日】2023-03-31
【審査請求日】2023-07-20
(73)【特許権者】
【識別番号】391016358
【氏名又は名称】東芝情報システム株式会社
(74)【代理人】
【識別番号】100156199
【氏名又は名称】神崎 真
(74)【代理人】
【識別番号】100124497
【氏名又は名称】小倉 洋樹
(74)【代理人】
【識別番号】100074147
【氏名又は名称】本田 崇
(72)【発明者】
【氏名】岩野 隆
【審査官】佐賀野 秀一
(56)【参考文献】
【文献】特開2019-168963(JP,A)
【文献】特開2017-142697(JP,A)
【文献】特開2011-118878(JP,A)
【文献】国際公開第2004/077669(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 7/58- 7/72
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
第1の式で定義されるテント写像の反複演算である第1の演算と第2の式で定義されるテント写像の反複演算である第2の演算との二通の演算が可能であると共に、与えられる前記二通の演算の一方を選択して行うことの指示情報を受けて対応する一方の演算を行うことによりテント写像の反復演算を行うテント写像演算手段と、
前記テント写像演算手段によるテント写像の反復演算の初期値に無理数を設定する初期値設定手段と、
前記テント写像演算手段によるテント写像の反復演算の演算結果を判定閾値と比較
し、この比較結果を前記テント写像演算手段へ指示情報として与える比較手段と、
前記比較手段による比較結果に基づき、疑似乱数の元値を取得する疑似乱数元値取得手段と、
を具備することを特徴とする疑似乱数生成装置。
【請求項2】
前記テント写像の区間を無理数により定めた区間とし、
前記初期値設定手段は、初期値を1とすることを特徴とする請求項1に記載の疑似乱数生成装置。
【請求項3】
前記初期値の無理数を平方根記号による数値としたことを特徴とする請求項1または2に記載の疑似乱数生成装置。
【請求項4】
前記比較手段は、(A-B)(A+B)=A2-B2の型式の演算を用いて平方根記号をなくした数値による数式へ変換して比較を行うことを特徴とする請求項3に記載の疑似乱数生成装置。
【請求項5】
前記初期値の無理数をa+b√cの型式で設定し、反復演算が行われる毎に、前記aが所定閾値を超えたか否か検出して初期値の変更時期を判定する初期値変更時期判定手段と、
前記初期値変更時期判定手段が前記所定閾値を超えたと判定した場合に初期値を変更する初期値変更手段と
を具備することを特徴とする請求項3に記載の疑似乱数生成装置。
【請求項6】
前記疑似乱数元値取得手段は、前記比較手段による比較結果に基づき、一度に2ビット以上の疑似乱数の元値を取得することを特徴とする請求項1に記載の疑似乱数生成装置。
【請求項7】
前記テント写像の区間を有理数により定めた区間とし、
前記初期値設定手段は、初期値を無理数とすることを特徴とする請求項1に記載の疑似乱数生成装置。
【請求項8】
乱数生成装置を構成するコンピュータを、
第1の式で定義されるテント写像の反複演算である第1の演算と第2の式で定義されるテント写像の反複演算である第2の演算との二通の演算が可能であると共に、与えられる前記二通の演算の一方を選択して行うことの指示情報を受けて対応する一方の演算を行うことによりテント写像の反復演算を行うテント写像演算手段、
前記テント写像演算手段によるテント写像の反復演算の初期値に無理数を設定する初期値設定手段、
前記テント写像演算手段によるテント写像の反復演算の演算結果を判定閾値と比較
し、この比較結果を前記テント写像演算手段へ指示情報として与える比較手段、
前記比較手段による比較結果に基づき、疑似乱数の元値を取得する疑似乱数元値取得手段、
として機能させることを特徴とする疑似乱数生成用プログラム。
【請求項9】
前記テント写像の区間を無理数により定めた区間とし、
前記コンピュータを前記初期値設定手段として、初期値を1とするように機能させることを特徴とする請求項8に記載の疑似乱数生成用プログラム。
【請求項10】
前記初期値の無理数を平方根記号による数値としたことを特徴とする請求項8または9に記載の疑似乱数生成用プログラム。
【請求項11】
前記コンピュータを前記比較手段として、(A-B)(A+B)=A2-B2の型式の演算を用いて平方根記号をなくした数値による数式へ変換して比較を行うように機能させることを特徴とする請求項10に記載の疑似乱数生成用プログラム。
【請求項12】
前記コンピュータを、
前記初期値の無理数をa+b√cの型式で設定し、反復演算が行われる毎に、前記aが所定閾値を超えたか否か検出して初期値の変更時期を判定する初期値変更時期判定手段、
前記初期値変更時期判定手段が前記所定閾値を超えたと判定した場合に初期値を変更する初期値変更手段
として機能させることを特徴とする請求項10に記載の疑似乱数生成用プログラム。
【請求項13】
前記コンピュータを、前記疑似乱数元値取得手段として、前記比較手段による比較結果に基づき、一度に2ビット以上の疑似乱数の元値を取得するように機能させることを特徴とする請求項8に記載の疑似乱数生成用プログラム。
【請求項14】
前記テント写像の区間を有理数により定めた区間とし、
前記コンピュータを前記初期値設定手段として、初期値を無理数とするように機能させることを特徴とする請求項8に記載の疑似乱数生成用プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、疑似乱数生成装置及び疑似乱数生成用プログラムに関するものである。
【背景技術】
【0002】
従来のテント写像による疑似乱数生成器がいくつか提案されている。特許文献1には、実質的に際限のない周期長を持った疑似乱数列を生成する装置がしめされている。この装置は、テント写像による写像演算を行うテント写像演算手段と、前記テント写像を整数演算で可能とするために、最大区間を整数倍するときの値Pとして、素数で且つ(P-1)/2に基づき最大周期長の条件を満足するPを選択して前記テント写像演算手段へ与えるテント写像パラメータ選択手段と、前記テント写像演算手段による演算結果に基づき所定長の数列を生成する乱数生成手段とを具備するものである。
【0003】
特許文献2には、簡単な構成で一様な分布を持つ物理乱数を生成する装置が開示されている。この装置は、I-V変換回路を含み、ロジスティック写像演算を行う写像演算回路と、前記写像演算回路の出力を1から引き算する引き算回路と、前記引き算回路の出力を前記写像演算回路の入力端にフィードバックするフィードバック経路と、前記写像演算回路の出力をディジタル変換して乱数を得る乱数取出部とを具備する。
【0004】
特許文献3には、鍵の管理を不要とすることができ、また、演算負荷と演算コストの低減を図る装置が開示されている。この装置は、演算により暗号文を生成する暗号生成部を有する暗号生成装置と、前記暗号生成装置から暗号文を受けて該暗号文を復号し平文とする復号部を有する復号装置とを具備する暗号復号システムである。そして、前記暗号生成装置と前記復号装置には、一次元写像の演算によりそれぞれで生成した通知情報の交換を行って同一の共通鍵を生成する暗号側共通鍵生成部と復号側共通鍵生成部が備えられ、前記暗号生成部は前記共通鍵に基づく暗号生成を行い、前記復号部は前記共通鍵に基づく復号処理を行う。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2020-42453号公報
【文献】特開2019-168963号公報
【文献】特開2022-56275号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
上記の従来例のものは、有限精度演算実装のため周期の問題があり周期の延長を行う工夫を施す必要があった。しかしながら、周期の延長を行う機構を入れたとしても周期長を見積もることができないため演算精度のわりに短い周期になる可能性がある。
【0007】
そこで、本発明の実施形態は、非周期的な乱数列が得られるためセキュリティ技術に好適な予測不能性をもった良質な乱数を得ることが可能な疑似乱数生装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明に係る疑似乱数生成装置は、第1の式で定義されるテント写像の反複演算である第1の演算と第2の式で定義されるテント写像の反複演算である第2の演算との二通の演算が可能であると共に、与えられる前記二通の演算の一方を選択して行うことの指示情報を受けて対応する一方の演算を行うことによりテント写像の反復演算を行うテント写像演算手段と、前記テント写像演算手段によるテント写像の反復演算の初期値に無理数を設定する初期値設定手段と、前記テント写像演算手段によるテント写像の反復演算の演算結果を判定閾値と比較し、この比較結果を前記テント写像演算手段へ指示情報として与える比較手段と、前記比較手段による比較結果に基づき、疑似乱数の元値を取得する疑似乱数元値取得手段と、を具備することを特徴とする。
【0009】
本発明に係る疑似乱数生成装置では、前記テント写像の区間を無理数により定めた区間とし、前記初期値設定手段は、初期値を1とすることを特徴とする。
【0010】
本発明に係る疑似乱数生成装置では、前記初期値の無理数を平方根記号による数値としたことを特徴とする。
【0011】
本発明に係る疑似乱数生成装置では、前記比較手段は、(A-B)(A+B)=A2-B2の型式の演算を用いて平方根記号をなくした数値による数式へ変換して比較を行うことを特徴とする。
【0012】
本発明に係る疑似乱数生成装置では、前記初期値の無理数をa+b√cの型式で設定し、反復演算が行われる毎に、前記aが所定閾値を超えたか否か検出して初期値の変更時期を判定する初期値変更時期判定手段と、前記初期値変更時期判定手段が前記所定閾値を超えたと判定した場合に初期値を変更する初期値変更手段とを具備することを特徴とする。
【0013】
本発明に係る疑似乱数生成装置では、前記疑似乱数元値取得手段は、前記比較手段による比較結果に基づき、一度に2ビット以上の疑似乱数の元値を取得することを特徴とする。
【0014】
本発明に係る疑似乱数生成装置では、前記テント写像の区間を有理数により定めた区間とし、前記初期値設定手段は、初期値を無理数とすることを特徴とする。
【0015】
本発明に係る疑似乱数生成用プログラムは、第1の式で定義されるテント写像の反複演算である第1の演算と第2の式で定義されるテント写像の反複演算である第2の演算との二通の演算が可能であると共に、与えられる前記二通の演算の一方を選択して行うことの指示情報を受けて対応する一方の演算を行うことによりテント写像の反復演算を行うテント写像演算手段、前記テント写像演算手段によるテント写像の反復演算の初期値に無理数を設定する初期値設定手段、前記テント写像演算手段によるテント写像の反復演算の演算結果を判定閾値と比較し、この比較結果を前記テント写像演算手段へ指示情報として与える比較手段、前記比較手段による比較結果に基づき、疑似乱数の元値を取得する疑似乱数元値取得手段、として機能させることを特徴とする。
【0016】
本発明に係る疑似乱数生成用プログラムでは、前記テント写像の区間を無理数により定めた区間とし、前記コンピュータを前記初期値設定手段として、初期値を1とするように機能させることを特徴とする。
【0017】
本発明に係る疑似乱数生成用プログラムでは、前記初期値の無理数を平方根記号による数値としたことを特徴とする。
【0018】
本発明に係る疑似乱数生成用プログラムでは、前記コンピュータを前記比較手段として、(A-B)(A+B)=A2-B2の型式の演算を用いて平方根記号をなくした数値による数式へ変換して比較を行うように機能させることを特徴とする。
【0019】
本発明に係る疑似乱数生成用プログラムでは、前記コンピュータを、前記初期値の無理数をa+b√cの型式で設定し、反復演算が行われる毎に、前記aが所定閾値を超えたか否か検出して初期値の変更時期を判定する初期値変更時期判定手段、前記初期値変更時期判定手段が前記所定閾値を超えたと判定した場合に初期値を変更する初期値変更手段として機能させることを特徴とする。
【0020】
本発明に係る疑似乱数生成用プログラムでは、前記コンピュータを、前記疑似乱数元値取得手段として、前記比較手段による比較結果に基づき、一度に2ビット以上の疑似乱数の元値を取得するように機能させることを特徴とする。
【0021】
本発明に係る疑似乱数生成用プログラムでは、前記テント写像の区間を有理数により定めた区間とし、
前記コンピュータを前記初期値設定手段として、初期値を無理数とするように機能させることを特徴とする。
【図面の簡単な説明】
【0022】
【
図1A】本実施形態1に係る疑似乱数生成装置の動作を示すフローチャート。
【
図2】テント写像マップと16等分したテント写像の初期値X
0区間を示す図。
【
図4】テント写像の初期値X
0区間と各区間に対応して生成されるグレイコードとバイナリコードを示す図。
【
図5】テント写像の初期値X
0を無理数(平方根)とするC言語ライブラリを示す図。
【
図6】
図1Aのフローチャートを実行するC言語によるプログラムの一例を示す図。
【
図7】実施形態1における初期値X
0区間を2√2倍したテント写像マップを示す図。
【
図8】
図7のテント写像マップに示す式(2)を用いて、初期値X
0=1とした場合の
図6のメインプログラムにて写像の反復計算を行った結果を示す図。
【
図9A】本実施形態2に係る疑似乱数生成装置の動作を示すフローチャート。
【
図10】実施形態2による平方根記号内の数値を変更し最大区間を変動する計算例を示す図。
【
図11】実施形態3における区間を4等分し、2ビット分を取得するテント写像マップを示す図。
【
図12】実施形態3により平方根記号内の数値を変更し最大区間を変動する計算例を示す図。
【
図13】実施形態4によって初期値X
0を√2にしたテント写像関数を示す図。
【
図14】実施形態4によって初期値X
0を√2に設定した計算例を示す図。
【発明を実施するための形態】
【0023】
以下添付図面を参照して、疑似乱数生成装置及び疑似乱数生成用プログラムの実施形態を説明する。本発明の実施形態の疑似乱数生成装置は、いくつかの図に示すフローチャートに対応するプログラムにより、或いはいくつかの図に示すプログラムにより、コンピュータが処理を行うものとして実現できる。本実施形態では、テント写像を用いるものであるから、テント写像から説明を行う。
【0024】
[原理]
・テント写像について
テント写像は以下の式(1)で定義される
【数1】
テント写像のマップを
図2に、式(1)による横軸をi、縦軸をX
i+1とした時系列を
図3に示す。
【0025】
初期値X
0の区間[0,1]を16等分に振り分けたテント写像マップを
図2に示し、その<1>~<16>の各区間の値を
図4の“テント写像初期値X
0の区間”に示す。
“特開2016-039418”ではテント写像のA/D変換回路を用いて、
X
i<0.5のとき、ビット0を取得し、0.5≦X
iのとき、ビット1を取得すると、上記
図2の<1>~<16>の各区間に対応して
図4のようにグレイコードが得られる。グレイコードをバイナリ変換することで
図4に示すようにバイナリコードが昇順となりテント写像の初期値の値と対応することが判る。
【0026】
また、“特開2019-168963”の「乱数生成装置」に示されるように、最上位ビットを連続してとった値は、テント写像の初期値X0を表すビットコードそのものとなっているため、循環しない小数(無理数)の値を初期値X0に設定すれば理論的に乱数性能として望ましい半永久的に非周期な値が得られることを意味する。
なぜなら、式(1)は2倍を続ける反復写像であり、初期値X0を有限ビットで設定した場合は2倍するたびに左1ビットシフトするため、有限ビットはやがて枯渇しXi=0になることで値の変動がゼロに固定されるためである。
【0027】
このため理論的には無限ビットになる無理数を設定すれば出力ビットを半永久的な乱数列として得ることができる。本実施形態では、理論的に無限精度演算が可能なコンピュータを想定し、疑似乱数生成装置を構成する。
【0028】
<実施形態1>
図1に本実施形態の疑似乱数生成装置の構成図を示す。本実施形態の疑似乱数生成装置は、テント写像演算手段10、初期値設定手段11、比較手段12、疑似乱数元値取得手段13を備える。疑似乱数元値取得手段13からは疑似乱数元値が所定回数(例えば、必要な乱数のビット数)出力装置20へ出力され、疑似乱数を得ることができる。この疑似乱数生成装置は
図1Aに示すフローチャートにより実現される。
【0029】
上記の初期値設定手段11は、テント写像の反復演算の初期値に無理数を設定するものである。この初期値は、
図1AのステップS10に示されるように、乱数取得ビット数としてNが設定され、写像回数i=0が設定され、初期値X
0の無理数を平方根記号による数値X
0=a
0+b
0√c
0として与えられる。写像の区間を[0,2a+2b√c]に設定している。本実施形態では、写像演算の式を選択する関数halfとして上記区間の半分であるhalf=a+b√cに設定する。従って、写像の最大区間maxは、max=2×halfである。
【0030】
比較手段12は、テント写像の反復演算の演算結果を判定閾値と比較するものである。ステップS11では、「1-2」に、half≦X
iという比較が示されている。疑似乱数元値取得手段13は、上記比較手段12による比較結果に基づき、疑似乱数の元値を取得する。この疑似乱数元値取得手段13は、
図1Aにおいて「Bit“0”を出力」または「Bit“1”を出力」と記載されている部分の処理を示す。
【0031】
テント写像演算手段10は、上記比較手段12による比較結果に基づき、二通の演算の一方を行うことによりテント写像の反復演算を行うものである。二通の演算とは、通常のテント写像では、式(1)に示すものであるが、本実施形態では、次の式(2)によるものである。
【数2】
【0032】
したがって、テント写像演算手段10では、「1-2」からNoへ分岐して「1-4」へ進んで行う演算と、「1-2」からYesへ分岐して「1-3」を経由して「1-4」へ進んで行う演算とが存在する。そして、「終了」となる前の判断ステップにおいて、乱数取得ビット数Nとなったかが検出され、乱数取得ビット数Nとなっていない場合(
図1AではYesの場合)には、「1-2」へ戻って反復処理が行われる。
【0033】
理論上は、無限精度演算により永続的な乱数生成となるが、コンピュータによる実装は有限桁であり無限精度演算による実装は実際上不可能である。そこで、本実施形態では、無理数をシンボル化してテント写像の初期値X0として設定し、実質的に半永久的に非周期な乱数列を生成する手法を採用する。これを以下に示す。
【0034】
例えば、テント写像は式(1)を使用して区間[0,1]を反復するが、区間幅を2√2倍に無理数倍して、区間[0,2√2]として初期値X
0を1に設定して、テント写像の反復を行うことを考える。この場合、区間[0,1]上では1を2√2で割り算すると初期値X
0は“√2/4”となり、実質的に初期値X
0を無理数として演算を行うことができる。この平方根記号√で区間を無理数倍した式は前述の式(2)になる。式(2)の区間[0,2√2]のテント写像マップを
図7に示す。
【0035】
次に平方根記号√をプログラム上でシンボル化することで式(2)のテント写像の反復を行う
図1Aに示したフローチャートと
図5と
図6の具体的なC言語のソースコードに基づき、本実施形態に係る疑似乱数生成装置及び疑似乱数生成用プログラムを説明する。
図5に示すプログラムはテント写像の無理数演算を行うためのライブラリ“Irrat.h”になり、
図6は
図5で定義された関数を読み込みテント写像の初期値X
0を無理数としてテント写像の反復から乱数を抽出するmain関数となる。
【0036】
はじめに、
図1Aの「1-1」に示した初期値設定を行う。本実施形態では乱数は1ビットずつを取得することとして取得したい乱数ビット数を変数Nへ設定する。
図1Aでは写像のたびに1ビットずつ乱数を取得するため、写像の回数をカウントする変数iに初期値として”0”を設定する。
無理数は平方根記号√を用いることを前提として次の式(3)のような形式で写像の値域となる最大区間とその半分の値と初期値X
0をそれぞれ設定する。
【数3】
【0037】
図5のプログラムに示す「1-1」が
図1Aの「1-1」 に該当する無理数の初期値設定部になる。
図5の「1-1」に示すように式(3)の形式で各変数“a,b,c”に0以上の整数を設定する。
式(3)の形式は
図5のプログラムの上部に示す3つの変数からなる構造体(複数以上のデータをまとめて1つのかたまりとしたもの)として定義され、この形式にてテント写像の反復演算を行う。式(3)に変数を設定する注意点として平方根記号内の変数cには必ず無理数になる値を設定することとする。
【0038】
次に
図1Aの「1-2」に示すX
iが最大区間の半分の値以上か未満かを判定する分岐処理を行う。分岐処理において分岐の基準となるしきい値が平方根の無理数のため計算方法を考える必要がある。
最初“i=0”から始めるため、初期値X
0と最大区間の半分の値“half”との比較になる。初期値X
0は
【数4】
【0039】
【0040】
とあらわして、“√c
h”については平方根cの値はあらかじめ統一するため“c
h = c
0”とする。
以下のように“X
0”と“X
h”の値はどちらが大きいかを比較する。
【数6】
【0041】
ここで記号“?”はX
0が最大区間の半分の値以上の場合“≦”,未満の場合“>”の記号どちらかが入っている。両辺に右辺X
0をマイナスすることで以下の式(4)が得られる。
【数7】
【0042】
が得られる。ここで平方根√c
hを消去するため両辺に
【数8】
【0043】
を掛け算することで以下の式が得られ、平方根記号√を消去することができる。
【数9】
【0044】
【0045】
が成立し、Xh≦X0の関係にあることが分かる。この場合、式(2)では“Xh=√2≦X0”の式を選択されるため“2√2-X0”のように最大区間maxからX0を引き算する処理を行う。
【0046】
この引き算処理は
図1Aの「1-3」と
図5の「1-3」に該当する。なお
図5の「1-2」の大小比較を行う関数compでは「1-3」の引き算を行っているが上記式(4)の演算部となっている。上記式(5)の演算を行っているプログラムが
図5の「1-2」のif分とelse文になっている。ここでif文側について写像の反復の過程で式(2)下側の式を計算することで式(4)の形式が
【数11】
【0047】
【0048】
【0049】
の結果は0以下かを判定することになる。
このように写像の反復ごとに "Xh≦Xi" の判定は平方根を消去することで整数演算の掛け算と引き算のみで比較を行うことができる。
【0050】
ここまで、式(3)のプラスとマイナスの符号形式がa-b√cと-a+b√cとなったときを示した。
その他にa+b√cの場合には、必ず0以上(プラス)、-a-b√cの場合は必ず0未満(マイナス)になることが符号から判るため、
図5のプログラムにおける「1-2」に示すように"a>0”のとき且つ"b>0”のときに必ずプラスの値になっておりa+b√c>0が成り立つため"return1”のプラスを返し、"a<0”のとき且つ"b<0”の時必ずマイナスの値になっており-a-b√c<0が成り立つため"return-1”を返している。
【0051】
具体的に
図7のテント写像マップに示す式(2)を用いて、初期値X
0=1とした場合の
図6のメインプログラムにて写像の反復計算を行った結果を
図8に示し、これを説明する。
図6のプログラムでは初期値設定にて最大区間の半分の値として√2を設定するため式(3)の形式で、“a=0,b=1,c=2”を変数halfに設定している。
最大区間は
図5の「1-4」を用いて半分の値√2を2倍することで2√2となる式(3)の形式で“a=0,b=2,c=2”を構造体irratの変数maxとして設定される。
初期値X
0を1にする設定は式(3)の形式で、“a=1,b=0,c=2”を構造体irratの変数xとして“1+0√2”のように設定する。
ここで、
図6の変数“rt=2”のように全ての初期値は必ず無理数になる値を含むように設定する。
【0052】
図5のライブラリ“Irrat.h”を
図6のプログラムのヘッダに読み込み、無理数として平方根√2に設定して式(2)のテント写像の反復を行った結果が
図8になる。初期値X
0が1(1+0√2)から始まり、i=8未満まで式(3)の形式で“a,b,c”の値が写像のたびにX
iとして更新され、列bit(乱数)の8ビット分が出力されている。
図8の一番右の“列Xi”は各“a+b√c”を計算した結果であり、小数点6桁まで示している。
【0053】
以上、式(2)の最大区間を2√2とし初期値X
0=1を設定したテント写像の反復演算から乱数ビットを連続して8ビット分を取得した例を示した。演算の最大区間を2√2で割ると区間幅が[0,1]になり初期値X
0=√2/4になるため無理数から乱数値を取得することと同等になるため、実質的に有限演算精度を持つコンピュータ上でも周期に陥ることがない半永久的に非周期な乱数列が取得できるようになる。
また、
図5の平方根を扱うライブラリでは整数演算の乗算と減算しか使用していないため、コンピュータとの親和性が良い高速な演算を可能とする。
【0054】
<実施形態2>最大区間を変更し周期を延長
実施形態1にて実質的に無理数をテント写像の初期値X
0として非周期な乱数列を取得する手法を示したが、
図8の計算過程に示したように係数の“a”と“b”は写像の反復のたびに桁数が増える構造になっている。桁数が増えていくことで計算にかかるコストがかかり、桁数も計算機では有限桁のため限界が生じる。
【0055】
そこで実施形態1では最大区間を2√2としていたが、本実施形態2では式(3)の係数“a”がある設定した桁数を超えたときに平方根内の数値cを変更すると同時に初期値X0を1に初期化し直すことで、計算に必要な桁数を抑えて乱数を取得していく手法を説明する。
【0056】
以下、本実施形態2の構成及び方法を説明する。
図9に構成図を示し、
図9Aにフローチャートを示し、
図10に具体的な計算結果を示す。本実施形態2では、
図1に示した実施形態1の構成に、初期値変更時期判定手段21と初期値変更手段22とが加えられたものである。初期値変更時期判定手段21は、上記初期値の無理数をa+b√cの型式で設定し、反復演算が行われる毎に、上記aが所定閾値を超えたか否か検出して初期値の変更時期を判定するものである。初期値変更手段22は、上記初期値変更時期判定手段21が上記所定閾値を超えたと判定した場合に初期値を変更するものである。
【0057】
図9Aのフローチャートに示すように平方根は必ず無理数にするため√4=2や√9=3などの有理数になるものは避けるように、c
jに予め素数列を入れておく。これらの順番をjとしてc
j=2、3、5、7、…とj=0から順番に平方根として設定される。
図8の演算結果の係数aのように写像の反復のたびに、桁数が増えるため上限値を
図9Aの初期値設定の“alimit”に数値として設定する。
【0058】
以降においては、実施形態1の
図1Aのフローチャートと同様にテント写像の反復を繰り返すことで乱数ビット列を取得していく。
図10の計算例では“alimit=999”を設定しており、係数aが4桁以上になることで
図9Aのフロー図の分岐条件“(alimit≦a)and(N<i)"により“a”の絶対値がalimitより大きくなったときに、次の素数c
1により最大区間を変更する。それと同時に初期値“X
0=1”に再設定して、再び“a”の絶対値がalimitより大きくなるまでテント写像の反復を行い、乱数ビット列を取得していくことを繰り返す。
有限桁の演算が可能となるが、用意する素数と実装する最大桁は大きくとればとるほど非周期な乱数列を多くとることができる。
【0059】
<実施形態3>1回の写像で複数ビットを取得
これまでの実施形態では1回の写像につき、1ビットの乱数値を取得していたが1回の写像につき複数ビット取得する実施形態である。上記疑似乱数元値取得手段13は、上記比較手段12による比較結果に基づき、一度に2ビット以上の疑似乱数の元値を取得する。
図11はテント写像を反復するX
iの最大区間を“12+4√2”倍したときのマップを示しており、その区間については区間を4分割したものが示されており、下記のテント写像の式(6)になる。
【数14】
【0060】
最大区間“12+4√2”の半分の値“6+2√2”未満の場合、式(6)の1つ目の一次式を選択する。“6+2√2”以上の場合、式(6)の2つ目の一次式が選択されテント写像の反復を実行して行く。
ここで
図11のマップに示したように写像X
iが“3+√2”未満の場合、乱数ビットとして“00”を2ビット分出力し、写像X
iが“3+√2≦X
i<6+2√2”のとき、“01”を、“6+2√2≦X
i<9+3√2”のとき、“11”を、“9+3√2≦X
i<12+4√2”のとき、“10”をそれぞれ2ビット分出力する。
X
iの比較については、
図5のプログラム「1-2」によりX
iが4つの区間のどれに入っているか判定することになる。
【0061】
以上の実施形態3によれば、一回の写像で複数ビットを出力することができ乱数生成速度が向上するという効果を期待できる。また実施形態2に示したように式(3)の係数“a”がある設定した桁数を超えたときに平方根内の数値cを変更する際に、出力する2ビットのパターンを例えば
図11の区間<1>は“00⇒01”、区間<2>は“01⇒11”、区間<3>は“11⇒10”、区間<4>は“10⇒00”のようにと一つずつずらす機構を与える。もしくはそれまでの乱数2ビット分の排他的論理和が
図12に示す写像9回行った結果は“11”になっており、十進数では3のため
図11の区間<1>はプラス3ずらした区間<4>の“00⇒10”、区間<2>は区間<1>の“01⇒00”に変更するようにそれまでの乱数値を参照して出力するビットパターンを変更する方法が考えられ、乱数生成パターンを増やす効果が与えられる。
【0062】
また、
図11では区間を4等分したが、8等分して1回の写像につき3ビット分を乱数として出力することも考えられ、実施形態2で示した平方根内の数値cを変更する際に同様に各区間の乱数パターンをそれまでの乱数値から変更したり、また等分の数をそれまでの乱数を参照して変更したりすることで乱数パターンのバリエーションをより増やせる効果が考えられる。
【0063】
<実施形態4>初期値X
0を無理数(平方根)に設定
これまでの実施形態ではテント写像の値域となる区間を無理数となる平方根を与え初期値X
0は1の整数を与えていたが、初期値X
0に無理数となる平方根を与えてもよい。本実施形態では、上記テント写像の区間を有理数により定めた区間とし、上記初期値設定手段11は、初期値を無理数とする.具体的には、
図13のマップに示すように最大区間が10、その半分の区間が5とした次の式(7)になる。
【数15】
【0064】
図6のプログラムにおける「1-1」の初期値設定を平方根記号“rt=2”として、half=conv(5,0,rt)、max=mul2(half)、x=conv(0,1,rt)と初期値“X
0=√2”を与えて式(7)の写像の反復を行った具体的な数値を
図14に示す。
この場合も係数aと係数bの桁が写像の反復の度に増えていくため実施形態2に示したように式(3)の係数“a”がある設定した桁数を超えたときに平方根内の数値cを変更する機構を与えることで桁数を抑えて演算が可能となる。
【0065】
無理数として√2など平方根が知られるが無理数をテント写像の初期値X0として設定すれば、理論的に半永久的に非周期的な乱数列がえられるためセキュリティ技術に好適な予測不能性をもった良質な乱数を得ることが可能となる。
プログラム上で平方根記号√をシンボル化することでテント写像の反復を整数の掛け算と引き算のみを使用した計算が可能となり、効果として整数演算の乗算と減算のみで構成できるので、コンピュータによる演算との親和性がよい高速な演算が行える。
【0066】
初期値X0を無理数として桁がある上限を超えたときに初期値X0を変更する機構を与えることで疑似乱数列の周期の延長が際限なく行え、それまでの乱数を利用して乱数パターンを変更することで乱数生成のバリエーションを増やすことができる。
従来例では周期を延長する機構を考えても周期長がかなり短くなっている可能性があったが、テント写像の初期値X0に無理数を当てることで必ず非周期的な乱数列がえられるようになる。
【符号の説明】
【0067】
10 テント写像演算手段
11 初期値設定手段
12 比較手段
13 疑似乱数元値取得手段
20 出力装置
21 初期値変更時期判定手段
22 初期値変更手段
【要約】
【課題】非周期的な乱数列が得られるためセキュリティ技術に好適な予測不能性をもった良質な乱数を得ることが可能な疑似乱数生装置を提供する。
【解決手段】テント写像の反復演算の初期値に無理数を設定する初期値設定手段11と、テント写像の反復演算の演算結果を判定閾値と比較する比較手段12と、前記比較手段12による比較結果に基づき、疑似乱数の元値を取得する疑似乱数元値取得手段13と、前記比較手段12による比較結果に基づき、二通の演算の一方を行うことによりテント写像の反復演算を行うテント写像演算手段10とを具備する。
【選択図】
図1