Как лучше всего хранить ключи шифрования AES в приложении php? - PullRequest
2 голосов
/ 07 мая 2020

У меня есть веб-приложение, использующее шифрование AES, все работает хорошо, но я жестко кодирую ключ в файле php. Вот пример ... encrypt ($ msg, 'пароль'); ... Он вызывает мою функцию и отправляет пароль в качестве второго параметра. Вопиющий недостаток в том, что если кто-то обращается к моему серверу и просматривает код php, он может легко взять ключ и расшифровать базу данных. Должен ли я вызывать пароль с альтернативного сервера из альтернативной базы данных? У кого-нибудь есть простые идеи по защите ключа? кстати Я застрял в использовании одного ключа для всего шифрования из-за характера приложения.

1 Ответ

1 голос
/ 08 мая 2020

Это та же проблема с курицей и яйцом, которая возникает повсюду в ИТ.

Я ожидаю, что это будет закрыто как дубликат чего-то еще, но на него быстрее ответить, чем искать дубликаты.

Существуют разные способы снижения риска, но ни один из них не решает проблему. Какое решение подходит вам, зависит от ваших конкретных c рисков - ваши резервные копии зашифрованы / защищены? Хотите, чтобы приложение автоматически восстанавливалось после перезагрузки? Ваше приложение работает в системе, которая может подтвердить свою личность / целостность на другой машине? Работает ли он как часть кластера .....

Есть только определенное количество мест, где вы можете хранить данные:

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

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

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

Ядро Linux теперь имеет возможность виртуального HSM, которая позволяет вам ограничивать данные, хранящиеся в памяти, до определенных c процессов, групп процессов или пользователей, но его нельзя переносить между операционными системами.

...