Почему "большие простые числа" используются в RSA/шифровании?

Я изучил теорию шифрования с открытым ключом, но мне не хватает связи с физическим миром. например,

Мне сказали, что хорошее шифрование RSA должно полагаться на простые числа С 300 десятичными цифрами, но почему? кто придумал этот номер? Сколько времени потребуется, чтобы взломать такое шифрование (статистика о разных машинах).

Я пробовал Google, но не смог найти то, что хотел. кто?

спасибо

3 ответов


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

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

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

Как обычно Википедия является хорошей ссылкой на RSA.


все алгоритмы открытого ключа основаны на функции люк, то есть математические конструкции, которые" легко " вычислить одним способом, но "трудно" отменить, если у вас нет дополнительной информации (используемой в качестве закрытого ключа), в этот момент также обратное становится "легким".

"легкий" и "жесткий" - это просто качественные прилагательные, которые всегда более формально определяются в терминах вычислительная сложность. "Жесткий" очень часто относится к вычислениям это невозможно решить за полиномиальное время O (nx) для некоторых фиксированных x и где n - это входные данные.

в случае RSA" легкой " функцией является модульное возведение в степень C = Me П где коэффициенты N держатся в секрете. Проблема "тяжело" найти e - й корень C (то есть M). Конечно, "трудно" не означает, что это всегда трудно, но (интуитивно), что увеличение размера N на определенный фактор увеличивает сложность на гораздо больший фактор.

рекомендуемые размеры модуля (2048 бит или 617 десятичных цифр) связаны с доступностью вычислительной мощности в настоящее время, так что если вы придерживаетесь их, вы уверены, что это будет чрезвычайно дорого для злоумышленника, чтобы сломать его. Для получения более подробной информации, я должен сослаться на a блестящий ответ по криптографии.SE (go и upvote : -)).

наконец, чтобы иметь люк,N построен таким образом, чтобы быть составным числом. Это теория, для повышения производительности, N может иметь более 2 факторов, но общее правило безопасности заключается в том, что все факторы должны быть сбалансированы и имеют примерно одинаковый размер. Это означает, что если у вас есть K факторов, и N и B биты длиной, каждый фактор грубо B / K биты длинные.

эта проблема для решения не то же самое, что задача целочисленной факторизации хотя. Они связаны в том, что если вам удастся фактор N вы можете вычислить закрытый ключ, повторно выполнив то, что сделала сторона, сгенерировавшая ключ. Как правило, показатель e используется очень мало (3); нельзя исключить, что когда-нибудь кто-то разрабатывает алгоритм для вычисления e-че без учета N.

EDIT: исправлено количество десятичных цифр для модуля ключа RSA 2048 бит.


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

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