А как сгенирировать случайные числа?

Mike_MIPT
Новичок
Posts: 85
Joined: 13 Nov 2003 00:09
Location: Seattle,WA

А как сгенирировать случайные числа?

Post by Mike_MIPT »

Вот встал вопрос, нужно сгенирировать случайный пароль. Сначала пользовал rand с инициализацией от таймера. Но возникли у меня сомнения, хорошо ли это. Ну с таймером понятно, это можно побороть. Но инициализация одним лонгом, это что-то не то. Так глянул код реализации rand( под win, под unix еще не смотрел) так там кашмар, извеняюсь, 8O какая там криптография, его туда близко подпускать нельзя. Получив из rand 2-3 значения можно смело говорить, что он выдаст на неделю вперед. Так что правильно использовать, знаю меряют шумы звуковухи, скорость вращения винта, еще что-то. Но у всех таких методов есть свои недостатки. А есть ли что-то стандартное и не дрявое? Вроде задача стандартная. :pain1:
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Придумайте некую функцию от GUID
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
hooch
Уже с Приветом
Posts: 1169
Joined: 16 Jan 2003 23:23

Post by hooch »

Посмотрите на Java Cryptography.
http://java.sun.com/products/jce/index.jsp
oMoses
Уже с Приветом
Posts: 1255
Joined: 01 Jun 1999 09:01
Location: Irkutsk.RU -> Hamden, CT-> Princeton, NJ, USA

Post by oMoses »

У Oracle9i/10g есть такие генераторы, вроде-бы отвечающие стандартам криптографии. Если потребуется - могу запостить детали.
[b]"Счастье для всех, даром, и пусть никто не уйдет обиженный!"[/b]
[i]А. и Б. Стругацкие, "Пикник на обочине"[/i]
Niky
Уже с Приветом
Posts: 550
Joined: 31 Mar 2000 10:01
Location: Moscow --> Baltimore, MD

Re: А как сгенирировать случайные числа?

Post by Niky »

Mike_MIPT wrote:Вот встал вопрос, нужно сгенирировать случайный пароль. Сначала пользовал rand с инициализацией от таймера. Но возникли у меня сомнения, хорошо ли это. Ну с таймером понятно, это можно побороть. Но инициализация одним лонгом, это что-то не то. Так глянул код реализации rand( под win, под unix еще не смотрел) так там кашмар, извеняюсь, 8O какая там криптография, его туда близко подпускать нельзя. Получив из rand 2-3 значения можно смело говорить, что он выдаст на неделю вперед. Так что правильно использовать, знаю меряют шумы звуковухи, скорость вращения винта, еще что-то. Но у всех таких методов есть свои недостатки. А есть ли что-то стандартное и не дрявое? Вроде задача стандартная. :pain1:

Ну вобще-то rand по определению есть генератор псевдослучайных чисел. Если кто-то собрался его использовать для криптографии - это проблема кого-то, а не rand.
google не пробовали? Например здесь: http://random.mat.sbg.ac.at/generators/#generators
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Правильные пацаны пользуются random instead of rand
Верить нельзя никому - даже себе. Мне - можно!
alex_127
Уже с Приветом
Posts: 7723
Joined: 29 Mar 2000 10:01
Location: Kirkland,WA

Re: А как сгенирировать случайные числа?

Post by alex_127 »

Mike_MIPT wrote:Вот встал вопрос, нужно сгенирировать случайный пароль. А есть ли что-то стандартное и не дрявое? Вроде задача стандартная. :pain1:


CryptGenRandom
Mike_MIPT
Новичок
Posts: 85
Joined: 13 Nov 2003 00:09
Location: Seattle,WA

Post by Mike_MIPT »

A. Fig Lee wrote:Правильные пацаны пользуются random instead of rand

Что за random?
Dmitry67 wrote:Придумайте некую функцию от GUID

К сожалению тоже не выход, думю при желании можно предсказать guid, а значит и функцию на его основе :(

С остальными способами не вполне понятно насколько стандартно и насколько проверенно. Ведь в чипсете нет диода, у которого можно померять шумы. Вроде ходят слухи о стеках системных процессов и о системных таблицах, у которых берется md5checksum. Но сходу не ясно, насколько много в этом дыр. Остальное что приходит в голову сильно зависит от комплектации компа.
Niky wrote:Ну вобще-то rand по определению есть генератор псевдослучайных чисел. Если кто-то собрался его использовать для криптографии - это проблема кого-то, а не rand.

Согласен, просто не думал что rand столь приметивен. Чтоб его предсказать даже перебор делать не надо :pain1:
Sheriff
Уже с Приветом
Posts: 660
Joined: 21 Dec 1999 10:01

Post by Sheriff »

Под Windows лучше использовать функцию CryptGenRandom.

http://msdn.microsoft.com/library/en-us ... random.asp

Под другие платформы смотрите здесь:

http://random.mat.sbg.ac.at/software/index.html

Подробнее o Cryptographic Random Numbers смотрите по этой ссылке:

http://triumvir.org/rng/
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Mike_MIPT wrote:
A. Fig Lee wrote:Правильные пацаны пользуются random instead of rand

Что за random?


На любом UNIX:
$man random
Standard C Library Functions random(3C)

NAME
random, srandom, initstate, setstate - pseudorandom number
functions

SYNOPSIS
#include <stdlib.h>

long random(void);

void srandom(unsigned int seed);

char *initstate(unsigned int seed, char *state, size_t
size);

char *setstate(const char *state);

DESCRIPTION
The random() function uses a nonlinear additive feedback
random-number generator employing a default state array size
of 31 long integers to return successive pseudo-random
numbers in the range from 0 to 2**31 -1. The period of this
random-number generator is approximately 16 x (2 **31 -1).
The size of the state array determines the period of the
random-number generator. Increasing the state array size
increases the period.

The srandom() function initializes the current state array
using the value of seed.

The random() and srandom() functions have (almost) the same
calling sequence and initialization properties as rand() and
srand() (see rand(3C)). The difference is that rand(3C) pro-
duces a much less random sequence-in fact, the low dozen
bits generated by rand go through a cyclic pattern. All the
bits generated by random() are usable.


Верить нельзя никому - даже себе. Мне - можно!
Иван Муравьев
Новичок
Posts: 72
Joined: 29 Jun 2004 21:57
Location: Krasnogorsk->Pittsburgh->West Chester PA

Random под UNIX

Post by Иван Муравьев »

Вот буквально позавчера random(3C) шчупал - все нормально, если seed сгенерить по-человечески. Хорошо так шумит, распределение битиков в норме, все псевдослучайные. Для удобства рекомендую также читать /dev/random или (если нету, заплатка такая) prngd. Там же, в исходниках, смешной алгоритм вычисления seed'а.
От внешней среды зависит:
- температура процов и матери (реально считать под Linux/Solaris);
- время, за которое считается случайный набор блоков с медленного носителя (в драйвера лазить надо, ненавижу!)
... что еще?
Неплохие исходные данные для random seed'а, IMHO, количество I/O блоков или context switches за какое-то время (читается с кернела).
User avatar
palmaker
Уже с Приветом
Posts: 419
Joined: 28 Jul 2001 09:01
Location: Redmond, WA

Re: А как сгенирировать случайные числа?

Post by palmaker »

Mike_MIPT wrote:Вот встал вопрос, нужно сгенирировать случайный пароль.

Не совсем четко сформулирована задача.
Не ясно от кого предполагается создавать защиту и что именно требуется защить. Судя по вашим ответам вы подыскиваете способ сделать последовательно генерируемые пароли независимыми.

Если потенциальный взломщик будет находться на локальном компьютере - тогда все равно как генерировать случайный пароль, взлом будет достаточно прост. Можно не изобретать сложных схем.

Если же защита устанавливается от удаленного пользователя - то сойдет любой генератор случайных чисел с достаточно большим для ваших нужд периодом и, главное, диапазоном значений. После чего применяете к случайному числу какую-нибудь одностороннюю функцию типа RSA - и вуаля! Построенный таким образом черный ящик будет необычайно устойчив к взлому. Даже если взломщик будет знаком с используемым алгоритмом.
User avatar
Саша Т
Уже с Приветом
Posts: 675
Joined: 26 Dec 2001 10:01
Location: Donetsk -> Kansas City

Post by Саша Т »

Я недавно видел статью, к сожалению ссылки нет, какая то контора придумала направить вебкамеру на [Lava Lamp], и софт соответствующий сделали. Так что есть вероятность получить действительно случайные числа за недорого.
BezKovshaPrishel
Уже с Приветом
Posts: 188
Joined: 02 Jul 2004 22:50
Location: ToЯonTo™, Canada

Post by BezKovshaPrishel »

вот довольно быстрый и надежный способ получения ПСЧ
http://www.math.sci.hiroshima-u.ac.jp/% ... is-mt.html

Code: Select all

It is proved that the period is 2^19937-1 , and 623-dimensional equidistribution property is assured. 

Return to “Вопросы и новости IT”