Не легко будет объяснить - я попробую.
Идея такова: есть опенсурсный сервер, который создан, чтобы позволить юзерам меняться данными анонимно, не напрямую по “зашифрованному каналу через сервер”. Типо юзер1 ген. публичный ключ для юзера2, а юзер2 - для юзера1. Задача сервера - просто передать друг другу их ключи и потом направлять данные от 1ого юзер второму. Но вот в чем проблема, я - злоумышленник, скачавший/установивший/раскрутивший сервер на моем скрипте, только вот он его переписал, и теперь вместо того, чтобы передавать юзерам ключи других юзеров, он генерирует свои публичные/приватные ключи и заменяет пуб. ключи юзеров на свои. Теперь сервер просматривает данные юзера1 по их пути, дешифруя их прив. ключом своим, а потом шифруя пуб. ключом юзера2 и отправляя их ему. Итог: оба юзера довольны, ведь юзер1 отправил данные, юзер2 их получил, и вот только сервер теперь знает, что юзер1 сегодня пойдет вечером в клуб торчать, его возьмут.
Вопрос: как обеспечить безопасность данным, подтверждая валидность публичного ключа на обеих концах. Вы скажете OpenPGP/GnuPG, но вот незадача: как юзер2 узнает ИД юзера1, если сервер все ИД поменяет на свои и опять же, ты ничего не знаешь о безопасности данных, и юзер1 уже собирается в клуб, где его уже ждут с дубинками и погонами?