Pull to refresh

Comments 82

А в чем заключается преимущество этого сервиса? Более рандомный рандом?
Да, не псевдо-, а настоящий рандом
UFO just landed and posted this here
UFO just landed and posted this here
А мне это показалось довольно забавным :)
UFO just landed and posted this here
Вы только что трудоустроили целую деревню в Бангладеше.
В неком смысле — да. Это уже не псевдослучайный генератор, а полностью случайный, так как участвуют непредсказуемые силы природы в его действии. Зачем подобные вещи смертным? Честно — не знаю, надеюсь придут понимающие люди и просветят =)
Наглядно для тех, кому лень по ссылке заходить:

PHP rand() on Microsoft Windows
image

RANDOM.ORG
image

Тут разница очевидна.
Чтобы разница уж точно была очевидна, нагляднее строить гистограмму и рисовать для сравнения соответствующую гауссиану или распределение Пуассона (смотря что за шум у нас там).
Ничего в жизни не видел нагляднее, чем картинки выше. Уж точно не гистограмма гаустиана и пуассона, тут даже не надо тервера знать.
Подозреваю, если первый рандом получить несколько раз (можно даже рандомное количество раз), а затем применить к этому множеству некую функцию (например, простейший вариант: перемножить), то можно получить нечто близкое ко второму.
Подозреваю, что вы ошибаетесь.

Ну, или приведите конкретный пример.
Возможно, в данном случае ошибаюсь (не знаю, как сгенерировать такую картинку).

Но я к чему веду… Имея «плохой» рандом можно получить «хороший». В пример можно привести возведение в «плохую» степень числа по модулю простого числа. Взгляните на этот пример. Здесь образуется псевдослучайная последовательность, не поддающаяся ни каким закономерностям. При этом, данная особенность используется в криптографических алгоритмах благодаря сложности вычисления обратной функции. Да, псевдослучайная, ну и что?
Возводить в степень нужно, конечно же, не обычное число, а, так называемый, первообразный корень модуля. В примере выше, 3 — первообразный корень 17.

В общем, имея некие навыки в «матане», можно генерировать такие псевдослучайные числа, которые не поддаются никаким закономерностям.
Фиг поймешь этот хабр. Если я не прав, приведите аргументы, подтверждающие это. Минусовать по причине «я не знаком с темой» не очень достойно хаброюзера.
закономерности все равно будут, но куда более сложные и не очевидные. +Это будет во много раз больше нагружать железо.
p.s. не минусовал вас
Пускай нагружает. Это намного быстрее, чем ждать ответа от стороннего веб сервиса.
Ну в серьёзном проекте никто не будет использовать сторонний веб-сервис.
Например, разработчики покерного софта (PokerStars там всякие, как самый известный привожу в пример), исключают псевдослучайность на своих серверах, собирая и применяя для генерации случайных чисел различные действия пользователя клиентской части софта, например, движения мышки на компе и т.п.
>>например, движения мышки на компе и т.п.

Сомнительно. Откуда инфа? Зачем такие сложности если есть апаратные дешевые решения?
Это очевидно, что доверять какому-то левому сервису — неправильно.
(кстати, ваш ник отражает принадлежность к разработке формата fb3?)
Кнут, глава 3, «Случайные числа».
Вкратце: без источника энтропии числа рано или поздно начнут повторяться.
Да, но для псевдо случайных чисел период повторений настолько огромен, что это «псевдо» не должны быть проблемой.
Даже википедия говорит, что это не единственная проблема ГПСЧ, а еще есть неудачные реализации, криворукие маинтейнеры и особо удачные наборы входных данных.
Нельзя быть слишком параноиком.
Лично я генерил такую картинку в firefox (canvas + Math.random), у меня получилось более похоже на вторую
<?php
// Requires the GD Library
header("Content-type: image/png");
$im = imagecreatetruecolor(2120, 2120)
    or die("Cannot Initialize new GD image stream");
$white = imagecolorallocate($im, 255, 255, 255);
for ($y=0; $y<2120; $y++) {
    for ($x=0; $x<2120; $x++) {
        if (rand(0,1) === 1) {
            imagesetpixel($im, $x, $y, $white);
        }
    }
}		
imagepng($im);
imagedestroy($im);

Microsoft Windows [Version 6.1.7601]
PHP 5.3.8-ZS5.5.0 (cli) (built: Aug 24 2011 15:25:45)
Windows7 + PGP 5.3.8
Почему именно 2120? Возможно, что с таким сдвигом тенденция не просматривается.
В сравнении просто подобрана «удачная» картинка для PHP, попробуйте с такой же шириной картинки.
Уже не помню, почему настолько большую сделал. Делал и 512, но тоже не получилось той же картинки. Вот вам сейчас сгенерировал 512×512 (картинка всегда меняется по F5):
Хм… Действительно, проверил для явы


public static void main(String[] args) throws IOException {
int height = 512;
int weight = 512;
BufferedImage image = new BufferedImage(weight, height, BufferedImage.TYPE_INT_RGB);
for (int x = 0 ; x < weight; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, new Random().nextBoolean() ? Color.white.getRGB() : Color.black.getRGB());
}
}

ImageIO.write(image, "jpg", new File("c:/randomCheck.jpg"));
}
В вот если использовать один и тот же объект картинка получается гораздо лучше


public static void main(String[] args) throws IOException {
Random r = new Random();
int height = 512;
int weight = 512;
BufferedImage image = new BufferedImage(weight, height, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < weight; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, r.nextBoolean()? Color.white.getRGB(): Color.black.getRGB());
}
}

ImageIO.write(image, «jpg», new File(«c:/randomCheck.jpg»));
}

Так что вполне себе нормальная случайность =).
Ну и не так уж и очевидна (тоже PHP):


function make_seed() {
	list($usec, $sec) = explode(' ', microtime());
	return (float) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());
$size=512;
$image = imagecreatetruecolor($size,$size);
$black = imagecolorallocate ($image, 0,0,0 );
$white = imagecolorallocate ($image, 255,255,255 );
for ($x = 0; $x<$size; $x++) {
	for ($y = 0; $y<$size; $y++) {
		imagesetpixel($image,$x,$y,mt_rand(0,1)?$black:$white);
	}	
}
header ('Content-Type: image/png');
imagepng($image);


Я согласен, что со встроенным генератором лотерейное ПО лучше не писать, но и совсем уж атавизмами типа функции rand() козырять тоже не стоит.
Более рандомный относительно чего? Мейнстрим рандомы нынче псевдо-рандомны, т.е. по сути не являются рандомными и в теории их можно предсказывать.
Задача генерации случайных чисел в достаточном количестве и за приемлемое время является большой проблемой. Надо заметить, что данный ресурс эту проблему до конца не решает.
Вот именно. Для генерации одного-двух чисел вполне сойдет и Random.nextInt(), а для большого количества запрос каждого числа с сервера просто обрекает программу на пониженную скорость + лимит трафика добивает.
Поэтому можно послать запрос на генерацию сразу огромного количества чисел. Это один запрос.
Это один http запрос, но числа все равно будут генерироваться по одному т.е. это просто удобство API, а не решение проблемы.
Грех-то оно, конечно грех, но, тем не менее, простому смертному вполне хватит хорошего генератора псевдослучайных чисел, например, Yarrow. Используется, например, в FreeBSD и AIX для /dev/random.
Однажды я принимал участие в проекте, который представлял собой лотерею, для сертификации проекта в UK необходим был аудит кода + хардварный генератор случайных чисел, чтобы лотерея выдавала действительно рандомные значение, и ее результаты не могли быть подобраны или вычислены.
Например для такого проекта был бы очень полезен такой сервис, тем более что частые запросы не требуются, гораздо важнее надежность рандомного генератора.
… Это должен был быть комментарий в корень обсуждения
Дык а эту самую сертификацию он бы прошел?
Тут я не рискну дать вам определенный ответ. Но если у random.org была бы нужная бумажка, то скорее всего да.
Вообще говоря, /dev/random не такой уж и псевдослучайный в старом добром Linux
Зато он невероятно медленный.

Я как-то писал наивный конфигуратор, которому для идентификации нужно было сколько-то случайных чисел. На ~100-150 случайном символе начинались проблемы со скоростью.
Неужели юзать API удаленного сайта быстрее? О_О
При объёме данных — да. Если мне нужно 8 бит — быстрее у себя прочитать. Если нужно много — быстрее перетерпеть latency сети и получить нужное количество.
Пользовался этим сервисом для лотереи по предметам из онлайн-игрушки. Псевдо-рандом заказчика не устроил, поэтому пришлось искать варианты использования true random. Из минусов могу отметить разве что ограничение для бесплатного пользования в 200 тысяч байт вроде. Сейчас уже отказались от данного сервиса и используем свою купленную железку www.idquantique.com/true-random-number-generator/quantis-usb-pcie-pci.html
А простенький самопальный радиоприемник, детектирующий помехи + звуковая карта не устраивали?
Не-а. Была идея со звуковой картой, но заказчик сам всё решил и купил железку.
Понятно. В коммерции, в принципе, проще купить. Это мы от недостатка денег вынуждены придумывать всякие наколенные поделки…
Все просто — наколенная поделка может оказаться дороже в поддержке и рисках, чем готовая купленная.
Как развлечение — сойдёт.
Однако в серьёзных задачах глупо на него положиться.
Если в случае псевдо-рандома «у себя» надо хотя бы сделать некоторые телодвижения, чтобы предсказать вывод, тут же злоумышленнику достаточно подменить по пути ответ сервера и радоваться жизни.
1 Зачем подменить, если можно просниффать
2 если введут https, то возможно от этого защититься
3 без интернета это не работает
4 Мне кажется, что лучше использовать генератор из TPM, который микросхема в компьютере, чем обращаться к этому сервису. Хотя в TPM могут быть закладки. Ну тогда с физического источника через какую-нибудь плату ардуино по юсб.
И дешевле, и быстрее
А что, если в один и тот же момент к сервису обратятся сразу два клиента?
Первый — тот, кто собирается на основе данных сервиса хочет сгенерировать ключевую пару, а второй, естественно, злоумышленник.

В таком случае второй сможет неким образом вычислить значение (с учетом завязки сервиса на IP, например), отданное первому клиенту, и успешно сгенерировать у себя такие же ключи.

Логично, что для избежания этого нужно в конкретный момент времени выдавать значение ГСЧ только одному клиенту, но это моментально снижает производительность сервиса.
Они умножают шум ветра на php rand() :D
>> в конкретный момент времени выдавать значение ГСЧ только одному клиенту, но это моментально снижает производительность сервиса.

Именно поэтому на сервисе есть ограничение на генерацию случайных чисел в день (на данный момент это 1 000 000 бит/день). Лимит можно увеличить за доплату.
Клевый ресурс, заполняю лотерейные билетики с помощью него и пока вроде в плюсе;)
исходя из тервера вы должны быть в минусе, следовательно либо ресурс не клевый, либо с лотереей что то не то:)
вот именно что исходя из тервера он может выиграть хоть все свои ставки. Вопрос только в размере выборки и связанной с ней вероятностью такого исхода.
По-моему, разумно добавить подкласс класса java.util.Random. Вам потребуется только переписать защищённый метод next. Ну, разумеется, seed будете игнорировать, да readObject/writeObject станут бесполезны. Зато ваш класс можно будет подсовывать тем, кто уже пользуется java.util.Random. Ну и появятся автоматом приятные фишки типа nextGaussian().
Да, идея. Тут будет задействован Integer Generator, но проблема в том что методы либы не гарантировано возвращают результат, так как во время генерации может произойти ошибка 503. Тут уже надо кетчить ошибку, чтоб использовать интерфейс java.util.Random,
Не катит для высоконагруженных проектов. Разве что у Вас есть embedded вариант без обращений к внешним серверам…
Можно сочетать с псевдослучайным алгоритмом: время от времени подменять его seed на число, полученное с сервера (это можно делать асинхронно, тормозить не будет). Если заменить цепочку истинно случайных чисел на набор коротких случайных цепочек псевдослучайных чисел то, возможно, это устроит пользователя. Хотя, конечно, зависит от приложения.
Выход всегда можно найти. Из любой ситуации. Даже если отсечь задержку, то остаются еще всякие security policy… Но это так, к слову.
Зависит от задачи. Например, там есть возможность за раз выкачать pregenerated числа и при запросе рендома, использовать эти результаты уже без обращения к серверу.
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
А я по старинке пользуюсь книгой: goo.gl/XrkfY
Правда несколько неудобно из-за отсутствия сортировки — трудно найти нужное случайное число.
Очень круто. И в ней прямо числа одни случайные?
Да, 600 страниц отборных случайных чисел =)

Круче только многотомник с числом Пи, которого я не нашел в продаже, к сожалению.
Это прекрасно. Только мне пришло в голову, что, как только книжка написана, эти числа перестают быть случайными :). Даже если они такие крутые, что каждая книжка генерится отдельно. Тут неплохо было бы, конечно, определить тогда, что такое случайный.

Просто первое, что мне пришло в голову насчет случайных чисел — это что невозможно построить некоторое правило, по которому начиная с некоторого N мы сможем предсказывать появление новых. Типа получается, что шумы мира не детерминированы, ну там, правило Гейзенберга, квантовые штуки, и поэтому тут то случайность настоящая. Если принять мое определение, книжка все портит.

Хотя все равно это очень круто :)
Боюсь это пока несколько философский вопрос и здесь столько же искусства сколько математики, поэтому я всецело полагаюсь на авторритет авторов — RAND Corporation (http://www.rand.org/about.html).
Пардон, а как ей пользоваться?
Консенсуса в этом вопросе пока нет. Кто-то просто открывает и берет любое число по вкусу, кто-то по порядку, более серьезные специалисты ищут конкретное необходимое число, хотя это и занимает некоторое времени ввиду неотсортированности чисел.
Но ведь 80 баксов. За что?
Абсолютно согласен — продешевили. Вот к примеру гораздо менее объемная работа стоит $495: goo.gl/UF0O5 при всем актуальности разбираемого вопроса.
Да лучше заставить мышой поводить по экрану, ибо есть такие места (большинство), которые без инета ваще наглухо.
Сколько всего только не придумают люди, чтобы шафл в их MP3-плеере был хорошим…
Это, конечно, классно, что теперь есть еще одна возможность генерации абсолютно случайных чисел! Но вот только интересно, где может понадобиться абсолютная случайность в процессе разработке софта? Не кажется ли, что и псевдослучайные генераторы вполне справляются со своими задачами по генерации чисел? Я имею ввиду, что для обычного человека( пусть даже и программиста ) нет разницы между псевдослучайностью и абсолютной случайностью.

P.S Кроме того, никто ведь точно не знает, может атмосферные шумы также, как и все в этом мире, цикличны… и предсказать число все же представляется возможным.
Sign up to leave a comment.

Articles