乱数を書き込んだUSBメモリを購入する

飛石技術(FST)では、A/D変換器の量子化誤差をもととする真性乱数生成のソフトウェア NeuG を開発しています。

NeuG は自由ソフトウェアであり、特定非営利活動法人フリーソフトウェアイニシアティブ(FSIJ)が著作権を持っています。

飛石技術とFSIJとの取り決めで、

  • 飛石技術は、NeuG に関して研究開発したソフトウェアの著作権を FSIJ に移譲する。
  • FSIJ は飛石技術に NeuG のデバイス製造に対して second source manufacturer ライセンスを与える。

としています。

ここで、乱数愛好者のために、NeuGで生成した乱数を書き込んだUSBメモリを販売します。

本製品は、受注生産です。注文を受けて、その時点で生成を行いますので、データは一品物です。

NeuG に関する情報

こちらにソースコードのリポジトリがあります。 https://git.gniibe.org/cgit/gnuk/neug.git/

設計のあらまし

  • ハードウェアで使う MCU は ST Microelectronics の STM32F103 です。
  • アナログ信号源は MCU 内部のリファレンス電圧と温度センサの二つとなにもつながってないアナログ入力二つ(内部でVddにプルアップ)。
  • A/D変換器の量子化誤差と、電源電圧の揺れ等が乱数の元となるノイズとなります。
  • A/D変換したデータを4組、CRC32 計算ユニットに書き込む。
  • Condition component と health test について、NIST draft SP 800-90B に則るように作っています。
    • SHA-256 を使って bias を除く。SP 800-90A の Hash_df function の形式で使用。
    • Repitition Count Test
    • Adaptive Propotion Test (64)
    • Adaptive Propotion Test (4096)

設計については、 こちら (英文)もご覧ください。

NeuG, True Random Number Generator

製品の種類

  • RANDOM-USB-MEMORY-499: 7770円 (税込み)

    "64GB" と表記された USB メモリに一つあたり 1,000,000,000-bit (125 Mega byte, not Mebi byte) 入ったファイルを499個収めます。

    • rand-000.bin
    • rand-001.bin
    • ...
    • rand-498.bin

    USBメモリは使っているフラッシュメモリの容量を元に、"64GB" というように表記して販売されていると思います(たぶん)。メーカによって実際に使える容量が異なります。500本目が入る余裕がある場合は、rand-499.bin もオマケとして入れるかもしれません。

    初めて使った TTL の 7400 への郷愁から 7400円としました。税込みで 7770 円です。縁起が良い感じがします。

  • RANDOM-USB-MEMORY-500-VERIFIED: 71400円 (税込み)

    "64GB" と表記された USB メモリに一つあたり 1,000,000,000-bit (125 Mega byte, not Mebi byte) 入ったファイルを500個収めます(500個が入るような USB メモリを用意します)。

    • 500本のうちの10本に対して、NIST STS 2.1.1 のテスト結果を添付します。
    • 500本のうちの110本を使って行った Dieharder 3.31.1 のテスト結果を添付します。

    初めて製作したボードコンピュータに使った MPU の 68000 への郷愁から 68000円としました。税込みで 71400 円です。高いじゃないか、「そんなのナイヨ!」と覚えやすいですね。

どこで買えますか?

日本では、群馬県前橋市の飛石技術でも販売します。 飛石技術で買う をご覧ください。

生産にかかる日数

注文を受けてから生成しますので、受注から約2-3週間かかります。

注意点など

  • NeuG は 125MBの499本の生成を二回、行った実績があります。

  • 10本を NIST STS 2.1.1 でテストした一例ですが、10本のうち、7本ですべて通過、RandomExcursions で一回の失敗が2本、NonOverlappingTemplate で一回の失敗が1本でています。

  • 15 Giga byte に対して行った Dieharder 3.31.1 のテストでは良好な結果が出ています。

    一回目は diehard_birthdays と sts_serial 14 の二つで WEAK となり、生成速度を測るために乱数列を消費する形で二回目をテストすると、diehard_sums で WEAK となりました(その他すべては PASSED)。

    ここで Dieharder 3.31.1 の使い方として、異なるテストに同一の乱数列を与えています。通常の起動では個々のテストに独立の乱数を要求し、たぶん全部で200GB 程度必要となります。

  • TestU01-1.2.3 で125MBの499本の乱数列を使いきったら最初からまた乱数列を与えることを繰り返す形としてテストしました。この形で、SmallCrush, Crush, BigCrush ともにすべてのテストを通過しています。乱数列の消費は、SmallCrush では使いきらず、Crush で2回、BigCrush で22回使いきっています。