Шифрование баз данных или шифрование уровня приложения?

StackOverflow https://stackoverflow.com/questions/4002184

Вопрос

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

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

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

Какие компромиссы вы нашли для вашего решения? Писает свою собственную рутину плохо выполнять по сравнению с TDE? Это ремонтопригодность кода или наоборот вендора DB Lock-в проблеме?

Это было полезно?

Решение

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

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

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

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

РЕДАКТИРОВАТЬ:

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

Другие советы

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

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

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

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

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

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

Шифрование к уровню приложений нужны вам управление ключами, фазой аутентификации и авторизации ключей и визуализации данных (в соответствии с написанием Mayo).

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

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

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

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

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

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

Быть совместимым для PCI-DSS не удаляет вашу юридическую ответственность ...

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

Продвижение DBA TDE в качестве решения PCI-DSS остерегайтесь!

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top