Это возможно с шифрование на основе атрибутов.
Согласно описанию в ссылке определите вселенную атрибутов $\{А, Б, Г\}$, попросите Алису получить ключ с атрибутом $А$, Боб ключ с атрибутом $В$, а Давид ключ с атрибутами $\{А, Д\}$.
Чтобы зашифровать для Алисы, Боба или Дэвида, зашифруйте сообщение относительно $А$, $В$, или же $Д$.
Затем:
- Для сообщений, зашифрованных для Боба или Дэвида, только у них есть ключи с соответствующими атрибутами, поэтому они единственные, кто может расшифровать, но
- У Дэвида и Алисы есть ключи с атрибутом $А$, поэтому они обе может расшифровать любые сообщения к Алиса.
Это вызывает небольшую проблему — Алиса может отправлять сообщения Бобу, которые Дэвид не может расшифровать.
Это можно исправить, немного изменив шифрование, а именно Алиса (или любой другой человек в организации Дэвида) должна шифровать сообщения в соответствии с политикой $C\лор D$, куда $С$ является предполагаемым получателем, и $Д$ это атрибут, соответствующий Давиду.
В этом конкретном случае Алиса шифрует Боба с атрибутом $B\или D$.
Обратите внимание, что это не требуют, чтобы Боб сотрудничал с Дэвидом --- система настроена таким образом, что любой, кто общается "в группе" с Алисой (шифрует с помощью атрибута $А$) отправляет сообщения, которые Дэвид также может расшифровать.
Однако есть два предостережения:
Алиса должна сотрудничать (если она шифрует по отношению к политике $В$, Дэвид не может расшифровать).
Дэвиду, вероятно, легче добиться этого, угрожая уволить Алису, если она будет плохо себя вести.
ABE, как более сильная форма IBE, подвергается критике Rogaway в отношении IBE (в Моральный характер криптографической работы). А именно, доверенная третья сторона должна генерировать все ключи.
В частности, это означает, что Боб не может сгенерировать свой ключ независимо от Дэвида и, следовательно, должен доверять Дэвиду, что его ключ был сгенерирован честно (или и Боб, и Дэвид должны доверять какой-то независимой третьей стороне). Вполне вероятно, что эту независимую третью сторону можно заменить вычислением MPC, но я не знаю подробностей.