7.07. Шифрование
Шифрование
Шифрование (Encryption) - это процесс преобразования данных в защищённый формат, чтобы только авторизованные пользователи могли их прочитать.
Шифрование бывает:
- симметричное - используется один ключ для шифрования и расшифровки;
- асимметричное - используются два ключа - публичный и приватный.
Это нужно для защиты данных при передаче.
Шифрование использует безопасные алгоритмы AES-256, ChaCha20-Poly1305.
Хэширование (Hashing) - это одностороннее преобразование данных в уникальную строку фиксированной длины. Не может быть обратным.
К примеру, если мы преобразуем «HELLO» по алгоритмам:
| Алгоритм | Результат |
|---|---|
| MD5 | 5d41402abc4b2a76b9719d911017c592 |
| SHA-1 | a57f5f3a14be99a5ac86b1cb6ea9673b |
| SHA-256 | 2cf24dba5fb0a30e26e83b2ac5b9e2901b161e5c1fa7425e73043362938b9826 |
Хэширование использует безопасные алгоритмы SHA-256, SHA-3, Blake2. Захэшированные данные нельзя расшифровать, только сверить хэш. HMAC (Hash-based Message Authentication Code) - это механизм проверки целостности и подлинности сообщения, использующий общий секретный ключ и хэш-функцию. Применяется в API-ключах, JWT и аутентификации сообщений.
HMAC применяет безопасные алгоритмы HMAC-SHA256, HMAC-SHA512.
Шифрование тесно связано с подписями и подлинностью.
Электронная цифровая подпись (ЭЦП) — это криптографический механизм, позволяющий убедиться в подлинности отправителя, неизменности данных и доказать факт подписания (неотказуемость).
Как это работает?
- Создаётся хэш от документа (SHA-256);
- Хэш подписывается приватным ключом отправителя;
- Получатель проверяет подпись с помощью публичного ключа.
Так и происходит подпись документов, удостоверение программ, работа с SSL/TLS сертификатами, а также блокчейн-транзакции.
Подписи используют безопасные алгоритмы RSA-2048+, ECDSA, Ed25519.
Base64 - это кодирование. Кодирование и шифрование - разные вещи, к примеру, Base64 просто представляет бинарные данные в виде текста, но не защищает их. Base64 легко декодируется, не обеспечивает конфиденциальности, и многие часто ошибочно принимают его за шифрование.
Если нужно скрыть данные от других - применяется шифрование. Если нужно проверить подлинность - HMAC. Если нужно подписать документ - цифровую подпись. А если нужно отправить бинарные данные в виде строки через API - Base64.