@wool_man

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ビット列をバイナリデータとして保存したい

ビット列をバイナリデータとして保存したい

NISTsp800-22を用いて自作乱数生成器の乱数検定をしたいと思っています。
下の記事を参考にしたのですが、テストデータの形がわかりません。

参考にした記事はpythonで次の様にして
( 1,000,000 * 55 )の疑似乱数を生成していました。

import random

bytes = random.randbytes(1000000 * 55 // 8)
with open("random.bin", "wb") as f:
  f.write(bytes)

検定プログラムが受け取れる入力ファイルはASCIIファイルか、バイナリファイルならしく、先ほどの出力結果であるバイナリファイルを開くと下の様な記述でした。
スクリーンショット 2024-01-09 23.32.40.png

自分で試した事

自作の生成器から得られたデータは0/1で、( 1,000,000 * 55 )ビットのビット列として保存してあります。そのファイルを検定プログラムに与えた所、igamc UNDERFLOWと何度も表示され、正しく検定ができませんでした。検定プログラムが受け取れる形にするためにはどのような加工が必要でしょうか?ご助言願います。

検定プログラムの実行の様子

./assessの引数は「1000000」としました。

  1. 0を入力(検証対象を入力ファイルに指定)
    ファイル名を入力(Rnums55M.bin)
  2. 1を入力 (すべての検定を行う)
  3. 0を入力 (continue)
  4. 55を入力(検定回数を55回に指定)
  5. 1を入力 (バイナリファイルを指定)
$ ./assess 1000000


           G E N E R A T O R    S E L E C T I O N 
           ______________________________________

    [0] Input File                 [1] Linear Congruential
    [2] Quadratic Congruential I   [3] Quadratic Congruential II
    [4] Cubic Congruential         [5] XOR
    [6] Modular Exponentiation     [7] Blum-Blum-Shub
    [8] Micali-Schnorr             [9] G Using SHA-1

   Enter Choice: 0   


		User Prescribed Input File: Rnums55M.bin        

                S T A T I S T I C A L   T E S T S
                _________________________________

    [01] Frequency                       [02] Block Frequency
    [03] Cumulative Sums                 [04] Runs
    [05] Longest Run of Ones             [06] Rank
    [07] Discrete Fourier Transform      [08] Nonperiodic Template Matchings
    [09] Overlapping Template Matchings  [10] Universal Statistical
    [11] Approximate Entropy             [12] Random Excursions
    [13] Random Excursions Variant       [14] Serial
    [15] Linear Complexity

         INSTRUCTIONS
            Enter 0 if you DO NOT want to apply all of the
            statistical tests to each sequence and 1 if you DO.

   Enter Choice: 1

        P a r a m e t e r   A d j u s t m e n t s
        -----------------------------------------
    [1] Block Frequency Test - block length(M):         128
    [2] NonOverlapping Template Test - block length(m): 9
    [3] Overlapping Template Test - block length(m):    9
    [4] Approximate Entropy Test - block length(m):     10
    [5] Serial Test - block length(m):                  16
    [6] Linear Complexity Test - block length(M):       500

   Select Test (0 to continue): 0

   How many bitstreams? 55

   Input File Format:
    [0] ASCII - A sequence of ASCII 0's and 1's
    [1] Binary - Each byte in data file contains 8 bits of data

   Select input mode:  1

     Statistical Testing In Progress.........

igamc: UNDERFLOW
igamc: UNDERFLOW
.
.
.
igamc: UNDERFLOW
     Statistical Testing Complete!!!!!!!!!!!!

自作乱数生成器の出力結果

自作の乱数生成器の出力結果を「Rnums55M.bin」というファイルに保存しました。ファイルのサイズは55MBで、1,000,000個のデータが55行あります。

0 likes

1Answer

検定プログラムが受け取れる形にするためにはどのような加工が必要でしょうか?

加工は必要無いと思います。

assess.png

↑ 5. で「バイナリ」を指定しましたか?

1.〜5. に指定した情報を質問の内容に追記してください。スクショを貼っても構いません。

1Like

Comments

  1. @wool_man

    Questioner

    回答ありがとうございます。加筆いたしました。

  2. 当方の環境で、検定プログラムのダウンロード&ビルド(make)、pythonによる乱数データの作成を行い、検定プログラムを質問者さんと同じパラメータで実行しましたが、エラーは出ずにStatistical Testing Completeしました。
    ただし、入力ファイル名はRnums55M.binではなくrandom.binです。

    そちらとの環境の違いですかね?

    当方の環境;
    ・PC: M1 Mac mini, 2020
    ・OS: macOS Sonoma 14.2.1 (Darwin Kernel Version 23.2.0)
    ・gcc: /usr/bin/gcc Apple clang version 15.0.0 (clang-1500.1.0.2.5) Target: arm64-apple-darwin23.2.0
    ・Python: Python 3.11.6


    • ビルド
    scr0.JPEG
    • 実行
    scr.png

Your answer might help someone💌