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 منتشر شد و بر اساس کارهای قبلی ویتفیلد دیفی و مارتین هلمن در زمینه رمزنگاری با کلید عمومی بود. مؤسسه فناوری ماساچوست در سال 1983 حق ثبت اختراع RSA را دریافت کرد که تا سال 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 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 KeyStore را برای تولید سخت‌افزاری و ذخیره امن کلیدهای RSA فراهم می‌کند. iOS — Security Framework با پشتیبانی Secure Enclave. برای رمزنگاری داده‌های بزرگ، طرح ترکیبی RSA + AES توصیه می‌شود که در آن RSA فقط کلید جلسه را رمزنگاری می‌کند.

آیا می‌توان RSA-2048 را شکست؟

در رایانه‌های کلاسیک، شکستن RSA-2048 عملاً غیرممکن است — طبق برآوردهای فعلی به بیش از 300 میلیارد سال محاسبه مداوم نیاز دارد. با این حال، یک رایانه کوانتومی با تعداد کافی کیوبیت می‌تواند RSA-2048 را در چند دقیقه با استفاده از الگوریتم شور بشکند. طبق برآورد IBM، چنین رایانه‌ای پیش از 2035 ظاهر نخواهد شد.

چه جایگزین‌هایی برای RSA وجود دارد؟

در میان الگوریتم‌های نامتقارن، ECC (Elliptic Curve Cryptography) محبوب است که امنیت معادل را با طول کلید کمتر فراهم می‌کند — ECC 256 بیتی معادل RSA-3072 است. برای عصر پساکوانتومی، NIST در سال 2024 CRYSTALS-Kyber را برای رمزنگاری و CRYSTALS-Dilithium را برای امضاهای دیجیتال انتخاب کرد.

خلاصه

  • RSA — الگوریتم رمزنگاری نامتقارن مبتنی بر دشواری فاکتورگیری اعداد بزرگ.
  • جفت کلید — عمومی برای رمزنگاری و خصوصی برای رمزگشایی، مشکل توزیع کلید را حل می‌کند.
  • اندازه 2048 بیت حداقل استاندارد امنیت از سال 2023 است.
  • عملکرد RSA 2–3 مرتبه پایین‌تر از رمزهای متقارن است، بنابراین در طرح‌های ترکیبی استفاده می‌شود.
  • امضاهای دیجیتال با RSA در 85% گواهی‌های TLS اینترنت استفاده می‌شوند.
  • پلتفرم‌های موبایل اندروید و iOS APIهای داخلی برای کار با RSA فراهم می‌کنند.
  • مهاجرت پساکوانتومی — تا سال 2035 RSA استاندارد اصلی باقی می‌ماند، سپس انتقال به الگوریتم‌های جدید آغاز می‌شود.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید