🔐 Современные алгоритмы шифрования: обзор и примеры на 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!

+1
0
+1
2
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *