Я использую модуль PHP mcrypt для шифрования конфиденциальных данных в моей компании. Это хорошо работает. Однако мне было предложено создать новый мастер-пароль, который должен иметь возможность расшифровать любые данные. Проблема заключается в том, что этот главный пароль должен быть жестко закодирован в файле сценария. Пожалуйста, исправьте меня, если я ошибаюсь, но единственным безопасным способом, по-видимому, является жесткое кодирование открытого ключа в скрипте и использование его для шифрования данных, сохраняя секретный ключ в безопасности и использовать его для дешифрования только тогда, когда это необходимо.реализация криптографии с открытым ключом
У mcrypt, похоже, нет реализации для такой схемы. Кто-нибудь знает библиотеку (PHP-модуль или чистый PHP), который будет делать это?
Хорошо, вот предлагаемая схема. Все данные, введенные пользователем, будут храниться дважды - один раз зашифрованы ключом пользователя (Rijndael 256) и один раз зашифрованы главным открытым ключом - жестко закодированным в скрипте. Пользователь будет получать/редактировать эти данные по своему усмотрению. Тем не менее, sysadmin также сможет извлечь эти данные в какой-то более поздний момент, используя главный закрытый ключ. –
Для шифрования ключей пользователя с помощью открытого открытого ключа потребуется намного меньше процессора. – David
Дэвид совершенно прав. Правильный способ решить эту проблему - использовать главный открытый ключ для шифрования эфемерных ключей, используемых для шифрования документов. Даже если используется асимметричный криптоскоп, обычно документы сначала шифруются с помощью симметричного ключа, а только симметричный ключ шифруется с помощью схемы асимметричного шифрования. Следовательно, независимо от того, используется ли симметричный или асимметричный криптограмм, обычно есть симметрийный ключ, который может быть зашифрован дважды: один раз для законного получателя и один раз для восстановления ключа. – Accipitridae