Ваши мессенджеры, сайты на HTTPS протоколе, авторизация в интернет сервисах, безопасное хранение файлов и иногда даже будильники - все эти вещи используют PGP.

Но что это вообще такое? Википедия дает следующее определение:

PGP (англ. Pretty Good Privacy) — компьютерная программа, также библиотека функций, позволяющая выполнять операции шифрования и цифровой подписи сообщений, файлов и другой информации.

На словах ясно, но давайте посмотрим, что у него под капотом.

Концепт

Представим, что у нас есть пользователь А и пользователь Б.

Им необходимо начать общение, но так, чтобы никто не мог узнать о содержимом их переписки. Вот тут к ним на помощь приходит шифрование.

В современных системах используют алгоритмы Rjindael (на данный момент - AES), DES, RC4 и некоторые другие.

Я не буду вдаваться в подробности их работы. Всё, что нужно о них знать - дай им входные данные и ключ, получишь зашифрованный байт массив, который этим же ключом можно вернуть в обратное состояние. Как навесной замок они открываются и закрываются, но без ключа это сделать практически нереально (эффективных способов взлома этих алгоритмов нет). Такие алгоритмы шифрования называются симметричными.

И вот он ответ, не так ли? Пусть пользователь А передаст свой ключ пользователю Б. Тогда можно будет шифровать свою переписку с двух сторон, и никто не узнает что они друг другу пишут.

Конечно, если оба пользователя знакомы в реальной жизни, один может отдать другому флешку, на которую записан ключ.

Но в интернете это сделать невозможно, пользователей далеко не два, а один сервис может обслуживать миллионы разных юзеров в день. Также каждому, с кем ты переписываешься, лично при встрече отдать свой личный ключ шифрования не всегда представляется возможным.

Электронная подпись

Раз передать свой личный ключ от того-же AES - всё равно, что скомпрометировать свою безопасность, то встает вопрос - как пользователь А может безопасно передать свой ключ пользователю Б?

Решение проблемы - подписывать ключи и письма другим ключом! Но только этот второй ключ будет уже от асимметричного алгоритма шифрования. Суть та же, что и у симметричных, только теперь нет единого ключа от замка - их два. Один "публичный", им данные можно только зашифровать, а второй - "приватный", он способен расшифровать данные, обработанные публичным ключом из его пары.

Такое устройство позволяет беспрепятственно опубликовать свой публичный ключ без вреда для своей безопасности.

На этом основывается принцип действия "Электронных подписей".

Они нужны для того, чтобы пользователь Б данных мог быть уверен в том, что данные были зашифрованы именно тем ключом, что принадлежит пользователю А, и наоборот.

Подпись создается из хэша изначальных данных и прилагается к отправленному пакету.

Получатель расшифровывает публичным ключом подпись, сравнивает ее с хэшем полученных данных, и если они совпадают, то отправитель - подлинный юзер, а не мошенник.

Web of Trust

ОК, мы разобрались, как совершить рукопожатие (handshake - процесс образования безопасного канала связи).

А теперь представьте, что между пользователем А и Б сидит еще один - пользователь С.

"С" - злоумышленник, которому нужно знать о подробностях общения А и Б.

Он создает две пары ключей для подписи и еще два ключа для шифрования данных.

Пользователю А он представляется пользователем Б, а пользователю Б - пользователем А. Реальность такова, что в реалиях интернета нельзя быть на 100% уверенным, что полученная электронная подпись и ключ - подлинные.

Выходит, что если такой сценарий действительно возможен, то безопасности нашим А и Б не видать?

Спасение есть! Вот мы и дошли до основной темы - "сеть доверия", по англ. "Web of trust".

Эта сеть заключается в том, что все пользователи знают публичные ключи электронных подписей друг друга, и у каждого из участника сети можно спросить: "А точно ли вот этот ключ, который мне прислал пользователь Б, принадлежит ему, а не какому-нибудь злоумышленнику?"

При этом сеть доверия может быть даже при маленьком количестве участников очень эффективной, так как если один знает другого, то третий, спросив первого, узнает публичный ключ второго. Как корни дуба, Web of Trust переплетается между собой, позволяя юзерам обмениваться данными.

Теперь наш пользователь С более не может выдавать себя за других пользователей, ведь только стоит ему попытаться, и юзер А, спросив любого из участника сети, поймет, что между ним и юзером Б кто-то стоит и перехватывает сообщения.

Обобщение

Теперь давайте соединим все эти концепты в одну простую схему.

Пользователь А и пользователь Б оба находятся в одной сети доверия и хотят начать безопасное общение.

"А" спрашивает у любых нескольких участников сети публичный ключ "Б". Используя этот ключ, он отправляет запрос на рукопожатие юзеру Б. "Б" в свою очередь узнает публичный ключ юзера А, генерирует симметричный ключ для дальнейшего общения и, воспользовавшись публичным ключом юзера А, отправляет симметричный ключ обратно.

Все сообщения в этой схеме также подписываются электронными подписями.

При таком взаимодействии вмешательство со стороны невозможно, и наши пользователи, наконец, могут приступить к переписке.

Использовать эту схему вручную нет смысла - она уже встроена во все возможные интернет протоколы связи вашими браузерами и приложениями.

Итог

Ни одна система не бывает идеальной. MITM (Man in the middle, в нашем случае - способ подделки сертификатов, путем верификации поддельных ключей теми подписями, которым доверяет браузер пользователей-жертв) атаки осуществляются и по сей день.

Но если возле адресной строки вашего браузера красуется тот самый "зеленый замочек" - ваши данные в надежных руках алгоритма PGP.

Комментарии (5)


  1. lorc
    26.05.2023 21:03
    +13

    Но если возле адресной строки вашего браузера красуется тот самый "зеленый замочек" - ваши данные в надежных руках алгоритма PGP.

    Шта?

    Зеленый замочек светится благодаря PKI (Public Key Infrastructure), а не Web of Trust.

    Автор сего текста вообще пользовался PGP/GPG?


  1. ku4in
    26.05.2023 21:03
    +3

    GPG используется, например, для проверки подписи пакетов в репозиториях в Linux. Или для подписи коммита в git. Ну уж никак не в протоколе HTTPS.


  1. Darkholme
    26.05.2023 21:03
    +2

    Есть у меня подозрение, что статья сгенерирована нейронкой. Очень уж по стилю похоже.


    1. Hardcoin
      26.05.2023 21:03

      Не четверка точно. Она такую ерунду про https не пишет, только что проверил.


  1. qertis
    26.05.2023 21:03

    Боюсь, ваша статья вводит в заблуждение, потому что вы перепутали PGP с SSL. За последний отвечает технология PKI и это не совсем децентрализованная сеть, так как имеет корневые центры.