Коротко. У почты с открытым кодом опубликованы исходники: любой может прочитать, как она устроена, и поискать ошибки. Это помогает с тем кодом, который работает у вас на виду: с программой на вашем устройстве, с кодом, который загружает браузер для веб-почты, и с почтовым сервером, если он ваш. Что работает на серверах почтового сервиса, по его открытому коду не увидеть, и открытый код ещё не значит, что его кто-то проверил.
Что значит открытый код
Открытый код не сводится к тому, что исходники можно прочитать. По определению Open Source Initiative лицензия должна разрешать любому распространять программу, менять её и распространять изменённые версии, а опубликован должен быть тот код, с которым на самом деле работает программист, а не намеренно запутанный [1].
У почты «открытый код» может относиться к трём разным частям, и сервис может открыть одни из них и не открыть другие. Каждая из них ещё и опирается на библиотеки, чужой код, например для шифрования, открытый или нет:
- Почтовая программа на компьютере или телефоне. Она подключается к вашему почтовому сервису и работает с письмами и паролем у вас на устройстве.
- Веб-почта, которую открывают во вкладке браузера. Каждый раз браузер загружает копию её кода с сервера и выполняет её [2].
- Почтовый сервер: программа, которая хранит письма и передаёт их другим серверам. Каждое письмо идёт от сервера отправителя к серверу получателя, какой бы программой ни пользовались оба [3].
Если сервис пишет, что он открытый, спросите, какие именно части открыты.
Код у вас и код на сервере
Открытый код полезнее всего для той части, что работает у вас. При сквозном шифровании письма шифруются и расшифровываются на вашем устройстве, в программе или в коде веб-почты: что такое сквозное шифрование. Если этот код открыт, по нему можно прочитать:
- что шифруется на устройстве перед отправкой, а что нет;
- куда программа отправляет запросы;
- какие данные она передаёт серверу.
С сервером иначе. Даже если сервис опубликовал код сервера, вы не видите, какой код на самом деле работает на его машинах и что он там хранит. А письма с других сервисов обычно приходят обычной почтой, и принимающий сервер видит их, пока не зашифрует для хранения: что такое нулевой доступ. Этот шаг происходит на сервере, и открытый код не покажет, что там работает.
Если вы сами держите почтовый сервер с открытым кодом, вы знаете, что на нём работает, потому что почтовый сервис теперь вы: обновления, резервные копии и спам на вас, а письма всё равно идут через серверы получателей [3].
Собрано ли ваше приложение из этого кода
Опубликованный код показывает, что приложение должно делать. Собрано ли из него то приложение, что у вас на экране, это отдельный вопрос, и на него отвечают воспроизводимые сборки.
Сборка воспроизводима, если любой, кто возьмёт тот же исходный код, ту же среду сборки и те же инструкции, получит побитно одинаковые файлы. Сравнивают их обычно по криптографическим хэшам [4]. Так люди вне проекта могут убедиться, что файлы, которые вы скачиваете, соответствуют опубликованному коду [5].
- Установленное приложение. Если его сборки воспроизводимы, его можно пересобрать и сравнить результат с тем, что раздают.
- Веб-почта. Код каждый раз приходит с сервера [2]. Сверка показывает, что сервер отдал вам в тот раз, когда вы сверяли. Сам браузер ничего не сверяет, поэтому помешать серверу отдать кому-то изменённую версию сверка не может: подмену можно только заметить потом, и только тому, кому её отдали и кто сам сверил.
Чего открытый код не доказывает
- Что его кто-то проверил. Heartbleed, серьёзная ошибка в OpenSSL, открытой библиотеке, на которой держатся многие зашифрованные соединения, вышла в марте 2012 года, а исправлена в апреле 2014-го [6]. Код был открыт больше двух лет, прежде чем ошибку исправили.
- Что работает на серверах сервиса и что он там о вас хранит. Открытый код сервера этого не показывает.
- Что ваша копия совпадает с кодом, если сборка не воспроизводима или сверяли не ту копию, что у вас.
- Что сервис видит о ваших письмах. Даже при открытом коде и сквозном шифровании серверы обрабатывают, кто кому и когда писал: метаданные письма.
Вопросы к любому почтовому сервису
- Открыт ли код программы или веб-почты, которой вы будете пользоваться?
- Открыт ли код сервера, и какие части ваших писем сервер обрабатывает незашифрованными?
- Воспроизводимы ли сборки, и есть ли опубликованный способ их сверить?
- Опубликован ли отчёт независимого аудита, и какие части кода он охватывал?
Наши ответы до запуска. Исходный код веб-версии Methmail мы откроем до закрытой беты. Код сервера пока закрыт. Сквозное шифрование будет работать у вас в браузере, и его можно будет проверить по открытому коду. Письма с других сервисов при приёме будет шифровать наш сервер: эту часть по открытому коду не проверить. Опубликованного способа сверить наши сборки пока нет, и отчёта независимого аудита пока нет.
Вопросы
Почта с открытым кодом безопаснее? Сама по себе нет. Открытый код даёт возможность проверить; насколько защищена почта, зависит от того, как она устроена, проверял ли код кто-то и что работает на сервере, где открытый код ничего не показывает.
Хватит ли почтовой программы с открытым кодом, чтобы переписка осталась личной? Программа работает с письмами у вас на устройстве. Почтовый сервис всё равно хранит ваши письма и видит их метаданные, а сможет ли он читать письма, зависит от шифрования, а не от лицензии программы: какая почта самая защищённая.
Можно ли самому проверить код веб-почты? Опубликованный код можно прочитать. Чтобы знать, что браузер получил именно его, сборка должна быть воспроизводимой, а вам нужно сравнить присланные файлы со своей сборкой, и сверка покажет только тот раз [4].
Что дальше
- Что такое сквозное шифрование
- Шифрование с нулевым доступом: что это и как проверить
- Какая почта самая защищённая: как проверить самому
Источники
- Open Source Initiative: The Open Source Definition, обновлено 16 февраля 2024. https://opensource.org/osd
- MDN Web Docs: Как работает Веб («копия страницы загружается с сервера на клиентский компьютер»). https://developer.mozilla.org/ru/docs/Learn_web_development/Getting_started/Web_standards/How_the_web_works
- RFC 5321: Simple Mail Transfer Protocol. IETF, октябрь 2008. https://www.rfc-editor.org/rfc/rfc5321
- Reproducible Builds: Definitions. https://reproducible-builds.org/docs/definition/
- Reproducible Builds: Why reproducible builds matter. https://reproducible-builds.org/
- The Heartbleed Bug (CVE-2014-0160). https://heartbleed.com/