Защитить PII в Интернете База данных приложений, ширина с открытым ключом в паре с закрытым ключом, защищенным собственными паролями пользователя?

Цель:

Я хотел бы позволить пользователям создавать вопросы и собирать информацию от других пользователей в пользовательском веб-приложении (PHP / MySQL в среде для хостинга) и защита собранных данных.

Фон:

Вопросы по умолчанию, которые все пользователи отвечают достаточно, чтобы они не могли быть истолкованы как лично идентифицируемая информация (PII), тем самым ограничивая свою ответственность, чтобы защитить ее, но пользователи, которые создают свои собственные вопросы, вероятно, будут задать для PII, который затем становится ответственностью.

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

Предлагаемое решение:

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

Поскольку пароли пользователей хорошо защищены (хешированы с солью), я думаю о захвате их открытого текста пароля во время аутентификации, шифрование его, и сохраняя его в сеансе PHP, пока пользователь не выходит из системы.

Combo Combo Public / Party будет создан для каждого пользователя с помощью пароля закрытого ключа, защищенный паролем пользователя + солью.

Затем, когда данные PII, основанные на пользовательских вопросах этого пользователя, добавляются в DB, ​​открытый ключ пользователя будет использоваться для шифрования PII, который они собирали через приложение. Когда данные прочитаны (только тогда, когда пользователь вошел в систему), данные будут незашифрованы с закрытым ключом пользователя (который разблокирован с их паролем + соль).

Пособия Я вижу:

  1. в худшем случае, где серверы, полностью скомпрометированные, код приложения читается для поиска клавиш шифрования, файлы сеанса PHP расшифруются, чтобы найти пароли пользователя, то записи В таблице PII, связанной с тем, что пользователь дешифрован, то только PII, собранные из вопросов в текущих запущенных пользователях, могут быть восстановлены. Любые пользователи не вошли в систему, были бы в безопасности.
  2. Даже DBA или аналогичные не смогут читать PII.

Недостатки Я вижу:

  1. Пароли пользователей хранятся в восстановленной форме, когда они вошли в систему.
  2. Пользователи, которые забывают о своих паролях, потеряют доступ к своим данным.
  3. Каждый относительно небольшой бит данных займет гораздо больше места в БД из-за шифрования.

Мой вопрос: Есть ли лучший способ сделать это?

7
задан 30 August 2011 в 06:14
поделиться