Я писал о том, зная приватную и публичную пару ключей (аутпут) и что подбирая входные параметры (инпут) и добившись в этом результата, ты сможешь подобрать приватники к другим адресам, сгенерированным на этом же железе.
Не совсем так. Например затравка random и urandom в Линуксе каждый раз собирается заново, до нужной величины "непредсказуемости" (в основном сейчас берут 256 бит, раньше брали 128 за минимум).
Конкретно random даже учитывает движения мыши и отклили клавиш для затравки. Восстановить этот процесс для конкретного дня (а надо еще знать когда приватник был создан) не представляется возможным.
Ну и к тому же если ты все же узнаешь затравку, то как я помню, угадать последующие значения придется с некоторой вероятностью, так как хорошие prng стойки к угадыванию (по многим причинам)
Ты заставил меня таки сделать ресерч, мерзкий Поптоши! Ладно, чтобы не остаться голословным и не утонуть в абстрактной теории, давай перейдём к конкретике. Итак, недолгим поиском в гугле выясняем, что биток использует openssl ГСПЧ, смотрим его алгоритм
тут - узнаём, что он основан на MD5. Идём ищем табличку, о которой ты упомянул выше
здесь.
Ответь мне пожалйста, что из этого "Текущее время, размер жёсткого диска, размер свободной памяти, номер процесса и NETBIOS-имя компьютера" нельзя подобрать?
Это в Виндоус, в Linux метод Random open ssl использует выше названные мной urandom и random. И да, в Виндовс тоже не все так просто, как у тебя написано:
"With Microsoft CSPs, CryptGenRandom uses the same random number generator used by other security components. This allows numerous processes to contribute to a system-wide seed. CryptoAPI stores an intermediate random seed with every user. To form the seed for the random number generator, a calling application supplies bits it might have—for instance, mouse or keyboard timing input—that are then combined with both the stored seed and various system data and user data such as the process ID and thread ID, the system clock, the system time, the system counter, memory status, free disk clusters, the hashed user environment block. This result is used to seed the pseudorandom number generator (PRNG)." https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandomТоесть первоначальный сид ты никак не установишь. Твое предложение мне кстати Власия напомнило, который собирался таким же способом ключи подбирать (а сейчас готовится с помощью VanityGen за одну секунду взламывать приватники)
1) ты читаешь не про криптографически стойкие генераторы
ну вообще то random Линуксоидный и CryptGenRandom являются CSPRNG если ты не знал. Как и open SSL.
Методы атаки, про которые ты читаешь, пытаются из обрывка такой последовательности, например, "16 3 7" восстановить и формулу, и сид
Ну формула чаще всего открытая, ее нечего восстанавливать. Это кстати тоже из-за криптографии, если формула будет скрытой, то как ты уверен что тебе не подсовывают фигню? Поэтому все алгоритмы, по типу sha256 или AES-256 открыты, тоесть ты можешь тестовым значением проверить корректность их работы.
В нашем же случае с криптой все по-другому. У тебя никто не генерирует последовательность случайных чисел. У тебя каждый раз генерируется одно случайное число из одного случайного сида, который еще и получают с помощью источника энтропии, чтобы не наебаться. Возьмем, например, за источник энтропии количество свободной оперативной памяти. Я генерирую ключ, у меня запущен ряд программ, получаю приватник. Потом я через какое-то время генерирую новый приватник и у меня новое состояние оперативной памяти, потому что запущен другой набор программ. Ты, например, получаешь первый мой приватник. Даже если ты каким-то чудом догадаешься по одному числу (одному приватнику) сколько у меня там было свободно оперативной памяти, как ты по этому числу попытаешься сгенерировать второй мой приватник? Это число одноразовое. Я не генерирую на основании него ряд случайных чисел. Понимаешь разницу?
Ну я тоже об этом выше писал, кстати. Ты полностью прав!
Сложность алгоритма SHA-256 O^n, где n = 256? (хз, нет желания смотреть точное число), а перебор пусть от нуля до скажем 10 гигабайт имеет сложность O(n). Если не знаешь разницу, гугли, объяснять не буду. И так оффтопим и достало.
Только перебор от нуля до 10гб тебе ничего не даст. Там вероятность найти тоже состояние системы в котором генерировался нужный тебе приватник где то тоже на уровне 1/2^256