Unix系列のOSで真の乱数が欲しい

概要

Unix系列のOSにおいて真の乱数を得る方法についてまとめています.Unixにおいて/dev/randomのデバイスファイルにシステム全体からかき集めたノイズやイベント等を利用して生成した真の乱数を得ることができます.
Facebookシェア Twitterツイート LINEで送る このエントリーをはてなブックマークに追加
この章を学ぶ前に必要な知識
0
条件
  • UnixのOSの話になります
効果
  • 真の乱数を得ることができます
ポイント
  • /dev/randomを読み込むことで真の乱数を得る
  • /dev/randomはシステムから自然なノイズを集め乱数を生成するため、高速に使用しすぎると枯渇します
  • /dev/urandomはrandomと対をなし、こちらは擬似乱数よりです.しかし枯渇はしないようになっています.
  • 上記枯渇を"ブロック"と言います
  • Linuxではgetrandomのシステムコールが用意されている
  • 真の乱数を得る実装が怪しければ一般的な擬似乱数よりも劣る場合がある./dev/randomが本当によいかは議論が残る.

解 説

Unix系列のOSにおいては(Mac OSも含む)、/dev/randomが真の乱数を提供します. 通常の擬似乱数はどうしても特定のアルゴリズムによって生成するため不規則性が払拭できない. しかし、システムの特定の時間間隔やノイズなどを収集することでそこから作られる乱数はより真の乱数に近い数となる.
Unix系列における真の乱数

Unix系列のOSにおいて乱数を得られるデバイスファイルは以下の二つがあります.

  • /dev/random
  • /dev/urandom

このうち、真の乱数を得られるのは先に記述した/dev/randomです. 以下にこれら二つの違いについて簡単に記述しました. ブロックとは乱数を取り出すプールが枯渇したときに乱数が生成されるまで待つことになるかどうかです.

/dev/random /dev/urandom
乱数の性質 真の乱数(FreeBSDは擬似乱数) 擬似乱数
ブロック有無 有り(FreeBSDは無し) 無し
乱数生成の元 エントロピープール エントロピープール
使いどき 場合にもよるが本当にセキュアな乱数が必要な時のみ 通常のランダム性を要求する場合はこちらでよい(ブートから間もない時は不適)
/dev/randomと/dev/urandomについて
/dev/randomで真の乱数を取得できるかどうかはそのOSの実装に依存するため、下手をしたら擬似乱数よりも悪いものしか得られないかもしれないことは考慮しておいた方がよい.
/dev/randomについての注意
この章を学んで新たに学べる
Comments

Reasons
>>隠す