RSA — криптосистема с открытым ключом, обеспечивающая шифрование и цифровую подпись на основе вычислительной сложности факторизации больших чисел. По данным NIST Special Publication 800-56B Rev. 2 (2023), RSA с длиной ключа 2048 бит остаётся стандартом безопасности для государственных и коммерческих систем. Алгоритм широко применяется в протоколах TLS, цифровых подписях и шифровании данных в мобильных приложениях.
Главное
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 от генерации ключей до шифрования и расшифровки сообщения. Понимание этих этапов необходимо для корректной реализации алгоритма в мобильных приложениях.
Процесс начинается с выбора двух больших простых чисел 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 бит для обеспечения адекватной защиты.
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).
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 также используется для создания цифровых подписей — механизма проверки подлинности и целостности данных. Владелец подписывает хеш сообщения своим закрытым ключом, а любой желающий может проверить подпись открытым ключом. По данным отчёта Sectigo Certificate Transparency (2025), более 85% TLS-сертификатов в интернете используют RSA для цифровой подписи, что делает алгоритм основой доверия веб-коммуникаций.
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 активно применяется в мобильных приложениях для обеспечения безопасной передачи данных, проверки подлинности серверов и защиты цифровых транзакций. Интеграция осуществляется через стандартные криптографические API обеих основных платформ.
Платформа Android предоставляет Android Keystore — системное хранилище криптографических ключей, защищённое аппаратным уровнем Trusted Execution Environment. Ключи RSA, сгенерированные в KeyStore, не могут быть извлечены из устройства даже при компрометации приложения. Это обеспечивает защиту от широкого класса атак, включая malware с root-доступом.
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 для работы с RSA используется Security Framework с доступом к Secure Enclave на устройствах с чипом A7 и новее. Secure Enclave — выделенный сопроцессор, изолированный от основного процессора, который выполняет криптографические операции и хранит ключи в аппаратном конклаве. Ключи RSA могут быть сгенерированы как внутри Secure Enclave, так и в программном Keychain с различными уровнями доступа.
В реальных мобильных приложениях RSA редко используется для шифрования больших данных напрямую. Стандартная практика — гибридная схема: приложение генерирует сессионный ключ AES, шифрует его открытым ключом RSA сервера и отправляет на сервер. Весь последующий трафик шифруется AES, что в 100-1000 раз быстрее, чем прямая передача данных через RSA.
Как и любой криптографический алгоритм, RSA имеет сильные и слабые стороны, которые необходимо учитывать при проектировании защищённых систем. Объективная оценка помогает выбрать правильный инструмент для конкретной задачи.
Главным достоинством RSA является решение фундаментальной проблемы распределения ключей — открытый ключ можно свободно публиковать без риска компрометации всей системы. Универсальность алгоритма проявляется в поддержке как шифрования, так и цифровой подписи одной парой ключей. Кроме того, RSA имеет обширную экосистему поддержки: библиотеки доступны для всех языков и платформ.
Главный недостаток RSA — низкая производительность по сравнению с симметричными алгоритмами. Дешифрование RSA-2048 на современном мобильном процессоре занимает примерно 5-15 миллисекунд, в то время как AES-256 обрабатывает гигабайты данных за то же время. Также RSA уязвим к квантовым атакам через алгоритм Шора, что ограничивает его применение в системах с долгосрочным сроком защиты данных.
Для мобильных проектов эксперты NIST рекомендуют: использовать RSA только для шифрования ключей и цифровых подписей, выбирать длину ключа не менее 3072 бит для новых проектов, комбинировать RSA с AES в гибридной схеме и отслеживать развитие постквантовых стандартов для плановой миграции в долгосрочной перспективе.
Часто задаваемые вопросы
RSA — асимметричный алгоритм с парой ключей, используемый для шифрования малых объёмов данных и цифровых подписей. AES — симметричный алгоритм с одним общим ключом, работающий в 100-1000 раз быстрее RSA. В современных системах они комбинируются: RSA защищает передачу сессионного ключа AES, а AES шифрует основной трафик.
Минимальным безопасным размером с 2023 года является RSA-2048 согласно NIST SP 800-131A Rev. 2. Ключи 1024 бит официально запрещены для государственных систем США. Для новых проектов рекомендуется 3072 бит, что обеспечивает запас безопасности и эквивалентную стойкость 128-битному симметричному шифрованию.
Да, RSA широко применяется в мобильных приложениях. Android предоставляет Android KeyStore для аппаратной генерации и защищённого хранения ключей RSA. iOS — Security Framework с поддержкой Secure Enclave. Для шифрования больших данных рекомендуется гибридная схема RSA + AES, где RSA шифрует только сессионный ключ.
На классических компьютерах взлом RSA-2048 практически невозможен — по современным оценкам для этого потребуется более 300 миллиардов лет непрерывных вычислений. Однако квантовый компьютер с достаточным числом кубитов сможет взломать RSA-2048 за несколько минут с помощью алгоритма Шора. По оценкам IBM, такой компьютер появится не ранее 2035 года.
Среди асимметричных алгоритмов популярны ECC (Elliptic Curve Cryptography), обеспечивающий эквивалентную безопасность при меньшей длине ключа — 256-битный ECC эквивалентен RSA-3072. Для постквантовой эпохи NIST выбрал CRYSTALS-Kyber для шифрования и CRYSTALS-Dilithium для цифровых подписей в 2024 году.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также