おふとんの中から寝言をつぶやく

ビットコインなどの暗号(仮想)通貨関連の話題を中心に雑多に書きます。

仮想マシンで暗号化プログラムを動かす時にはまったことと解決方法

新タイプの蛇口を作っていてデータの暗号化をするときに、なかなかおわらないことがあり調べていったところ、仮想マシン上でエントロピー(質のいいランダムな値を作るために必要な値)がとても少ない状態であったことがわかりました。

環境:guest : ubuntu 18.04LTS

host: ubuntu 16.04.LTS

CPU: Ryzen 2700

 

bashコマンドライン

cat /proc/sys/kernel/random/entropy_avail

 

この結果が1000以下だと少ないようですが、使っていた仮想マシンエントロピーはなんと1桁でした。少なすぎる。

 

/dev/randomを使うときにエントロピーが少ないと、エントロピーがたまるまで動作が止まってしまいます。

 

それでは使いものにならないのでどうするか探していたところ、まずハードウェアをいじるなら、AMDRyzen PROを使えば、TPMというファームウェアに直結したランダムジェネレーターがある。ただしお金がかかる。お金を使わない方ではrng-toolsというソフトを使えばいいことがわかりました。

 

bash

apt install rng-tools

 これ、仮想マシンにもホストマシンにも入れましょう。

 

仮想マシンで実行してみたものの、このままでは使えませんでした。

 KVMコマンドを使って起動しているので、起動時のパラメータに、

-device virtio-rng-pci

を追加して、無事に使えるようになりました。

 

しかし、ホストOSでもエントロピーが1000以下になることがあったため、ホストにもrng-toolsをインストールします。

 

 

参考資料

 

/dev/randomと/dev/urandomの違いを調べていたらhavegedというのを入れていた - 以下省略!

 

virtio-rngのちょっとしたメモ · GitHub

 

Features/VirtIORNG - QEMU

 

暗号技術のすべてという本にまとまっていました。(上記サイトを見たあとにふと気がついて読んでみたらわかりやすくまとまっていました)

暗号技術のすべて

暗号技術のすべて

 

 

これから先、暗号がらみのプログラムをする人は増えていくと思いますが、上記の1冊あれば、暗号化技術に対してかなりの程度の知識が入ってくると思うのでおすすめです。