Хотя RSA не предназначен для шифрования, можно использовать RSA для шифрования. Если кто-то использует TextBook RSA, это будет небезопасно, поскольку шифрование бесплатно, и любой злоумышленник может проверить значения. Мы называем это оракулом шифрования, и он бесплатен в системах с открытым ключом.
Простой оракул шифрования RSA игра...
def Ind_CPA_RSA (противник, цель):
(e,n,d,...) = generate_RSA_key() // часть генератора ключей
def RSA_encryption_oracle_PKCS#1_v1.5(открытый текст): //Шифрование оракула
EM = PKCS#1_v1.5_padding(открытый текст)
зашифрованный текст = EM^e mod n
вернуть зашифрованный текст
для каждого m в Possible_message_space: //запросы
c = RSA_шифрование_оракул_PKCS#1_v1.5(м)
если с == цель
печать (цель)
вернуть успех
вернуть отказ
Таким образом, противник пробует все возможные сообщения так долго, как только может, чтобы увидеть равенство для победы.
В учебнике RSA, если публичный показатель $е=3$ тогда атака кубического корня работает для всех сообщений, таких что $len(m) < \sqrt[3]{n}$.
Для всех других атак статья Дэна Бонеха является хорошей отправной точкой;
$$\textbf{Никогда не используйте Text Book RSA, если знаете, что делаете!}$$
Чтобы быть в безопасности, нужно использовать шифрование RSA с соответствующими дополнениями. ПККС#1 v1.5 (RSAES-PKCS1-v1_5) или ОАЭП (РГАЭС-ОАЭП). Эти дополнения добавляют рандомизацию для достижения вероятностного шифрования.
Каждый использует специальные кодировки для достижения этого, такие как заполнение PKCS # 1 v1.5;
ЭМ = 0x00 || 0x02 || ПС || 0x00 || М.
М
это сообщение. PS
состоит из части рандомизации
Сгенерировать строку октетов PS длины k - mLen - 3
состоящий из псевдослучайно сгенерированных ненулевых октетов.
Длина PS будет не менее восьми октетов.
Например, для 2048-битного RSA; $к = 256$, $mLen=4$ тогда PS
длина составляет 249 байт случайного выбора для одного сообщения размером с букву. Поэтому злоумышленник не может проверить значения с помощью оракула шифрования. Остальные атакуют проблема с RSA.
Точно так же OAEP имеет случайность, и доказано, что OAEP имеет безопасность IND-CCA1. Предпочитайте OAEP PKCS#1 v1.5, так как он имеет много атак из-за неправильной реализации.
Если кому-то нужна научная статья о показателях шифрования RSA, вот статья с платным доступом;