А как сгенирировать случайные числа?
-
- Новичок
- Posts: 85
- Joined: 13 Nov 2003 00:09
- Location: Seattle,WA
А как сгенирировать случайные числа?
Вот встал вопрос, нужно сгенирировать случайный пароль. Сначала пользовал rand с инициализацией от таймера. Но возникли у меня сомнения, хорошо ли это. Ну с таймером понятно, это можно побороть. Но инициализация одним лонгом, это что-то не то. Так глянул код реализации rand( под win, под unix еще не смотрел) так там кашмар, извеняюсь, какая там криптография, его туда близко подпускать нельзя. Получив из rand 2-3 значения можно смело говорить, что он выдаст на неделю вперед. Так что правильно использовать, знаю меряют шумы звуковухи, скорость вращения винта, еще что-то. Но у всех таких методов есть свои недостатки. А есть ли что-то стандартное и не дрявое? Вроде задача стандартная.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 1169
- Joined: 16 Jan 2003 23:23
Посмотрите на Java Cryptography.
http://java.sun.com/products/jce/index.jsp
http://java.sun.com/products/jce/index.jsp
-
- Уже с Приветом
- Posts: 1255
- Joined: 01 Jun 1999 09:01
- Location: Irkutsk.RU -> Hamden, CT-> Princeton, NJ, USA
-
- Уже с Приветом
- Posts: 550
- Joined: 31 Mar 2000 10:01
- Location: Moscow --> Baltimore, MD
Re: А как сгенирировать случайные числа?
Mike_MIPT wrote:Вот встал вопрос, нужно сгенирировать случайный пароль. Сначала пользовал rand с инициализацией от таймера. Но возникли у меня сомнения, хорошо ли это. Ну с таймером понятно, это можно побороть. Но инициализация одним лонгом, это что-то не то. Так глянул код реализации rand( под win, под unix еще не смотрел) так там кашмар, извеняюсь, какая там криптография, его туда близко подпускать нельзя. Получив из rand 2-3 значения можно смело говорить, что он выдаст на неделю вперед. Так что правильно использовать, знаю меряют шумы звуковухи, скорость вращения винта, еще что-то. Но у всех таких методов есть свои недостатки. А есть ли что-то стандартное и не дрявое? Вроде задача стандартная.
Ну вобще-то rand по определению есть генератор псевдослучайных чисел. Если кто-то собрался его использовать для криптографии - это проблема кого-то, а не rand.
google не пробовали? Например здесь: http://random.mat.sbg.ac.at/generators/#generators
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
-
- Уже с Приветом
- Posts: 7723
- Joined: 29 Mar 2000 10:01
- Location: Kirkland,WA
Re: А как сгенирировать случайные числа?
Mike_MIPT wrote:Вот встал вопрос, нужно сгенирировать случайный пароль. А есть ли что-то стандартное и не дрявое? Вроде задача стандартная.
CryptGenRandom
-
- Новичок
- Posts: 85
- Joined: 13 Nov 2003 00:09
- Location: Seattle,WA
A. Fig Lee wrote:Правильные пацаны пользуются random instead of rand
Что за random?
Dmitry67 wrote:Придумайте некую функцию от GUID
К сожалению тоже не выход, думю при желании можно предсказать guid, а значит и функцию на его основе
С остальными способами не вполне понятно насколько стандартно и насколько проверенно. Ведь в чипсете нет диода, у которого можно померять шумы. Вроде ходят слухи о стеках системных процессов и о системных таблицах, у которых берется md5checksum. Но сходу не ясно, насколько много в этом дыр. Остальное что приходит в голову сильно зависит от комплектации компа.
Niky wrote:Ну вобще-то rand по определению есть генератор псевдослучайных чисел. Если кто-то собрался его использовать для криптографии - это проблема кого-то, а не rand.
Согласен, просто не думал что rand столь приметивен. Чтоб его предсказать даже перебор делать не надо
-
- Уже с Приветом
- Posts: 660
- Joined: 21 Dec 1999 10:01
Под 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/
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/
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
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
Вот буквально позавчера random(3C) шчупал - все нормально, если seed сгенерить по-человечески. Хорошо так шумит, распределение битиков в норме, все псевдослучайные. Для удобства рекомендую также читать /dev/random или (если нету, заплатка такая) prngd. Там же, в исходниках, смешной алгоритм вычисления seed'а.
От внешней среды зависит:
- температура процов и матери (реально считать под Linux/Solaris);
- время, за которое считается случайный набор блоков с медленного носителя (в драйвера лазить надо, ненавижу!)
... что еще?
Неплохие исходные данные для random seed'а, IMHO, количество I/O блоков или context switches за какое-то время (читается с кернела).
От внешней среды зависит:
- температура процов и матери (реально считать под Linux/Solaris);
- время, за которое считается случайный набор блоков с медленного носителя (в драйвера лазить надо, ненавижу!)
... что еще?
Неплохие исходные данные для random seed'а, IMHO, количество I/O блоков или context switches за какое-то время (читается с кернела).
-
- Уже с Приветом
- Posts: 419
- Joined: 28 Jul 2001 09:01
- Location: Redmond, WA
Re: А как сгенирировать случайные числа?
Mike_MIPT wrote:Вот встал вопрос, нужно сгенирировать случайный пароль.
Не совсем четко сформулирована задача.
Не ясно от кого предполагается создавать защиту и что именно требуется защить. Судя по вашим ответам вы подыскиваете способ сделать последовательно генерируемые пароли независимыми.
Если потенциальный взломщик будет находться на локальном компьютере - тогда все равно как генерировать случайный пароль, взлом будет достаточно прост. Можно не изобретать сложных схем.
Если же защита устанавливается от удаленного пользователя - то сойдет любой генератор случайных чисел с достаточно большим для ваших нужд периодом и, главное, диапазоном значений. После чего применяете к случайному числу какую-нибудь одностороннюю функцию типа RSA - и вуаля! Построенный таким образом черный ящик будет необычайно устойчив к взлому. Даже если взломщик будет знаком с используемым алгоритмом.
-
- Уже с Приветом
- Posts: 675
- Joined: 26 Dec 2001 10:01
- Location: Donetsk -> Kansas City
-
- Уже с Приветом
- Posts: 188
- Joined: 02 Jul 2004 22:50
- Location: ToЯonTo™, Canada
вот довольно быстрый и надежный способ получения ПСЧ
http://www.math.sci.hiroshima-u.ac.jp/% ... is-mt.html
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.