Где я должен хранить ключ шифрования для php? - PullRequest
5 голосов
/ 21 июля 2011

Я пишу php-приложение, которое принимает конфиденциальные данные клиентов, поэтому мне нужно зашифровать их перед сохранением в базе данных mysql. Я собираюсь использовать встроенную в MySQL функциональность AES для шифрования на уровне столбцов.

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

Каков наилучший способ сделать это?

Могу ли я изменить массив $ _SERVER для хранения информации между запросами? Можно ли каким-то образом хранить ключ в apache? Может быть общая память?

Ответы [ 4 ]

6 голосов
/ 21 июля 2011

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

4 голосов
/ 01 сентября 2011

Я закончил хранить ключ шифрования в таблице в памяти.Весь доступ к базе данных осуществляется через набор хранимых процедур;Хранимые процедуры включают в себя возможность управления ключами (т. Е. Вставлять ключ в таблицу памяти, изменять ключи, проверять, был ли введен ключ и т. Д.), А также сохранять / извлекать данные приложения.

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

Мне понравился этот подход, потому что:

  1. Ключ не хранится в файловой системе - это предотвращает проблемы с утилизацией оборудования в конце срока службы и не позволяет любопытным глазам системных администраторов
  2. Код приложения не может получить доступ кключ (кроме как при его вводе), поэтому единственное место, где он когда-либо будет находиться, находится внутри процесса базы данных.
  3. Вся логика шифрования / дешифрования встроена в запросы SQL, поэтому не нужно беспокоитьсяо том, что код приложения делает это правильно - приятно для обслуживания.
3 голосов
/ 21 июля 2011

Одна из возможностей - создать RAM-диск и хранить там ключ.

2 голосов
/ 21 июля 2011

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

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