Алгоритмы RSA и простого генератора - PullRequest
12 голосов
/ 12 ноября 2010

Хорошо, мое понимание математической работы RSA может быть не таким глубоким, как следовало бы, поэтому не стесняйтесь бить меня по голове, если это глупо:

Чтобы сгенерировать закрытый ключ, нам нужнодва случайных больших простых числа.Нет алгоритма, который мог бы сделать это точно и эффективно, но есть алгоритмы, которые могут генерировать большие числа, которые имеют 99.99999 ... (базилион 9с) ... 999% вероятности быть простым.

MyВопрос в том, что произойдет, если при феноменальном удаче, когда вы генерируете свой ключ, алгоритм генерации простых чисел генерирует не простые числа?Как это влияет на программное обеспечение, использующее этот неудачный ключ?

РЕДАКТИРОВАТЬ: я знаю, что другие факторы являются гораздо более вероятными источниками плохих результатов по этому вопросу;это просто любопытное математическое любопытство.

Ответы [ 5 ]

29 голосов
/ 12 ноября 2010

1.В вероятностных тестах на простоту

Компьютер является надежной, детерминированной системой: для одного и того же входа он будет запускать один и тот же алгоритм для одного и того же выхода.Будет ли это всегда делать это? Почти .Существует такая вещь, как частицы высокой энергии, бродящие по вселенной, обычно известные как космические лучи .Когда такая частица попадает в транзистор, спрятанный глубоко внутри ЦП, это может привести к сбоям в работе - в основном, изменить ее выходное напряжение очень быстрым образом, так что за один тактовый цикл бит, который представляет выходной транзистор, переворачивается.

Теперь рассмотрим компьютер, на котором работает алгоритм простого генератора, который создает случайные числа и проверяет их на простоту.Тест на простоту - это функция, которая возвращает логическое значение.В какой-то момент результат (логическое значение, равное true для «простого», false для не простого), является постоянным значением, скопированным в регистр.Таким образом, существует окно из нескольких тактов, в течение которых этот результат представляет собой один бит, содержащийся в структуре триггера (которая состоит из 6 транзисторов).

Какова тогда вероятность того, что космический луч перевернетсяэтот критический бит только в «правильном» тактовом цикле, заставляя программу считать не простое число простым?Эта вероятность очень низкая.Как я уже сказал, компьютеры - это надежные системы.Тем не менее эту вероятность можно приблизительно оценить.Обычно считается, что данный процессор испытывает переворот космических лучей раз в три месяца.Процессор Core2 Duo содержит около 291 миллиона транзисторов и работает на (например) 2,4 ГГц.Если существует один «критический» транзистор, и этот транзистор является критическим для одного тактового цикла, то вероятность того, что космический луч превратит не простое в очевидное простое число, составляет около 1,8 * 10 -24 .Это очень оптимистичная нижняя граница;на практике многие транзиторы могут быть перевернуты и означать неудачу теста простоты, а целевое время охватывает несколько циклов, и генератор простых чисел будет проверять несколько десятков не простых чисел для каждого простого поколения.Но давайте рассмотрим, что нам повезло.

Вероятность 1,8 * 10 -24 влияет на каждый тест на простоту, независимо от того, детерминирован он или нет.

Обычное простое числоГенератор будет запускать тест Миллера-Рабина с «достоверностью» 2 -100 (тест выполняется 50 раз и имеет вероятность не более 0,25 пропустить не простое число каждый раз).«100» произвольно, но часто.Эта вероятность немного меньше 10 -30 .Таким образом, у вас есть это: вероятность теста Миллера-Рабина, объявляющего простое число не простым, меньше, чем миллионная часть вероятности попадания космического луча на транзистор и заставления приложения предполагать, что числоявляется простым, тогда как тест Миллера-Рабина показал, что это не так.

Короче говоря, если вы получаете не простое число из генератора простых чисел, то это связано с аппаратной проблемой, такой как космическийлуч, не к вероятностному характеру теста на первичность.

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

2.Плохой ключ

Если вы используете не простое в ключе RSA, вы получите плохой ключ.Плохой ключ будет генерировать плохие подписи: генератор подписи создаст поток байтов правильной длины, но верификатор подписи объявит подпись недействительной.Примечание: на самом деле подпись может быть действительной, с небольшой вероятностью.Использование «простых чисел» p и q в RSA похоже на вероятностный тест на простоту, как и тест Миллера-Рабина.Однако есть вероятность, что вскоре будет найдено, что ключ ведет себя неправильно.Аналогичное поведение будет наблюдаться для асимметричного шифрования.

Следует отметить, что создание неверной подписи или невозможность расшифровать сообщение, зашифрованное RSA, также может происходить из-за еще одного космического луча или даже из-за большого количества космических лучей.более обыденное возникновение плохой оперативной памяти.

Суть в том, что если вы беспокоитесь о наличии плохого ключа RSA, а не о гораздо более вероятном событии аппаратного сбоя (что неизбежно из-за космических лучей, но, к счастью, нет)в любом случае очень часто), тогда вы ошибаетесь в своих приоритетах.

1 голос
/ 15 августа 2014

Вы сразу заметите: секретный ключ будет неправильным.

Если p или q составной, вы выбираете открытый ключ (обычно 65537), вычисляете ваш секретный ключ, используя расширенный евклидов алгоритм: 65537 * xmod n = 1. (где n = (p-1) * (q-1))

Но с использованием расшифровки секретного ключа x (encrypt (m))! = m В формуле: (m ^ 65537) ^ x mod n! = m

0 голосов
/ 30 июля 2015

Существует простой алгоритм для разложения большого композита - (как всегда предполагалось). Это было известно США и союзникам с 1989 года. Он также легко определяет простые числа.

Также RSA в курсе.

0 голосов
/ 12 ноября 2010

Если у вас есть истинные простые числа, то нет никаких ярлыков, кроме грубой силы. Если вы не уверены на 100%, атакующий тоже не будет. Кроме того, вы можете быть достаточно уверены в использовании простых тестовых алгоритмов, что риск наличия не простого числа меньше 1 во всем пространстве ключей. В принципе, вы можете быть статистически уверены, что ваш номер прост. Другими словами, шансы угадать, что это не простое число, должны быть выше, чем угадать правильный ключ. Это просто требует некоторого терпения во время генерации ключа.

0 голосов
/ 12 ноября 2010

я узнал, что вы можете использовать rsa так:

p = prime
q = prime
n = p * q

phi(n) = phi(p) * phi(q) = p-1 * q-1

Но я слышал, что если вы сделаете фи не простое, то не простое -1, поэтому на шаге выше произойдет сбой (но я не могу сказать почему)

...