RSA: что это, алгоритм и применение шифрования

Автор: IT Sectr Опубликовано: 2026-04-02 Время чтения: 9 мин

RSA — криптосистема с открытым ключом, обеспечивающая шифрование и цифровую подпись на основе вычислительной сложности факторизации больших чисел. По данным NIST Special Publication 800-56B Rev. 2 (2023), RSA с длиной ключа 2048 бит остаётся стандартом безопасности для государственных и коммерческих систем. Алгоритм широко применяется в протоколах TLS, цифровых подписях и шифровании данных в мобильных приложениях.

Главное

  • RSA — алгоритм асимметричного шифрования, использующий пару ключей: открытый и закрытый.
  • Безопасность алгоритма основана на математической сложности разложения большого числа на простые множители.
  • Размер ключа 2048 бит считается минимально надёжным с 2023 года по стандарту NIST.
  • RSA применяется в TLS-сертификатах, цифровых подписях и протоколах аутентификации.
  • Мобильная разработка использует RSA через встроенные криптобиблиотеки Android Keystore и iOS Security Framework.

Что такое RSA?

RSA — криптографический алгоритм с открытым ключом, разработанный в 1977 году Рональдом Ривестом, Ади Шамиром и Леонардом Адлеманом. Название образовано от первых букв фамилий авторов. Алгоритм стал первой практически применимой асимметричной криптосистемой, где ключи шифрования и дешифрования различаются.

История создания

Алгоритм RSA был опубликован в 1977 году в журнале Scientific American и основан на более ранних работах Уитфилда Диффи и Мартина Хеллмана по криптографии с открытым ключом. Массачусетский технологический институт получил патент на RSA в 1983 году, который действовал до 2000 года. По данным отчёта RSA Laboratories (2023), алгоритм остаётся одним из самых распространённых криптографических стандартов в мире — он используется в миллиардах устройств ежедневно.

Принцип асимметричности

В отличие от симметричных шифров, где один и тот же ключ применяется и для шифрования, и для дешифрования, RSA оперирует математически связанной парой ключей. Открытый ключ может быть опубликован для всех желающих без риска компрометации системы. Закрытый ключ известен только владельцу и никогда не передаётся по сети. По данным исследования IBM Security X-Force Threat Intelligence Index (2024), асимметричное шифрование используется в 96% современных протоколов защищённой передачи данных.

Математические основы

Безопасность RSA базируется на задаче факторизации — разложении произведения двух больших простых чисел на множители. Если выбрать простые числа p и q длиной 1024 бита каждое, то их произведение n будет содержать 2048 бит. Вычислить p и q, зная только n, современными методами практически невозможно: по данным экспертной оценки CNRS (2024), для взлома RSA-2048 потребуется более 300 миллиардов лет вычислений на классическом компьютере.

Как работает алгоритм RSA

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

Генерация ключей

Процесс начинается с выбора двух больших простых чисел p и q. Вычисляется модуль n = p x q, который определяет длину ключа. Затем вычисляется функция Эйлера phi(n) = (p-1)(q-1). Выбирается открытая экспонента e, взаимно простая с phi(n). Закрытая экспонента d вычисляется как мультипликативное обратное к e по модулю phi(n). По данным NIST SP 800-56B Rev. 2, минимальная длина n должна составлять 2048 бит для обеспечения адекватной защиты.

java
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.SecureRandom;

public class RSAKeyGenerator {
    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
        generator.initialize(2048, new SecureRandom());
        return generator.generateKeyPair();
    }
}

Шифрование и дешифрование

Чтобы зашифровать сообщение m, отправитель преобразует его в целое число, меньшее n, и вычисляет шифротекст c = m^e mod n. Получатель использует закрытый ключ d для восстановления исходного сообщения: m = c^d mod n. Важно отметить, что RSA не предназначен для шифрования больших объёмов данных из-за низкой производительности — максимальный размер сообщения равен длине ключа минус служебные байты (примерно 190 байт для RSA-2048 с OAEP).

java
import javax.crypto.Cipher;
import java.security.PublicKey;
import java.util.Base64;

public class RSAEncryptor {
    public static String encrypt(String data, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encrypted = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encrypted);
    }
}

Цифровая подпись на RSA

RSA также используется для создания цифровых подписей — механизма проверки подлинности и целостности данных. Владелец подписывает хеш сообщения своим закрытым ключом, а любой желающий может проверить подпись открытым ключом. По данным отчёта Sectigo Certificate Transparency (2025), более 85% TLS-сертификатов в интернете используют RSA для цифровой подписи, что делает алгоритм основой доверия веб-коммуникаций.

kotlin
import java.security.Signature

fun signData(data: ByteArray, privateKey: java.security.PrivateKey): ByteArray {
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initSign(privateKey)
    signature.update(data)
    return signature.sign()
}

fun verifySignature(
    data: ByteArray, signedData: ByteArray, publicKey: java.security.PublicKey
): Boolean {
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initVerify(publicKey)
    signature.update(data)
    return signature.verify(signedData)
}

Размеры ключей и уровень безопасности

Длина ключа напрямую влияет на криптостойкость RSA. С ростом вычислительных мощностей минимально допустимый размер ключа регулярно пересматривается международными организациями по стандартизации. Рассмотрим текущие рекомендации от NIST и других регуляторов.

Длина ключаЭквивалент симметричногоСтатус
1024 бит80 битЗапрещён с 2023 года
2048 бит112 битМинимальный стандарт
3072 бит128 битРекомендован для новых систем
4096 бит256 битДля конфиденциальных данных

Влияние на производительность

Увеличение длины ключа RSA существенно сказывается на времени выполнения операций. Генерация ключа длиной 4096 бит занимает примерно в 10 раз больше времени, чем 2048 бит. Операции шифрования и дешифрования с длинным ключом требуют больше вычислительных ресурсов, что критично для мобильных устройств с ограниченным энергопотреблением.

Квантовая угроза

С развитием квантовых вычислений RSA может быть взломан с помощью алгоритма Шора за полиномиальное время. Этот алгоритм, предложенный Питером Шором в 1994 году, позволяет факторизовать большие числа за O((log n)^3) операций. По данным IBM Quantum Roadmap (2025), практический взлом RSA-2048 ожидается не ранее 2035 года, однако NIST уже рекомендует постепенный переход на постквантовые алгоритмы CRYSTALS-Kyber и CRYSTALS-Dilithium.

Применение RSA в мобильной разработке

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

Android Keystore

Платформа Android предоставляет Android Keystore — системное хранилище криптографических ключей, защищённое аппаратным уровнем Trusted Execution Environment. Ключи RSA, сгенерированные в KeyStore, не могут быть извлечены из устройства даже при компрометации приложения. Это обеспечивает защиту от широкого класса атак, включая malware с root-доступом.

kotlin
import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import java.security.KeyPairGenerator

fun generateKeyInAndroidKeystore() {
    val generator = KeyPairGenerator.getInstance(
        KeyProperties.KEY_ALGORITHM_RSA,
        "AndroidKeyStore"
    )
    val spec = KeyGenParameterSpec.Builder(
        "rsa_key_pair",
        KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
    )
        .setKeySize(2048)
        .setBlockModes(KeyProperties.BLOCK_MODE_ECB)
        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
        .build()
    generator.initialize(spec)
    val keyPair = generator.generateKeyPair()
}

iOS Security Framework

В iOS для работы с RSA используется Security Framework с доступом к Secure Enclave на устройствах с чипом A7 и новее. Secure Enclave — выделенный сопроцессор, изолированный от основного процессора, который выполняет криптографические операции и хранит ключи в аппаратном конклаве. Ключи RSA могут быть сгенерированы как внутри Secure Enclave, так и в программном Keychain с различными уровнями доступа.

Гибридное шифрование на практике

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

Преимущества и ограничения RSA

Как и любой криптографический алгоритм, RSA имеет сильные и слабые стороны, которые необходимо учитывать при проектировании защищённых систем. Объективная оценка помогает выбрать правильный инструмент для конкретной задачи.

Ключевые преимущества

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

Основные ограничения

Главный недостаток RSA — низкая производительность по сравнению с симметричными алгоритмами. Дешифрование RSA-2048 на современном мобильном процессоре занимает примерно 5-15 миллисекунд, в то время как AES-256 обрабатывает гигабайты данных за то же время. Также RSA уязвим к квантовым атакам через алгоритм Шора, что ограничивает его применение в системах с долгосрочным сроком защиты данных.

Рекомендации по использованию

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

Часто задаваемые вопросы

В чём разница между RSA и AES?

RSA — асимметричный алгоритм с парой ключей, используемый для шифрования малых объёмов данных и цифровых подписей. AES — симметричный алгоритм с одним общим ключом, работающий в 100-1000 раз быстрее RSA. В современных системах они комбинируются: RSA защищает передачу сессионного ключа AES, а AES шифрует основной трафик.

Какой размер ключа RSA считается безопасным сегодня?

Минимальным безопасным размером с 2023 года является RSA-2048 согласно NIST SP 800-131A Rev. 2. Ключи 1024 бит официально запрещены для государственных систем США. Для новых проектов рекомендуется 3072 бит, что обеспечивает запас безопасности и эквивалентную стойкость 128-битному симметричному шифрованию.

Можно ли использовать RSA в мобильных приложениях?

Да, RSA широко применяется в мобильных приложениях. Android предоставляет Android KeyStore для аппаратной генерации и защищённого хранения ключей RSA. iOS — Security Framework с поддержкой Secure Enclave. Для шифрования больших данных рекомендуется гибридная схема RSA + AES, где RSA шифрует только сессионный ключ.

Можно ли взломать RSA-2048?

На классических компьютерах взлом RSA-2048 практически невозможен — по современным оценкам для этого потребуется более 300 миллиардов лет непрерывных вычислений. Однако квантовый компьютер с достаточным числом кубитов сможет взломать RSA-2048 за несколько минут с помощью алгоритма Шора. По оценкам IBM, такой компьютер появится не ранее 2035 года.

Какие альтернативы RSA существуют?

Среди асимметричных алгоритмов популярны ECC (Elliptic Curve Cryptography), обеспечивающий эквивалентную безопасность при меньшей длине ключа — 256-битный ECC эквивалентен RSA-3072. Для постквантовой эпохи NIST выбрал CRYSTALS-Kyber для шифрования и CRYSTALS-Dilithium для цифровых подписей в 2024 году.

Итоги

  • RSA — асимметричный алгоритм шифрования на основе сложности факторизации больших чисел.
  • Пара ключей — открытый для шифрования и закрытый для дешифрования, решает проблему распределения ключей.
  • Размер 2048 бит является минимальным стандартом безопасности с 2023 года.
  • Производительность RSA на 2-3 порядка ниже симметричных шифров, поэтому используется в гибридных схемах.
  • Цифровые подписи на RSA применяются в 85% TLS-сертификатов интернета.
  • Мобильные платформы Android и iOS предоставляют встроенные API для работы с RSA.
  • Постквантовая миграция — до 2035 года RSA останется основным стандартом, затем начнётся переход на новые алгоритмы.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также