Безопасное шифрование пароля / дешифрование строк в PHP - PullRequest
8 голосов
/ 04 августа 2011

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

Я проверил Обратимая процедура шифрования пароля для PHP , но я не уверен, достаточно ли она безопасна, если злоумышленники имеют доступ к серверу и источнику.

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

Ответы [ 3 ]

4 голосов
/ 05 августа 2011

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

Если это так, то на самом деле это не так уж сложно.

  • Создайте ключ шифрования (AES был бы хорошим выбором), который должен использоваться сервером.
  • Вы храните этот ключ в файле.
  • Убедитесь, что приложение и только несколько выбранных людей имеют доступ к этому местоположению.В худшем случае это будет показано в ваших общедоступных файлах, и любой желающий сможет загрузить его из Интернета.Поэтому поместите его в папку, находящуюся далеко от ваших общедоступных ресурсов:)
  • Зашифруйте этот файл, используя шифрование на основе пароля , например, PBKDF2 в RFC 2898 .

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

Альтернатива (но потенциально менее безопасная, поскольку пароль будет присутствовать в какой-либо физической форме) - полагаться на специфичные для ОС «хранилища паролей», такие как изолированное хранилище Windows .

2 голосов
/ 05 августа 2011

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

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

0 голосов
/ 05 августа 2011

Я бы пошел с Mcrypt, чтобы зашифровать / расшифровать данные в php.
Мой алгоритм выбора был бы двояким. Вам понадобится ключ для шифрования / дешифрования данных, и отправка его по запросу может быть проблемой безопасности, если вы не внедрили ssl. Если шифрование должно выполняться по запросу, а не в режиме реального времени, вы можете просто выполнить скрипт в консоли, чтобы пароль не сохранялся на сервере.

Код для шифрования / дешифрования прост:

$encrypted= mcrypt_ecb(MCRYPT_TWOFISH, $key, $input, MCRYPT_ENCRYPT);
$decrypted= mcrypt_decrypt(MCRYPT_TWOFISH , $key, $data, MCRYPT_DECRYPT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...