Подтвердить что ты не робот

Возможно ли иметь шифрование с несколькими закрытыми ключами (PHP)?

Или: как хранить зашифрованные данные для группы пользователей?

Я признаю, что это глупый вопрос, закрытый ключ ограничен только одним человеком, как предполагает этот термин. Но у меня есть следующий сценарий:

Пользователь Tom вводит данные, которые необходимо хранить в зашифрованном виде в базе данных. Пользователь решает, что хочет предоставить эту информацию Джим и Бобу. Пользователи John и Jayne не должны расшифровывать их. Конечно, также не пользователю Тиму, который взломал сервер и получил доступ к зашифрованным данным и скриптам, которые выполняют шифрование/дешифрование.

Я думаю, что подход с открытым ключом/приватным ключом с PHP openssl_public_encrypt не будет работать здесь, поскольку двум пользователям необходимо иметь этот "private" ключ для дешифрования данных.

Я предполагаю, что это довольно общий вопрос, но если это важно, это должно быть сделано в PHP (возможно, MySQL).

4b9b3361

Ответ 1

Как это делается в OpenPGP (и других системах): - вы генерируете секретный симметричный ключ, который используется для шифрования самих данных; - тогда этот симметричный ключ зашифрован с помощью ключа Tom; - также симметричный ключ может быть зашифрован с открытым ключом Джима и Боба, что позволяет им расшифровывать ключ, а затем расшифровывать данные

Ответ 2

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

Ответ 3

Я не знаю библиотеки на PHP. Но в целом процедура такова:

  • Данные шифруются с использованием симметричного ключа
  • Для каждого получателя ключ шифруется с использованием открытого ключа получателя
  • Все это сохраняется в структуре файла PKCS # 7.

Должны быть некоторые результаты при поиске "PHP и PKCS7"...

Ответ 4

Используйте ключ шифрования данных (назовите его Kgeneral), который отличается от ключа Tom.

Зашифруйте Kgeneral с открытым ключом Tom и дайте результат Tom - он может использовать свой закрытый ключ для его расшифровки и получения Kgeneral.

Если другому пользователю нужен доступ к данным, Tom (или ваше приложение) может затем шифровать Kgeneral своим открытым ключом и предоставлять ему доступ таким образом.