🔐 Современные алгоритмы шифрования: обзор и примеры на Python

Шифрование — основа информационной безопасности. От мессенджеров и банковских систем до VPN — всё держится на надёжных алгоритмах шифрования.
Сегодня используются десятки алгоритмов, но среди них выделяются несколько актуальных, проверенных и широко применяемых. Давайте разберём их простыми словами.
1️⃣ AES (Advanced Encryption Standard)
AES — это алгоритм симметричного шифрования. Это значит, что для шифрования и расшифровки используется один и тот же секретный ключ.
Представьте, что вы закрываете сундук ключом: тот, кто захочет открыть сундук, должен иметь такой же ключ. Если ключ украдут — сундук можно открыть!
- Данные разбиваются на блоки по 128 бит (16 байт).
- Поддерживает ключи длиной 128, 192 или 256 бит (чем длиннее, тем безопаснее).
- Для защиты данных обрабатывает их через несколько раундов замены и перестановки данных (как перемешивание кубика Рубика).
💡 Где используется?
- HTTPS (безопасные сайты)
- VPN (защита соединения)
- ZIP-архивы
- WhatsApp, Signal
🐍 Пример на Python (PyCryptodome):
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
# Генерация случайного ключа (16 байт = 128 бит)
key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_CBC)
# Сообщение для шифрования
data = b"Secret message"
# Данные должны быть кратны 16 байтам, добавляем padding
padded = pad(data, AES.block_size)
# Шифруем
encrypted = cipher.encrypt(padded)
print("Зашифрованное сообщение:", encrypted)
# Для расшифровки нужен IV (инициализационный вектор)
iv = cipher.iv
cipher_dec = AES.new(key, AES.MODE_CBC, iv)
decrypted = unpad(cipher_dec.decrypt(encrypted), AES.block_size)
print("Расшифрованное сообщение:", decrypted.decode())
👉 Важно: AES быстро работает и хорошо защищает данные, если ключ хранится в секрете.
2️⃣ RSA (Rivest–Shamir–Adleman)
RSA — это алгоритм асимметричного шифрования. У вас есть два ключа:
- Открытый ключ (можно передавать другим)
- Закрытый ключ (храните только у себя)
Любой может зашифровать сообщение вашим открытым ключом, но расшифровать может только владелец закрытого ключа.
Представьте, что ваш замок можно закрыть всем желающим, но открыть только специальным личным ключом.
- Используется для безопасной передачи ключей и цифровых подписей.
- Медленнее AES, поэтому обычно шифруют только маленькие данные или ключи.
💡 Где используется?
- TLS/SSL (защищённые сайты)
- Электронные подписи
- PGP/GPG (шифрование почты)
🐍 Пример на Python (cryptography):
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes
# Генерация пары ключей (закрытый + открытый)
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()
message = b"Secret message"
# Шифрование открытым ключом
ciphertext = public_key.encrypt(
message,
padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)
)
print("Зашифрованное сообщение:", ciphertext)
# Расшифровка закрытым ключом
plaintext = private_key.decrypt(
ciphertext,
padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)
)
print("Расшифрованное сообщение:", plaintext.decode())
👉 Важно: RSA подходит не для больших файлов, а для шифрования ключей или проверок подлинности.
3️⃣ ChaCha20 (с Poly1305)
ChaCha20-Poly1305 — это быстрый потоковый алгоритм шифрования, который часто используют вместо AES на смартфонах (он быстрее и энергосберегающий).
- Использует ключ длиной 256 бит.
- Добавляет Poly1305 для аутентификации данных (проверка, что сообщение не подменили).
Можно представить, что данные проходят через потоковую мешалку, а в конце прикладывается печать целостности (Poly1305), чтобы убедиться, что данные не подменили.
💡 Где используется?
- TLS 1.3
- WhatsApp, Google Chrome
- OpenSSH
🐍 Пример на Python (cryptography):
from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305
import os
key = ChaCha20Poly1305.generate_key()
nonce = os.urandom(12)
chacha = ChaCha20Poly1305(key)
data = b"Secret message"
# Шифруем
encrypted = chacha.encrypt(nonce, data, None)
print("Зашифрованное сообщение:", encrypted)
# Дешифруем
decrypted = chacha.decrypt(nonce, encrypted, None)
print("Расшифрованное сообщение:", decrypted.decode())
👉 Важно: ChaCha20 удобен для мобильных устройств, защищает не только конфиденциальность, но и целостность данных.
💡 DES (Data Encryption Standard)
DES — симметричный алгоритм шифрования, разработанный в 1970-х. Он использует один и тот же ключ для шифрования и дешифрования, поэтому ключ нужно хранить в секрете.
-
Длина ключа: 56 бит
-
Блоки данных: 64 бита
-
Основан на 16 раундах перестановок и подстановок
Хотя DES считается устаревшим из-за своей уязвимости (его можно взломать брутфорсом за считанные часы), он до сих пор используется в учебных целях и в некоторых устаревших системах.
-
Ключ должен быть ровно 8 байт (DES = 64-битный ключ, но 8 бит используются для контроля чётности).
-
Данные должны быть кратны 8 байтам, поэтому часто используется padding (дополнение пустыми байтами).
⚠️ Почему DES больше не рекомендуют?
-
Маленький размер ключа → легко перебрать с помощью современных вычислительных мощностей.
-
Уязвим к атакам (например, differential cryptanalysis).
Сегодня вместо DES чаще используют AES (Advanced Encryption Standard), который безопаснее и быстрее.
🏆 Как выбрать алгоритм?
Задача | Алгоритм |
---|---|
Шифрование файлов | AES |
Безопасная передача ключа | RSA |
Быстрое шифрование в сети | ChaCha20-Poly1305 |
Цифровая подпись | RSA, ECDSA |
✍️ Вывод
- Для хранения данных лучше всего подходит AES.
- Для обмена ключами — RSA (или более современные ECDH/ECIES).
- Для защищённых соединений на мобильных устройствах — ChaCha20-Poly1305.
🔑 Алгоритмы шифрования — это как замки: важно выбрать подходящий для своей задачи, правильно его использовать и не потерять ключи.
Теперь вы знаете, как работают три самых популярных современных алгоритма и как их применить в Python!