JP5875719B1 - 乱数生成装置、乱数生成方法、およびプログラム - Google Patents
乱数生成装置、乱数生成方法、およびプログラム Download PDFInfo
- Publication number
- JP5875719B1 JP5875719B1 JP2015014913A JP2015014913A JP5875719B1 JP 5875719 B1 JP5875719 B1 JP 5875719B1 JP 2015014913 A JP2015014913 A JP 2015014913A JP 2015014913 A JP2015014913 A JP 2015014913A JP 5875719 B1 JP5875719 B1 JP 5875719B1
- Authority
- JP
- Japan
- Prior art keywords
- column
- random number
- value
- unit
- number acquisition
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Abstract
【課題】複数のiについて0以上i以下の乱数を高速に生成する。【解決手段】乱数取得部15が、2進数で表現された乱数の各桁の値を要素に含む第1列を得、論理積演算部16が、当該第1列と第2列の要素単位の論理積演算結果である第3列を得る。当該第3列によって表される値がiよりも大きい場合、制御部17は、乱数取得部15および論理積演算部16の処理を再び実行させる。一方、当該第3列によって表される値がi以下の場合、制御部17はiを増加させてからこれらの処理を再び実行する。ただし、第2列は、下位i桁の値がすべて1であり、かつ、残りの桁の値が0である、2進数で表現された列である。【選択図】図1
Description
本発明は、乱数生成技術に関し、特に、長さの異なる複数の乱数を生成する技術に関する。
各1≦i<n(ただし、n≧2)について0以上i以下の乱数を生成する。このような乱数の生成は、L個のランダムビットを生成し、それらを各桁の値とする2進数表現値に対応する10進数表現値aとiとの大小判定を行い、a>iであれば処理をやり直し、a≦iであればaを乱数として採用することで実現できる(例えば、非特許文献1参照)。
ヨハネス ブーフマン、「暗号理論入門―暗号アルゴリズム、署名と認証、その数学的基礎」、シュプリンガー・フェアラーク東京、2001年7月、P114.
上述の方法では、iが2Lに対して小さいときに乱数の生成確率が極度に低下し、乱数の生成速度が低下する。
本発明の課題は、複数のiについて0以上i以下の乱数を高速に生成することである。
2進数で表現された乱数の各桁の値を要素に含む第1列を得、当該第1列と第2列の要素単位の論理積演算結果である第3列を得、当該第3列によって表される値がiよりも大きい場合にこれらの処理を再び実行し、当該第3列によって表される値がi以下の場合にiを増加させてからこれらの処理を実行する。ただし、第2列は、下位i桁の値がすべて1であり、かつ、残りの桁の値が0である、2進数で表現された列である。
本発明では、複数のiについて0以上i以下の乱数を高速に生成できる。
以下、本発明の実施形態を説明する。
[概要]
実施形態では、次のように長さの異なる複数の乱数を生成する。まず、2進数で表現された乱数の各桁の値を要素に含む「第1列」を得る(乱数取得ステップ)。次に、「第1列」と「第2列」との要素単位の論理積演算結果(要素ごとのAND演算結果、例えば、ビットAND演算結果)である「第3列」を得る(論理積演算ステップ)。ただし、「第2列」は、正の整数iに対して広義単調増加(非減少)の関係にある個数の下位j桁の要素が1であり、かつ、残りの桁の要素が0である、2進数で表現された列である。「第1列」「第2列」「第3列」の長さ(要素数、ビット数)は、例えば同一である。ここで「第3列」によって表される値がiよりも大きい場合には、0以上i以下の乱数の生成に失敗したとして、このiに対して乱数取得ステップおよび論理積演算ステップの処理を再び実行する(やり直す)。一方、「第3列」によって表される値がi以下の場合には、0以上i以下の乱数の生成に成功したとして当該乱数を採用し、新たなiについて0以上i以下の乱数を生成するために、iを増加させてから乱数取得ステップおよび論理積演算ステップの処理を実行する。この方法では、「第1列」によって表される値とiとを比較するのではなく、「第2列」によって「第1列」をマスクして得られる「第3列」によって表される値とiとを比較する。そのため、0以上i以下の乱数の生成に成功する確率が向上し、高速で0以上i以下の乱数を生成できる。なお、「j」は「i」に対して広義単調増加する関係にある正の整数であればよいが、jが1+log2 i以下の最大の整数である場合に最も効率がよい。すなわち、床関数floorに対してj=floor(1+log2 i)であることが望ましい。j=floor(1+log2 i)である場合、特にiがメルセンヌ数であれば(i=2N−1、ただしNは正整数)、0以上i以下の乱数が生成される確率が100%となる。そのため、iがメルセンヌ数であると判定された場合、「第3列」によって表される値とiとを比較することなく、0以上i以下の乱数の生成に成功したとして当該乱数を採用し、新たなiについて0以上i以下の乱数を生成するために、iを増加させてから乱数取得ステップおよび論理積演算ステップの処理を実行してもよい。
[概要]
実施形態では、次のように長さの異なる複数の乱数を生成する。まず、2進数で表現された乱数の各桁の値を要素に含む「第1列」を得る(乱数取得ステップ)。次に、「第1列」と「第2列」との要素単位の論理積演算結果(要素ごとのAND演算結果、例えば、ビットAND演算結果)である「第3列」を得る(論理積演算ステップ)。ただし、「第2列」は、正の整数iに対して広義単調増加(非減少)の関係にある個数の下位j桁の要素が1であり、かつ、残りの桁の要素が0である、2進数で表現された列である。「第1列」「第2列」「第3列」の長さ(要素数、ビット数)は、例えば同一である。ここで「第3列」によって表される値がiよりも大きい場合には、0以上i以下の乱数の生成に失敗したとして、このiに対して乱数取得ステップおよび論理積演算ステップの処理を再び実行する(やり直す)。一方、「第3列」によって表される値がi以下の場合には、0以上i以下の乱数の生成に成功したとして当該乱数を採用し、新たなiについて0以上i以下の乱数を生成するために、iを増加させてから乱数取得ステップおよび論理積演算ステップの処理を実行する。この方法では、「第1列」によって表される値とiとを比較するのではなく、「第2列」によって「第1列」をマスクして得られる「第3列」によって表される値とiとを比較する。そのため、0以上i以下の乱数の生成に成功する確率が向上し、高速で0以上i以下の乱数を生成できる。なお、「j」は「i」に対して広義単調増加する関係にある正の整数であればよいが、jが1+log2 i以下の最大の整数である場合に最も効率がよい。すなわち、床関数floorに対してj=floor(1+log2 i)であることが望ましい。j=floor(1+log2 i)である場合、特にiがメルセンヌ数であれば(i=2N−1、ただしNは正整数)、0以上i以下の乱数が生成される確率が100%となる。そのため、iがメルセンヌ数であると判定された場合、「第3列」によって表される値とiとを比較することなく、0以上i以下の乱数の生成に成功したとして当該乱数を採用し、新たなiについて0以上i以下の乱数を生成するために、iを増加させてから乱数取得ステップおよび論理積演算ステップの処理を実行してもよい。
好ましくは、「第3列」によって表される値がi以下の場合、0以上i以下の乱数の生成に成功したとして当該乱数を採用し、新たなiについて0以上i以下の乱数を生成するためにiの値を増加させ、「第4列」と「第2列」との要素単位の論理和演算結果(要素ごとのOR演算結果、例えば、ビットOR演算結果)を新たな「第2列」とし、乱数取得ステップおよび論理積演算ステップの処理を実行する。ただし、「第4列」は2進数で表現されたiの各桁の値を要素とする列である。要素単位の論理和演算は低コストであるため、高速で「第2列」を得ることができる。また、要素単位の論理和演算に必要な記憶容量も小さい。
より好ましくは、「第3列」によって表される値がi以下の場合に0以上i以下の乱数の生成に成功したとして当該乱数を採用し、新たなiについて0以上i以下の乱数を生成するために、iの値を1増加させ、iの値を1増加させるたびに、「第4列」と「第2列」との要素単位の論理和演算結果を新たな「第2列」とし、乱数取得ステップおよび論理積演算ステップの処理を実行する。この場合、iの値が1増加するたびに新たな「第2列」が生成されるが、これによって常に「第2列」が異なる列に更新されるとは限らない。すなわち、iの値によっては「第4列」と「第2列」との要素単位の論理和演算結果が当該「第4列」と同一となる場合もある。例えば、j=floor(1+log2 i)である場合、「第4列」が変更されるのはiが2j−1になったときのみである。そのため、iの値を1増加するたびに必ず新たな「第2列」を生成することは一見非効率に見える。しかしながら、通常、iが「第2列」を変更する値に増加したか否か(例えば、i=2j−1になるか否か)を判定するための演算コストは、「第2列」を生成するための要素単位の論理和演算の演算コストよりも大きい。そのため、iの値を1増加するたびに必ず新たな「第2列」を生成するほうが演算コストを低く抑えることができる。ただし、iが「第2列」を変更する値に増加したか否かを判定するための演算コストが、「第2列」を生成するための要素単位の論理和演算の演算コストよりも小さい環境であれば、iが「第2列」を変更する値に増加したか否かを判定し、iが「第2列」を変更する値に増加した場合にのみ「第2列」を更新してもかまわない。
上述のような処理を1≦i<n(ただし、nは2以上の整数)の各iについて実行することで、これらの各iについて0以上i以下の乱数を高速に生成できる。このようなn−1個の乱数は、例えば、n個の元をランダムに置換するn−ランダム置換に利用できる。すなわち、n−ランダム置換後の集合のサイズはn!であり、1〜n−1番目の要素の置換先をランダムに決めれば、残りの1個の要素の置換先も決まる。上記のn−1個の乱数は1〜n−1番目の要素の置換先を決めるために利用でき、n−ランダム置換された列と一対一に対応する。
また、上記の処理が並列処理されてもよい。例えば、乱数取得ステップにおいて、複数の「第1列」を含む「第1集合列」を得、論理積演算ステップにおいて、「第1集合列」と「第2集合列」との要素単位の論理積演算結果である「第3集合列」を得る。ただし、「第1集合列」が含む複数の「第1列」は互いに独立した列であり、複数の「第1列」の相互間に関係はない。「第2集合列」は複数の「第2列」を含み、「第3集合列」は複数の「第3列」を含む。その他の処理は上述した通りである。
[第1実施形態]
次に、第1実施形態を説明する。
<構成>
図1に例示するように、本形態の乱数生成装置1は、バイナリ乱数生成部11、記憶部12、カウンタ13、論理和演算部14、乱数取得部15、論理積演算部16、制御部17、および出力部18を有する。乱数生成装置1は、例えば、CPU(central processing unit)等のプロセッサ(ハードウェア・プロセッサ)やRAM(random-access memory)・ROM(read-only memory)等のメモリ等を備える汎用または専用のコンピュータが所定のプログラムを実行することで構成される装置である。このコンピュータは1個のプロセッサやメモリを備えていてもよいし、複数個のプロセッサやメモリを備えていてもよい。このプログラムはコンピュータにインストールされてもよいし、予めROM等に記録されていてもよい。また、CPUのようにプログラムが読み込まれることで機能構成を実現する電子回路(circuitry)ではなく、プログラムを用いることなく処理機能を実現する電子回路を用いて一部またはすべての処理部が構成されてもよい。また、1個の装置を構成する電子回路が複数のCPUを含んでいてもよい。
次に、第1実施形態を説明する。
<構成>
図1に例示するように、本形態の乱数生成装置1は、バイナリ乱数生成部11、記憶部12、カウンタ13、論理和演算部14、乱数取得部15、論理積演算部16、制御部17、および出力部18を有する。乱数生成装置1は、例えば、CPU(central processing unit)等のプロセッサ(ハードウェア・プロセッサ)やRAM(random-access memory)・ROM(read-only memory)等のメモリ等を備える汎用または専用のコンピュータが所定のプログラムを実行することで構成される装置である。このコンピュータは1個のプロセッサやメモリを備えていてもよいし、複数個のプロセッサやメモリを備えていてもよい。このプログラムはコンピュータにインストールされてもよいし、予めROM等に記録されていてもよい。また、CPUのようにプログラムが読み込まれることで機能構成を実現する電子回路(circuitry)ではなく、プログラムを用いることなく処理機能を実現する電子回路を用いて一部またはすべての処理部が構成されてもよい。また、1個の装置を構成する電子回路が複数のCPUを含んでいてもよい。
<処理>
本形態では、1≦i<n(ただし、nは2以上の整数)の各iについて0以上i以下の乱数を生成する。「第1列」「第2列」「第3列」をそれぞれL個の要素からなるベクトルとして扱い、乱数生成装置1がLビット精度で演算を行うものとする。本形態ではj=floor(1+log2 i)であり、Lがfloor(1+log2 (n−1))よりも大きな正の整数である場合を説明する。
本形態では、1≦i<n(ただし、nは2以上の整数)の各iについて0以上i以下の乱数を生成する。「第1列」「第2列」「第3列」をそれぞれL個の要素からなるベクトルとして扱い、乱数生成装置1がLビット精度で演算を行うものとする。本形態ではj=floor(1+log2 i)であり、Lがfloor(1+log2 (n−1))よりも大きな正の整数である場合を説明する。
図2に例示するように、まず、カウンタ13が正の整数iを1に初期化し(i:=1)、論理和演算部14がL個の要素からなるベクトルM0∈{0,1}L(第2列)を全ての要素が0のベクトルに初期化する(M0:=0)。なお、「α:=β」はαをβと定義することを意味する(ステップS13)。
カウンタ13はiを出力し、iは論理和演算部14に入力される。論理和演算部14は、2進数で表現されたiの各桁の値を要素とするL個の要素からなるベクトルBi∈{0,1}L(第4列)とベクトルMi−1∈{0,1}L(第2列)との要素単位の論理和演算(ビットOR演算)を行い、新たなベクトルMi∈{0,1}L(新たな第2列)を得る(Mi:=Mi−1 OR Bi)。ただし、「α OR β」はαとβとの要素単位の論理和演算を表す。ベクトルBiまたはMi−1の第k要素(ただし、k=0,・・・,L−1)が1である場合、ベクトルMiの第k要素は1となり、ベクトルBiおよびMi−1の第k要素がともに0の場合、ベクトルMiの第k要素は0となる。例えば、図3に例示するように、i=1,2,3,4,5,・・・の場合のベクトルMiは、それぞれ、M1=(00…0001),M2=(00…0011),M3=(00…0011),M4=(00…0111),M5=(00…0111),・・・となる。すなわち、ベクトルMiは下位j=floor(1+log2 i)桁の要素が1であって残りの桁の要素が0となる。
乱数取得部15は記憶部12にL個の要素からなるLビットのバイナリ乱数ベクトルr∈{0,1}L(第1列)が残存しているかを判定する(ステップS12)。バイナリ乱数ベクトルrが残存している場合には、乱数取得部15は記憶部12からバイナリ乱数ベクトルrを読み出して出力する(ステップS15)。読み出されたバイナリ乱数ベクトルrは記憶部12から削除される。一方、バイナリ乱数ベクトルrが残存していない場合には、バイナリ乱数生成部11がLビットのバイナリ乱数ベクトルr∈{0,1}Lを生成して記憶部12に格納し、乱数取得部15は記憶部12からバイナリ乱数ベクトルrを読み出して出力する。なお、処理の高速化のため、バイナリ乱数生成部11は並列処理によって複数個のバイナリ乱数ベクトルrを生成して記憶部12に格納することが望ましい。出力されたバイナリ乱数ベクトルrは論理積演算部16に送られる(ステップS15)。
論理積演算部16は、バイナリ乱数ベクトルrとベクトルMiとの要素単位の論理積演算(ビットAND演算、等号判定)を行い、その演算結果であるベクトルti∈{0,1}L(第3列)を得て出力する(ti:=r AND Mi)。ただし、「α AND β」はαとβとの要素単位の論理積演算を表す。ベクトルMiの第k要素(ただし、k=0,・・・,L−1)が0である場合、ベクトルtiの第k要素は0となり、ベクトルMiの第k要素が1である場合、ベクトルtiの第k要素はバイナリ乱数ベクトルrの第k要素となる。すなわち、ベクトルtiはバイナリ乱数ベクトルrをベクトルMiでマスク(等号処理)して得られるベクトルである。図4の例では、ベクトルMiの下位j=floor(1+log2 i)個の要素がすべて1であり、上位L−j個の要素がすべて0である。そのため、ベクトルtiの下位j個はバイナリ乱数ベクトルr=(rL−1,・・・,r1,r0)の下位j個の要素rj−1,・・・,r1,r0となり、ベクトルtiの上位L−jビットはすべて0となる。ベクトルtiは制御部17に送られる(ステップS16)。
制御部17は、さらにカウンタ13から出力されたiを入力とし、ベクトルtiによって表される値(ベクトルtiの10進数表現値)と整数iとを比較する。本形態の例では、制御部17がベクトルtiによって表される値が整数i以下であるかを判定する(ステップS171)。ベクトルtiによって表される値がiよりも大きいと判定された場合には、0以上i以下の乱数の生成に失敗したとし、処理がステップS12に戻される。これにより、同じiについて乱数取得部15よび論理積演算部16の処理が再び実行される。一方、ベクトルtiによって表される値がi以下であると判定された場合には、0以上i以下の乱数の生成に成功したとし、i=n−1であるかが判定される(ステップS172)。i=n−1でなければ、i+1を新たなi(i:=i+1)とし(ステップS173)、処理がステップS14に戻される。一方、i=n−1であれば、すべてのi=1,・・・,n−1について0以上i以下の乱数の生成が成功したとし、生成された乱数t1,・・・,tn−1を出力する(ステップS18)。さらに多くの乱数必要な場合には、上述の処理を繰り返せばよい。
<本形態の特徴>
従来のようにバイナリ乱数ベクトルr∈{0,1}Lが表す値とiとの大小判定によって0以上i以下の乱数を生成する場合、2Lに対してiが小さいと、0以上i以下の乱数の生成確率が極度に低下し、乱数の生成速度が低下してしまう。一方、本形態では、バイナリ乱数ベクトルr∈{0,1}Lを、下位j=floor(1+log2 i)桁の要素が1であって他の要素が0であるベクトルMiでマスクして得られるベクトルtiが表す値とiとの大小判定を行う。2j(2のMiのビット数jべき)は、iの高々2倍であるから,1/2以上の確率で0以上i以下の乱数の生成に成功する。
従来のようにバイナリ乱数ベクトルr∈{0,1}Lが表す値とiとの大小判定によって0以上i以下の乱数を生成する場合、2Lに対してiが小さいと、0以上i以下の乱数の生成確率が極度に低下し、乱数の生成速度が低下してしまう。一方、本形態では、バイナリ乱数ベクトルr∈{0,1}Lを、下位j=floor(1+log2 i)桁の要素が1であって他の要素が0であるベクトルMiでマスクして得られるベクトルtiが表す値とiとの大小判定を行う。2j(2のMiのビット数jべき)は、iの高々2倍であるから,1/2以上の確率で0以上i以下の乱数の生成に成功する。
また、最初からiのビット数分だけ乱数を生成しようとすると、iによって処理が異なるために却って速度は低下する。コンピュータではできるだけ同じ処理の繰り返しの方が高速である。本形態では各iについて同じ処理を繰り返すため高速である。
ベクトルMiの計算は、毎回iのビット数を計算するのではなく、2進数で表現されたiの各桁の値を要素とするL個の要素からなるベクトルBiとベクトルMi−1との要素単位の論理和演算(ビットOR演算)を繰り返すことによって実現される。要素単位の論理和演算は、多くのコンピュータで最も高速な演算の一つである。
[第2実施形態]
iがメルセンヌ数である場合、ベクトルtiによって表される値は必ずi以下となる。そのため、iがメルセンヌ数であると判定された場合には、ベクトルtiによって表される値と整数iとを比較することなく、0以上i以下の乱数の生成に成功したことにしてもよい。以下では、これまで説明した事項との相違点を中心に説明し、既に説明した事項については同じ参照番号を引用して説明を省略する。
iがメルセンヌ数である場合、ベクトルtiによって表される値は必ずi以下となる。そのため、iがメルセンヌ数であると判定された場合には、ベクトルtiによって表される値と整数iとを比較することなく、0以上i以下の乱数の生成に成功したことにしてもよい。以下では、これまで説明した事項との相違点を中心に説明し、既に説明した事項については同じ参照番号を引用して説明を省略する。
<構成>
図1に例示するように、本形態の乱数生成装置2は、バイナリ乱数生成部11、記憶部12、カウンタ13、論理和演算部14、乱数取得部15、論理積演算部16、制御部27、および出力部18を有する。乱数生成装置2は、例えば、上述したコンピュータに所定のプログラムが読み込まれることで構成されてもよいし、少なくとも一部の要素がハードウェアのみによって構成されてもよい。
図1に例示するように、本形態の乱数生成装置2は、バイナリ乱数生成部11、記憶部12、カウンタ13、論理和演算部14、乱数取得部15、論理積演算部16、制御部27、および出力部18を有する。乱数生成装置2は、例えば、上述したコンピュータに所定のプログラムが読み込まれることで構成されてもよいし、少なくとも一部の要素がハードウェアのみによって構成されてもよい。
<処理>
ステップS11〜S16の処理は第1実施形態と同じである。ただし、第2実施形態では、ステップS16の後、iがメルセンヌ数であるか(i=2j−1−1であるか)を判定する(ステップS275)。ここで、iがメルセンヌ数でなければステップS171の処理に進み、iがメルセンヌ数であれば0以上i以下の乱数の生成に成功したとし、ステップS172の処理に進む。その他は第1実施形態と同じである。
ステップS11〜S16の処理は第1実施形態と同じである。ただし、第2実施形態では、ステップS16の後、iがメルセンヌ数であるか(i=2j−1−1であるか)を判定する(ステップS275)。ここで、iがメルセンヌ数でなければステップS171の処理に進み、iがメルセンヌ数であれば0以上i以下の乱数の生成に成功したとし、ステップS172の処理に進む。その他は第1実施形態と同じである。
<本形態の特徴>
j=floor(1+log2 i)である場合、iがメルセンヌ数であるならば、ステップS16で生成されたベクトルtiによって表される値は必ず0以上i以下となる。本形態では、このような場合にステップS171の大小判定を省略するため、環境によっては、第1実施形態よりも演算コストを低減できる。
j=floor(1+log2 i)である場合、iがメルセンヌ数であるならば、ステップS16で生成されたベクトルtiによって表される値は必ず0以上i以下となる。本形態では、このような場合にステップS171の大小判定を省略するため、環境によっては、第1実施形態よりも演算コストを低減できる。
[第3実施形態]
j=floor(1+log2 i)である場合、ステップS14の処理(Mi:=Mi−1 OR Bi)によってMi≠Mi−1となるのは、ステップS173によって更新されたiが2j−1の場合のみである。本形態では、iが2j−1に更新される場合のみにステップS14の処理(Mi:=Mi−1 OR Bi)を行い、その他の場合にはステップS14の処理を行うことなく、Mi−1をそのままMiとして用いる。
j=floor(1+log2 i)である場合、ステップS14の処理(Mi:=Mi−1 OR Bi)によってMi≠Mi−1となるのは、ステップS173によって更新されたiが2j−1の場合のみである。本形態では、iが2j−1に更新される場合のみにステップS14の処理(Mi:=Mi−1 OR Bi)を行い、その他の場合にはステップS14の処理を行うことなく、Mi−1をそのままMiとして用いる。
<構成>
図1に例示するように、本形態の乱数生成装置3は、バイナリ乱数生成部11、記憶部12、カウンタ13、論理和演算部14、乱数取得部15、論理積演算部16、制御部37、および出力部18を有する。乱数生成装置3は、例えば、上述したコンピュータに所定のプログラムが読み込まれることで構成されてもよいし、少なくとも一部の要素がハードウェアのみによって構成されてもよい。
図1に例示するように、本形態の乱数生成装置3は、バイナリ乱数生成部11、記憶部12、カウンタ13、論理和演算部14、乱数取得部15、論理積演算部16、制御部37、および出力部18を有する。乱数生成装置3は、例えば、上述したコンピュータに所定のプログラムが読み込まれることで構成されてもよいし、少なくとも一部の要素がハードウェアのみによって構成されてもよい。
<処理>
ステップS11〜S173の処理は第1または2実施形態と同じである。本形態では、ステップS173の処理の後、制御部37がi=2j−1であるか否かを判定する(ステップS374)。i=2j−1でない場合にはステップS14の処理に戻る。一方、i=2j−1である場合には、Mi:=Mi−1としてステップS12の処理に戻る。その他は第1または2実施形態と同じである。
ステップS11〜S173の処理は第1または2実施形態と同じである。本形態では、ステップS173の処理の後、制御部37がi=2j−1であるか否かを判定する(ステップS374)。i=2j−1でない場合にはステップS14の処理に戻る。一方、i=2j−1である場合には、Mi:=Mi−1としてステップS12の処理に戻る。その他は第1または2実施形態と同じである。
<本形態の特徴>
i=2j−1であるか否かの判定のための演算コストがMi:=Mi−1 OR Biの演算コストよりも小さい環境では、第1実施形態よりも処理を高速化できる場合もある。また、第2実施形態と第3実施形態とを組み合わせる場合、ステップS275でi=2j−1−1と判定された場合には、ステップS374で必ずi=2j−1となる。そのため、ステップS275でi=2j−1−1と判定され、ステップS172でi=n−1でないと判定された場合には、ステップS374の判定処理を行うことなく、Mi:=Mi−1としてステップS12の処理に戻ってもよい。
i=2j−1であるか否かの判定のための演算コストがMi:=Mi−1 OR Biの演算コストよりも小さい環境では、第1実施形態よりも処理を高速化できる場合もある。また、第2実施形態と第3実施形態とを組み合わせる場合、ステップS275でi=2j−1−1と判定された場合には、ステップS374で必ずi=2j−1となる。そのため、ステップS275でi=2j−1−1と判定され、ステップS172でi=n−1でないと判定された場合には、ステップS374の判定処理を行うことなく、Mi:=Mi−1としてステップS12の処理に戻ってもよい。
[その他の変形例等]
なお、本発明は上述の実施の形態に限定されるものではない。例えば、上記の処理はj=floor(1+log2 i)の場合に最も効率がよいが、jがiに対して広義単調増加の関係にあれば、従来よりも高速に0以上i以下の乱数を生成できる。また、各iについてステップS16の処理を実行するのではなく、一部のiのみについてステップS16が実行されてもよい。例えば、iが素数のときのみにステップS16を実行することで素体上の乱数を高速に生成できる。特に、iがメルセンヌ素数のときのみにステップS16を実行すれば、ステップS171の大小判定を行うことなく、素体上の乱数を高速に生成できる。また、ステップS173ではiを1ずつ増加させたが、下位j桁の要素がすべて1であって残りの桁の要素がすべて0であるベクトルMiが得られるのであれば、iを1ずつ増加させなくてもよい。例えば、i=2j−1を満たすようにiを増加させてもよい。その他、上記の処理が並列処理によって実行されてもよい。
なお、本発明は上述の実施の形態に限定されるものではない。例えば、上記の処理はj=floor(1+log2 i)の場合に最も効率がよいが、jがiに対して広義単調増加の関係にあれば、従来よりも高速に0以上i以下の乱数を生成できる。また、各iについてステップS16の処理を実行するのではなく、一部のiのみについてステップS16が実行されてもよい。例えば、iが素数のときのみにステップS16を実行することで素体上の乱数を高速に生成できる。特に、iがメルセンヌ素数のときのみにステップS16を実行すれば、ステップS171の大小判定を行うことなく、素体上の乱数を高速に生成できる。また、ステップS173ではiを1ずつ増加させたが、下位j桁の要素がすべて1であって残りの桁の要素がすべて0であるベクトルMiが得られるのであれば、iを1ずつ増加させなくてもよい。例えば、i=2j−1を満たすようにiを増加させてもよい。その他、上記の処理が並列処理によって実行されてもよい。
上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体の例は、非一時的な(non-transitory)記録媒体である。このような記録媒体の例は、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等である。
このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD−ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。処理の実行時、このコンピュータは、自己の記録装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。
上記実施形態では、コンピュータ上で所定のプログラムを実行させて本装置の処理機能が実現されたが、これらの処理機能の少なくとも一部がハードウェアで実現されてもよい。
本発明は、例えば、秘密分散、秘密計算、公開鍵暗号、共通鍵暗号、電子署名等の各種の暗号技術に利用でき、特にn−ランダム置換に利用できる。
1〜3 乱数生成装置
Claims (10)
- 2進数で表現された乱数の各桁の値を要素に含む第1列を得る乱数取得部と、
前記第1列と、正の整数iに対して広義単調増加の関係にある個数の下位j桁の要素が1であって残りの桁の要素が0である2進数で表現された第2列と、の要素単位の論理積演算結果である第3列を得る論理積演算部と、
前記第3列によって表される値がiよりも大きい場合に、前記乱数取得部および前記論理積演算部の処理を再び実行させ、前記第3列によって表される値がi以下の場合に、iを増加させてから前記乱数取得部および前記論理積演算部の処理を実行させる制御部と、
を有し、
前記制御部は、前記第3列によって表される値がi以下の場合にiの値を増加させ、2進数で表現されたiの各桁の値を要素とする第4列と前記第2列との要素単位の論理和演算結果を新たな前記第2列とし、前記乱数取得部および前記論理積演算部の処理を実行させる、乱数生成装置。 - 請求項1の乱数生成装置であって、
前記制御部は、前記第3列によって表される値がi以下の場合にiの値を1増加させ、iの値を1増加させるたびに、2進数で表現されたiの各桁の値を要素とする第4列と前記第2列との要素単位の論理和演算結果を新たな前記第2列とし、前記乱数取得部および前記論理積演算部の処理を実行させる、乱数生成装置。 - 2進数で表現された乱数の各桁の値を要素に含む第1列を得る乱数取得部と、
前記第1列と、正の整数iに対して広義単調増加の関係にある個数の下位j桁の要素が1であって残りの桁の要素が0である2進数で表現された第2列と、の要素単位の論理積演算結果である第3列を得る論理積演算部と、
前記第3列によって表される値がiよりも大きい場合に、前記乱数取得部および前記論理積演算部の処理を再び実行させ、前記第3列によって表される値がi以下の場合に、iを増加させてから前記乱数取得部および前記論理積演算部の処理を実行させる制御部と、
を有し、
前記制御部は、前記第3列によって表される値がi以下の場合にiの値を1増加させ、iの値を1増加させるたびに、2進数で表現されたiの各桁の値を要素とする第4列と前記第2列との要素単位の論理和演算結果を新たな前記第2列とし、前記乱数取得部および前記論理積演算部の処理を実行させる、乱数生成装置。 - 請求項1から3の何れかの乱数生成装置であって、
jは1+log2 i以下の最大の整数であり、
前記制御部は、iがメルセンヌ数であると判定した場合にiを増加させて前記乱数取得部および前記論理積演算部の処理を実行させる、乱数生成装置。 - 2進数で表現された乱数の各桁の値を要素に含む第1列を得る乱数取得部と、
前記第1列と、正の整数iに対して広義単調増加の関係にある個数の下位j桁の要素が1であって残りの桁の要素が0である2進数で表現された第2列と、の要素単位の論理積演算結果である第3列を得る論理積演算部と、
前記第3列によって表される値がiよりも大きい場合に、前記乱数取得部および前記論理積演算部の処理を再び実行させ、前記第3列によって表される値がi以下の場合に、iを増加させてから前記乱数取得部および前記論理積演算部の処理を実行させる制御部と、
を有し、
jは1+log 2 i以下の最大の整数であり、
前記制御部は、iがメルセンヌ数であると判定した場合にiを増加させて前記乱数取得部および前記論理積演算部の処理を実行させる、乱数生成装置。 - 請求項1から5の何れかの乱数生成装置であって、
nは2以上の整数であり、
前記制御部は、1≦i<nの各iについて前記乱数取得部および前記論理積演算部の処理を実行させる、乱数生成装置。 - 乱数取得部が、2進数で表現された乱数の各桁の値を要素に含む第1列を得る乱数取得ステップと、
論理積演算部が、前記第1列と、正の整数iに対して広義単調増加の関係にある個数の下位j桁の要素が1であって残りの桁の要素が0である2進数で表現された第2列と、の要素単位の論理積演算結果である第3列を得る論理積演算ステップと、
前記第3列によって表される値がiよりも大きい場合に、前記乱数取得ステップおよび前記論理積演算ステップの処理を再び実行させ、前記第3列によって表される値がi以下の場合に、iを増加させてから前記乱数取得ステップおよび前記論理積演算ステップの処理を実行させる制御ステップと、を有し、
前記制御ステップは、前記第3列によって表される値がi以下の場合にiの値を増加させ、2進数で表現されたiの各桁の値を要素とする第4列と前記第2列との要素単位の論理和演算結果を新たな前記第2列とし、前記乱数取得ステップおよび前記論理積演算ステップの処理を実行させる、乱数生成方法。 - 乱数取得部が、2進数で表現された乱数の各桁の値を要素に含む第1列を得る乱数取得ステップと、
論理積演算部が、前記第1列と、正の整数iに対して広義単調増加の関係にある個数の下位j桁の要素が1であって残りの桁の要素が0である2進数で表現された第2列と、の要素単位の論理積演算結果である第3列を得る論理積演算ステップと、
前記第3列によって表される値がiよりも大きい場合に、前記乱数取得ステップおよび前記論理積演算ステップの処理を再び実行させ、前記第3列によって表される値がi以下の場合に、iを増加させてから前記乱数取得ステップおよび前記論理積演算ステップの処理を実行させる制御ステップと、
を有し、
前記制御ステップは、前記第3列によって表される値がi以下の場合にiの値を1増加させ、iの値を1増加させるたびに、2進数で表現されたiの各桁の値を要素とする第4列と前記第2列との要素単位の論理和演算結果を新たな前記第2列とし、前記乱数取得ステップおよび前記論理積演算ステップの処理を実行させる、乱数生成方法。 - 乱数取得部が、2進数で表現された乱数の各桁の値を要素に含む第1列を得る乱数取得ステップと、
論理積演算部が、前記第1列と、正の整数iに対して広義単調増加の関係にある個数の下位j桁の要素が1であって残りの桁の要素が0である2進数で表現された第2列と、の要素単位の論理積演算結果である第3列を得る論理積演算ステップと、
前記第3列によって表される値がiよりも大きい場合に、前記乱数取得ステップおよび前記論理積演算ステップの処理を再び実行させ、前記第3列によって表される値がi以下の場合に、iを増加させてから前記乱数取得ステップおよび前記論理積演算ステップの処理を実行させる制御ステップと、
を有し、
jは1+log 2 i以下の最大の整数であり、
前記制御ステップは、iがメルセンヌ数であると判定した場合にiを増加させて前記乱数取得ステップとおよび前記論理積演算ステップとの処理を実行させる、乱数生成方法。 - 請求項1から6の何れかの乱数生成装置としてコンピュータを機能させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015014913A JP5875719B1 (ja) | 2015-01-29 | 2015-01-29 | 乱数生成装置、乱数生成方法、およびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015014913A JP5875719B1 (ja) | 2015-01-29 | 2015-01-29 | 乱数生成装置、乱数生成方法、およびプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP5875719B1 true JP5875719B1 (ja) | 2016-03-02 |
JP2016139348A JP2016139348A (ja) | 2016-08-04 |
Family
ID=55434699
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015014913A Active JP5875719B1 (ja) | 2015-01-29 | 2015-01-29 | 乱数生成装置、乱数生成方法、およびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5875719B1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4235400B1 (en) * | 2020-01-28 | 2024-07-24 | Quside Technologies S.L. | Computer-implemented method for deciding whether a random number is larger or smaller than a given threshold |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06214956A (ja) * | 1993-01-20 | 1994-08-05 | Casio Comput Co Ltd | 乱数発生装置 |
JPH07193565A (ja) * | 1993-12-27 | 1995-07-28 | Canon Inc | 疑似乱数を用いた通信方法とその装置 |
JPH11109859A (ja) * | 1997-10-06 | 1999-04-23 | Nec Corp | 擬似乱数発生方法および装置 |
JP2007179280A (ja) * | 2005-12-27 | 2007-07-12 | Toshiba Information Systems (Japan) Corp | 乱数生成装置及び乱数生成方法 |
JP2014216005A (ja) * | 2013-04-29 | 2014-11-17 | 韓國電子通信研究院Electronics and Telecommunications ResearchInstitute | 2進乱数列を整数乱数に変換する装置および方法 |
-
2015
- 2015-01-29 JP JP2015014913A patent/JP5875719B1/ja active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06214956A (ja) * | 1993-01-20 | 1994-08-05 | Casio Comput Co Ltd | 乱数発生装置 |
JPH07193565A (ja) * | 1993-12-27 | 1995-07-28 | Canon Inc | 疑似乱数を用いた通信方法とその装置 |
JPH11109859A (ja) * | 1997-10-06 | 1999-04-23 | Nec Corp | 擬似乱数発生方法および装置 |
JP2007179280A (ja) * | 2005-12-27 | 2007-07-12 | Toshiba Information Systems (Japan) Corp | 乱数生成装置及び乱数生成方法 |
JP2014216005A (ja) * | 2013-04-29 | 2014-11-17 | 韓國電子通信研究院Electronics and Telecommunications ResearchInstitute | 2進乱数列を整数乱数に変換する装置および方法 |
Also Published As
Publication number | Publication date |
---|---|
JP2016139348A (ja) | 2016-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11159305B2 (en) | Homomorphic data decryption method and apparatus for implementing privacy protection | |
CN107735830B (zh) | 秘密计算装置、秘密计算方法和记录介质 | |
JP5957120B1 (ja) | 秘密分散方法、秘密分散システム、分散装置、およびプログラム | |
WO2019208484A1 (ja) | 秘密集約総和システム、秘密計算装置、秘密集約総和方法、およびプログラム | |
CN112805769B (zh) | 秘密s型函数计算系统、装置、方法及记录介质 | |
WO2019208485A1 (ja) | 秘密集約最大値システム、秘密集約最小値システム、秘密計算装置、秘密集約最大値方法、秘密集約最小値方法、およびプログラム | |
JP2019145925A (ja) | ブロックチェーン・ネットワークにおいてトランザクションを検証するための方法及び当該ネットワークを構成するためのノード | |
JP6044738B2 (ja) | 情報処理装置、プログラム及び記憶媒体 | |
US20240345916A1 (en) | Generating a target data based on a function associated with a physical variation of a device | |
WO2019203262A1 (ja) | 秘密集約順位システム、秘密計算装置、秘密集約順位方法、およびプログラム | |
WO2019208486A1 (ja) | 秘密集約中央値システム、秘密計算装置、秘密集約中央値方法、およびプログラム | |
JP5875719B1 (ja) | 乱数生成装置、乱数生成方法、およびプログラム | |
US10001972B2 (en) | Random IP generation method and apparatus | |
CN106796765B (zh) | 非减序列判定装置、非减序列判定方法以及记录介质 | |
JP5875717B1 (ja) | 乱数生成装置、乱数生成方法、およびプログラム | |
US9182943B2 (en) | Methods and devices for prime number generation | |
JPWO2018008547A1 (ja) | 秘密計算システム、秘密計算装置、秘密計算方法、およびプログラム | |
JP7511525B2 (ja) | 内積計算装置、内積計算方法、および、内積計算プログラム | |
US20240187210A1 (en) | Encryption processing apparatus and encryption processing method | |
CN117857004A (zh) | 具有同态加密操作的装置和方法 | |
JP6023852B1 (ja) | 検知機能付加装置、検知装置、およびプログラム | |
JP6093718B2 (ja) | 拡大体乗算装置、拡大体乗算方法及びプログラム | |
CN115840953A (zh) | 一种身份认证方法、装置、终端及可读存储介质 | |
CN117033707A (zh) | 设备排序方法、装置、计算机设备和存储介质 | |
JP2002311828A (ja) | ビットスライス条件つき処理装置、そのプログラム及びその記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20151216 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20160112 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160119 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5875719 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |