Ответ
Шифрование данных — это процесс преобразования информации (текста, файлов, сетевого трафика) из читаемого формата (открытый текст) в нечитаемый (шифротекст) с использованием криптографического алгоритма и ключа. Цель шифрования — обеспечить конфиденциальность, целостность и аутентификацию данных, защищая их от несанкционированного доступа и изменения.
Для чего используется?
- Конфиденциальность: Защита секретной информации от прочтения посторонними лицами (например, при передаче по сети или хранении).
- Целостность: Обнаружение любых несанкционированных изменений данных.
- Аутентификация: Подтверждение подлинности отправителя или источника данных.
Основные типы шифрования:
-
Симметричное шифрование:
- Использует один и тот же ключ как для шифрования, так и для расшифровки.
- Преимущества: Высокая скорость работы.
- Недостатки: Проблема безопасной передачи ключа между сторонами.
- Примеры алгоритмов: AES (Advanced Encryption Standard), DES (Data Encryption Standard), Triple DES.
-
Асимметричное шифрование (шифрование с открытым ключом):
- Использует пару ключей: публичный ключ (для шифрования, может быть общедоступным) и приватный ключ (для расшифровки, хранится в секрете).
- Преимущества: Решает проблему безопасной передачи ключа, используется для цифровых подписей.
- Недостатки: Значительно медленнее симметричного шифрования.
- Примеры алгоритмов: RSA, ECC (Elliptic Curve Cryptography).
Пример симметричного шифрования с PyCryptodome (AES):
Этот пример демонстрирует, как зашифровать и расшифровать сообщение с использованием алгоритма AES в режиме EAX, который также обеспечивает аутентификацию данных.
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 1. Генерация случайного 128-битного ключа для AES
key = get_random_bytes(16)
print(f"Сгенерированный ключ (bytes): {key.hex()}")
# 2. Исходные данные для шифрования
data = b"Это секретное сообщение, которое нужно защитить."
print(f"Исходные данные: {data.decode()}")
# 3. Создание объекта шифра AES в режиме EAX
cipher = AES.new(key, AES.MODE_EAX)
# 4. Шифрование данных и генерация тега аутентификации
# nonce (число, используемое один раз) генерируется автоматически и нужен для расшифровки
ciphertext, tag = cipher.encrypt_and_digest(data)
print(f"Зашифрованные данные (ciphertext): {ciphertext.hex()}")
print(f"Тег аутентификации (tag): {tag.hex()}")
print(f"Nonce: {cipher.nonce.hex()}")
# 5. Расшифровка данных (требует тот же ключ и nonce)
# Создаем новый объект шифра, передавая тот же ключ и nonce
decipher = AES.new(key, AES.MODE_EAX, cipher.nonce)
# 6. Расшифровка и проверка тега аутентификации
# Если данные были изменены или ключ неверный, decrypt_and_verify вызовет исключение ValueError
try:
plaintext = decipher.decrypt_and_verify(ciphertext, tag)
print(f"Расшифрованные данные: {plaintext.decode()}")
except ValueError:
print("Ошибка: Неверный ключ или данные были изменены!")