# 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")

``` bash
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)

Якщо все зроблено правильно, то отримані листи матимуть такий індикатор:

=> using-encrypted-deltachat-smtp-in-thunderbird/openpgp-encrypted-indicator.png Індикація для отриманих листів (скріншот)

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

=> using-encrypted-deltachat-smtp-in-thunderbird/write-encrypted-indicator.png Індикатор увімкненого шифрування OpenPGP (скріншот)
=> using-encrypted-deltachat-smtp-in-thunderbird/write-encrypted-entries.png Перелік зашифрованих сутностей листа (скріншот)

## Системний менеджер ключів 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, а в системну зв'язку ключів:

``` bash
gpg --import /path/to/keys.pgp
```
* файл повинен містити як публічні ключі відправників, так і ваш приватний ключ отримувача

Перевірити обидва реєстри можна командою:

``` bash
gpg --list-keys
gpg --list-secret-keys
```
* відповідно, в результаті повинно бути видно цільові e-mail

Переконатись, що системна зв'язка дійсно працює, можна експортувавши лист у форматі `.eml`

``` bash
gpg --decrypt /path/to/exported.eml
```

Якщо декодування успішне, потрібно (щонайменше у версії Thunderbird 148) увімкнути зовнішнього провайдера в `about:config`

```
mail.openpgp.allow_external_gnupg = true
```
* і перезапустити клієнт
* при цьому, зв'язка ключів Thunderbird - ігноруватиметься, можна звідти видалити попередні записи

Чому це так, баг чи фіча - розбиратись стало не цікаво і я планую перехід на Evolution або взагалі якийсь CLI-орієнтований клієнт, де системна зв'язка стане тільки в нагоді. Нагадаю, що віднедавна, я остаточно посварився з "новітнім" Firefox і перейшов на його стару версію без телеметрії ESR 115:
=> my-personal-i2pdbrowser-fork-for-privacy-oriented-web.gmi Мій форк i2pdbrowser для приватно-орієнтованого Веб

Тікати з Thunderbird ще й надумав тому, що при робочому фільтр-проксі
=> psocks-my-vision-of-filtering-out-proxy.gmi psocks: моє бачення фільтруючого проксі

в Ctrl+Shift+J сипляться заблоковані запити на `.mozilla.com`. Мені подібна поведінка і пріоритети цієї контори набридли. Організація стала нічим не краще сучасного Google.

### sequoia-sq

Не зважаючи на те, що старі листи я успішно декодував за рецептом вище, після рестарту системи нові листи знову перестали декодуватись. Якщо спробувати напряму, то результат наступний:

``` bash
$ gpg --decrypt /path/to/incoming.eml
gpg: packet(1) with unknown version 6
```

ШІ підказує, що це якісь новомодні фічі стандарту, характерні для DC, тому ось що я зробив:

``` bash
sudo dnf install capnproto
cargo install sequoia-sq
```
=> install-latest-rust-version-on-linux.gmi Встановлення останньої версії Rust в Linux

Тепер пробуємо декодувати новомодним причандалом:

``` bash
sq decrypt --key /path/to/private-key.asc /path/to/incoming.eml
```

Якщо це працює, тоді потрібно для Thunderbird додати обгортку API, бо `sq` не розуміє стандартного синтаксису `gpg`:

``` bash
cargo install sequoia-chameleon-gnupg
```

Таким чином, повідомлення декодується вже командою:

``` bash
gpg-sq --decrypt /path/to/incoming.eml
```
* використовуються вже імпортовані раніше до системної зв'язки ключі

В принципі, всі ці пакунки є в репозиторіях Fedora, тому збірка з початкового коду (як це роблю я) не обов'язкова:

``` bash
sudo dnf install sequoia-sq sequoia-chameleon-gnupg
```

На останок, вкажімо вибірковий шлях `mail.openpgp.alternative_gpg_path` в `about:config`

``` bash
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":
=> using-encrypted-deltachat-smtp-in-thunderbird/enable-encryption-for-new-mails.png Налаштування автоматичного шифрування для нових листів (скріншот)
* Листи DC можуть приходити з хибною датою відправлення. Можливо, це зроблено спеціально, з метою приватності. Тому знайшов в Thunderbird і додав нову колонку "Order Received" з сортуванням за спаданням:
=> using-encrypted-deltachat-smtp-in-thunderbird/thunderbird-order-received.png Сортування листів за індексом отримання (скріншот)