Re: Случайный пароль
От: 3V Россия  
Дата: 20.05.23 21:30
Оценка: 5 (1)
Здравствуйте, TailWind, Вы писали:

TW>Как сделать случайный пароль на 24 символа?

TW>И потом ещё один такой же

Набрать энтропии откуда-то, получить криптографический хэш какой-нибудь
или даже лучше HMAC (что-то типа KDF_GOSTR3411_2012_256).
Потом кодировать в base64 и отрезать 24 байта.

Откуда набрать качественной энтропии — вопрос...
Так-то желательно иметь нормальный CSP.
В линухе можно, как уже написали, читать /dev/urandom.

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

Всякая криптография есть в openssl (это по поводу хэшей, и т.д.).
Там же в принципе есть апи для генерирования псевдослучайных чисел:
https://wiki.openssl.org/index.php/Random_Numbers
Опенсорсная отечественная криптография есть в движке gost:
https://github.com/gost-engine/engine
Описания алгоритмов смотреть на tc26.ru.

З.Ы. не знаю насколько это может быть корректно.
Можно попробовать набрать плохой энтропии.
Попросить пользователя ввести несколько символов, добавить данные rdtsc, времени.
Потом из этого выработать ключ по PBKDF2, ключ кодировать в base64 и откусить нужный кусок.
Если юзать отечественную криптографию то там PRF будет — все тот же HMAC на гостовском хэше.
Отредактировано 20.05.2023 21:32 3V . Предыдущая версия .
Re[6]: Случайный пароль
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.05.23 14:38
Оценка:
Здравствуйте, ·, Вы писали:

n>> Я вот проверил: Ubuntu 20.04, системный GCC. И что вы таки себе думаете — он включает встроенный в этот самый random_device... ещё один Mersenne Twister! И никакого /dev/random не читает. Картина Пикассо.

·>Странно. По крайней мере, вроде может. В исходниках он пытается что-то подоборать
·>https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/src/c++11/random.cc#L330
·>Может он напрямую из CPU берёт?

Ты прав, а я запутался в отладчике. Он, оказалось, через RDRAND берёт данные.

·>И, вроде, у него есть метод entropy, которым честность случайности.


Так оно бы не помогло.
The God is real, unless declared integer.
Re[7]: Случайный пароль
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.05.23 14:42
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Там грабля не совсем в этом была, грабля была в том, что /dev/random раньше мог блокироваться, если его кто-то активно вычитывал, а источники энтропии закончились. /dev/random читается именно на старте программы и это могло этот старт заморозить на неопределённое время.


vsb>Но в современном линуксе это исправили и там /dev/random и /dev/urandom по сути одинаковые.


Угу, в ванильке где-то с 5.12.

vsb>Про другие *nix не знаю.


FreeBSD так работала примерно с 2001-го. MacOS повторила её подход. Чем в Linux думали — не знаю, там в условном core team пачка настолько упрямых ослов была, что цензурных слов не было.
The God is real, unless declared integer.
Re[7]: Случайный пароль
От: · Великобритания  
Дата: 21.05.23 14:47
Оценка:
Здравствуйте, netch80, Вы писали:

n> Ты прав, а я запутался в отладчике. Он, оказалось, через RDRAND берёт данные.



n> ·>И, вроде, у него есть метод entropy, которым честность случайности.

n> Так оно бы не помогло.
В смысле? Прога может проверять энтропию, и если 0 (что выдаётся в случае плохого prng источника), то сказать пользователю "извините, не шмогла" или подобное.
Трахаться с полу-стандартным winapi, подстраиваться под разные версии винды... как-то бессмысленно, когда это давно решили разработчики stdlib.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[8]: Случайный пароль
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.05.23 15:09
Оценка:
Здравствуйте, ·, Вы писали:

n>> ·>И, вроде, у него есть метод entropy, которым честность случайности.

n>> Так оно бы не помогло.
·>В смысле? Прога может проверять энтропию, и если 0 (что выдаётся в случае плохого prng источника), то сказать пользователю "извините, не шмогла" или подобное.

Если бы оно само генерировало каким-то псевдоГСЧ, то с энтропией было бы всё в порядке, о чём бы оно честно и сказало.

·>Трахаться с полу-стандартным winapi, подстраиваться под разные версии винды... как-то бессмысленно, когда это давно решили разработчики stdlib.


В какой из полдесятка сборок?
The God is real, unless declared integer.
Re[9]: Случайный пароль
От: · Великобритания  
Дата: 21.05.23 17:05
Оценка:
Здравствуйте, netch80, Вы писали:

n> ·>В смысле? Прога может проверять энтропию, и если 0 (что выдаётся в случае плохого prng источника), то сказать пользователю "извините, не шмогла" или подобное.

n> Если бы оно само генерировало каким-то псевдоГСЧ, то с энтропией было бы всё в порядке, о чём бы оно честно и сказало.
Опять же отправлю к тому же исходнику: case prng: return 0.0;.

n> ·>Трахаться с полу-стандартным winapi, подстраиваться под разные версии винды... как-то бессмысленно, когда это давно решили разработчики stdlib.

n> В какой из полдесятка сборок?
Я не говорю, что это суперуниверсальное всемогучее решение всех проблем. Но это решение лучше по многим параметрам, чем предложенные тут альтернативы в виде cryptoapi и доморощенные алгоритмы.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Случайный пароль
От: sergii.p  
Дата: 22.05.23 09:44
Оценка:
Здравствуйте, TailWind, Вы писали:

TW>Не очень понятно как из этого сделать равномерное распределение

TW>Проблема с rand() в том, что она повторяется каждые 3fff байт

так у вас от пользователя куча рандомных данных. Можно перед каждым вызовом rand задавать затравку. Да и в таком подходе rand не особо то и нужен. Фактически берёте от пользователя случайную последовательность, смешиваете с временной меткой и хешируете в своё удовольствие. Каждый следующий символ практически случаен.
Re[4]: Случайный пароль
От: TailWind  
Дата: 22.05.23 13:45
Оценка:
SP>так у вас от пользователя куча рандомных данных

Мышка и клавиатура не рандомные
С большой вероятностью вы будите тыкать в клавиатуру по очереди правой и левой рукой
Правая рука будет тыкать чаще справа, левая слева

Наберите статистику на 100000 таких вводов и получите распределение наиболее вероятных комбинаций
Re[5]: Случайный пароль
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 22.05.23 16:04
Оценка:
Здравствуйте, TailWind, Вы писали:

SP>>так у вас от пользователя куча рандомных данных


TW>Мышка и клавиатура не рандомные

TW>С большой вероятностью вы будите тыкать в клавиатуру по очереди правой и левой рукой
TW>Правая рука будет тыкать чаще справа, левая слева

Когда говорится о таких данных, имеется в виду что-то вроде дробной части миллисекунды момента получения прерывания от клавиатуры/мыши с точностью до, например, 10 нс. А не какая клавиша и какой рукой нажата.

Но этой энтропии таки недостаточно, иначе бы всякие RDRAND не изобретали бы.
The God is real, unless declared integer.
Re[6]: Случайный пароль
От: TailWind  
Дата: 22.05.23 20:30
Оценка:
Чем их измерять то, эти 10 нс?
Re[7]: Случайный пароль
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 23.05.23 05:16
Оценка: +1
Здравствуйте, TailWind, Вы писали:

TW>Чем их измерять то, эти 10 нс?


RDTSC, RDTSCP считают до такта процессора, а это с частотой >=1GHz менее наносекунды.
HPET или APIC timer позволяют до 40-90 нс, это тоже неплохо (но к ним так просто не подобраться, если ОС не замапила их всем на чтение).
The God is real, unless declared integer.
Re: Случайный пароль
От: sts  
Дата: 29.05.23 22:14
Оценка:
Здравствуйте, TailWind, Вы писали:

TW>Как сделать случайный пароль на 24 символа?

TW>И потом ещё один такой же

TW>Нужно чтобы между символами и паролями не было математической зависимости


TW>То есть rand(), rand(), rand(), rand() не подходит


TW>Единственное, что мне пришло в голову rand(GetTickCount())

TW>Но этого мало. А дальше то как?

вся или почти вся(если строго) криптография основана на том, что злоумышленник знает все алгоритмы
так что исходить нужно из этого
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.