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

Резюме

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

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

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също