Шифрование базы данных или шифрование на уровне приложения? - PullRequest
9 голосов
/ 23 октября 2010

Когда вам нужно хранить конфиденциальные данные, такие как CC или SSN, вы:

1) Создайте свою собственную процедуру шифрования в приложении, определите секретный ключ где-нибудь в файле конфигурации, а затем вручную зашифруйте / расшифруйте данные, поступающие в базу данных.

2) Перенесите все проблемы в базу данных, используя встроенные возможности БД (я думаю, что большинство поставщиков называют это прозрачным шифрованием базы данных).

Какие компромиссы вы нашли для своего решения? Пишет ли ваша собственная рутина плохо по сравнению с TDE? Поддерживается ли поддержка кода или, наоборот, проблема с блокировкой поставщика БД?

Ответы [ 4 ]

8 голосов
/ 23 октября 2010

Я использовал различные методы шифрования, и я считаю, что шифрование на стороне приложения проще и безопаснее с помощью проверенной процедуры шифрования (т.е. библиотеки .NET).

Если вы шифруете базу данных, это означает, что данные отправляются в базу данных и из нее в незашифрованном виде. Это потенциально позволяет отслеживать / вмешиваться между приложением и процедурами шифрования в базе данных. Даже если вы храните ключ на стороне приложения, он все равно требуется на стороне базы данных для выполнения шифрования. Если база данных взломана, ваши данные подвергаются серьезному риску (просто представьте, что кто-то запускает профилировщик во время работы вашего приложения).

Если вы шифруете / дешифруете в приложении, конфиденциальные данные (включая ключ) никогда не обнаруживаются за пределами сервера приложения. Кто-то должен был бы поставить под угрозу как веб-сервер, так и сервер базы данных, чтобы получить доступ ко всем вашим данным.

Кроме того, я настоятельно рекомендую вам не использовать собственную процедуру шифрования. Скорее всего, вы допустите ошибку, которая снизит общую безопасность вашего решения.

EDIT:

Также хотел бы добавить еще один фактор, который повлияет на ваше решение. Вам нужно запросить эти зашифрованные данные? Если вы шифруете на уровне приложения, вам нужно будет перенести данные в приложение, расшифровать и оттуда работать. Это становится непомерно большим по мере того, как набор данных становится больше - тогда как с помощью шифрования базы данных вы можете фильтровать данные перед их отправкой обратно в приложение.

4 голосов
/ 23 октября 2010

Когда вы шифруете конфиденциальные данные, вы по сути ограничиваете доступ тех, кто имеет доступ к ключу.Затем возникает проблема управления ключами: обеспечение доступа к ключу, необходимому для дешифрования данных, имеют только уполномоченные лица / системы.

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

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

С другой стороны, если вы шифруете вНа уровне приложения вы можете использовать ключ, доступный только администраторам сервера приложений.Это потенциально дает вам больше безопасности, если, например, администраторы сервера баз данных и серверов приложений находятся отдельно (например, члены разных организаций).Администраторы баз данных, у которых нет доступа к ключу сервера приложений, не смогут увидеть данные.

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

2 голосов
/ 23 октября 2010

Я согласен с Майо, , но шифрование в БД может упростить обслуживание всей системы .

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

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

И вы должны быть уверены, что зашифрованные данные будут всегда расшифрованы. Это не очевидно, потому что в программном обеспечении есть ошибки и так далее. Потерянные данные хуже чистых данных ; -)

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

Шифрование в БД защищает только в БД, но вы можете рассмотреть возможность использования какой-либо связи SSL с БД. Я думаю (но я не уверен), TDE реализует этот вид безопасного общения.

Приложение используется от пользователя, недоверенного лица. Вы должны учитывать, что данные в приложении потеряны. Зачем? Если я хочу украсть данные из системы, которая реализует шифрование данных на уровне приложений или на уровне БД, для этого достаточно использовать фотоаппарат! Очень просто!

Вы должны учитывать безопасность системы, но также и функциональность. Чем больше безопасность, тем меньше функциональность. Я надеюсь, что мои соображения будут полезны для вас.

1 голос
/ 02 апреля 2012

Соответствие PCI-DSS не снимает юридическую ответственность ...

В настоящее время есть только два государства, которые предоставляют такое исключение: Вашингтон и Миннесота ...

DBA, продвигающий TDE как решение PCI-DSS, ВНИМАНИЕ!

TDE защищает только данные в состоянии покоя, а не данные в пути или данные в памяти ... Любой, у кого есть права на чтение, может прочитать все данные с помощью любого инструмента ...

IMHO TDE хорош в сочетании с надежным решением для шифрования на уровне приложений ... Как автономное решение, использующее только TDE, это бомба замедленного действия, которую PCI QSA выкупает как PCI-DSS-совместимый с треском провал, чтобы принять к сведению ... Подождите, пока адвокаты не поймут этот фундаментальный недостаток ...

Любой гуру безопасности скажет вам, что уровни безопасности - это лучший подход ....

...