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, що раджу і вам.



Публічні ключі отримувачів


Після того, як імпортували свій приватний ключ, в 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

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


Індикація для отриманих листів (скріншот)


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


Індикатор увімкненого шифрування 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

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


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

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


mail.openpgp.allow_external_gnupg = true

Чому це так, баг чи фіча - розбиратись стало не цікаво і я планую перехід на 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 має свої відмінності, які варто враховувати:


Налаштування автоматичного шифрування для нових листів (скріншот)

Сортування листів за індексом отримання (скріншот)



/uk/