Linux kernel модуль, предоставляющий генератор псевдослучайных чисел на основе полей Галуа (GF(2⁸)).
Драйвер создаёт misc-устройство /dev/gfrandom, которое возвращает псевдослучайные байты, сгенерированные с использованием арифметики полей Галуа GF(2⁸). Является аналогом /dev/urandom.
Используется регистр сдвига с линейной обратной связью (LFSR) над полем GF(2⁸):
- Состояние: 256 байт (коэффициенты)
- Начальное состояние (seed): t^256 + t^10 + t^5 + t^2 + 1 (или пользовательский)
- Генерируемое значение: сумма произведений ненулевых коэффициентов состояния на соответствующие коэффициенты
- gfrandom — драйвер (GPL-3.0)
- Galois_Field_256 — библиотека для работы с полями Галуа (MIT License)
- Linux kernel headers (для сборки модуля)
- GCC, make
- Для запуска тестов: linux-headers или root доступ для загрузки модуля
Для удобства пользователей, желающих получить детерминированные предсказуемые числа, в папке assets представлены стандартные бинарные файлы по 256 байт каждый:
seed_file.bin— начальное состояние (seed)coeff_file.bin— коэффициенты
Эти же файлы используются в тестах №1 и №2. Первые 10 ожидаемых случайных байтов: (HEX: 47 6b 77 79 60 1c bd 3f c9 b2) — см. assets/expected1.bin.
makemake test_algo
./testsudo insmod gfrandom.kocoeff_file— путь к файлу с коэффициентами (256 байт)seed_file— путь к файлу с seed (256 байт)
Если параметры не указаны, используются автоматически сгенерированные значения.
Пример использования собственных параметров:
sudo insmod gfrandom.ko coeff_file=/path/to/coeffs.bin seed_file=/path/to/seed.binsudo cat /dev/gfrandom | head -c 1024 > /dev/nullsudo rmmod gfrandomТесты запускаются в CI и локально:
make test- gfrandom: GPL-3.0
- Galois_Field_256 (Denis Potapov): MIT License
Подробности см. в LICENSE.
Макар Лилль