Теория
Xoshiro128++ (Блэкман–Винья, 2019) — представитель семейства, пришедшего на смену Вихрю Мерсенна: xoshiro (xor/shift/rotate) быстрее, компактнее и проходит жёсткие статистические батареи. Состояние — четыре слова по 32 бита, один такт — несколько XOR, один сдвиг и два поворота: \(out = \mathrm{rotl}7(s_0+s_3) + s_0\), далее перемешивание и \(s_3 = \mathrm{rotl}{11}(s_3)\).
Плюсы семейства — период \(2^{128}-1\) и отличная скорость. На родственном xoshiro256** работает Random в .NET 6+; «плюсы» в названии означают вариант выходной функции с меньшими систематическими смещениями. За скорость и качество приходится платить тем же, чем и везде в не-криптографии: линейностью.
Важно: xoshiro — не криптографический генератор: состояние линейно по битам и восстанавливается по выходам. Зерно заполняет состояние через SplitMix64.
Пример с решением
- Условие. Зерно 1: первый выход xoshiro128++.
- Формула. SplitMix64-развёртка зерна в 4 слова, затем \(out = \mathrm{rotl}_7(s_0+s_3) + s_0\).
- Подстановка. Состояние: s₀ = 0x89025CC1, s₁ = 0x910A2DEC, s₂ = 0x658EEC67, s₃ = 0xBEEB8DA1.
- Вычисление. \(\mathrm{rotl}_7(s_0+s_3) + s_0 = 2146930148\).
- Ответ. 2146930148 (0x7FF78DE4) — первое значение калькулятора при зерне 1.
Главное
- XOR + повороты вместо умножений — скорость.
- Период \(2^{128}-1\) на 128-битном состоянии.
- Не криптографический, несмотря на отличную статистику.