JP4351731B2 - 擬似乱数発生装置、擬似乱数発生プログラム及び擬似乱数発生プログラムを記録した媒体 - Google Patents

擬似乱数発生装置、擬似乱数発生プログラム及び擬似乱数発生プログラムを記録した媒体 Download PDF

Info

Publication number
JP4351731B2
JP4351731B2 JP2008542166A JP2008542166A JP4351731B2 JP 4351731 B2 JP4351731 B2 JP 4351731B2 JP 2008542166 A JP2008542166 A JP 2008542166A JP 2008542166 A JP2008542166 A JP 2008542166A JP 4351731 B2 JP4351731 B2 JP 4351731B2
Authority
JP
Japan
Prior art keywords
memory
value
number generator
random number
elements
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.)
Expired - Fee Related
Application number
JP2008542166A
Other languages
English (en)
Other versions
JPWO2008053936A1 (ja
Inventor
清人 由井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Application granted granted Critical
Publication of JP4351731B2 publication Critical patent/JP4351731B2/ja
Publication of JPWO2008053936A1 publication Critical patent/JPWO2008053936A1/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • G06F7/582Pseudo-random number generators
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • H04L9/0656Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
    • H04L9/0662Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computational Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、擬似乱数を発生するための装置およびプログラム並びにプログラムを記録したコンピュータ読み取り可能な記録媒体に関するものである。特に、少リソースな、組込機器、家電品、携帯機器、小型情報端末、小型ゲーム端末機器等に用いられる擬似乱数の生成に関するものである。
従来、少ないリソースで乱数生成を実現しようとするもので、自装置内で乱数生成する手段が開示されている(特許文献1参照)。
また、擬似乱数生成器としてメルセンヌ・ツイスタが知られている。メルセンヌ素数を利用したメルセンヌ・ツイスタ(Mersenne twister)は、1997年(論文発表は1998年1月)に松本眞と西村拓士によって開発された擬似乱数生成器である。周期が2の19937乗-1つまり623ワード(19937ビット、2492バイト)の表現力で、623次元超立方体の中に均等に分布することが証明されている(非特許文献1参照)。
また、外務省により公開されている暗号の紹介のページが存在する。有限乱数式、無限乱数式暗号を判りやすく紹介している。ここでは無限乱数式暗号は論理的に解読できないという事実を述べている(非特許文献2参照)。
このように、暗号用に品質の良い乱数が必要とされ、研究されているが、より小さな機材で動き、より速く、周期が長く、論理的に予測困難な乱数生成器を求める要望が強い。メルセンヌ・ツイスタは周期という点で優れているが、一定の乱数列を出力するとその先が予測可能となるため、暗号には向かないなど短所もあり、新しい擬似乱数発生装置の要求は高い。
特開平10−247140号公報 M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-dimensionally equidistributed uniform pseudorandom number generator", ACM Trans. on Modeling and Computer Simulation Vol. 8, No. 1, January pp.3-30 (1998)http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html 外務省大臣官房情報通信課 非常勤講師 奥村定夫「外交と暗号」http: //www.mofa.go.jp/mofaj/annai/shocho/e_seifu/toukou2004.html
上述したように、データの暗号化においては、有限乱数式と無限乱数式が存在する。有限乱数式とは、同じ乱数表を繰り返し暗号化に使用する方式である。効率が良い反面一度乱数表を解読されると後は簡単に解読ができる。
一方、無限乱数式は一度使用した乱数表は2度と使わないという方式である。無限乱数式は同じ乱数を2度使わず1度限りの使用においては絶対に解読できないことが情報理論により証明されている暗号である。
電子計算機、小型携帯端末において強度の強い無限乱数式の暗号化を行うためには、高速で長周期の擬似乱数を生成する必要がある。本発明は、効率よく長周期の擬似乱数を発生し電子計算機、小型端末、電子機器に提供するためのものである。
当発明は、n個の目を持つサイコロを模した、n個の要素を持つ例えばリングバッファ状のメモリテーブルAを用意する。n個の要素に一つずつ異なる値を格納する。
このメモリテーブルAから任意の2つの要素を選び入れ替える。この処理を繰り返すことによりメモリテーブルAの内容はシャッフルされ、n個の要素の値を乱数として取り出すとn個の乱数列を生成できる。
この処理により得られる乱数列、つまりメモリテーブルの状態は、nの階乗の組み合わせを得られる。nを256とした時は、理論上は次の組み合わせを得る事ができる。
256の階乗 ≒ 8.57 × 10の506乗
このように、メモリテーブルAを使用した場合、要素の数を増やす事により理論上の最大の組み合わせ値(組み合わせの数)を高くできる事がわかる。
この組み合わせ値は、メモリテーブルAを乱数列とした場合は理論上の最大周期である。メモリテーブルAの2つの要素の交換が満遍なく最良に行われた時、乱数列の周期は理論上の最大値になる。交換が偏わって行われた時はそれが乱数の周期の形になって現れ周期は小さくなる。つまり、乱数列の品質の劣化になって現れる。
好ましい交換とは、逆に悪い交換例を挙げる事により理解できる。悪い交換例としてメモリテーブルAの任意の要素をn個先の要素と交換する事を考慮する。n個の要素を持つ例えばリングバッファのn個先の要素は循環して自分自身であるから結局テーブルは変化しない。これは極端に悪い例であるが、このように特定の2つの要素だけが入れ替わり全体としては変化しないというのが悪い交換である。
このような事にならないように、交換する2つの要素の位置関係は同じ事の繰り返しにならないように常にテーブル内を満遍なく変化する工夫が必要である。
ここに、素数、この割り切る事の出来ない特殊な値に着目し、メモリテーブルA中の一つの要素を素数の値だけ先の要素と交換するとよい。
これを各要素に繰り返し行うと万遍のない要素の入れ替え、好ましいシャッフルが行われる
本発明は、このようにして例えばリングバッファであるメモリテーブルAに対して素数を利用した要素の交換によりメモリテーブルAをシャッフルする事を特徴とするものである。
乱数は、任意のタイミングでメモリテーブルAの内容全てもしくは要素を取り出すことにより得る事ができる。
即ち、本願発明は、情報の記憶装置と、この記憶装置に格納され複数の要素を持つメモリテーブルAとを備える。また、このメモリテーブルAの要素に格納されている値を取り出して、当該値を乱数値として出力する乱数値出力手段を備える。更に、メモリテーブルAの内部の要素を並べ替えるテーブル変更手段を備える。
記憶装置には、複数の要素を持つメモリテーブルBを設ける。テーブル変更手段は、このメモリテーブルBの要素が持つ数値に従い、メモリテーブルAの内部の要素を並べ替える。メモリテーブルBの要素が持つ値としては、任意の素数を持つ
テーブル変更手段は、メモリテーブルAの要素を順番に逐次選択し、現在選択している要素に対してp要素先の要素と内容を入れ替える。この場合、数値pとしてメモリテーブルBの要素の値、即ち素数を順次取得する。
また、記憶装置に、メモリテーブルAの任意の要素を指し示すためのインデックスメモリNを備えるとよい。この場合、テーブル変更手段は、このインデックスメモリNの値が指し示すメモリテーブルAの要素に対して内容の変更を行う。
また、テーブル変更手段は、インデックスメモリNにより、メモリテーブルAの内容を変更した後、インデックスメモリNの値を任意の定数Kの値だけ加算するとよい。当該加算の結果、インデックスメモリNの値がメモリテーブルA の終端以降を指し示す場合、インデックスメモリNの値をメモリテーブルAの先頭を指し示す値に変更する。
また、記憶装置は、メモリテーブルBの任意の要素を指し示すためのインデックスメモリMを備えるとよい。この場合、テーブル変更手段は、このインデックスメモリMの値が指し示すメモリテーブルBの要素を取り出して値pとしてメモリテーブルAの操作を行う。
テーブル変更手段は、インデックスメモリMにより、メモリテーブルBより値pを取得した後、インデックスメモリMの値を任意の定数Kの値だけ加算するとよい。当該加算の結果、インデックスメモリMの値がメモリテーブルB の終端以降を指し示す場合、インデックスメモリMの値をメモリテーブルBの先頭を指し示す値に変更する。
また、インデックスメモリNの値を本装置の外部より受け付ける手段と、当該受け付けた値をインデックスメモリNに設定する手段とを備えてもよい。
同様に、インデックスメモリMの値を本装置の外部より受け付ける手段と、当該受け付けた値をインデックスメモリMに設定する手段とを備えてもよい。
以上において、各手段は、実際には処理装置が所定のプログラムを実行することによって実現されるものである。また、記憶装置は、一時記憶、大容量記憶およびリムーバブル媒体を含む包括的概念である。
本発明の実施例について図面を用いて説明する。
[実施例1]
この実施例1では、擬似乱数の発生を行うプログラムおよび装置を開示する。図1は、実施例1及び後述する各実施例で使用するコンピュータシステム又は電子機器の全体構成図である。
図1のコンピュータシステムは、情報処理装置S1011を備えている。この情報処理装置S1011は、計算機の全体制御および各種プログラムを実行する中央処理装置(以下CPU)である。また、図1のコンピュータシステムは、ROMBIOSのS1012と、アダプタS1015およびS1016と、各種プログラムやデータがロードされるメモリ装置S1013とを備え、それらはシステムバスS1014によって接続されている。また、図1のコンピュータシステムは、ユーザがデータを入力するための入力装置と、ユーザに情報を表示するための表示装置とを備えている(図示略)。
アダプタS1015は、HDD-S1030のホストインタフェースS1020に接続されている。また、アダプタS1016には、リーダライタS1019が接続されている。このリーダライタS1019には、着脱可能なストレージデバイスが接続される。
本願では、ストレージデバイスとして、USB装置S1040を用いる。USB装置S1040は、ストレージデバイスの機能を備える。以下、本願ではUSB装置S1040がメモリディスク装置であるとして説明するが、USB装置S1040は、本願発明の効果を奏するものであれば任意の装置でよい。
ROMBIOS-S1012には、HDD-S1030あるいはストレージデバイスであるUSB装置S1040などのシステムブート可能デバイスから一つのデバイスを選択するステップと、当該デバイスからシステムブートローダをメモリ装置S1013に読出すステップと、当該読み出したシステムブートローダに分岐するステップ(いわゆるシステムブート機能)とを備える。
HDD-S1030あるいは任意のストレージデバイスから読み出されたOSプログラムは、メモリ装置S1013に格納され、CPU-S1011により実行される。
またCPU-S1011は、各種のプログラムを実行することによって、後述する各実施例の動作を実現する。各実施例の動作は流れ図に沿って説明する。本出願において、CPU-S1011が実行する処理の流れ図の特殊記号および各種表記は、コンピュータ言語であるC言語に従う。文中、特に宣言のない変数においてメモリのアドレスを参照する変数の型はC言語のポインタ型とし、そうでない変数はint型変数とする。
%・・・剰余計算を示す記号である。
^ ・・・排他的論理輪を示す記号である。
++ ・・・インクリメント、値を一つ増加を意味する記号である。
[n ] ・・・配列を意味する記号である。nは配列の添字である。
* ・・・アドレス型変数の前に記す場合は、変数の示すアドレス上の値を示す。
0x・・・16進法の数値であることを示す。
図2は、本発明の第1実施例における初期化処理プログラムinz()が利用する記憶領域の構成を表している。CPU-S1011は、初期化処理プログラムinz()を実行する際に、図2に示す記憶領域をメモリ装置S1013に確保する。
図2において、S1200は、メモリテーブルAである。メモリテーブルAは、n個(n=1,2,3,・・・)の要素を持つ。
定数nは、後述のメモリ変数S1201の表現力の許す範囲内であれば、コンピュータシステムのメモリの許す値を定めることができる。
本実施例では、16進の乱数値を生成することから、nは256の倍数値を取るものとして全体を設計している。本実施例ではnは256とする。
また、各要素の大きさは本来任意である。得たい乱数の大きさに応じて大きくできるものである。実施例1において各要素の大きさは1バイトである。
S1201はメモリ変数である。内容としてS1200の要素の位置情報を格納するものである。このメモリ変数の大きさはS1200の全要素数を表現できる大きさであれば任意である。ここではゼロ〜65535の表現力を持つ2バイト型とする。
S1202はメモリテーブルBである。メモリテーブルBはm個の要素を持つ。定数mは任意の値である。コンピュータシステムのメモリの許す値を設定できる。本実施例では動作を分かりやすくするためにmを7と定める。
また、メモリテーブルBの各要素の大きさも任意であるが、この実施例では2バイトとする。
S1203はメモリ変数である。内容としてS1202の要素の位置情報を格納するものである。本実施例では2バイトのサイズを持つ。
図3は実施例1における初期化処理プログラムinz()の処理の流れを表している。
S1300Aにて本処理の初期化を行う。2バイト型のメモリ変数iを確保している。変数iは、図2のメモリテーブルA-S1200の要素数を表現できるサイズであれば他のサイズでもよい。
S1301Aでは、m個の要素を持つ図2のメモリテーブルB-S1202の初期化を行う。具体的には、各要素に2,3,5,7...とm個の素数を登録する。本実施例ではmは7であるから、2,3,5,7,11,13,17の値をS1202の7つの各要素に格納する。
S1302Aでは、図2のS1201にゼロを設定している。
S1303Aでは、図2のS1203にゼロを設定している。
S1304Aはループ処理である。変数iをゼロに初期化し、一回ループするごとにiの値を一つ増加してn回ループする。n回ループした後は終了するものである。
S1305Aでは、S1200に値を格納している。S1200の先頭からi個目の要素に対して、iの値に16進数ffでアンドをかけた値を格納している。
このアンド処理は、S1200の各要素に16進のゼロ〜ffの数値だけを格納する仕掛けである。
図4は、実施例1における乱数発生プログラムrnd()の処理の流れを表している。rnd()は乱数を発生し帰り値として1バイトの乱数を持つものである。本実施例の本体処理である。
S1300は初期化処理を行っている。変数sts,wk,wk1,tbl1,tbl2をここで確保している。
S1301は、変数tbl1に、メモリテーブルA-S1200からS1201が示す値を要素番号とした要素の開始アドレスを格納している。いま仮にS1201をゼロとした場合、S1200のゼロ個めつまり最初の要素の開始アドレスを格納する。
S1302は、メモリテーブルB-S1202からS1203が示す値番目の要素の値にS1201の値を加算した結果を変数wkに格納している。
S1303では、wkの値がS1200の要素の数以上の値を示さないように制限を加えている。定数_BUF_SIZE_MASKはS1200の要素数n−1の値を持つものである。
本実施例では、要素数nが256(16進数100)の整数倍のとき、本プログラムは正常に動くようにできている。
本実施例では、nを256としているので定数_BUF_SIZE_MASKの値として255(16進数ff)とする。そして、wkの値と定数_BUF_SIZE_MASKのビットパターンとのアンドをとり、その結果をwkに格納している。
つまり、wkは常にS1200のゼロ番目の要素から最後の要素までの間のいずれかの要素を示す。
S1304では、メモリテーブルA-S1200のうちwkが示す値を要素番号とした要素の開始アドレスを変数tbl2に格納している。いま仮にwkをゼロとした場合、S1200のゼロ個めつまり最初の要素の開始アドレスを格納する。
S1305では、変数tbl1の示すアドレスの値を読み取り、変数wk1に格納している。変数tbl1はS1200の要素のどれかのアドレスを示しているから、結果S1200のうちの一つの要素の開始アドレスをwk1に格納する。
S1306では、変数tbl2の示すアドレスの値を読み取り、変数tbl1の示すアドレスに格納している。変数tbl1、tbl2はそれぞれS1200の要素のどれかのアドレスを示しているから、結果S1200の要素の一つの値を他の要素に格納している。
S1307では、変数tbl2の示すアドレスにwk1の値を格納する。変数tbl2はS1200の要素のどれかのアドレスを示しているから、結果S1200の要素の一つにwk1の値を格納する。
S1308では、変数stsに変数tbl1の示すアドレスの内容を格納する。
変数tbl1はS1200の要素のどれかのアドレスを示しているから、結果S1200の要素の一つの値をstsに格納する。
S1309では、S1201が格納している値を一つ増加する。
S1310では、S1201の値に定数_BUF_SIZE_MASKでアンドをとり、その結果をS1201に格納している。これは、S1201の示す値が常にS1200の要素を指すようにする仕掛けである。
S1201はS1200のゼロ番目からn−1番目までの要素を順繰りに参照する。即ち、S1201はS1200をリングバッファとして使用するためのポインタである。
S1311は、S1203が格納している値を一つ増加する。
S1312では、S1203の値が定数S_TBLの値以上であるか比較し判定している。S_TBLはメモリテーブルS1202の要素数mと同じ値である。この処理はS1203の値がメモリテーブルS1202の要素を示しているかの判定を行っている。
Noの時は、S1202の任意の要素を示しているので何もしない。
Yesの時は、S1313の処理を行う。S1313では、S1203の値にゼロを格納している。
S1203はS1202のゼロ番目からm−1番目までの要素を順繰りに参照する。即ち、S1203はS1202をリングバッファとして使用するためのポインタである。
本プログラムは終了する時に、stsの内容をサブルーチンの戻り値として呼び出し側に返す。stsの内容が乱数の値である。
以上説明したように、CPUがプログラムinz()およびrnd()を実行することにより乱数発生装置が実現される。この2つのプログラムもしくは装置を合わせたものが本実施例の発明である。本実施例は、ソフトウェアライブラリと呼ばれるサブルーチン群として、本願発明を実現したものである。
本発明は、従来CPUの負荷の高い複雑な計算により生成していた乱数をこのように簡易な手法により実現している。
従来の方式の問題点をあげると、最も一般的な合同二乗法という乱数の生成方式は32ビットの数値の二乗を計算し、特定の定数にて剰余をとり乱数とする。この場合、掛け算というもっともCPUの苦手な速度の遅い処理を行う。さらに32ビット(4バイト)未満のCPUの場合には素直にはこの32ビットの数値を直接行えため劇的に処理が遅くなるという欠点がある。
また、合同二乗法は数値の二乗により乱数を生成する。周期の長い乱数を生成するためには、桁数を増やせば良い。しかし、桁数を増やすほどCPUの処理は幾何級数的に増加しどんどん処理が遅くなっていく。
本発明はこのように、従来の方式に比べメモリ交換というCPUの基本機能のみにより実現している。さらに、乱数の周期を長くするためには内部のテーブルを大きくするだけで直線的に増加するという性質を示している。
これより、計算機において効率よく長周期の乱数を生成することに成功している。
[実施例2]
実施例2も、擬似乱数の発生を行うプログラムおよび装置である。
本実施例は、実施例1を利用して擬似乱数発生プログラムとして、よりまとまった完結した機能を提供するものである。
図5は、実施例2において乱数発生プログラムrndmk()が利用する記憶領域の構成を表している。CPU-S1011は、乱数発生プログラムrndmk()を実行する際に、図5に示す記憶領域をメモリ装置S1013に確保する。
S1500は乱数列のシードを指定するメモリ変数である。このメモリ変数には、ゼロからS1200の要素数n−1までの数値を指定する。S1500は4バイトのメモリである。
S1501は乱数列のシードを指定するものである。ここには、ゼロからS1202の要素数m−1までの数値を指定する。S1501は4バイトのメモリである。
S1502は、生成した乱数を格納するメモリ上のアドレスを保存するポインタ型のメモリ変数である。
S1503は、S1502の値を開始アドレスとして確保するメモリの長さを値として持つ。
本実施例は乱数を格納するメモリテーブルを確保しS1500,S1501,S1502,S1503に所定の値を設定して実行すれば乱数を自動的に生成する。乱数はメモリテーブルに生成される。
本実施例における乱数発生処理の流れは図6により行われる。
S1600は初期化処理である。4バイト型変数iを確保している。サイズは4バイトである。
S1601は実施例1のプログラムinz()をサブルーチンとして実行している。
S1602はS1201にS1500の内容を設定している。S1201のメモリサイズが小さい時はS1500の上位ビットは捨て下位ビットのみを設定する。
S1603はS1203にS1501の内容を設定している。S1203のメモリサイズが小さい時はS1501の上位ビットは捨て下位ビットのみを設定する。
S1604はループ処理である。iは最初ゼロに初期化されており、一回ループするごとにiの値を一つ増加してn回ループする。n回ループした後は終了するものである。
S1605は実施例1の乱数発生プログラムrnd()をサブルーチンコールしている。帰り値として乱数値を得る。この乱数値をS1502の示すアドレスを先頭とし変数 iをインデックスとして示す値番目の要素に格納する。つまり、当該乱数値を、S1502の示すアドレスからi個目のメモリ領域に格納している。
以上説明した本実施例によれば、図6の処理を他のプログラムからサブルーチンとして呼び出すだけで任意の乱数を発生させることができる。本実施例は完結したサブルーチンとして本発明を実現したものである。
[実施例3]
実施例3も、擬似乱数の発生を行うプログラムおよび装置である。
通常、擬似乱数発生プログラムは一般的には実施例1のごとく提供されるものである。これは汎用性を高めるために、小さな部品単位で提供する思想からである。
本実施例は、実施例1を使用してOSの上で乱数列をファイルとして保存するアプリケーションプログラムの形式にしたものである。
本実施例の処理の流れは図7により行われる。CPU-S1011が図7の処理を実行することによって、乱数発生装置として機能する。
S1700は初期化処理である。4バイト型変数lenと1バイト型の変数cを確保している。
S1701は実施例1のプログラムinz()をサブルーチンとして実行している。
S1702はコンソールより乱数表を保存するファイル名を指定する。
S1703はコンソールよりシードとなる数字を入力し、S1201に格納する。
入力できる数値はゼロからS1200の要素数n−1の間である。
S1704はコンソールよりシードとなる数字を入力し、S1203に格納する。入力できる数値はゼロからS1202の要素数m−1の間である。
S1705はコンソールより乱数表の大きさ、つまり乱数の長さを入力して変数lenに格納する。
S1706は、S1702で入力したファイル名に従いファイルをクリエートしオープンする。
S1707はループ処理である。iは最初ゼロに初期化されており、一回ループするごとにiの値を一つ増加して変数lenの値だけループする。lenの値だけループした後は終了するものである。
S1708は実施例1の乱数発生プログラムrnd()をサブルーチンコールしている。帰り値として乱数値を得る。この乱数値を変数cに格納する。
S1709は変数cの値をS1706でオープンしたファイルに書き込む。ファイルはHDD-S1030又はUSB装置S1040等の記憶手段に保持される。ファイルへの書き込み位置はループごとに1バイトずつ先頭より後ろにずれる。
S1710はS1706でオープンしたファイルをクローズする。
以上より本実施例をアプリケーションとして実行しディスクに乱数表をファイルとして保存するものである。
[実施例4]
実施例4も、擬似乱数の発生を行うプログラムおよび装置である。実施例1の一部を変更し、S1200の各要素の交換ではなく、各要素の演算により乱数を生成するものである。
構成は実施例1と大半が同一である。ここでは、変更箇所のみを記述する。
図4の関数rnd()の構成において、S1306の処理を変更する。このS1306において、本実施例では、変数tbl1の示すアドレスの値と、変数tbl2の示すアドレスの値との排他的論理和をとり、変数tbl1の示すアドレスのメモリの値として格納するものである。
S1307は削除する。
以上により擬似乱数発生プログラムおよび装置として動作する。
[実施例5]
実施例5も、擬似乱数発生プログラムおよび装置である。本実施例は、実施例2に変更を加えたものである。実施例2では、図6のS1605において実施例1の関数rnd()を実行している。本実施例では、ここで実行する関数rnd()として、実施例4で開示した変形したrnd()を実行する。
[実施例6]
実施例6も、擬似乱数発生プログラムおよび装置である。実施例6は、実施例3の変形例である。実施例3では、図7のS1708において、実施例1の関数rnd()を実行している。本実施例では、このS1708において実行するrnd()として、実施例4で開示した変形したrnd()を実行する。
最後に、以上説明した各実施例のプログラムによるプロセスは、ファームウェアやハードウェアロジックによって実現することも可能である。
ホストとなる装置を示した構成図である。 実施例1における入出力を表した説明図である。 実施例1における初期化処理の流れを表した流れ図である。 実施例1における乱数発生処理の流れを表した流れ図である。 実施例2における入出力を表した説明図である。 実施例2における乱数発生処理の流れを表した流れ図である。 実施例3における乱数発生処理の流れを表した流れ図である。
符号の説明
S1011 中央処理装置(CPU、処理手段)
S1012 ROMBIOS(記憶手段)
S1013 メモリ装置(記憶手段)
S1014,S10017,S10018 システムバス
S1015,S10016 アダプタ
S1020 ホストI/F
S1030 HDD(記憶手段)
S1019 リーダライタ
S1040 USB装置(記憶手段)

Claims (9)

  1. 情報の記憶装置と、この記憶装置に格納され複数の要素を持つメモリテーブルAと、このメモリテーブルAの要素に格納されている値を取り出して、当該値を乱数値として出力する乱数値出力手段と、前記メモリテーブルAの内部の要素を並べ替えるテーブル変更手段とを備えると共に、前記記憶装置に複数の要素を持つメモリテーブルBを備え、
    前記テーブル変更手段が、このメモリテーブルBの要素が持つ数値に従い、前記メモリテーブルAの内部の要素を並べ替える機能を有する擬似乱数発生装置において、
    前記メモリテーブルBの前記複数の各要素が、素数を持つようにし、
    かつ、前記テーブル変更手段は、前記メモリテーブルAの要素を順番に逐次選択し、現在選択している要素に対してp要素先の要素と内容を入れ替える機能を有し、そのために数値pとして前記メモリテーブルBの素数の値を順次取得する機能を有することを特徴とした擬似乱数発生装置。
  2. 請求項1記載の擬似乱数発生装置において、
    前記記憶装置に、前記メモリテーブルAの任意の要素を指し示すためのインデックスメモリNを備え、前記テーブル変更手段は、このインデックスメモリNの値が指し示すメモリテーブルAの要素に対して内容の変更を行うことを特徴とした擬似乱数発生装置。
  3. 前記テーブル変更手段は、前記インデックスメモリNにより、メモリテーブルAの内容を変更した後、インデックスメモリNの値を定数Kの値だけ加算する機能を備え、当該加算の結果、インデックスメモリNの値が前記メモリテーブルA の終端以降を指し示す場合、インデックスメモリNの値を前記メモリテーブルAの先頭を指し示す値に変更することを特徴とした請求項記載の擬似乱数発生装置。
  4. 前記記憶装置は、前記メモリテーブルBの任意の要素を指し示すためのインデックスメモリMを備え、前記テーブル変更手段は、このインデックスメモリMの値が指し示す前記メモリテーブルBの要素を取り出して前記値pとして前記メモリテーブルAの操作を行うことを特徴とした請求項記載の擬似乱数発生装置。
  5. 前記テーブル変更手段は、前記インデックスメモリMにより、前記メモリテーブルBより値pを取得した後、インデックスメモリMの値を定数Kの値だけ加算する機能を備え、当該加算の結果、インデックスメモリMの値がメモリテーブルB の終端以降を指し示す場合、インデックスメモリMの値を前記メモリテーブルBの先頭を指し示す値に変更することを特徴とした請求項記載の擬似乱数発生装置。
  6. 請求項記載の擬似乱数発生装置において、
    前記インデックスメモリNの値を本装置の外部より受け付ける手段と、当該受け付けた値をインデックスメモリNに設定する手段とを備えたことを特徴とする擬似乱数発生装置。
  7. 請求項記載の擬似乱数発生装置において、
    前記インデックスメモリMの値を本装置の外部より受け付ける手段と、当該受け付けた値をインデックスメモリMに設定する手段とを備えたことを特徴とする擬似乱数発生装置。
  8. 請求項1乃至のいずれかの擬似乱数発生装置において、前記各手段の動作を処理装置に実行させることを特徴とした擬似乱数発生プログラム。
  9. 請求項記載の擬似乱数発生プログラムを記録した媒体。
JP2008542166A 2006-10-31 2007-10-31 擬似乱数発生装置、擬似乱数発生プログラム及び擬似乱数発生プログラムを記録した媒体 Expired - Fee Related JP4351731B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2006297184 2006-10-31
JP2006297184 2006-10-31
PCT/JP2007/071256 WO2008053936A1 (fr) 2006-10-31 2007-10-31 Dispositif de génération de nombres pseudo-aléatoires, programme de génération de nombres pseudo-aléatoires, et support contenant un programme de génération de nombres pseudo-aléatoires

Publications (2)

Publication Number Publication Date
JP4351731B2 true JP4351731B2 (ja) 2009-10-28
JPWO2008053936A1 JPWO2008053936A1 (ja) 2010-02-25

Family

ID=39344277

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008542166A Expired - Fee Related JP4351731B2 (ja) 2006-10-31 2007-10-31 擬似乱数発生装置、擬似乱数発生プログラム及び擬似乱数発生プログラムを記録した媒体

Country Status (3)

Country Link
US (1) US8510359B2 (ja)
JP (1) JP4351731B2 (ja)
WO (1) WO2008053936A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8671261B2 (en) * 2011-04-14 2014-03-11 Microsoft Corporation Lightweight random memory allocation
US8793296B2 (en) 2012-02-02 2014-07-29 Kaohsiung Medical University Random number generating method
US9535957B1 (en) 2015-11-24 2017-01-03 International Business Machines Corporation Electronic file management based on user affinity
CN107203365B (zh) * 2016-03-17 2020-09-08 阿里巴巴集团控股有限公司 随机数的生成及获取方法和装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04182828A (ja) 1990-11-19 1992-06-30 Fujitsu Ltd 擬似乱数によるテーブル内エントリー選択方式
JP4182828B2 (ja) 2003-06-30 2008-11-19 沖電気工業株式会社 羽根車機構
JP2005149412A (ja) 2003-11-19 2005-06-09 Toshiba Corp メモリシャッフル装置、メモリシャッフル方法及びプログラム
EP1875405B1 (en) * 2005-04-20 2013-11-27 NDS Limited Improved cipher system
JP4718455B2 (ja) * 2005-09-09 2011-07-06 三菱電機株式会社 擬似乱数生成装置及び擬似乱数生成方法及び擬似乱数生成プログラム

Also Published As

Publication number Publication date
US20100115231A1 (en) 2010-05-06
JPWO2008053936A1 (ja) 2010-02-25
WO2008053936A1 (fr) 2008-05-08
US8510359B2 (en) 2013-08-13

Similar Documents

Publication Publication Date Title
JP6106752B2 (ja) 状態機械エンジンのための結果生成
JP3585800B2 (ja) 情報処理装置
KR101778175B1 (ko) 수평 치환을 이용한 벡터 간접 엘리먼트 수직 어드레싱 모드
JP4351731B2 (ja) 擬似乱数発生装置、擬似乱数発生プログラム及び擬似乱数発生プログラムを記録した媒体
TWI785064B (zh) 用於測試向量元素內部的位元值的設備、方法、電腦程式及電腦可讀儲存媒體
JP6041987B2 (ja) 状態機械エンジンにおいて状態ベクトルデータを使用するための方法およびシステム
JP2015531111A (ja) 状態機械エンジンが受信したデータを取り扱うための方法およびシステム
EP1890237A1 (en) Computer system and program creating device
EP3188063A1 (en) A build system
JP2004102498A5 (ja)
WO2008001918A1 (fr) Dispositif de production de nombres aléatoires, dispositif de chiffrement/déchiffrement utilisant un tel dispositif, programme et support d'enregistrement de programme
CA2648080A1 (en) Method and apparatus for generating random numbers
US9344115B2 (en) Method of compressing and restoring configuration data
JP6848457B2 (ja) 試験装置、試験プログラム生成方法及び試験方法
JP2008135893A (ja) 使い捨ての暗号鍵を添付する暗号化文書を作成する暗号化装置およびプログラム
JP5387089B2 (ja) プログラム及びプログラム実行装置
CN101615118B (zh) 导出原型的方法及装置
JP2019087206A (ja) 情報処理装置、情報処理方法及びプログラム
CN110337637B (zh) 数据处理方法和设备
JP2013045072A (ja) 演算装置
CN109344575B (zh) Lua脚本文件处理方法、装置及计算设备
JP3861452B2 (ja) プロセッサおよびプログラム生成装置
KR100658918B1 (ko) 블록 단위 입출력 명령어를 이용한 시스템 전역 변수초기화 장치 및 그 방법
JP6012355B2 (ja) 制御機器、制御システム、データ格納方法及びプログラム
JP5918062B2 (ja) テスト装置、テスト方法及びテストプログラム

Legal Events

Date Code Title Description
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: 20090626

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090724

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120731

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4351731

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120731

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150731

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees