Véletlen számok gyorsabb készítése

kami911 képe

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