Шифрование RSA — это криптосистема с открытым ключом, что означает, что она использует два разных ключа: открытый ключ для шифрования и закрытый ключ для дешифрования.

Эти ключи математически связаны. Работа шифрования RSA описывается следующим образом:

Генерация ключей

  • Выбираются два больших простых числа p и q.
  • Вычислите n = p * q и φ(n) = (p-1) (q-1), где φ(n) — функция Эйлера.
  • Выберите целое число e такое, что 1 ‹ e ‹ φ(n) и gcd(e, φ(n)) = 1. Это e станет общедоступным показателем.
  • Вычислите модульную мультипликативную обратную величину e по модулю φ(n), чтобы получить d, частный показатель.

Шифрование

  • Преобразуйте открытое текстовое сообщение в числовое значение, M.
  • Вычислите зашифрованный текст C = M^e mod n.

Расшифровка

  • Для расшифровки используйте закрытый ключ: M = C^d mod n.

Реализация RSA на Python

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization

# Key generation
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
)
public_key = private_key.public_key()

# Serialization to PEM format (for storage)
private_pem = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.NoEncryption()
)
public_pem = public_key.public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
)

# Encryption and decryption
plaintext = b"Hello, RSA!"
ciphertext = public_key.encrypt(plaintext, padding.PKCS1v15())
decrypted = private_key.decrypt(ciphertext, padding.PKCS1v15())

print("Original message:", plaintext)
print("Encrypted message:", ciphertext)
print("Decrypted message:", decrypted)

На простом английском языке

Спасибо, что вы являетесь частью нашего сообщества! Прежде чем уйти: