понедельник, 7 января 2013 г.

17.8. Опции шифрования


PostgreSQL предоставляет возможность шифрования на разных уровнях, что позволяет защитить данные от кражи БД с сервера, недобросовестного администратора и небезопасной сети. Шифрование так же может использоваться для обеспечения тайны данных, таких как медицинская информация или финансовые транзакции.

Шифрование хранилища паролей

По умолчанию пароли пользователей БД хранятся как хеши md5, так что администратор не может посмотреть пароль какого-либо пользователя. Если md5 шифрование используется для аутентификации клиентов, то незашифрованный пароль даже временно не будет присутствовать на сервере, так как пароль будет зашифрован ещё до того, как он будет передан по сети.

Шифрование определённых колонок

Модуль pgcrypto позволяет зашифровать определённые поля. Это полезно в случае, когда лишь некоторые ваши данные не должны попасть в чужие руки. Клиент предоставлет ключ для расшифровки, данные дешифруются на сервере и посылаются клиенту.
Дешифрованные данные и ключ для дешифровки находятся на сервере короткое время, необходимое для того, чтобы данные были дешифрованы и посланы клиенту. Только в это время они могут быть перехвачены кем-то с полным доступом к серверу, например, администратором.

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

На Linux шифрование может быть настроено поверх ФС при помощи "loopback device". Таким образом можно зашифровать весь раздел данных при помощи ОС. На FreeBSD эквивалентную функциональность предоставляет GEOM Based Disk Ecryption (gbde). Такую же функциональность поддерживают и многие другие ОС, включая Windows.
Этот механизм не позволяет прочитать данные с диска, если был украден диск или сервер целиком. Такой способ не даёт защиты после того, как ФС уже смонтирована, так как в таком случае появляется доступ к незашифрованным данным. Кроме того, для того, чтобы смонтировать ФС Вам нужно предоставить ОС ключ шифрования, и, иногда, этот ключ хранится на том же хосте, где и монтируется сам диск.

Шифрование паролей передаваемых по сети

Метод аутентификации md5 дважды шифрует пароли на клиенте перед тем, как они будут переданы на сервер. Сперва происходит вычисление md5 хеша на основе имени пользователя, а затем на основе случайной соли, посланной сервером при установлении соединения. Это дважды зашифрованное значение и передаётся по сети серверу. Таким образом предотвращается раскрытие пароля и это не позволяет другому соединению использовать тот же самый зашифрованный пароль для подключения к базе позже.

Шифрование данных передаваемых по сети

SSL соединения шифруют все данные, передаваемые по сети: пароли, запросы и результаты запросов. Файл pg_hba.conf позволяет администратору определить, какие хосты могут использовать нешифрованное соединение (host), а какие требуют шифрованного подключения (hostssl). Кроме того, клиенты сами могут быть настроены на подключение только по SSL. Stunel или SSH так же могут быть использованы для шифрования передаваемых данных.

Аутентификация хоста по SSL

Возможно сделать так, чтобы сервер и хост имели сертификаты друг друга. Для этого потребуется дополнительная настройка на каждой стороне, но зато это обеспечивает надёжную верификаци или идентификацию, чем простые пароли. В таком случае компьютер не сможет притвориться сервером на достаточное время, чтобы получить пароль клиента. Кроме того, это позволяет избавиться от атаки "man in the middle", где атакующий встревает в диалог клиента и сервера и читает передаваемые по сети между ними данные.

Шифрование на стороне клиента

Если системному администратору на сервере нельзя доверять, то клиент должен шифровать свои данные. Таким образом не шифрованные данные даже не будут попадать на сервер БД. Данные шифруются на клиенте, хранятся в БД, передаются зашифрованными клиенту и он уже расшифровывает их обратно перед использованием

1 комментарий: