[uanog] urandom/Linux

Valentin Nechayev netch at netch.kiev.ua
Fri Jul 27 12:49:04 EEST 2018


hi,

 Wed, Jul 25, 2018 at 12:04:57, doka.ua wrote about "[uanog] urandom/Linux": 

> а кто представляет/знает, как работает urandom в Linux?

Генерирует последовательность равномерно распределённых
псевдослучайных байтов.
Уровень энтропии достаточный для быта и для криптографии без особых
запросов.
Метод использования - открыть и читать в буфер нужного размера.


> Существует-ли вероятность, что в течение, например, 2ms он может
> выдать два и более одинаковых значений?

Что такое "значение"?
Если, например, 1 байт, то достаточно прочесть более 16 байт за раз,
чтобы вероятность наличия хотя бы двух совпадающих была более 50% (см.
"парадокс близнецов").
Если 4-байтовое целое, нужно таких прочесть более 65536.
От времени это не зависит.

В общем случае, поскольку оно претендует на характеристики
действительно случайного потока с равномерным распределением,
вероятность двух одинаковых байт подряд, например, 1/256, а как она
ляжет в конкретном случае - заранее непредсказуемо. Ибо так ведёт себя
честная случайность.

Если у тебя задача получить _разные_ значения, то это делается так:
1. Генерируется последовательность этих разных значений (например, от
1 до 1000).
2. Рядом с ней формируется последовательность случайных чисел (лучше -
в более широком диапазоне).
3. Сортируется последовательность 2 (веса), так, что при перестановке
одновременно переставляются элементы последовательности 1 с теми же
индексами.
Результат - переставленная последовательность 1 - и есть искомое.

В Python это стандартно представлено в виде random.shuffle, например

    a = list(range(1000))
    random.shuffle(a)


-netch-


More information about the uanog mailing list