A számítógép működése kapcsán a legtöbbször a kiszámítató, pontosan működő eszközöket vár el a felhasználó. Azonban van az informatikának vékony, de igen fontos részei, ahol minnél jobb véletlen(szerű)számokra van szükség a megfelelő működéshez. Ezen szekgmensek közül kiemelkedik a titkosítás, ahol az a legjobb, ha a kapott értékek hosszútváon is előre meghatározhatatlanok.
Alapból a kernel két rendszereszközt biztosít a véletelen számok előállításához:
- /dev/random
- /dev/urandom
A "/dev/random "eszköz
Ez első lassú és amennyiben a szükséges bizonytalanság (entrópia) nem elérhető, akkor nem állít elő további véletlen számot, amíg a szükséges bizonytalanságot el nem éri a véletlenszámok előállításához.
A "/dev/urandom" eszköz
A második eszköz jóval gyorsabb, amely nem blokkolja a véletlenszámok előállítását, ha éppen nincs elegendő entrópia, ezzel rontva esetlegesen a kriptográfiai algoritmusok hatékonyságát. Tehát ez utóbbi gyors ugyan, de nem biztos, hogy megbízható. A rendszer indításakor mindkét eszköz blokkolja a kimenetét addig, amíg megfelelő mennyiségű bizonytalanság nem áll rendelkezésre. Azonban szerencsére vannak eszközök, amivel a megbízható /dev/random sebességén lehet javítani. Ez lehet a számítógép CPU-ba, vagy alaplapon elhelyezett hardveres véletlenszám-generátor, vagy szoftveres módszer további bizonytalansági források bevonásával.
Az rngd-tools csomag
A véletlenszám-generátorral kapcsolatos szolgáltatás és segédeszközei telepítése:
sudo apt install rng-tools
A Redhat, Oracle Enterprise Linux és CenOS estén:
yum install rng-tools
Az rng-tools csomag telepítésével elérhetővé válik az rngd (vagy rng-tools.service) szolgáltatás és a rngtest alkalmazás is. Az rngtest segítségével a véletlenszám-generátorok teljesítményét és működését ellenőrizheti.
Az rngd szolgáltatás
A hardveres véletlenszám-generátorok használatához tervezett szoftver, amely segítségével a rendszereszközök között elérhető hardveres véletlenszám generálást tudja felhasználni a rendszer hatékonyan. A rendszerint a /dev/hwrng vagy a /dev/hwrandom helyen elérhető eszköz kimenetével rontja el a generált véletlenszámok kiszámíthatóságát, így javítva a véleltlenszámok előállításának sebességét a /dev/random esetében is.
Az rngd démon hídként kapcsolja össze a hardveres TRNG (True Random Number Generator - Igazi Véletlenszám-generátor), mint például néhány Intel/AMD/VIA lapkakészletekben található, és a kernel PRNG (pszeudo-véletlenszám-generátor) eszközöket.
Az rngd szolgáltatás ellenőrzése, bekapcsolása
Bár nem olyan gyors, mint a Linux kernelek modern implementációi, azok a felhasználók, akik a kernel régebbi verzióit használják, még mindig kihasználhatják a gyorsabb /dev/random, vagy legalábbis nem blokkoló hozzáférés előnyeit, ha egy démont futtatnak, amely biztosítja, hogy a kernel entrópia-tartalékai elegendőek maradjanak.
Az rngd egy démon, amely körbenézi a rendszert entrópiaforrások után kutatva, és bármit talál, felhasználja. Tulajdonképpen csak annyit kell tennie, hogy meggyőződjön arról, hogy az rng-tools telepítve van és az rngd fut. Az rndg szolgáltatás fotásának ellenőrzése:
systemctl status rngd
A szolgáltatás engedélyezéséhez és indításához futassa a következő parancsot:
systemctl enable --now rngd
A rngd szolgáltatás által elérhető entrópia források lekérdezése előtt érdemes lekérdezni a rngd szolgáltatás verzióját. Azért érdemes lekérdezni, mert az 5-ös és a 6-os verzióban más-más módon lehet a random forrásokat ellenőrizni.
Az rngd szolgáltatás verziójának és a random források ellenőrzése:
A rngd szolgáltatás verziójának lekérdezése egy újabb rendszeren:
rngd -V
A parancs eredménye egy újabb rendszeren:
rngd 6 Copyright 2001-2004 Jeff Garzik Copyright 2017 Neil Horman Copyright (c) 2001 by Philipp Rumpf This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
A rngd szolgáltatás entrópia forrásának lekérdezése egy újabb rendszeren:
rngd -l
A parancs eredménye egy újabb rendszeren:
Entropy sources that are available but disabled 1: TPM RNG Device 4: NIST Network Entropy Beacon Available and enabled entropy sources: 2: Intel RDRAND Instruction RNG 5: JITTER Entropy generator
A rngd szolgáltatás verziójának lekérdezése egy régebbi rendszeren:
rngd -V
A parancs eredménye egy régebbi rendszeren:
rngd 5 Copyright 2001-2004 Jeff Garzik Copyright (c) 2001 by Philipp Rumpf This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
A rngd szolgáltatás entrópia forrásának lekérdezése egy régebbi rendszeren:
rngd -v
A parancs eredménye egy régebbi rendszeren:
Available entropy sources: DRNG
A haveged szolgáltatás
A haveged szolgáltatás telepítése akkor válhat szükségessé, ha a rendszer nem biztosít hardveres véletlenszám-generátort, és szoftveres trükkökkel kell megoldani a véletlenszámok előállításához szükséges véletlen források kiterjesztését.
A véletlenszám-generátor működését segítő havege eljárást biztosító szolgáltatást így lehet telepíteni:
apt install haveged
A processzorok által támogatott véletlenszám-generálás
A processzorok által támogatott véletlenszám-generálás lekérdezése:
grep rdrand /proc/cpuinfo
Az újabb kernelek esetén elérhető információ lekérdezhető, hogy melyik eszköz elérhető a véletlenszám-generálást:
cat /sys/devices/virtual/misc/hw_random/rng_available
Az újabb kernelek esetén elérhető információ lekérdezhető, hogy melyik eszköz biztosítja a véletlenszám-generálást:
cat /sys/devices/virtual/misc/hw_random/rng_current
Ha válasz ez, az nem jó:
none
Az elérhető entrópia mértékének lekérdezése:
cat /proc/sys/kernel/random/entropy_avail
Egy egészséges Linux-rendszer, amely sok entrópiával rendelkezik, közel a 4096 bitnyi entrópiához közeli értéket fog jelezni. Ha a visszakapott érték kevesebb, mint 200, a rendszer entrópiája erősen fogytán van.
3256
Virtuális gépben, VirtIO esetén
További információk:
Virtio RNG illesztőprogram a kernel része a 2.6.26-os verzió óta.
Példák a random eszközök sebességére
Már pusztán az /dev/random eszköz működési sebességéből is megtippelhető, hogy rendszerünk jól működő, beállított hardveres véletlenszám-generálással bír, vagy sem.
Hardveres támogatás nélkül a véletlenszám-generálás több száz másodpercig is eltarthat. A haveged bekapcsolásával néhány másodpercig, míg a hardveres véletlenszám-generálás használatakor szinte azonnal - a /dev/urandom eszközhöz hasonlatos sebességgel - lezajlik a művelet.
A random eszköz sebessége haveged kikapcsolásával
cat /dev/random | rngtest -c 1000 rngtest 5 Copyright (c) 2004 by Henrique de Moraes Holschuh This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FO. rngtest: starting FIPS tests... rngtest: bits received from input: 1856 rngtest: FIPS 140-2 successes: 0 rngtest: FIPS 140-2 failures: 0 rngtest: FIPS 140-2(2001-10-10) Monobit: 0 rngtest: FIPS 140-2(2001-10-10) Poker: 0 rngtest: FIPS 140-2(2001-10-10) Runs: 0 rngtest: FIPS 140-2(2001-10-10) Long run: 0 rngtest: FIPS 140-2(2001-10-10) Continuous run: 0 rngtest: input channel speed: (min=0.000; avg=0.000; max=0.000)bits/s rngtest: FIPS tests speed: (min=0.000; avg=0.000; max=0.000)bits/s rngtest: Program run time: 442284384 microseconds
Az urandom sebesség haveged kikapcsolásával
cat /dev/urandom | rngtest -c 1000 rngtest 5 Copyright (c) 2004 by Henrique de Moraes Holschuh This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FO. rngtest: starting FIPS tests... rngtest: bits received from input: 20000032 rngtest: FIPS 140-2 successes: 999 rngtest: FIPS 140-2 failures: 1 rngtest: FIPS 140-2(2001-10-10) Monobit: 0 rngtest: FIPS 140-2(2001-10-10) Poker: 0 rngtest: FIPS 140-2(2001-10-10) Runs: 0 rngtest: FIPS 140-2(2001-10-10) Long run: 1 rngtest: FIPS 140-2(2001-10-10) Continuous run: 0 rngtest: input channel speed: (min=6.133; avg=86.736; max=19073.486)Mibits/s rngtest: FIPS tests speed: (min=67.636; avg=90.115; max=92.590)Mibits/s rngtest: Program run time: 437805 microseconds
A random sebesség haveged bekapcsolásával
cat /dev/random | rngtest -c 1000 rngtest 5 Copyright (c) 2004 by Henrique de Moraes Holschuh This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FO. rngtest: starting FIPS tests... rngtest: bits received from input: 20000032 rngtest: FIPS 140-2 successes: 998 rngtest: FIPS 140-2 failures: 2 rngtest: FIPS 140-2(2001-10-10) Monobit: 0 rngtest: FIPS 140-2(2001-10-10) Poker: 0 rngtest: FIPS 140-2(2001-10-10) Runs: 1 rngtest: FIPS 140-2(2001-10-10) Long run: 1 rngtest: FIPS 140-2(2001-10-10) Continuous run: 0 rngtest: input channel speed: (min=1.037; avg=6.828; max=7.462)Mibits/s rngtest: FIPS tests speed: (min=72.800; avg=89.990; max=93.041)Mibits/s rngtest: Program run time: 3005920 microseconds
A random sebesség hardveres random eszköz használatával
cat /dev/random | rngtest -c 1000 rngtest 5 Copyright (c) 2004 by Henrique de Moraes Holschuh This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FO. rngtest: starting FIPS tests... rngtest: bits received from input: 20000032 rngtest: FIPS 140-2 successes: 1000 rngtest: FIPS 140-2 failures: 0 rngtest: FIPS 140-2(2001-10-10) Monobit: 0 rngtest: FIPS 140-2(2001-10-10) Poker: 0 rngtest: FIPS 140-2(2001-10-10) Runs: 0 rngtest: FIPS 140-2(2001-10-10) Long run: 0 rngtest: FIPS 140-2(2001-10-10) Continuous run: 0 rngtest: input channel speed: (min=6.287; avg=86.244; max=9536.743)Mibits/s rngtest: FIPS tests speed: (min=81.511; avg=90.081; max=92.590)Mibits/s rngtest: Program run time: 438881 microseconds