a-stormのblog

日々の出来事等、とりとめのないことなど、できるだけ色々と書いていこうと思います

高品質なRSAの鍵ペアを生成する

2019-06-15 09:00:14 | コンピュータ

RSAの鍵ペアを生成する際、高品質な乱数が必要という事で、どうやったらよいか調べてみた。

openssl コマンドで鍵ペア生成する際、乱数の指定( -rand )として

  • 何も指定しない
  • 乱数ファイルを指定する(何かのハッシュ値等)
  • /dev/randomを指定する

方法があるが、/dev/random は、マシンのエントロピーを利用しているため、処理の進行がなかなか進まない(応答が返ってこない)。

OSは内部のHDDの動き等からエントロピーを取得して、ためているようだが、遅い。

そのため、エントロピーを増やすツールが提供されている。

  • rng-tools        #物理マシンならコレ
  • havege(d)      #仮想マシンならコレ

乱数を取得した後、素数判定のために、Miller-Rabin Test をかけるんだから、乱数の品質がどの程度影響あるのか・・・、という気もするが、ここは、深く追求しないことにする。

#真相を知ってる人がいたら教えて欲しい

 

仮想サーバ(VM)を使っている場合は、CPUに搭載されている乱数生成器(RNG)が使えない?ため、havegedを使うと良いらしい。

 

【作戦】

  1. 鍵ペア生成は物理マシンのLinuxで行う。
  2. opensslでRSA鍵ペア生成する際、-rand オプションで /dev/random を利用する
  3. /dev/random の値を増やすツールを動かす

 

今回、作戦3 を中心に記載します。

エントロピープールにどの程度情報がたまっているかを調べる

#cat /proc/sys/kernel/random/entropy_avail

⇒ 2桁位で少ない

 

エントロピープールの上限値を調べる(デフォルト4096)

# cat /proc/sys/kernel/random/poolsize

 

rng-toolsをインストールする

# yum install rng-tools

 

rngd デーモンを起動する

# systemctl start rngd

 

rngデーモンのステータスを確認する

# systemctl status rngd

 

現在溜まっているエントロピーを確認し、1000位上、2000位に増えていれば、正常に動作しているものと思われる。

# cat /proc/sys/kernel/random/poolsize

 ⇒1000~2000位に増えている。

 

鍵ペアを生成する

# openssl genrsa -rand /dev/random -out /tmp/privatekey.pem 2048

これで、無事、鍵ペア生成ができました。

 

rngd デーモンを停止する(普段は不要なので)

# systemctl stop rngd

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする