الگوریتم RSA: پایه‌ای ترین سیستم رمزنگاری نامتقارن 🔐

الگوریتم RSA: پایه‌ای ترین سیستم رمزنگاری نامتقارن 🔐

الگوریتم RSA (مخفف Rivest-Shamir-Adleman) یک سیستم رمزنگاری کلید عمومی است که در سال ۱۹۷۷ توسط سه دانشمند MIT اختراع شد. این الگوریتم به عنوان اساسی‌ترین روش رمزنگاری در اینترنت شناخته می‌شود و در پروتکل‌های SSL/TLS، SSH، PGP و... استفاده می‌شود.

✅ کاربردهای RSA

  • امنیت ارتباطات (وب، ایمیل، پیام‌رسانی)

  • امضای دیجیتال

  • رمزگذاری فایل‌ها

  • بلاکچین و ارزهای دیجیتال


⚙️ نحوه عملکرد RSA: از تئوری تا پیاده‌سازی

1. مراحل تولید کلیدها


import random
import math

def generate_keys():
    # انتخاب دو عدد اول بزرگ
    p = generate_large_prime()
    q = generate_large_prime()
    
    n = p * q
    phi = (p-1)*(q-1)
    
    # انتخاب e (عدد تصادفی نسبتاً اول با phi)
    e = random.randrange(1, phi)
    while math.gcd(e, phi) != 1:
        e = random.randrange(1, phi)
    
    # محاسبه d (معکوس ضربی e تحت mod phi)
    d = pow(e, -1, phi)
    
    return ((e, n), (d, n))  # (کلید عمومی, کلید خصوصی)

2. رمزگذاری و رمزگشایی

عملیات فرمول مثال
رمزگذاری c = m^e mod n encrypt(123) → 456
رمزگشایی m = c^d mod n decrypt(456) → 123

🔢 مثال عددی (با اعداد کوچک برای درک)

  1. انتخاب اعداد اول:

    • p = 61

    • q = 53

  2. محاسبه n و φ(n):

    • n = 61 × 53 = 3233

    • φ(n) = (61-1)×(53-1) = 3120

  3. انتخاب کلید عمومی (e):

    • e = 17 (عدد تصادفی نسبتاً اول با 3120)

  4. محاسبه کلید خصوصی (d):

    • d = 2753 (چون 17 × 2753 ≡ 1 mod 3120)


🔐 چرا RSA امن است؟

  • مشکل بودن تجزیه n به p و q: برای n=3233 ساده است، اما اگر n یک عدد ۱۰۲۴ بیتی باشد، حتی با ابررایانه‌ها هم هزاران سال زمان نیاز است.

  • حتی با دانستن e و n، محاسبه d بدون دانستن p و q غیرممکن است.


💻 پیاده‌سازی در پایتون


from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# تولید کلید
key = RSA.generate(2048)  # 2048-bit key

# ذخیره کلیدها
with open("private.pem", "wb") as f:
    f.write(key.export_key())
with open("public.pem", "wb") as f:
    f.write(key.publickey().export_key())

# رمزگذاری
message = b"Secret Message"
cipher = PKCS1_OAEP.new(key.publickey())
ciphertext = cipher.encrypt(message)

# رمزگشایی
cipher = PKCS1_OAEP.new(key)
plaintext = cipher.decrypt(ciphertext)
print(plaintext.decode())  # "Secret Message"


⚠️ محدودیت‌ها و حملات بالقوه

  • حملات زمان‌بندی: اندازه‌گیری زمان عملیات برای حدس کلید

  • حمله با کامپیوتر کوانتومی: الگوریتم Shor می‌تواند RSA را بشکند (هنوز عملی نشده)

  • استفاده از کلیدهای کوتاه: کلیدهای ۱۰۲۴ بیتی امروزه ناامن هستند (حداقل ۲۰۴۸ بیت توصیه می‌شود)


📊 مقایسه RSA با الگوریتم‌های دیگر

الگوریتم نوع سرعت امنیت
RSA کلید عمومی متوسط مبتنی بر تجزیه اعداد
ECC کلید عمومی سریع مبتنی بر منحنی‌های بیضوی
AES متقارن بسیار سریع مبتنی بر جایگشت و جایگزینی

🔮 آینده RSA

  • جایگزینی تدریجی با ECC (به دلیل کارایی بهتر)

  • مقاوم‌سازی در برابر کامپیوترهای کوانتومی با RSA-PSS

  • استانداردهای جدید مانند CRYSTALS-Kyber


📚 منابع پیشنهادی

  1. مقاله اصلی RSA (1978)

  2. NIST Guidelines for RSA

  3. OWASP Cheat Sheet

سوال: آیا فکر می‌کنید RSA در عصر کامپیوترهای کوانتومی زنده بماند؟ نظرات خود را با ما به اشتراک بگذارید!

Avatar

نویسنده

سیدهادی موسوی

تعداد لایک‌ها: 2

Tags: #علمی #برنامه_نویسی #مقاله #امنیت

ارسال نظر

نظرات