генератор случайных чисел

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 13530
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

генератор случайных чисел

Непрочитанное сообщение Olej » 27 сен 2018, 15:21

Дело известное: /dev/ramdom ;-)
И это очень широко используется, даже если вы и не занимаетесь вовсе сложным математическим моделированием, система использует это для криптографирования, SSL/SSH ключей, при майнинге криптовалют и во многих других вещах...

Но гораздо менее известно (и мне тоже) что в качестве задатчика для генератора могут использоваться самые разные источники, начиная от софтверных (это плохо), до аппаратных или полу-аппаратных.

Проверить что там у вас используется (и какого качества) можно выяснить так:

Код: Выделить всё

[olej@dell 09]$ rngd -ld
Unable to open file: /dev/hwrng
Failed to init entropy source 0: Hardware RNG Device

Unable to open file: /dev/tpm0
Failed to init entropy source 1: TPM RNG Device

Failed to init entropy source 2: Intel RDRAND Instruction RNG

Available entropy sources:
Вот так - у меня на ноутбуке нет аппаратных источников.
Обнаружилось это при анализе сервисов ОС:

Код: Выделить всё

[olej@dell 09]$ systemctl --failed
  UNIT                               LOAD   ACTIVE SUB    DESCRIPTION
● NetworkManager-wait-online.service loaded failed failed Network Manager Wait Online
● rngd.service                       loaded failed failed Hardware RNG Entropy Gatherer Daemon

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Код: Выделить всё

[olej@dell 09]$ sudo systemctl status rngd.service
[sudo] пароль для olej:
● rngd.service - Hardware RNG Entropy Gatherer Daemon
   Loaded: loaded (/usr/lib/systemd/system/rngd.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2018-09-27 12:37:55 EEST; 1h 13min ago
 Main PID: 774 (code=exited, status=1/FAILURE)

сен 27 12:37:50 dell.localdomain systemd[1]: Started Hardware RNG Entropy Gatherer Daemon.
сен 27 12:37:50 dell.localdomain rngd[774]: Failed to init entropy source 0: Hardware RNG Device
сен 27 12:37:50 dell.localdomain rngd[774]: Failed to init entropy source 1: TPM RNG Device
сен 27 12:37:50 dell.localdomain rngd[774]: Failed to init entropy source 2: Intel RDRAND Instruction RNG
сен 27 12:37:50 dell.localdomain rngd[774]: can't open any entropy source
сен 27 12:37:50 dell.localdomain rngd[774]: Maybe RNG device modules are not loaded
сен 27 12:37:55 dell.localdomain systemd[1]: rngd.service: Main process exited, code=exited, status=1/FAILURE
сен 27 12:37:55 dell.localdomain systemd[1]: rngd.service: Unit entered failed state.
сен 27 12:37:55 dell.localdomain systemd[1]: rngd.service: Failed with result 'exit-code'.

Аватара пользователя
Olej
Писатель
Сообщения: 13530
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: генератор случайных чисел

Непрочитанное сообщение Olej » 27 сен 2018, 15:25

Olej писал(а): Но гораздо менее известно (и мне тоже) что в качестве задатчика для генератора могут использоваться самые разные источники, начиная от софтверных (это плохо), до аппаратных или полу-аппаратных.
Описано это интересно и внятно здесь: Случайные числа в Linux(RNG) или как «наполнить» /dev/random и /dev/urandom.

В частности:
Havegd
В основе лежит алгоритм HAVAGE который генерирует энтропию на основе счётчиков и состояний процессора. В силу сложного, многоуровневого устройства процессоров, один и тот же код всегда выполняется за разное время и это не постоянство является основой для алгоритма HAVAGE.

На практике, это user space демон который как и rngd наполняет пул энтропии ядра через ioctl интерфейс /dev/random. при этом не нуждается в источнике энтропии как rngd.

Для centos пакет доступен из epel.

Аватара пользователя
Olej
Писатель
Сообщения: 13530
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: генератор случайных чисел

Непрочитанное сообщение Olej » 27 сен 2018, 15:30

Olej писал(а): В частности:
...
Для centos пакет доступен из epel.
Но интереснее то, что:

Код: Выделить всё

[olej@dell 09]$ dnf list Havege*
Последняя проверка окончания срока действия метаданных: 17:38:56 назад, Ср 26 сен 2018 20:46:40.
Имеющиеся пакеты
haveged.i686                                                      1.9.1-8.fc27                                               fedora
haveged.x86_64                                                    1.9.1-8.fc27                                               fedora
haveged-devel.i686                                                1.9.1-8.fc27                                               fedora
haveged-devel.x86_64                                              1.9.1-8.fc27                                               fedora

Код: Выделить всё

[olej@dell 09]$ dnf info haveged
Имя          : haveged
Версия       : 1.9.1
Выпуск       : 8.fc27
Архитектура  : x86_64
Размер       : 69 k
Источник     : haveged-1.9.1-8.fc27.src.rpm
Репозиторий  : fedora
Краткое опис : A Linux entropy source using the HAVEGE algorithm
URL          : http://www.irisa.fr/caps/projects/hipsor/
Лицензия     : GPLv3+
Описание     : A Linux entropy source using the HAVEGE algorithm
             :
             : Haveged is a user space entropy daemon which is not dependent upon the
             : standard mechanisms for harvesting randomness for the system entropy
             : pool. This is important in systems with high entropy needs or limited
             : user interaction (e.g. headless servers).
             :
             : Haveged uses HAVEGE (HArdware Volatile Entropy Gathering and Expansion)
             : to maintain a 1M pool of random bytes used to fill /dev/random
             : whenever the supply of random bits in /dev/random falls below the low
             : water mark of the device. The principle inputs to haveged are the
             : sizes of the processor instruction and data caches used to setup the
             : HAVEGE collector. The haveged default is a 4kb data cache and a 16kb
             : instruction cache. On machines with a cpuid instruction, haveged will
             : attempt to select appropriate values from internal tables.

Код: Выделить всё

[olej@dell 09]$ sudo dnf install haveged
[sudo] пароль для olej:
Последняя проверка окончания срока действия метаданных: 0:40:06 назад, Чт 27 сен 2018 13:49:34.
Зависимости разрешены.
===================================================================================================================================
 Пакет                         Архитектура                  Версия                              Репозиторий                  Размер
===================================================================================================================================
Установка:
 haveged                       x86_64                       1.9.1-8.fc27                        fedora                        69 k
 
Результат транзакции
===================================================================================================================================
Установка  1 Пакет

Объем загрузки: 69 k
Объем изменений: 189 k
Продолжить? [д/Н]: y
Загрузка пакетов:
haveged-1.9.1-8.fc27.x86_64.rpm                                                                    188 kB/s |  69 kB     00:00
-----------------------------------------------------------------------------------------------------------------------------------
Общий размер                                                                                        91 kB/s |  69 kB     00:00
Проверка транзакции
Проверка транзакции успешно завершена.
Идет проверка транзакции
Тест транзакции проведен успешно
Выполнение транзакции
  Подготовка       :                                                                                                           1/1
  Установка        : haveged-1.9.1-8.fc27.x86_64                                                                               1/1
  Запуск скриптлета: haveged-1.9.1-8.fc27.x86_64                                                                               1/1
Running as unit: run-r75ba53c29fdb4cbb8f3ef7762b643a07.service
  Проверка         : haveged-1.9.1-8.fc27.x86_64                                                                               1/1

Установлено:
  haveged.x86_64 1.9.1-8.fc27

Аватара пользователя
Olej
Писатель
Сообщения: 13530
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: генератор случайных чисел

Непрочитанное сообщение Olej » 27 сен 2018, 15:33

Olej писал(а): Но интереснее то, что:

Код: Выделить всё

[olej@dell 09]$ sudo systemctl status haveged
● haveged.service - Entropy Daemon based on the HAVEGE algorithm
   Loaded: loaded (/usr/lib/systemd/system/haveged.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:haveged(8)
           http://www.issihosts.com/haveged/


[olej@dell 09]$ sudo systemctl start haveged
  
[olej@dell 09]$ sudo systemctl status haveged
● haveged.service - Entropy Daemon based on the HAVEGE algorithm
   Loaded: loaded (/usr/lib/systemd/system/haveged.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-09-27 14:30:58 EEST; 3s ago
     Docs: man:haveged(8)
           http://www.issihosts.com/haveged/
 Main PID: 7236 (haveged)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/haveged.service
           └─7236 /usr/sbin/haveged -w 1024 -v 1 --Foreground
   
сен 27 14:30:58 dell.localdomain systemd[1]: Started Entropy Daemon based on the HAVEGE algorithm.
сен 27 14:30:58 dell.localdomain haveged[7236]: haveged: ver: 1.9.1; arch: x86; vend: GenuineIntel; build: (gcc 7.1.1 ITV); collect
сен 27 14:30:58 dell.localdomain haveged[7236]: haveged: cpu: (L4 VC); data: 32K (L2 L4 V); inst: 32K (L2 L4 V); idx: 22/40; sz: 32
сен 27 14:30:58 dell.localdomain haveged[7236]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B):  last entropy estimate 8.
сен 27 14:30:58 dell.localdomain haveged[7236]: haveged: fills: 0, generated: 0
Тест:

Код: Выделить всё

[olej@dell 09]$ cat /dev/random | rngtest -c100
rngtest 6
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 FOR A PARTICULAR PURPOSE.

rngtest: starting FIPS tests...
rngtest: bits received from input: 2000032
rngtest: FIPS 140-2 successes: 100
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=1.103; avg=11.139; max=16.288)Mibits/s
rngtest: FIPS tests speed: (min=42.105; avg=74.821; max=85.917)Mibits/s
rngtest: Program run time: 196864 microseconds
Теперь всё летает "в лёт"!
Устанавливаю на постоянкку (в автозагрузку):

Код: Выделить всё

[olej@dell 09]$ sudo systemctl enable haveged
Created symlink /etc/systemd/system/multi-user.target.wants/haveged.service → /usr/lib/systemd/system/haveged.service.

Аватара пользователя
Olej
Писатель
Сообщения: 13530
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: генератор случайных чисел

Непрочитанное сообщение Olej » 01 окт 2018, 20:04

Olej писал(а): Но гораздо менее известно (и мне тоже) что в качестве задатчика для генератора могут использоваться самые разные источники, начиная от софтверных (это плохо), до аппаратных или полу-аппаратных.
И это очень и очень варьируется от одного оборудования к другому.
Вот как это выглядит (странно для меня :-o ) на процессорной платформе Xeon:

Код: Выделить всё

[olej@xenix ~]$ inxi -c
CPU: Quad Core Intel Xeon L5420 (-MCP-) speed/min/max: 2000/2003/2499 MHz 
Kernel: 4.18.10-200.fc28.x86_64 x86_64 Up: 5h 24m Mem: 3536.4/7909.2 MiB (44.7%) 
Storage: 223.61 GiB (61.5% used) Procs: 270 Shell: bash 4.4.23 inxi: 3.0.24 

Код: Выделить всё

[olej@xenix ~]$ rngd -l
Entropy sources that are available but disabled
4: NIST Network Entropy Beacon
Available and enabled entropy sources:
5: JITTER Entropy generator
И тест генератора - и по скорости и по качеству:

Код: Выделить всё

[olej@xenix ~]$ time cat /dev/random | rngtest -c10
rngtest 6
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 FOR A PARTICULAR PURPOSE.

rngtest: starting FIPS tests...
rngtest: bits received from input: 200032
rngtest: FIPS 140-2 successes: 10
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=15.020; avg=16.780; max=13980.852)Kibits/s
rngtest: FIPS tests speed: (min=116.302; avg=119.358; max=121.487)Mibits/s
rngtest: Program run time: 11641222 microseconds

real	0m11,644s
user	0m0,004s
sys	0m0,015s

Аватара пользователя
Olej
Писатель
Сообщения: 13530
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: генератор случайных чисел

Непрочитанное сообщение Olej » 15 сен 2019, 18:35

Энтропия (качество) генератора (-ов) случайных чисел оказывается чрезвычайно важным в процессах криптографирования, в частности, при обработке паролей пользователей в Linux, в /etc/shadow - см. теневые пароли.

Аватара пользователя
Olej
Писатель
Сообщения: 13530
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: генератор случайных чисел

Непрочитанное сообщение Olej » 09 янв 2020, 14:34

Возвращаемся в тему в связи с: сложность паролей в системе
Удалённый реальный VDS, виртуальный сервер под KVM...

Код: Выделить всё

root@277938:~# cat /proc/sys/kernel/random/entropy_avail
1018
Мало!
И непонятно вот:

Код: Выделить всё

root@277938:~# rngd -ld
-bash: rngd: команда не найдена

Аватара пользователя
Olej
Писатель
Сообщения: 13530
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: генератор случайных чисел

Непрочитанное сообщение Olej » 09 янв 2020, 14:37

Olej писал(а):
09 янв 2020, 14:34
И непонятно вот:
Теперь понятно:

Код: Выделить всё

root@277938:~# apt-file search rngtest                 
ns2-examples: /usr/share/doc/ns2/examples/tcl/test/test-output-rng/rngtest.gz
rng-tools: /usr/bin/rngtest
rng-tools: /usr/share/man/man1/rngtest.1.gz
rng-tools-debian: /usr/bin/rngtest
rng-tools-debian: /usr/share/man/man1/rngtest.1.gz
rng-tools5: /usr/bin/rngtest
rng-tools5: /usr/share/man/man1/rngtest.1.gz
Но тут присутствуют 2 пакета!:

Код: Выделить всё

root@277938:~# aptitude show rng-tools
Пакет: rng-tools                                 
Версия: 2-unofficial-mt.14-1+b2
Состояние: не установлен
Приоритет: необязательный
Раздел: utils
Сопровождающий: Henrique de Moraes Holschuh <hmh@debian.org>
Архитектура: amd64
Размер в распакованном виде: 124 k
Зависит: libc6 (>= 2.14), udev (>= 0.053) | makedev (>= 2.3.1-77)
Конфликтует: intel-rng-tools
Заменяет: intel-rng-tools
Предоставляет: intel-rng-tools
Предоставляется: rng-tools-debian (2-unofficial-mt.14-3)
Описание: Daemon to use a Hardware TRNG
 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). 
 
 It tests the data received from the TRNG using the FIPS 140-2 (2002-10-10) tests to verify that it is indeed random, and feeds the random data to the kernel entropy
 pool. 
 
 This increases the bandwidth of the /dev/random device, from a source that does not depend on outside activity.  It may also improve the quality (entropy) of the
 randomness of /dev/random. 
 
 A TRNG kernel module such as hw_random, or some other source of true entropy that is accessible as a device or fifo, is required to use this package. 
 
 This is an unofficial version of rng-tools which has been extensively modified to add multithreading and a lot of new functionality.
Метки: interface::daemon, network::server, role::program

Код: Выделить всё

root@277938:~# aptitude show rng-tools5
Пакет: rng-tools5                                
Версия: 5-4
Состояние: не установлен
Приоритет: необязательный
Раздел: utils
Сопровождающий: Michael Stone <mstone@debian.org>
Архитектура: amd64
Размер в распакованном виде: 87,0 k
Зависит: libc6 (>= 2.14), libgcrypt20 (>= 1.8.0)
Конфликтует: rng-tools
Описание: Daemon to use a Hardware TRNG
 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). 
 
 It tests the data received from the TRNG using the FIPS 140-2 (2002-10-10) tests to verify that it is indeed random, and feeds the random data to the kernel entropy
 pool. 
 
 This increases the bandwidth of the /dev/random device, from a source that does not depend on outside activity. This may improve the behavior of systems which
 experience low values in /proc/sys/kernel/random/entropy_avail It may also improve the quality (entropy) of the randomness of /dev/random. 
 
 A TRNG kernel module such as hw_random, or some other source of true entropy that is accessible as a device or fifo, is required to use this package. It will take
 advantage of the RDRAND and RDSEED instructions included in some Intel & AMD CPUs.

Аватара пользователя
Olej
Писатель
Сообщения: 13530
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: генератор случайных чисел

Непрочитанное сообщение Olej » 09 янв 2020, 14:56

Olej писал(а):
09 янв 2020, 14:37
Но тут присутствуют 2 пакета!:
Не стал разбираться с расширениями процессора и командами RDRAND и RDSEED...

Код: Выделить всё

root@277938:~# apt install rng-tools
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
  liblockfile1 lockfile-progs m4 procmail sendmail-base sendmail-cf sensible-mda
Для их удаления используйте «apt autoremove».
Следующие НОВЫЕ пакеты будут установлены:
  rng-tools
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 43,1 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 124 kB.
Пол:1 http://mirror.timeweb.ru/debian buster/main amd64 rng-tools amd64 2-unofficial-mt.14-1+b2 [43,1 kB]
Получено 43,1 kB за 0с (643 kB/s)     
Выбор ранее не выбранного пакета rng-tools.
(Чтение базы данных … на данный момент установлено 42708 файлов и каталогов.)
Подготовка к распаковке …/rng-tools_2-unofficial-mt.14-1+b2_amd64.deb …
Распаковывается rng-tools (2-unofficial-mt.14-1+b2) …
Настраивается пакет rng-tools (2-unofficial-mt.14-1+b2) …
Job for rng-tools.service failed because the control process exited with error code.
See "systemctl status rng-tools.service" and "journalctl -xe" for details.
invoke-rc.d: initscript rng-tools, action "start" failed.
● rng-tools.service
   Loaded: loaded (/etc/init.d/rng-tools; generated)
   Active: failed (Result: exit-code) since Thu 2020-01-09 14:53:18 MSK; 54ms ago
     Docs: man:systemd-sysv-generator(8)
  Process: 2649 ExecStart=/etc/init.d/rng-tools start (code=exited, status=1/FAILURE)

янв 09 14:53:17 277938.local systemd[1]: Starting rng-tools.service...
янв 09 14:53:17 277938.local rng-tools[2649]: Starting Hardware RNG entropy gatherer daemon: (Hardware RNG device inode not found)
янв 09 14:53:17 277938.local rng-tools[2649]: /etc/init.d/rng-tools: Cannot find a hardware RNG device to use.
янв 09 14:53:18 277938.local systemd[1]: rng-tools.service: Control process exited, code=exited, status=1/FAILURE
янв 09 14:53:18 277938.local systemd[1]: rng-tools.service: Failed with result 'exit-code'.
янв 09 14:53:18 277938.local systemd[1]: Failed to start rng-tools.service.
Обрабатываются триггеры для man-db (2.8.5-2) …
Обрабатываются триггеры для systemd (241-7~deb10u2) …
Не помогает!
Нет аппаратного источника!

Код: Выделить всё

root@277938:~# apt remove rng-tools
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
  liblockfile1 lockfile-progs m4 procmail sendmail-base sendmail-cf sensible-mda
Для их удаления используйте «apt autoremove».
Следующие пакеты будут УДАЛЕНЫ:
  rng-tools
Обновлено 0 пакетов, установлено 0 новых пакетов, для удаления отмечено 1 пакетов, и 0 пакетов не обновлено.
После данной операции объём занятого дискового пространства уменьшится на 124 kB.
Хотите продолжить? [Д/н] y
(Чтение базы данных … на данный момент установлено 42722 файла и каталога.)
Удаляется rng-tools (2-unofficial-mt.14-1+b2) …
Обрабатываются триггеры для man-db (2.8.5-2) …

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость