Прежде чем думать о решениях, вы, вероятно, хотите подумать о требованиях. В данном сценарии, когда у вас есть два человека, которые необходимы для расшифровки сообщения, разумно потребовать, чтобы
- каждый человек никогда не видит ключ другого человека.
В конце концов, вы хотите избежать того, что один человек просто выбирает случайный зашифрованный текст, делает вид, что он только что пришел, видит ключ другого человека, а затем замечает, что зашифрованный текст должен был быть обманом.
Это требование затрудняет расшифровку с вариантом 1.
Поскольку вы используете MAC, вы, вероятно, также хотите, чтобы
- оба убеждены, что расшифрованное сообщение является законным.
Похоже, это исключает вариант 2. В конце концов, как владелец Key2 может знать, что владелец Key1 расшифровал правильность, а не просто заменил законный открытый текст одним из выбранных им.
Я должен признать, что не знаю хорошего решения для сценария, который вы описываете. Потенциальная схема может выглядеть следующим образом: зашифрованный текст - кортеж c1, c2, d1, d2, где
c1 = EncryptAndMAC (Key1, Share1)
d1 = MAC (Key2, hash (Share1))
c2 = EncryptAndMAC (Key2, Share2)
d2 = MAC (Key1, Share2)
сообщение = Поделиться1 XOR Поделиться2
Теперь для поиска сообщения необходимы оба ключа, обе стороны могут самостоятельно расшифровать свои акции без необходимости делиться своими ключами, и обе стороны могут проверить, правильно ли расшифрована другая сторона. Конечно, это специальный протокол, так что, вероятно, я что-то пропустил.