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, не могат да бъдат извлечени от устройството дори при компрометиране на приложението. Това осигурява защита срещу широк клас атаки, включително зловреден софтуер с 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 г. според NIST SP 800-131A Rev. 2 е RSA-2048. Ключовете от 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 избра през 2024 г. CRYSTALS-Kyber за криптиране и CRYSTALS-Dilithium за цифрови подписи.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също