Pull to refresh

Comments 22

Ну это как Кейдж с Траволтой.

Тогда уж Билл Мюррей и Джеймс Белуши

Произошла коллизия по хэшу портрета

Я вообще думал что Боярский

Если допустим были сгенерированы уязвимые ключи для RSA 2048, то сколько времени потребуется на взлом? А если ключи будут RSA 4096? Стоит ли паниковать?

Если уязвимые — плюс-минус столько же, сколько для RSA512. Если нормальные — так не взломать.

Стоит ли паниковать?

Мне кажется, что речь не о панике, а о знании. Это знание полезно как разработчику, так и пользователю.

Я просто думал, что если в алгоритме идет генерация уязвимых ключей тогда нужно знать сколько времени займет взлом? Если учесть что уязвимость понижает кючи до 512 бит и уже сейчас не рекомендуют использовать ниже 1024 тогда это очень плохо с точки зрения безопастности и нужно перепроверять все библиотеки что занимаются генерацией этих ключей. В статью надобы добавить библиотеки и их версии что имеют проблемы и что нормально генерируют RSA ключи.

В статью надо бы добавить библиотеки и их версии что имеют проблемы и что нормально генерируют RSA ключи.

Ваше предложение полностью поддерживаю, тем более что аналогичный инцендент уже встречался, правда с российским хэшем ГОСТ Р 34.10-2012.

Ферма, Декарт, какая разница :D

Перебор для факторизации Ферма можно ускорить, анализируя остатки по простым модулям. Значение p*q можно представить разностью квадратов ((p+q)/2)^2 — ((p-q)/2)^2.
Мы хотим представить нечетное N в виде A^2 — B^2. Если N % 4 == 1, то легко убедиться, что A должно быть нечетным, а B — четным. А в случае N % 4 == 3 наоборот: A четное, B нечетное.
Дальше смотрим на N % 3. Если N % 3 == 1, тогда A не кратно 3, B кратно 3. В случае N % 3 == 2 у нас A кратно 3, B не кратно 3.
И дальше, перебирая остатки N по простым модулям, можем ограничить возможные значения A, B по каждому модулю, и собрать по китайской теореме об остатках возможные значения по модулю произведения простых.
Например, по модулю 2*3*5*7 будет меньше 25 возможных значений из 210.
Но это еще не всё! Мы предполагаем, что N — произведение ровно двух простых N = p*q. Тогда из малой теоремы Ферма следует, что для любого x, не кратного p и q, выполняется x^((p-1)*(q-1)/2) % N == 1. Выберем например x = 2. Небольшое преобразование: 2^((N+1)/2) % N == 2^((p+q)/2) % N. Слева известное значение. Справа — неизвестный показатель, то есть свели к дискретному логарифму. Можно использовать небольшую модификацию алгоритма больших и малых шагов. За большой шаг взять произведение маленьких простых, а возможные значения для малых шагов собрать в хеш-таблицу, размер которой мы уменьшили за счет ограничений на (p+q)/2. С таким подходом кажется реальным за несколько минут перебрать значения до abs(p-q) < sqrt((p+q)/2) * 2^64

Отличное сокращение, да - с розовыми таблицами надо больше памяти, но если всё так упрощается - даже и "простой одноядерный" шуршать будет как тот электровеник. Спасибо вам большое!

А почему нельзя после генерации p и q просто проверить на эту уязвимость и перегенерировать, если пара уязвимая?

Потому что можно и нужно. Но этого не делают. А еще некоторые алгоритмы устроены так, что генерируют почти исключительно уязвимые пары.

Есть програмка или скрипт для проверки сгенерированного RSA ключа на уязвимость?

Если нет можно хотябы список проблемных программ?

"Да, могут. Но для этого необходимо, чтобы они были идентичны, по меньшей мере, в своих старших 500 битах. Вероятность такого исхода — 1:2^500"

Даже это уже не так и много, примерно 10^20. При расчётной скорости перебора 10^9 за секунду ("довольно шустрым, но совершенно одноядерным" алгоритмом) уйдёт 10^11 секунд, 300 лет, а на ядрах чего-то ГПУ-образного всё может случиться в несколько сот (а то и тысяч) раз быстрее.

Перед русским языком тоже

Sign up to leave a comment.