Строим

Methmailприватная почта

Открытый код почты: что можно проверить, а что нет

Обновлено: · Источники проверены:

Коротко. У почты с открытым кодом опубликованы исходники: любой может прочитать, как она устроена, и поискать ошибки. Это помогает с тем кодом, который работает у вас на виду: с программой на вашем устройстве, с кодом, который загружает браузер для веб-почты, и с почтовым сервером, если он ваш. Что работает на серверах почтового сервиса, по его открытому коду не увидеть, и открытый код ещё не значит, что его кто-то проверил.

Что значит открытый код

Открытый код не сводится к тому, что исходники можно прочитать. По определению Open Source Initiative лицензия должна разрешать любому распространять программу, менять её и распространять изменённые версии, а опубликован должен быть тот код, с которым на самом деле работает программист, а не намеренно запутанный [1].

У почты «открытый код» может относиться к трём разным частям, и сервис может открыть одни из них и не открыть другие. Каждая из них ещё и опирается на библиотеки, чужой код, например для шифрования, открытый или нет:

  • Почтовая программа на компьютере или телефоне. Она подключается к вашему почтовому сервису и работает с письмами и паролем у вас на устройстве.
  • Веб-почта, которую открывают во вкладке браузера. Каждый раз браузер загружает копию её кода с сервера и выполняет её [2].
  • Почтовый сервер: программа, которая хранит письма и передаёт их другим серверам. Каждое письмо идёт от сервера отправителя к серверу получателя, какой бы программой ни пользовались оба [3].

Если сервис пишет, что он открытый, спросите, какие именно части открыты.

Код у вас и код на сервере

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

  • что шифруется на устройстве перед отправкой, а что нет;
  • куда программа отправляет запросы;
  • какие данные она передаёт серверу.

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

Если вы сами держите почтовый сервер с открытым кодом, вы знаете, что на нём работает, потому что почтовый сервис теперь вы: обновления, резервные копии и спам на вас, а письма всё равно идут через серверы получателей [3].

Собрано ли ваше приложение из этого кода

Опубликованный код показывает, что приложение должно делать. Собрано ли из него то приложение, что у вас на экране, это отдельный вопрос, и на него отвечают воспроизводимые сборки.

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

  • Установленное приложение. Если его сборки воспроизводимы, его можно пересобрать и сравнить результат с тем, что раздают.
  • Веб-почта. Код каждый раз приходит с сервера [2]. Сверка показывает, что сервер отдал вам в тот раз, когда вы сверяли. Сам браузер ничего не сверяет, поэтому помешать серверу отдать кому-то изменённую версию сверка не может: подмену можно только заметить потом, и только тому, кому её отдали и кто сам сверил.

Чего открытый код не доказывает

  • Что его кто-то проверил. Heartbleed, серьёзная ошибка в OpenSSL, открытой библиотеке, на которой держатся многие зашифрованные соединения, вышла в марте 2012 года, а исправлена в апреле 2014-го [6]. Код был открыт больше двух лет, прежде чем ошибку исправили.
  • Что работает на серверах сервиса и что он там о вас хранит. Открытый код сервера этого не показывает.
  • Что ваша копия совпадает с кодом, если сборка не воспроизводима или сверяли не ту копию, что у вас.
  • Что сервис видит о ваших письмах. Даже при открытом коде и сквозном шифровании серверы обрабатывают, кто кому и когда писал: метаданные письма.

Вопросы к любому почтовому сервису

  1. Открыт ли код программы или веб-почты, которой вы будете пользоваться?
  2. Открыт ли код сервера, и какие части ваших писем сервер обрабатывает незашифрованными?
  3. Воспроизводимы ли сборки, и есть ли опубликованный способ их сверить?
  4. Опубликован ли отчёт независимого аудита, и какие части кода он охватывал?

Наши ответы до запуска. Исходный код веб-версии Methmail мы откроем до закрытой беты. Код сервера пока закрыт. Сквозное шифрование будет работать у вас в браузере, и его можно будет проверить по открытому коду. Письма с других сервисов при приёме будет шифровать наш сервер: эту часть по открытому коду не проверить. Опубликованного способа сверить наши сборки пока нет, и отчёта независимого аудита пока нет.

Вопросы

Почта с открытым кодом безопаснее? Сама по себе нет. Открытый код даёт возможность проверить; насколько защищена почта, зависит от того, как она устроена, проверял ли код кто-то и что работает на сервере, где открытый код ничего не показывает.

Хватит ли почтовой программы с открытым кодом, чтобы переписка осталась личной? Программа работает с письмами у вас на устройстве. Почтовый сервис всё равно хранит ваши письма и видит их метаданные, а сможет ли он читать письма, зависит от шифрования, а не от лицензии программы: какая почта самая защищённая.

Можно ли самому проверить код веб-почты? Опубликованный код можно прочитать. Чтобы знать, что браузер получил именно его, сборка должна быть воспроизводимой, а вам нужно сравнить присланные файлы со своей сборкой, и сверка покажет только тот раз [4].

Что дальше

Источники

  1. Open Source Initiative: The Open Source Definition, обновлено 16 февраля 2024. https://opensource.org/osd
  2. MDN Web Docs: Как работает Веб («копия страницы загружается с сервера на клиентский компьютер»). https://developer.mozilla.org/ru/docs/Learn_web_development/Getting_started/Web_standards/How_the_web_works
  3. RFC 5321: Simple Mail Transfer Protocol. IETF, октябрь 2008. https://www.rfc-editor.org/rfc/rfc5321
  4. Reproducible Builds: Definitions. https://reproducible-builds.org/docs/definition/
  5. Reproducible Builds: Why reproducible builds matter. https://reproducible-builds.org/
  6. The Heartbleed Bug (CVE-2014-0160). https://heartbleed.com/