Детективное расследование по делу о почте Proton с шифрованием.

Внезапное молчание


Я активно пользуюсь электронной почтой, предпочитая длинные цепочки писем мессенджерам в общении со многими друзьями и контактами. Удобно, что почта не привязана к одному устройству или платформе, а поскольку у меня есть свой домен, я могу переносить её с сервиса на сервис в любой момент времени, а отправителю при этом не придётся узнавать мой новый адрес. Однако в последние два месяца я внезапно перестал получать часть писем от друзей и даже от мамы.

Вместо них я начал получать зашифрованные PGP письма с пустым телом, которые выглядели вот так:


При изучении сообщения становилось очевидно, что это зашифрованное письмо, которое не поддерживает Fastmail. У этого сервиса есть целый пост, объясняющий такую позицию: https://www.fastmail.com/blog/why-we-dont-offer-pgp/, но до недавнего момента меня это не особо беспокоило, ведь никто не отправляет мне зашифрованные письма.

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


Я проверил сырое сообщение, и действительно оказалось, что письма шифровал Proton. Рабочий адрес хостится на Google Workspaces, так что я был сбит с толку. Неужели пользователи почты Proton не могут отправлять письма на адреса Google Workspaces? Как такое вообще может быть? Мои друзья и мама, пользующиеся Proton, заметили бы, что их письма всегда пропадают в небытие при общении с большинством людей.

Я открыл тикет в Fastmail, надеясь, что сервис сталкивался с такой проблемой раньше, но без особого успеха. Затем я открыл тикет в Proton, но на момент написания статьи ответа так и не получил.

Как работает Proton (предположительно)


Многие мои знакомые перешли на Proton потому, что этому сервису, похоже, удалось реализовать отправку зашифрованных писем наименее раздражающим способом. В его шифровании используются пары ассиметричных ключей PGP и поиск публичных ключей других пользователей, находящиеся на их сервере ключей. Также при этом применяется технология Key Transparency, сравнивающая запросы поиска клиента с запросами на стороне сервера, обеспечивая простой обмен зашифрованными сообщениями с высокой степенью безопасности (по крайней мере, так утверждает сервис).

Похоже, в Proton существует три класса ключей.

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

Так что логично, что Proton может выполнять поиск ключей адресов для пользователей в своей системе. Но откуда берутся мои ключи? В статье, посвящённой технологии Proton Key Transparency, на странице 10 есть небольшой фрагмент:

В случае внешних адресов сервер может возвращать ключи шифрования почты, которые он нашёл в Web Key Directory (WKD) [6] (так как электронная почта хостится в другом месте). Также сервер может возвращать ключи шифрования данных, например, для Proton Drive. Первое должно иметь доказательство отсутствия в KT, а второе — доказательство наличия. Для адресов, не относящихся к Proton, сервер также может возвращать ключи, найденные им в WKD. Благодаря этому клиенты могут автоматически шифровать письма на него. Эти ключи не будут находиться в ProtonKT, так что KT должна возвращать доказательство отсутствия.

Что ещё за WKD?


WKD, или OpenPGP Web Key Directory — это IETF draft Вернера Коха. В нём описывается сервис, в котором можно выполнять поиск ключей OpenPGP по адресам почты, пользующимся сервисом. Также он позволяет владельцу ключей и поставщику услуг электронной почты публиковать и аннулировать ключи. Это очень продуманная система и интересный способ обхода раздражающих особенностей PGP-шифрования почты. Документ можно прочитать здесь: https://www.ietf.org/archive/id/draft-koch-openpgp-webkey-service-16.txt. В нём излагается процесс регистрации, при помощи которого пользователь сообщает сервису WKD, что у него есть ключ, который он хочет зарегистрировать. Вот только одна проблема: я никогда этого не делал; по крайней мере, не помню, чтобы делал это. Я совершенно точно не храню страницу с какой-либо верификацией ключей.

Похоже, есть какой-то способ получить запись CNAME, указывающую на keys.openpgp.org, где у меня установлен ключ, но в моём домене он не настроен.

nslookup openpgpkey.matduggan.com
Server:		2a01:4f8:c2c:123f::1
Address:	2a01:4f8:c2c:123f::1#53

Non-authoritative answer:
*** Can't find openpgpkey.matduggan.com: No answer

Источник информации: https://keys.openpgp.org/about/usage.

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


Чего?


Похоже, если ваш адрес возвращает ключ из keys.openpgp.org, то Proton зашифрует сообщение вашим публичным ключом оттуда, даже несмотря на то (насколько я понимаю), что я не указывал, что нужно использовать этот сервис. Ещё я не могу разобраться, как сообщить ему, что этого делать не нужно.

Что же произойдёт, если я просто удалю ключ из keys.openpgp.org? Сделать это довольно просто, достаточно перейти по адресу https://keys.openpgp.org/manage и выполнить инструкции из письма. Похоже, это срабатывает практически мгновенно.


Proton, что за ерунда?


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

Если Proton мне ответит, я дополню пост, ну а пока, если вы наткнулись на этот пост потому, что месяцами получаете пустые письма, то, по крайней мере, будете знать, как это исправить.

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


  1. BaJlepa
    27.06.2024 17:37

    Кому-то удалось это воспроизвести? Я попробовал загрузить ключи из Eppie (https://habr.com/ru/companies/eppie/articles/824480/) на https://keys.openpgp.org/, но Proton не шифрует ими письма.


  1. ArtyomOchkin
    27.06.2024 17:37
    +1

    К сожалению, не знаю ответа на ваш вопрос, но это меня заинтересовало, попробую разобраться. Хотя пользуюсь обычной эл-почтой и проблем нет:).


  1. VADemon
    27.06.2024 17:37
    +1

    Странно, что Proton с 10-го апреля так и не ответил, и по видимому, нет инстрементария, чтобы проверить как и откуда сервис достанет ключ. Эдакий looking glass для почтовика.

    Хорошая статья, мне нравится подборка вашего корп. блога.


    1. David_Osipov
      27.06.2024 17:37
      +1

      Протон тянет с WKD, который можно довольно легко сделать на своём домене, вместо сервера ключей (сервер ключей вообще в WKD не задумывался). А учитывая, что у автора апдейта нет ни в Мастодонте, ни в своём блоге, то скорее всего автор сам забил, протоновцы обычно очень быстро отвечают.


      1. BaJlepa
        27.06.2024 17:37

        А Proton точно тянет с WKD? Мне не удалось заставить Proton шифровать письма ключом с WKD :(


  1. apachik
    27.06.2024 17:37
    +1

    дизлайк за кликбейтный заголовок. зачем вы так? хорошая же статья...