[Перевод] Почему мама не может написать мне электронное письмо?
Детективное расследование по делу о почте 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 мне ответит, я дополню пост, ну, а пока, если вы наткнулись на этот пост потому, что месяцами получаете пустые письма, то, по крайней мере, будете знать, как это исправить.