Я пишу php-приложение, которое принимает конфиденциальные данные клиента, поэтому мне нужно зашифровать его, прежде чем хранить его в базе данных mysql. Я собираюсь использовать встроенную функциональность AES для mysql для шифрования на уровне столбца.
Я хочу избежать хранения ключа шифрования на сервере, и поэтому я собираюсь предоставить веб-страницу для входа администратора и ввести ключ шифрования. Я хочу сохранить этот ключ в памяти во время работы приложения, но никогда не навсегда на диск.
Каков наилучший способ сделать это?
Могу ли я изменить массив $ _SERVER для хранения информации между запросами? Можно ли каким-то образом сохранить ключ с apache? Может быть, общая память?
Вместо того, чтобы полагаться на MySQL AES для шифрования, почему бы не использовать собственную схему шифрования opensl PHP (расширение PECL). Для этого требуется закрытый и открытый ключ, общедоступный для шифрования, закрытый для расшифровки и ключи могут храниться в разных местах.
Я закончил тем, что сохранил ключ шифрования в таблице в памяти. Весь доступ к базе данных осуществляется через набор хранимых процедур; Хранимые процедуры включают в себя возможность управления ключами (например, вставить ключ в таблицу памяти, изменить ключи, проверить, был ли введен ключ и т. Д.), А также сохранять / извлекать данные приложения.
При таком дизайне учетные данные базы данных, оставленные на сервере приложений, имеют авторизацию для запроса через набор определенных процедур и не имеют возможности напрямую считывать ключ шифрования.
Мне понравился этот подход, потому что:
Одна из возможностей – создать RAM-диск . И сохраните ключ там.
Самое безопасное место для хранения любого ключа шифрования находится на сервере NOT в базе данных и убедитесь, что он принадлежит root и не читается другими.