Причина, по которой это невозможно, заключается в том, как утверждали другие, что подписанное сообщение не может быть подделано. Конечно, злоумышленник может подписать любое сообщение, но только закрытым ключом, принадлежащим его собственному открытому ключу/сертификату.
Итак, что происходит:
- Алиса подписывает сообщение своим закрытым ключом, указывая свой открытый ключ/сертификат;
- Алиса шифрует подписанное сообщение с помощью открытого ключа Боба (поскольку в PGP используется метод «подписать, затем зашифровать»);
- Боб получает сообщение и расшифровывает его с помощью своего закрытого ключа;
- Боб получает идентификатор ключа Алисы и ищет ее открытый ключ/сертификат, выясняя, что это она;
- Боб проверяет, что подпись под сообщением принадлежит Алисе.
Теперь Мэлори (MitM, использующая обычные имена), очевидно, может отправлять зашифрованные сообщения Бобу, однако она не может расшифровать сообщение Алисы, поскольку у нее нет закрытого ключа Боба.
Что касается генерации подписи: Мэлори может поставить свою собственную подпись и изменить идентификатор, но тогда сообщение будет не от Алисы.
Конечно, это требует, чтобы открытый ключ/сертификат Алисы был заранее известен и доверен Бобу, иначе Мэлори может создать пару ключей и отправить открытый ключ/сертификат Бобу, выдавая себя за Алису. С PGP это доверие создается с помощью сети доверия.
Поскольку эта сеть доверия никогда не была настолько безопасной для PGP, настоятельно рекомендуется установить доверие напрямую, например, отправив сертификат по почте, а затем проверив отпечаток ключа по телефону. PGP был разработан с учетом этого (например, создание простой для проверки системы отпечатков пальцев и требование явного доверия к открытым ключам/сертификатам в хранилище доверенных сертификатов).