回答:
「実際の」ハードウェアRNGには、CPUベースのものと、チップセットまたはPCIベースのものの2つのタイプがあります。(USBハードウェアのRNGもいくつかありますが、そのうちの1つに気付いたと思います;-)
以下はLinux固有です。
CPUベースのものについては/proc/cpuinfo
、手掛かりをチェックできます。カーネルがそれらを検出するのに十分新しいものであると想定します。Intel CPUの場合、フラグはですrdrand
。詳細はこちら:https : //unix.stackexchange.com/questions/43539/what-do-the-flags-in-proc-cpuinfo-mean
チップセットについてCONFIG_HW_RANDOM
は、カーネルやベンダーごとのサポートCONFIG_HW_RANDOM_INTEL
..._AMD
などで有効にした場合、ブートメッセージに検出されたかどうかが示されます(たとえば、「Intel 82802 RNGが検出されました」)。それらがモジュールとして存在modprobe intel-rng
する場合、それがロードされるかどうかを確認する()ことができる場合、「そのようなデバイスはありません」はハードウェアが検出されていないことを示します。すべてのドライバが一貫して「RNGが検出されました」または「検出されませんでした」と出力するわけではないため、ソース(/drivers/char/hw_random/
カーネルソースのディレクトリ)を読み取ってしまう可能性があります。
他の人は、lspci -v
何が認識されているかを確認できます。
あなたを見つけるにRNG
は、次のことを行ってください:
1)名前に「rng」が含まれるすべてのモジュールをリストします。
cat /proc/modules | grep -i rng
2)何かあれば、このような結果が得られます
tpm_rng 16384 0 - Live 0xffffff......
3)modprobe
現時点でそれを有効にするかロードしてください:
modprobe tpm_rng
更新:ステップ(1)についてmodprobe -l
は、ubuntu 16で作業していなかったため、「/ proc / modules」内を検索しようとしましたが、それが正常に機能する場合は問題ありません..最近、検索して知ったすべてのモジュールは内部に常駐している/lib/modules/$(uname -r)
ので、以下を使用することもできます。
cat /lib/modules/$(uname -r)/modules.dep | grep -i rng.*.ko
最近のカーネルでは、ここで確認できます:
$ cat /sys/devices/virtual/misc/hw_random/rng_current
virtio_rng.0
そのファイルが存在し、何も言わない場合、基本的にはrngが存在します。(この場合、ホストがランダムソースを提供する仮想マシンです)
また、何が利用可能かを確認します(この例は、ChaosKeyハードウェアRNGが接続されている最新のIntelマシンからのものです)。
$ cat /sys/devices/virtual/misc/hw_random/rng_available
ChaosKey-hw-1.0-sw-1.9-001900375346430b20333632 tpm-rng-0
したがって、ChaosKeyとtpmの両方が利用可能です。
https://daniel-lange.com/archives/152-hello-buster.htmlに興味深い背景があります。