機械はサイコロを振らない
まずはわかるところから、というわけで/dev/randomを調べるよー!
ド直球にrandom.cというファイルがあったのでこれを選んだよ、適当だね!
ソースによると環境ノイズを使用して乱数を生成しているらしい。
どうやら線形合同法はじめ数学的に擬似乱数を作ると攻撃者に推測しやすくなってしまうらしい。
そこで攻撃者が予想しようがない物理的な環境から乱数を生成しているようだ。
なにはともあれ、/dev/randomがを読み込んで見れば多分乱数になっていることがわかるはず。
そういうわけで読み込むコードを書いてみた。
--------
#include <stdio.h>
int main(){
FILE *rnd;
int r;
rnd = fopen("/dev/random","r");
for(int i = 0;i <= 10;i++){
r = fgetc(rnd);
printf("%d\n",r);
}
return 0;
}
--------
単純に/dev/randomから読み込んで表示している。
結果の一例を見てもらおう。
--------
178
242
169
233
16
147
119
5
114
167
105
-------
読み込むたびに値が変わっていることがわかる。
この結果は一例でもちろん次に実行すると値は変わる。
あんまり書くのもアレなので興味があればコピペでソースを作って実行してみてほしい、ちゃんと変わっているのがわかるはずだ。
そしてソースの関数一覧を見るとrandom_readという関数がある、いかにもな名前だな。
関数を表示すると内部で_random_read関数を呼び出してそれを返していた。
お目当ての関数本体を覗くとそこにはnにエントロピー(乱雑さ)といういかにもな関数を呼び出している。
ここが核だと思われるが現在のところこれ以上の追跡は観察者の精神が耐えられないので本日の報告はここまでにしておく。