Я пытаюсь понять, как криптография с открытым ключом действительно может работать безопасным образом.
Насколько я понимаю, вы заходите на example.com, загружаете их открытый ключ PGP / GPG и добавляете его в свою связку ключей. Затем они отправляют вам текстовый файл (или еще много чего), подписанный их закрытым ключом или зашифрованный вашим открытым ключом; и вы можете проверить его подлинность и / или расшифровать его.
Что, если злоумышленник изменит веб-сайт, переданный вам, и подписал под своим именем собственный фальшивый ключ, а вы поместите его в свою связку ключей? Затем вы переходите к проверке и расшифровке подделанного файла, предполагая, что он действителен.
Я предполагаю, что говорю о вмешательстве MITM во весь веб-трафик между ними или о чем-то подобном. Я просто не уверен, как «подпись» может защитить от этого и ключ, и данные, если они были подделаны при передаче.
Описанный вами сценарий требует множить сбои в сети доверия:
Злоумышленнику придется скомпрометировать сервер ключей и разместить там поддельную копию вашего открытого ключа.
Предположительно, если вы достаточно параноик, чтобы использовать PGP, вы бы попросили других людей подписать ваш ключ, поэтому злоумышленнику придется заставить этих людей подписать поддельный ключ (или заразить всю цепочку ключей).
Другие пользователи должны будут принять скомпрометированный открытый ключ для использования.
По-настоящему параноики берут ключи только физически у владельцев. Обычные параноики (вроде меня) настаивают на этом только при подписании ключа.
Злоумышленник должен будет скомпрометировать поток данных (расшифровать его - простая часть, поскольку он зашифрован их скомпрометированным ключом), изменить его, повторно зашифровать и подписать с помощью закрытый ключ отправителя
Предположительно, если вы достаточно параноик, чтобы использовать PGP, вы настаиваете, чтобы вы получали все подписанное.
Подписи выполняются с использованием закрытого ключа отправителя, поэтому либо злоумышленник скомпрометировал ключ отправителя, либо заставил вас принять скомпрометированную версию его открытого ключа, который вы будете использовать для проверки поддельной подписи.
На эту тему есть замечательная книга - Прикладная криптография - который объясняет больше о видах компромиссов, необходимых для выхода этой системы из строя.
Вообще говоря, вам нужно проверить ключи, прежде чем доверять им.
В случае, который вы описали, это будет означать, что вы доверяете ключу только в том случае, если он предоставлен вам через безопасный канал (например, подтвержденный SSL) или каким-либо другим способом, которому вы доверяете (хэш отпечатка пальца передается другим способом для проверка, например).
Вообще говоря, для PGP именно поэтому проводятся встречи для подписания ключей, чтобы вы могли лично увидеть отпечаток пальца, проверить идентификатор другого человека, а затем получить сам открытый ключ в Интернете.