Ответ
Асимметричное шифрование (или криптография с открытым ключом) основано на использовании математически связанной пары ключей: открытого (public) и закрытого (private).
- Открытый ключ свободно распространяется и используется для шифрования данных и проверки цифровой подписи.
- Закрытый ключ хранится в секрете и используется для расшифровки данных и создания цифровой подписи.
Ключевой принцип заключается в том, что данные, зашифрованные одним ключом, могут быть расшифрованы только вторым ключом из пары. Безопасность системы опирается на односторонние функции — математические операции, которые легко выполнить в одном направлении, но вычислительно сложно обратить без знания секрета (закрытого ключа).
В основе популярных алгоритмов лежат следующие математические проблемы:
- Проблема факторизации целых чисел: Сложность разложения очень больших чисел на простые множители. На этом основан алгоритм RSA.
- Проблема дискретного логарифмирования: Сложность нахождения показателя степени в уравнении
g^x ≡ h (mod p)
. Используется в Diffie-Hellman и DSA. - Вычисления на эллиптических кривых: Более современные и эффективные алгоритмы (ECC), обеспечивающие тот же уровень безопасности с ключами меньшей длины.
Пример работы RSA на Python:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 1. Генерация пары ключей (2048 бит)
key = RSA.generate(2048)
private_key = key
public_key = key.publickey()
message = b'This is a secret message.'
# 2. Шифрование данных с помощью открытого ключа
cipher_rsa = PKCS1_OAEP.new(public_key)
encrypted_message = cipher_rsa.encrypt(message)
# 3. Расшифровка данных с помощью закрытого ключа
decipher_rsa = PKCS1_OAEP.new(private_key)
decrypted_message = decipher_rsa.decrypt(encrypted_message)
assert message == decrypted_message
print(f"Decrypted: {decrypted_message.decode()}")