Как безопасно хранить ключи шифрования в файле кода php - PullRequest
2 голосов
/ 22 января 2012

У меня есть веб-сайт, на котором пользователи передают конфиденциальные данные, затем сценарий php шифрует эти конфиденциальные данные с помощью rijndael 256 и сохраняет их в базе данных mysql

. Проблема заключается в том, что я хочу сохранить ключ в безопасном месте.место, доступ к которому возможен только через скрипт php, и который никто другой не увидит

Ответы [ 3 ]

2 голосов
/ 22 января 2012

Зависит от того, насколько высока безопасность данных.Вы могли бы рассмотреть возможность иметь разные ключи безопасности для каждого пользователя, возможно, зашифровав данные, которые идентифицируют конкретного клиента, и прикрепив его к 256-битному зашифрованному ключу.Но еще лучше было бы разделить ключ и вставить зашифрованные данные по всему ключу.Делает его более сложным для расшифровки.Это означало бы, что если у программиста есть доступ к ключу, он не может просто расшифровать все данные, не имея доступа к зашифрованным данным клиента, которые будут отличаться для каждого пользователя.

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

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

Дополнительная информация @ http://en.wikipedia.org/wiki/Public-key_cryptography

0 голосов
/ 23 января 2012

Вы можете зашифровать / расшифровать с сертификатами и заставить сервер запрашивать пароль для сертификата при загрузке.

Хорошо, что ваш ключ только в памяти и может отличаться для каждой установки / сервера.

Однако этот метод довольно труден и обычно работает только тогда, когда у вас есть собственные системные администраторы / вы не зависите от стороннего хостинг-провайдера.


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

Если проблема в том, что вы не доверяете а) программисту или б) системному администратору, вам не повезло.

0 голосов
/ 22 января 2012

Одной из альтернатив будет то, что PHP-скрипт будет вызывать внешний скрипт (не обязательно должен быть другим PHP-скриптом; это может быть что угодно), который будет иметь доступ к ключу. Пока никто не имеет доступа для записи к внешнему сценарию или доступа для чтения к нему, если вы жестко закодировали ключ в нем, он должен быть относительно безопасным. Если вы храните ключ в отдельном файле, этот файл должен быть доступен для чтения / записи только владельцу внешнего скрипта.

...