Качество функции random () в PostgreSQL? - PullRequest
5 голосов
/ 22 марта 2012

Допустим, я создаю таблицу foo со столбцом bar , которая должна быть очень большим случайным целым числом.

CREATE TABLE foo (
    bar bigint DEFAULT round(((9223372036854775807::bigint)::double precision * random())) NOT NULL,
    baz text
);

Это лучший способ сделать это? Кто-нибудь может рассказать о качестве функции PostgreSQL random()? Умножение здесь маскирует энтропию?

Обратите внимание, что у меня do есть хорошая аппаратная энтропия, подающая /dev/random.

1 Ответ

11 голосов
/ 22 марта 2012

Postgresql random основан на собственной переносимой реализации POSIX erand48 .Это линейный конгруэнтный PRNG в 48-битной области.

Если вам нужно что-то более сильное, посмотрите на функцию gen_random_bytes модуля pg_crypto, которая используется для создания криптографически сильной энтропии.

...