openssl の -rand オプション、良く分からず使ってるサイトが多い件

openssl で キー生成に使うオプションに 乱数シードをファイルから生成するというものがあって、 -rand でファイル指定するというものがあるのだが、このファイルの作成方法について

openssl md5 * > rand.dat
とか
openssl dgst -md5 * > rand.dat
で作成するとしか書いてないサイトがあまりにも多いのだけどこのコマンド何をやってるかというと、指定したフォルダに入ってるファイルのダイジェストをファイルに書き出しているにすぎない。

つまり、フォルダ構成が同じだったり、空っぽのフォルダで実行すると、全く同じ乱数シードになってしまうわけで、意味がないわけだ。

こんなてけとーな 乱数シードファイルを生成するよりは /dev/random や /dev/urandom を使ったほうがいい気がするんですが

Any random source that you add using -rand [file][:file]* is used as additional seed data - in other words, the output will always be random, even if you supply the same seed.

説明を見ると、乱数のソースとしてファイルを追加するとあります。
ソースを見ると、基本的には、ファイルを1Kずつ読み込んで乱数の種にしてるようだ。

同じ乱数シード使ったら、同じ乱数が出てくるんじゃね?って思って調べてみた。

RAND_bytesは同じシードから同じ結果を出しません - c、openssl、pbkdf2
openssl は同じ乱数シード使っても、必ず同じ結果になるとは保証しないそうだ。
なるほど、だから、同じ乱数シードを大量生産したとしても、結果的に大問題にはなっていないわけか。

一瞬、セキュリティ界のとんでもない穴を見つけてしまったのかと思ったよ (・ω・)

ちなみに、 /dev/random は OSによっては、十分なエントロピーが得られなかった場合、結果を返さないことが1回だけあるそうな
そして、 /dev/urandom の乱数は十分じゃないというサイトもあるけど、そうとも限らないそうだ。

そもそも、乱数シードに使われるだけなので、前述の コマンドでフォルダのダイジェストを計算するよりははるかにましだと思われる(・ω・)

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です