Znalostní báze
End-to-end šifrování
Klíče OpenPGP vytvořené ve vašem prohlížeči. Poštu, kterou posíláte na jinou adresu OpenEmail, lze zapečetit dřív, než opustí záložku, a zapečetěná pošta adresovaná vám se otevře ve čtecím podokně, dešifrovaná na vašem stroji. Klíče nikdy nejsou naše, takže je nemáme komu vydat.
Podrobnosti
- Obě poloviny jsou propojené od konce ke konci. Psaní příjemci, který má publikovaný klíč, zapečetí tělo v prohlížeči ještě předtím, než požadavek odejde; server dostane pancíř, který neumí přečíst, označí ho jako
pgp-mimea sestaví skutečnou zprávumultipart/encrypted. Čtení běží stejně, jen pozpátku: šifrovaný text se stáhne, dešifruje se v záložce a vykreslí se jako obyčejná pošta. - Algoritmus je ten, který už používají všichni ostatní: OpenPGP přes openpgp.js a PGP/MIME na drátě. Klíč v4 na Curve25519, stejný tvar, jaký vydává Proton a jaký vyrobí gpg se svým výchozím moderním algoritmem. Pošta, kterou tohle čte, je tedy v principu tatáž pošta, jakou vyrábí Thunderbird, gpg a Proton, a nic tady není náš vlastní formát, který by se později musel rozplétat.
- V praxi je to ale OpenEmail s OpenEmail. V téhle kódové základně není žádný Web Key Directory, žádné dotazování keyserveru ani žádné parsování hlavičky Autocrypt: jediné místo, kde se klíč příjemce kdy najde, je náš vlastní adresář, který drží klíče publikované z této aplikace lidmi, jejichž adresa je na doméně hostované tady. Ani neexistuje způsob, jak svůj klíč předat dál. Aplikace publikuje vaši veřejnou polovinu do toho adresáře a nenabízí žádné její zkopírování ani export, takže korespondent na Thunderbirdu nemá podporovanou cestu, jak ji získat. Součinnost se širším světem PGP je vlastností formátu, ne něčím, co pro vás produkt zatím dělá.
- Čtení takhle omezené není, protože dešifrování žádný adresář nepotřebuje. Každá zpráva v PGP/MIME nebo ve vloženém PGP, která do této schránky dorazí zapečetěná na klíč v tomto prohlížeči, se otevře, ať ji poslal kdokoli a ať použil jakéhokoli klienta. Patří sem i zprávy zapečetěné na klíč, od kterého jste už odrotovali: vyřazené klíče zůstávají v klíčence a zkoušejí se vedle toho současného, takže vás rotace nepřipraví o poštu, kterou jste už dostali.
- Zelená znamená otevřeno a jinudy se k ní dostat nedá. Řádek Podrobnosti → Zabezpečení zezelená teprve poté, co dešifrování v této záložce skutečně vrátilo otevřený text, nikdy z pole na zprávě a nikdy z toho, že dorazila zašifrovaná obálka. Hlásí „Šifrováno end-to-end. Otevřeno vaším klíčem v tomto prohlížeči“. Všechno, co k tomu nedosáhne, má vlastní větu místo jedné společné: ještě hledáme, klíč zamčený, zapečetěno na klíč, který tento prohlížeč nemá, nepodařilo se otevřít, žádný klíč tu není, a tento prohlížeč nás nenechal se podívat. „Nemohli jsme to zkontrolovat“ a „nemáte klíč“ jsou různá tvrzení a řádek vás nutí přečíst, které z nich jste dostali.
- S/MIME otevřít pořád nejde. Je to CMS pod certifikátem X.509, openpgp.js na něj nesáhne a v produktu není žádné úložiště certifikátů, které by ten klíč drželo, kdyby sáhl, takže zpráva v S/MIME řekne, že ji OpenEmail neumí otevřít, a nenabídne se jí odemčení, které by stejně nic neudělalo.
- Soukromá polovina se generuje ve vašem prohlížeči a nikdy ho neopustí: ani zašifrovaná, ani uvnitř zálohy, ani v podpůrném nástroji. Serveru se nikdy neposílá, takže tady není co vydat, obeslat soudním příkazem ani nechat uniknout. Ukládá se zamčená přístupovou frází ve vlastní databázi IndexedDB, openemail-keyring, záměrně mimo dosah rady „vymažte si cache“ i resetu v ladicí konzoli: obojí smete cache dotazů a klíč uložený vedle ní by z běžné podpůrné rady udělal nástroj, který natrvalo zničí každou zašifrovanou zprávu, jakou kdy účet dostal. Smazání účtu ji smaže, protože tam odchází i pošta. Odemčení ji drží v paměti 15 minut nečinnosti a nejvýš 8 hodin, po kterých si čtení další zapečetěné zprávy řekne o přístupovou frázi znovu.
- Neexistuje žádná úschova ani obnova, a to je trvalé, ne nedodělané. Vaše přístupová fráze je jediná cesta dovnitř; zapomeňte ji a každá zpráva, kterou vám kdokoli zapečetil, zůstane na našich serverech jako šifrovaný text, který nikdo nepřečte, nás nevyjímaje. Pošta je pryč a žádné žádání ji nevrátí. Obrazovka registrace to říká ještě dřív, než vznikne první klíč, za zaškrtávátkem, které musíte zaškrtnout, soubor se zálohou je povinný a tlačítko Hotovo zůstane neaktivní, dokud si ho nestáhnete. Ten soubor se zapisuje bez zpřísnění pro uložená data, které tenhle prohlížeč používá, a to záměrně, aby se dal pořád naimportovat i do starších sestavení gpg: záloha, kterou jinde neotevřete, není záloha. Klíč navíc žije v jednom prohlížeči na jednom zařízení a telefon nebo druhý notebook nemají nic, dokud tam ten soubor nenaimportujete.
- Adresář drží veřejné klíče a nic jiného a klíč patří člověku, ne schránce, protože klíč přivázaný k adrese by se musel kopírovat mezi všechny, s kým je ta adresa sdílená, což je úschova pod jiným jménem. Vyhledání v něm vyžaduje přihlášenou relaci a oprávnění odesílat, nikdy veřejný endpoint, protože otevřené sondování adres je orákulum, které komukoli prozradí, které adresy tu jsou živé schránky. Odpovídá stejně na „tuhle nehostujeme“ i „hostujeme ji a nikdo nepublikoval klíč“, protože rozlišit je by orákulum jen posunulo za přihlášení, místo aby ho odstranilo. A klíč se přestane vydávat v okamžiku, kdy jeho vlastník ztratí přístup k adrese, ne až si někdo vzpomene ho odvolat.
- Každý bajt se pečetí v prohlížeči ve chvíli, kdy ho píšete, a právě díky tomu odložená odesílání vůbec fungují: naplánovaná zpráva nebo zpráva sedící v okně pro vrácení je uložená jako šifrovaný text a odesílá ji později fronta, která nedrží žádný klíč a nic z ní nepřečte. Příjemce, u kterého vyhledání v adresáři SELHALO, odeslání zablokuje, místo aby se s ním tiše zacházelo jako s někým bez klíče. A zapečetěná zpráva odchází jen cestou, která nese zprávu celou. Odchozí cesta, která místo toho bere tělo v HTML, by pancíř odeslala jako viditelný text a nahlásila úspěch, takže odeslání, které by tam skončilo, se odmítne dřív, než odejde jediný bajt.
- Co bude pečetění stát, změřeno místo odhadnuto: pancíř má asi 1,86násobek původních bajtů, takže do 5 MB, které cesta odesílání dovolí, se vejde zhruba 2,7 MB příloh, a editor zprávy odmítne větší náklad dřív, než stráví vteřiny šifrováním něčeho, co by přenos odmítl. Šifrovaná pošta nehlásí žádná otevření ani kliknutí, protože sledování po příjemcích funguje tak, že se tělo pro každého liší, a jeden zapečetěný blok se lišit nemůže, a přepsaný odkaz je odkaz, který umíme přečíst, což je opak toho tvrzení. Zašifrované odesílání také nikdy nelze deduplikovat klíčem idempotence: nový klíč relace udělá z šifrovaného textu při každém pokusu jiné bajty, takže opakování nikdy nemá stejný otisk jako originál.
- Naplánovaná pošta se pečetí v době psaní, ne v době odeslání. Editor zprávy staví šifrovaný text proti klíčům, které jeho příjemci mají v den, kdy píšete, ne v den, kdy by zpráva odešla, což je pravidlo, které tenhle produkt už uplatňuje u šablon a překladů, kde naplánovaná zpráva nese to, co jste schválili, ne to, co se potom změnilo. Rozdíl je v tom, že zastaralá šablona je jen neaktuální, kdežto zastaralý klíč je nečitelný, takže editor zprávy datum pojmenuje slovy, místo aby nabízel výhradu: „Zapečetěno nyní, odesláno …. Každý na ní bude potřebovat klíč, který má dnes.“ Odmítnutí, které hlídá druhou polovinu, je nasazené, ale nikdy se nespustilo, protože taková zpráva zatím nemůže existovat: kdyby existovala, pozdější úprava by byla odmítnuta, místo aby tiše prošla, protože záplatování těla by přepsalo šifrovaný text otevřeným textem a změna příjemců by změnila, komu bylo zapečetěno, a obojí doručí nezašifrovaně, zatímco každá obrazovka tomu pořád říká šifrované.
- Dvě věci editor zprávy vůbec nenabídne a řekne to, místo aby selhal až na drátě. Šablona se vykresluje na serveru z publikované verze, takže v tomhle prohlížeči není co zapečetit. Odpověď pod sebou cituje konverzaci a ta citace se připojuje až po tom, co by se tělo zapečetilo, takže by čitelná kopie celého vlákna zůstala sedět mimo pečeť; odpovědi a přeposlání proto nelze šifrovat, dokud se citovaná historie nezabalí dovnitř šifrovaného textu.
- Nic z toho neskrývá váš předmět, komu jste psali, ani kdy. Předmět u zapečetěné zprávy cestuje nezašifrovaně přesně jako u každé jiné a čtecí podokno to na zprávě říká: „Předmět a adresy putovaly nezašifrovaně; tento text ne.“ PGP pokrývá tělo a žádná jeho implementace nepokrývá zbytek. Koncepty jsou také nezapečetěné, protože automatické ukládání zapisuje do vaší schránky otevřený text po celou dobu, co píšete, protože tiše neukládat by znamenalo ztrácet práci, a zámek to vyslovuje slovy.
- Rozpoznat poštu, která přijde zapečetěná, přišlo jako první a platí dál. PGP/MIME, vložený pancíř PGP a S/MIME se dřív vykreslovaly jako prázdné tělo a dvě nesmyslné přílohy, protože parser považuje za čitelné jen prostý text a HTML a zbytek shodil do pruhu se soubory. Tyto části se teď identifikují, protokolový nábytek se drží mimo seznam příloh, šifrovaný text se ukládá celý, a právě z něj čtečka dešifruje, místo aby cokoli znovu stahovala, a zpráva, kterou tady nikdo otevřít neumí, to pořád říká na rovinu.
- Podepsaná zpráva se bere jako samostatná věc, protože jí je. Její tělo je čitelné, takže vyhledávání, pravidla i všechno ostatní na ní dál funguje; nikdy se nezamyká za zámek a nikdy neprochází dešifrováním. Řádek hlásí „Podepsáno odesílatelem. Podpis nezkontrolován“, ztlumeně, a ztlumený zůstane, dokud tady něco nebude umět podpis skutečně ověřit, což zatím neumí nic, ani u zprávy, kterou se podařilo dešifrovat. Vidět, že je zpráva zapečetěná, není totéž jako otevřít ji, a otevřít ji není totéž jako vědět, kdo ji zapečetil.
- U zašifrované zprávy se tělo odepře všemu, co by ho jinak četlo: úryvku pro vyhledávání, průchodu tělem u hodnocení phishingu, kontrole psaní AI, podmínkám na tělo v pravidlech, importu pozvánek do kalendáře i shrnutím vláken. Ověřovací polovina kontroly phishingu běží dál, protože DMARC, DKIM a SPF se čtou z hlaviček, které šifrovaný text neskrývá. Dešifrování na tom nic nemění. Otevřený text existuje jen v záložce, která ho otevřela, takže zapečetěná zpráva zůstává neprohledatelná a zůstává mimo funkce AI i poté, co jste si ji přečetli, a překlad se u ní nenabízí. To je cena toho tvrzení, ne opomenutí.