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

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 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 szeremcsé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 alaplapn elhelyezett hardveres véletlenszám-generátor, vagy szoftveres módszer további bizonytalansági források bevonásával.

A véletlenszám-generátorral kapcsolatos segédeszközök telepítése:

sudo apt install rng-tools

Az rng-tools csomag telepítésével elérhetővé válik az rngd (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 rendszerezközök között elérhtő 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éeltlenszámok előállításának sebességét a /dev/random esetében is.

The rngd daemon acts as a bridge between a Hardware TRNG (true random number
generator) such as the ones in some Intel/AMD/VIA chipsets, and the kernel's
PRNG (pseudo-random number generator).

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

CPU-k álatal támogatott véletlenszám generálás

grep rdrand /proc/cpuinfo.

cat /sys/devices/virtual/misc/hw_random/rng_available

 

Virtuális gépben, VirtIO esetén

Az újabb kernelek esetén elérhető információ a

cat /sys/devices/virtual/misc/hw_random/rng_available

 

További információk:

Példák a random eszközök sebességére

A random sebesség 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

 

 

 

#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: 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

 

  •