Привет, а кто представляет/знает, как работает urandom в Linux? Существует-ли вероятность, что в течение, например, 2ms он может выдать два и более одинаковых значений? Спасибо. -- Volodymyr Litovka "Vision without Execution is Hallucination." -- Thomas Edison
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-
Нетч, прекрасно, спасибо. On 7/27/18 12:49 PM, Valentin Nechayev wrote:
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-
-- Volodymyr Litovka "Vision without Execution is Hallucination." -- Thomas Edison
participants (2)
-
Valentin Nechayev
-
Volodymyr Litovka