Шифрование базы данных - PullRequest
3 голосов
/ 06 июля 2010

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

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

Может ли кто-нибудь предложить алгоритм (с примером кода, если таковой имеется) для шифрования полей? Я в основном использую PHP и MySQL.

Ответы [ 3 ]

4 голосов
/ 06 июля 2010

Я бы не стал шифровать поля вообще, так как это будет непросто: -)

Вместо этого я бы переместил конфиденциальные данные в отдельную таблицу и использовал бы функции безопасностиСама СУБД защищает данные, в то же время предоставляя доступ к нечувствительным данным.

Другими словами, две таблицы (user и user_sensitive) связаны между собой столбцом userID.Пусть кто-нибудь просматривает таблицу user по своему сердцу, но доступ (из любого сорта) к user_sensitive ограничен телами типа администратора).

И, если моя СУБД нене предоставляю такие возможности (я не знаю, поддерживает ли MySQL), я бы перешел на СУБД, которая это сделала.

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

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

3 голосов
/ 06 июля 2010

Я бы заглянул в «транскулентные базы данных» - есть и печатные книги по этой теме, и некоторые онлайн-ресурсы.

Существуют варианты этого метода, но основная идея заключается в следующем:

  1. шифровать только конфиденциальные поля
  2. шифровать ключом только из данных, которые знает только пользователь (например, пара логин / пароль)

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

2 голосов
/ 06 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...