17.8. Опции шифрования#
17.8. Опции шифрования #
Tantor SE-1C предлагает шифрование на нескольких уровнях и обеспечивает гибкость в защите данных от разглашения в случае кражи сервера базы данных, недобросовестных администраторов и небезопасных сетей. Шифрование также может потребоваться для обеспечения безопасности чувствительных данных, таких как медицинские записи или финансовые транзакции.
- Password Encryption
Все пароли пользователей базы данных хранятся в виде хешей (определяется настройкой password_encryption), поэтому администратор не может определить фактический пароль, назначенный пользователю. Если для аутентификации клиента используется шифрование SCRAM или MD5, незашифрованный пароль никогда не присутствует на сервере, поскольку клиент шифрует его перед отправкой по сети. Рекомендуется использовать SCRAM, поскольку он является интернет-стандартом и более безопасен, чем специфичный для PostgreSQL протокол аутентификации MD5.
- Encryption For Specific Columns
Модуль pgcrypto позволяет шифровать определенные поля. Это полезно, если только некоторые данные являются конфиденциальными. Клиент предоставляет ключ для расшифровки, и данные расшифровываются на сервере, а затем отправляются клиенту.
Расшифрованные данные и ключ расшифровки находятся на сервере на короткое время во время расшифровки и передачи между клиентом и сервером. Это создает кратковременный момент, когда данные и ключи могут быть перехвачены кем-то, имеющим полный доступ к серверу базы данных, таким как системный администратор.
- Data Partition Encryption
Шифрование хранения может выполняться на уровне файловой системы или на уровне блока. Варианты шифрования файловой системы в Linux включают eCryptfs и EncFS, в то время как в FreeBSD используется PEFS. Варианты шифрования на уровне блока или полного диска включают dm-crypt + LUKS в Linux и модули GEOM geli и gbde в FreeBSD. Многие другие операционные системы поддерживают эту функциональность, включая Windows.
Этот механизм предотвращает чтение нешифрованных данных с дисков, если диски или весь компьютер были украдены. Однако это не защищает от атак во время монтирования файловой системы, потому что при монтировании операционная система предоставляет нешифрованный вид данных. Однако, для монтирования файловой системы необходимо каким-то образом передать операционной системе ключ шифрования, и иногда ключ хранится где-то на хосте, который монтирует диск.
- Encrypting Data Across A Network
SSL-соединения шифруют все данные, отправляемые по сети: пароль, запросы и возвращаемые данные. Файл
pg_hba.conf
позволяет администраторам указывать, какие хосты могут использовать незашифрованные соединения (host
), а какие требуют SSL-зашифрованных соединений (hostssl
). Кроме того, клиенты могут указать, что они подключаются к серверам только через SSL.Все данные, отправляемые по сети, включая запросы и возвращаемые данные, шифруются при использовании GSSAPI-зашифрованных соединений. (Пароль не отправляется по сети). Файл
pg_hba.conf
позволяет администраторам указывать, какие хосты могут использовать незашифрованные соединения (host
), а какие требуют GSSAPI-зашифрованных соединений (hostgssenc
). Кроме того, клиенты могут указать, что они могут подключаться только к серверам через GSSAPI-зашифрованные соединения (gssencmode=require
).Stunnel или SSH также могут использоваться для шифрования передач.
- SSL Host Authentication
Возможно, чтобы клиент и сервер предоставляли друг другу SSL-сертификаты. Это требует дополнительной конфигурации с обеих сторон, но такой подход обеспечивает более надежную проверку подлинности, чем простое использование паролей. Это предотвращает ситуацию, когда компьютер притворяется сервером только на время чтения пароля, отправленного клиентом. Это также помогает предотвратить атаки "человек посередине", когда компьютер между клиентом и сервером притворяется сервером и читает и передает все данные между клиентом и сервером.
- Client-Side Encryption
Если системному администратору сервера нельзя доверять, необходимо зашифровать данные на клиенте, чтобы незашифрованные данные никогда не появлялись на сервере базы данных. Данные шифруются на клиенте перед отправкой на сервер, и результаты запросов к базе данных должны быть расшифрованы на клиенте перед использованием.