最新のLinuxと古めのLinuxが混在している環境での/dev/randomを使っての乱数生成に注意

Quarkus 3.13.3 released - Maintenance release というのがありました。

quarkus.io

これって何が原因かというと、使用しているライブラリの乱数生成にLinux/dev/random にアクセスして乱数を取得するものがあったことです。

Linux/dev/random はデバイスの入力などをもとに完全な乱数を生成することができるものでした。問題点として、デバイスの入力などを基に乱数を生成するので、デバイスからの入力が十分に無い場合、例えばサーバー用途でユーザーからの入力が行われない場合は乱数の生成ができずにブロックされてしまいます。 つまり、/dev/random にアクセスしても応答が返ってきません。

古くからこの問題は良く知られており、よく知られた解決策としては /dev/urandom を使用する事です。

Java でもFAQレベルで多くの記事が見つかります。

www.google.com

/dev/random について詳しく知りたい人は以下の記事でも。

utakamo.com

で、最近Linux kernelの5系の途中からこの /dev/random がブロックしなくなりました。RHELだと8まではブロックして、9からはブロックしなくなります。

access.redhat.com

で、何が発生するかというと、RHEL 9や他の最新のLinuxでは動いたものが8以前、もしくは他のLinuxのちょっと古い環境では動かなくなる可能性があるという事です。

まとめ

当たった人南無。

Quarkusのテストでこれが見つからなかった原因かどうかは知らないけどね。