Я не уверен, что использование встроенного шифрования MySQL будет лучшим решением вашей проблемы.
Пакет PHP M_CRYPT считается довольно хорошим и дает вам гибкость в выборе алгоритма, который лучше всего подходит для ваших нужд.
Хранение вашего ключа на другом сервере имеет одно большое преимущество: ключ находится не на том же компьютере, что и зашифрованные данные *) . Поэтому, пока злоумышленник не имеет достаточного контроля над взломанным компьютером, он не может получить ключ.
Если злоумышленник получит полный контроль над машиной, на которой хранятся данные, он, скорее всего, сможет запросить ключ у веб-службы.
Однако передача ключа с одного устройства на другое открывает совершенно новую область, которую необходимо защитить. Возможно, задействует больше ключей и больше уровней шифрования, тем самым увеличивая вероятность ошибок.
*) Другой вариант - вводить пароль при запуске веб-сервера и хранить его только в памяти.
Возможное решение
Если вы видели решение, которое использовало следующий метод для шифрования файлов для пользователей с веб-доступом (я не уверен в вашей среде, но это может быть полезно):
- После создания пользователя длинный случайный ключ назначается новому пользователю.
- Этот случайный ключ хранится в зашифрованном столбце в пользовательской записи.
( только этот столбец зашифрован, чтобы не влиять на производительность остальной части записи! )
- Шифрование столбца с произвольным ключом выполняется с помощью 1 мастер-пароля, хранящегося в файле или в памяти.
( Лучше всего ввести пароль при запуске веб-сервера и сохранить его только в памяти. )
( Другой подход заключается в том, чтобы позволить пользователю ввести пароль и использовать его для шифрования / дешифрования столбца с произвольным ключом, но я не уверен, повысит ли это или уменьшит безопасность )
- Каждый документ, который должен быть зашифрован, шифруется случайным ключом для этого пользователя и затем сохраняется на диске.
- Документы хранятся с минимальными правами доступа в файловой системе.
Преимущества этого подхода:
1. Случайный ключ зашифрован в базе данных. Таким образом, у вас все еще есть дополнительная безопасность сервера базы данных в сочетании с зашифрованным столбцом.
2. Документы хранятся с разными ключами. Если злоумышленник завладеет ключом, скомпрометирована только часть документов.
Тем не менее:
Если злоумышленник завладеет главным паролем и получит доступ на чтение к таблице пользователей, вся система снова будет взломана.