#php #mysql #security #encryption #architecture
#php #mysql #Безопасность #шифрование #архитектура
Вопрос:
Необходимо обратиться за советом по архитектуре!
В настоящее время конфиденциальные данные хранятся в базе данных (скажем, SSN пользователя) в виде обычного текста
Он должен быть зашифрован.
Подход 1: Шифрование в коде
- Некоторая встроенная библиотека шифрования может быть использована для шифрования (с использованием ключа, хранящегося в хранилище).
- Зашифрованный текст может быть сохранен в столбце DB
- Для извлечения ВЫБЕРИТЕ в этой таблице DB из DAO, используйте функцию Decrypt в code, верните расшифрованный ответ
Подход 2: Зашифруйте столбец базы данных
- примените триггер к столбцу, который зашифрует вставленные данные для этого столбца
- Для извлечения база данных предлагает методы дешифрования, которые можно использовать при ВЫБОРЕ запроса на уровне DAO
Параметры для определения:
- Производительность
- Качество кода (выглядит более чистым при подходе 2)
- Надежность шифрования (обеспечат ли оба подхода одинаковую надежность шифрования)
В настоящее время код приложения находится на php Laravel, а DB — на MySQL
Планируемый алгоритм шифрования: AES 256 CBC
Комментарии:
1. Одним из аспектов, который вы должны учитывать, является управление ключами и то, как эти параметры решают его. Как правило, некоторые правила требуют, чтобы приложение поворачивало клавишу каждые 12 месяцев. Могут ли оба этих варианта без проблем обрабатывать поворот клавиш? Если у вас нет времени простоя, живое приложение должно иметь возможность обрабатывать две клавиши одновременно во время поворота клавиши.
2. Поворот ключа @TheImpaler не требуется. Мы планируем, даже в случае сомнений в ключе secet, повторно зашифровать данные с помощью нового ключа!
3. Насколько уязвима машина, на которой хранится ключ дешифрования? И многие другие места, которые нуждаются в подключении. Вам действительно следует нанять эксперта по безопасности и не ожидать полного ответа от этого «бесплатного» сервиса.
4. Ключ @RickJames останется на собственном облачном сервере Hashicorp.
5. @RickJames Мне было больше любопытно, какой подход лучше? шифрование в коде .. или пусть DB принимает cae из enc-decyption. Подход БД представляется более простым для подключения к существующей системе, так как это приведет к минимальным изменениям кода