Skip to content

Шифрование данных

Васин Юрий edited this page Feb 5, 2020 · 4 revisions

Методы шифрования нужно выбирать так, чтобы их было легко реализовать на любой платформе с использованием различных языков программирования.

В большинстве языков программирования реализована поддержка OpenSSL.

Для того чтобы получить список доступных методов шифрования можно использовать команду:

openssl ciphers -V 'ALL'

В PHP для этого используется функция - openssl_get_cipher_methods. В Pyhton такой метод не реализован.

Python

Стандартная библиотека hashlib, включает в себя простые и относительно безопасные алгоритмы хеширования, такие как SHA2 (SHA256, SHA384, SHA512).

На данный момент метод шифрования DES признан слабым, но может использоваться в комплексе с другими методами защиты (SSL, TLS).

from Crypto.Cipher import DES

Для его замены чаще всего используют aes-256-ctr, aes-256-gcm и т.д. aes-256-gcm доступен в стороннем модуле - PyCrypto

from Crypto.Cipher import AES

PHP

Mcrypt не используется в последних версиях языка, вместо него используется openssl.

PHP 7.1 поддерживает метод шифрования aes-256-gcm

Проверка целостности данных

Метод aes-256-gcm кроме шифрования поддерживает аутентификацию на уровне данных (authenticated encryption with associated data - AEAD).

Но проводить проверку подлинности и целостности данных рекомендуется даже для методов которые поддерживают аутентификацию.

Для этого после шифрования используйте MAC. Т.е. сначала данные шифруются, а затем берется HMAC-SHA-256 от итогового кода.

При расшифровке сначала проверяется HMAC, используя алгоритм сравнения устойчивый к атакам по времени. Не сравнивайте напрямую полученный и вычисленный хеш, используя операторы сравнения == или ===.

Если хеши HMAC совпадают, можно безопасно производить расшифровку. Если же хеши не совпадают, немедленно вызывайте исключение.