SMTP від провайдера DeltaChat в Thunderbird
Сабж такий, що я довго не можу знайти заміни Gmail: то потрібен номер телефону, то інша скринька, то апрув. Мені це набридло і я згадав про безкоштовні сервери SMTP від DeltaChat. Чим вони зручні - що видають "одноразові" хешовані адреси email, які легко змінити у разі виявлення спамерами.
В своїй конфігурації, отримувачів (Android) я погнав на відповідний додаток. А сам віднедавна (на десктоп) перебрався на Thunderbird. Тому уявімо, що вони там варяться самі по собі і шлють шифровані листи з коробки через юзер-френдлі Autocrypt, а ви - їх читаєте на пташці.
Поки опишу спосіб, де я реєструю собі акаунт через DeltaChat (Tauri) і потім створюю для нього обліковий запис в Thunderbird, використовуючи умовний логін abcde123@nine.testrun.org і пароль, які в DeltaChat можна побачити з меню "Advanced" > "Password and Account". Сервери в Thunderbird (148.0) налаштуються автоматично, тому на їх параметрах не акцентую уваги.
Вбудований менеджер ключів Thunderbird
Thunderbird має вбудований менеджер ключів, тому я обрав такий підхід першим.
Приватний ключ відправника
Оскільки сервери SMTP в DeltaChat належать будь-кому, але не юридично обмеженому Google, не шифровану пошту може читати будь хто з адмінів обраного поштового сервера. Тому в такому "дикому" форматі, я користуватимусь виключно end-to-end шифруванням OpenPGP, що раджу і вам.
- В DeltaChat експортуємо два файли свого приватного і публічного ключів у форматі `.asc` через "Advanced" > "Export Secret Keys"
- В Thunderbird імпортуємо саме приватний ключ в "Key Manager" (публічний ключ не потрібен, хоча він й експортується разом з приватним)
Публічні ключі отримувачів
Після того, як імпортували свій приватний ключ, в Thunderbird вже можна буде читати розшифровані повідомлення від отримувачів, але для відправлення відповідей - потрібно знати їх публічний ключ.
Проблема в тому, що DeltaChat не надсилає ключ отримувача в кожному листі, можливо це якась "оптимізація" чатингу, не знаю. Меню дельтачат - це пекло, мені не вийшло просто дістати публічний ключ у файл, бачу тільки QR та інший клікбейтний мотлох властивий смартфонщикам. Тому видер ці дані запитом з експортованої БД ("Chats and Media" > "Export backup")
sqlite3 '/path/to/abcde123@nine.testrun.org/dc_database_backup.sqlite' "SELECT hex(public_key) FROM public_keys WHERE id=1;" | xxd -r -p > contact.pgp
- `abcde123@nine.testrun.org` - це ваш обліковий запис на сервері `nine.testrun.org` (або іншому)
- `id=1` - обираємо потрібний, або просто експортуємо усі
- `contact.pgp` - експортований бінарний ключ, його потрібно додати в Thunderbird (Import Public Key from File)
Якщо все зроблено правильно, то отримані листи матимуть такий індикатор:

А при створенні, бути відміченим без помилок безпеки відповідне меню OpenPGP та його сутності:


Системний менеджер ключів GPG
Щастя листування тривало не довго: задоволений DeltaChat реципієнт попросив мене встановити йому додаток на інший пристрій, після чого я почав отримувати від нього повідомлення з помилкою декодування:
The secret key that is required to decrypt this message is not available.
При натисканні кнопки OpenPGP > OpenPGP Debug Log, поле `key id` вказано як 0x0000000000000000
Тобто через заморочки протоколу, відправник не відправляє (як це прийнято) разом з листом свій публічний ключ вкладенням, або до нього було змінено якийсь підпис на новому пристрої... точну причину я не знайшов. Перепробував різні сценарії форсування, наприклад файлом `mail.openpgp.alias_rules_file` в `about:config`
https://support.mozilla.org/en-US/kb/openpgp-recipient-alias-configuration
Але все марно, окрім одного способу - використання системної утиліти `gpg`. Тут все робиться по аналогії: ключі експортуються за рецептом вище, але імпортуються не в Thunderbird, а в системну зв'язку ключів:
gpg --import /path/to/keys.pgp
- файл повинен містити як публічні ключі відправників, так і ваш приватний ключ отримувача
Перевірити обидва реєстри можна командою:
gpg --list-keys gpg --list-secret-keys
- відповідно, в результаті повинно бути видно цільові e-mail
Переконатись, що системна зв'язка дійсно працює, можна експортувавши лист у форматі `.eml`
gpg --decrypt /path/to/exported.eml
Якщо декодування успішне, потрібно (щонайменше у версії Thunderbird 148) увімкнути зовнішнього провайдера в `about:config`
mail.openpgp.allow_external_gnupg = true
- і перезапустити клієнт
- при цьому, зв'язка ключів Thunderbird - ігноруватиметься, можна звідти видалити попередні записи
Чому це так, баг чи фіча - розбиратись стало не цікаво і я планую перехід на Evolution або взагалі якийсь CLI-орієнтований клієнт, де системна зв'язка стане тільки в нагоді. Нагадаю, що віднедавна, я остаточно посварився з "новітнім" Firefox і перейшов на його стару версію без телеметрії ESR 115:
Мій форк i2pdbrowser для приватно-орієнтованого Веб
Тікати з Thunderbird ще й надумав тому, що при робочому фільтр-проксі
psocks: моє бачення фільтруючого проксі
в Ctrl+Shift+J сипляться заблоковані запити на `.mozilla.com`. Мені подібна поведінка і пріоритети цієї контори набридли. Організація стала нічим не краще сучасного Google.
sequoia-sq
Не зважаючи на те, що старі листи я успішно декодував за рецептом вище, після рестарту системи нові листи знову перестали декодуватись. Якщо спробувати напряму, то результат наступний:
$ gpg --decrypt /path/to/incoming.eml gpg: packet(1) with unknown version 6
ШІ підказує, що це якісь новомодні фічі стандарту, характерні для DC, тому ось що я зробив:
sudo dnf install capnproto cargo install sequoia-sq
Встановлення останньої версії Rust в Linux
Тепер пробуємо декодувати новомодним причандалом:
sq decrypt --key /path/to/private-key.asc /path/to/incoming.eml
Якщо це працює, тоді потрібно для Thunderbird додати обгортку API, бо `sq` не розуміє стандартного синтаксису `gpg`:
cargo install sequoia-chameleon-gnupg
Таким чином, повідомлення декодується вже командою:
gpg-sq --decrypt /path/to/incoming.eml
- використовуються вже імпортовані раніше до системної зв'язки ключі
В принципі, всі ці пакунки є в репозиторіях Fedora, тому збірка з початкового коду (як це роблю я) не обов'язкова:
sudo dnf install sequoia-sq sequoia-chameleon-gnupg
На останок, вкажімо вибірковий шлях `mail.openpgp.alternative_gpg_path` в `about:config`
which gpg-sq
Специфіка листування
Сервер SMTP від екосистеми DeltaChat має свої відмінності, які варто враховувати:
- Користувачі DeltaChat будуть відправляти на ваш клієнт Thunderbird "порожні" листи з подіями, типу emoji, оновлення статусу на читання, тощо. Я поки не знайшов для себе вирішення цієї проблеми окрім як попередити відправника, що я не бачу його "райдужних мультяшок";
- Більшість (якщо не всі) сервери DC відхиляють повідомлення без наскрізного шифрування. Тому ваш реципієнт повинен бути або юзером клієнта DeltaChat або гіком, хто налаштував свій поштовий клієнт для шифрування засобами OpenPGP;
- Стандартно, Thunderbird не застосовує шифрування до нових листів і потрібно кожного разу вмикати OpenPGP кнопкою. Якщо забути це зробити, то лист надішлеться не шифрованим (і ймовірно буде відхилений сервером) тому з метою запобігання як мінімум перехоплення даних, варто окремо увімкнути шифрування для нових листів в меню конкретного облікового запису: "End-To-End Encryption" > "Default settings for sending messages" > "Enable encryption for new messages":

- Листи DC можуть приходити з хибною датою відправлення. Можливо, це зроблено спеціально, з метою приватності. Тому знайшов в Thunderbird і додав нову колонку "Order Received" з сортуванням за спаданням:

/uk/