Рекомендуемая длина ключа
Размер ключа в алгоритме RSA связан с размером модуля n. Два числа p и q, произведением которых является модуль, должны иметь приблизительно одинаковую длину поскольку в этом случае найти сомножители (факторы) сложнее, чем в случае когда длина чисел значительно различается. Например, если предполагается использовать 768-битный модуль, то каждое число должно иметь длину приблизительно 384 бита. Обратите внимание, что если два числа чрезвычайно близки друг к другу или их разность близка к некоторому предопределенному значению, то возникает потенциальная угроза безопасности, однако такая вероятность – близость двух случайно выбранных чисел – незначительна.
1. Возьмем M = (p+q)/2
2. При p < q, имеем 0 =< м – sqrt (n) =< (q - p)**2/8p.
Поскольку p = M*(+- sqrt (m2 - n)), то значения p и q можно легко найти, если разность p - q достаточно мала.
Оптимальный размер модуля определяется требованиями безопасности: модуль большего размера обеспечивает большую безопасность, но и замедляет работу алгоритма RSA. Длина модуля выбирается в первую очередь на основе значимости защищаемых данных и необходимой стойкости защищенных данных и во вторую очередь – на основе оценки возможных угроз.
Хороший анализ защиты, обеспечиваемой определенной длиной модуля, приведен в описании модуля дискретного логарифма Rivest [Riv92a], но то же можно применить и к алгоритму RSA. В более позднем обзоре защиты, предлагаемой ключами RSA различной длины защита анализируется на основе методов разложения на множители (факторинга), существовавших в 1995 и перспективах их развития, а также рассматривает возможность привлечения больших вычислительных ресурсов по информационным сетям. Проведенная в 1997 году оценка показала, что 512-битный ключ RSA может быть вскрыт (факторингом) за $ 1,000,000 и восемь месяцев. В 1999 году 512-битный ключ был вскрыт за семь месяцев и это означает, что 512-битные ключи уже не обеспечивают достаточную безопасность за исключением очень краткосрочных задач безопасности.
В настоящее время Лаборатория RSA рекомендует для обычных задач ключи размером 1024 бита, а для особо важных задач – 2048 битов (например, для главного Мастера Сертификатов).
Некоторые недавно введенные стандарты устанавливают для общих задач минимальный размер ключа 1024 бита. Менее ценная информация может быть надежно зашифрована ключом 768-битной длины, поскольку такой ключ все еще недосягаем для всех известных алгоритмов взлома. Для оценки уровней безопасности различных размеров ключей можно использовать модель предлагаемую Lenstra и Verheul.
Обычно ключ индивидуального пользователя имеет определенный срок жизни, который истекает через некоторое время, например, через год. Это дает возможность регулярно заменять ключи и обеспечивать необходимый уровень безопасности. После истечения срока жизни ключа, пользователь должен создать новый ключ, предварительно удостоверившись, что параметры криптосистемы остались прежними, в частности что система использует ключи той же длины. Конечно, замена ключа не защищает от нападения на сообщения, зашифрованные прежним ключом, но для этого размер ключа должен подбираться согласно ожидаемому времени актуальности данных. Возможность замены ключей позволяет поддерживать криптографическую систему в соответстствии с текущими рекомендациями о размерах ключей, которые регулярно публикует Лаборатория RSA.
Пользователям необходимо учитывать, что оцениваемое время взлома системы RSA – только усредненное значение, а массированная атака на тысячи модулей в каком-то случае может дать положительный результат в относительно короткий срок.
Хотя надежность любого отдельного ключа все еще высока, некоторые методы факторинга всегда оставляют нападающему маленький шанс быстро найти некоторый ключ.
Что же касается затруднения взлома увеличением размера ключа, то удвоение длины модуля в среднем увеличивает время операций открытого (public) ключа (шифрование и проверка подписи) в четыре раза, а время операций частного (private) ключа (расшифровка и подпись) в восемь раз. Разница между временем работы отрытого и секретного ключей возникает потому, что открытый показатель может оставаться неизменным, в то время как модуль будет увеличен, а длина частного показателя будет увеличена пропорционально увеличению длины ключа. Время создания ключей при удвоении модуля увеличивается в 16 раз, но это нечасто выполняемая операция и потому на общей производительности это практически не сказывается.
Надо отметить, что размеры ключей в криптосистеме RSA (а также и в других криптосистемах открытого (public) ключа) намного больше размеров ключей систем блокового шифрования типа DES, но надежность ключа RSA несравнима с надежностью ключа аналогичной длины другой системы шифрования.