Ves a la documentació
Base de coneixement

Xifratge d'extrem a extrem

Claus OpenPGP creades al teu navegador. El correu que envies a una altra adreça d'OpenEmail es pot segellar abans de sortir de la pestanya, i el correu segellat adreçat a tu s'obre al panell de lectura, desxifrat a la teva màquina. Les claus no són mai nostres per poder-les lliurar.

Detalls

  • Les dues meitats estan connectades d'extrem a extrem. Escriure a un destinatari que té la clau publicada segella el cos al navegador abans que la petició surti; al servidor se li lliura una armadura que no pot llegir, la marca com a pgp-mime i construeix un missatge multipart/encrypted real. La lectura funciona igual a la inversa: el text xifrat es descarrega, es desxifra a la pestanya i es representa com a correu ordinari.
  • L'algorisme és el que ja fa servir tothom: OpenPGP, a través d'openpgp.js, i PGP/MIME al cable. Una clau v4 sobre Curve25519, la mateixa forma que emet Proton i que produeix gpg amb el seu algorisme modern per defecte. Així, el correu que això llegeix és en principi el mateix correu que produeixen Thunderbird, gpg i Proton, i aquí no hi ha cap format propi que després s'hagi de desfer.
  • A la pràctica, però, és d'OpenEmail a OpenEmail. En tot aquest codi no hi ha cap Web Key Directory, cap consulta a servidors de claus ni cap anàlisi de capçaleres Autocrypt: l'únic lloc on es troba mai la clau d'un destinatari és el nostre propi directori, que conté claus publicades des d'aquesta aplicació per gent l'adreça de la qual és en un domini allotjat aquí. Tampoc no hi ha manera de repartir la teva clau. L'aplicació publica la teva meitat pública en aquell directori i no n'ofereix cap còpia ni exportació, de manera que un corresponsal amb Thunderbird no té cap manera admesa d'obtenir-la. Interoperar amb el món PGP més ampli és una propietat del format, no pas una cosa que el producte faci encara per tu.
  • La lectura no està limitada d'aquesta manera, perquè el desxifratge no necessita cap directori. Qualsevol missatge PGP/MIME o PGP en línia que arribi a aquesta bústia segellat amb una clau d'aquest navegador s'obre, tant se val qui l'hagi enviat i quin client hagi fet servir. Això inclou els missatges segellats amb una clau que després has rotat: les claus retirades es queden al clauer i es proven al costat de l'actual, de manera que rotar no et costa el correu que ja has rebut.
  • El verd vol dir obert, i no s'hi arriba de cap altra manera. La fila Detalls → Seguretat només es posa verda després que un desxifratge hagi retornat text pla de debò en aquesta pestanya, mai a partir d'un camp del missatge ni del fet que hagi arribat un sobre xifrat. Diu “Xifrat d'extrem a extrem. Obert amb la teva clau en aquest navegador”. Tot el que no hi arriba té la seva pròpia frase en comptes de compartir-ne una: encara s'hi està mirant, clau bloquejada, segellat amb una clau que aquest navegador no té, no s'ha pogut obrir, aquí no hi ha cap clau, i aquest navegador no ens ha deixat mirar. “No ho hem pogut comprovar” i “no tens la clau” són afirmacions diferents i la fila et fa llegir quina t'ha tocat.
  • L'S/MIME encara no es pot obrir. És CMS sota un certificat X.509, openpgp.js no el pot tocar, i al producte no hi ha cap magatzem de certificats on guardar la clau si pogués, de manera que un missatge S/MIME diu que OpenEmail no el pot obrir, i no se li ofereix un desbloqueig que no faria res.
  • La meitat privada es genera al teu navegador i no en surt mai: ni xifrada, ni dins d'una còpia de seguretat, ni en una eina de suport. Al servidor no se li envia mai, de manera que aquí no hi ha res a lliurar, a requisar ni a filtrar. Es desa bloquejada amb una frase de pas en una base de dades IndexedDB pròpia, openemail-keyring, deliberadament fora de l'abast del consell de “neteja la memòria cau” i del reinici de la consola de depuració: tots dos esborren la memòria cau de consultes, i una clau desada al costat faria que un consell de suport rutinari destruís permanentment tots els missatges xifrats que hagués rebut mai el compte. Suprimir el teu compte sí que la suprimeix, perquè llavors el correu també se'n va. Desbloquejar-la la manté en memòria durant 15 minuts d'inactivitat i 8 hores com a màxim, i després llegir el missatge segellat següent torna a demanar la frase de pas.
  • No hi ha dipòsit en custòdia ni recuperació, i això és permanent i no pas pendent de construir. La teva frase de pas és l'única manera d'entrar; oblida-la i tots els missatges que algú t'hagi segellat es queden als nostres servidors com a text xifrat que ningú no pot llegir, nosaltres inclosos. El correu s'ha perdut, i per molt que ho demanis no es recupera. La pantalla d'alta ho diu abans que existeixi la primera clau, darrere d'una casella que has de marcar, i el fitxer de còpia de seguretat és obligatori, i el botó Fet continua desactivat fins que te l'has descarregat. Aquell fitxer s'escriu sense l'enduriment addicional en repòs que fa servir aquest navegador, expressament, perquè encara s'importi en versions antigues de gpg: una còpia de seguretat que no pots obrir en un altre lloc no és una còpia de seguretat. La clau també viu en un sol navegador d'un sol dispositiu, i un telèfon o un segon portàtil no tenen res fins que hi importes aquell fitxer.
  • El directori conté claus públiques i res més, i una clau pertany a una persona i no pas a una bústia, ja que una clau lligada a una adreça s'hauria de copiar entre tothom amb qui es comparteix aquella adreça, que és custòdia amb un altre nom. Consultar-ne una requereix una sessió iniciada i permís per enviar, mai un punt d'accés públic, perquè un sondeig obert d'adreces és un oracle que diu a qualsevol quines adreces són bústies vives aquí. Respon igual per a “això no ho allotgem” i per a “ho allotgem i ningú no ha publicat cap clau”, ja que distingir-ho només mou l'oracle darrere d'un inici de sessió en comptes d'eliminar-lo. I una clau deixa de repartir-se en el moment que el seu propietari perd l'accés a l'adreça, i no pas quan algú es recorda de revocar-la.
  • Cada byte es segella al navegador en el moment que l'escrius, que és el que fa que els enviaments diferits funcionin: un missatge programat o un que espera a la finestra de desfer es desa com a text xifrat i el despatxa més tard una cua que no té cap clau i no en pot llegir res. Un destinatari la consulta de directori del qual HA FALLAT bloqueja l'enviament en comptes de tractar-se en silenci com si no tingués clau. I un missatge segellat només surt mai per un camí que porti el missatge sencer. Un camí de sortida que agafés un cos HTML publicaria l'armadura com a text visible i informaria d'un èxit, de manera que un enviament que hi aniria a parar es rebutja abans que surti cap byte i no pas després.
  • Què costarà segellar, mesurat i no endevinat: l'armadura és unes 1,86 vegades els bytes originals, de manera que uns 2,7 MB d'adjunts caben als 5 MB que permet el camí d'enviament, i el redactor rebutja una càrrega superior abans de passar segons xifrant-ne una que el transport rebutjaria. El correu xifrat no informa de cap obertura ni de cap clic, perquè el seguiment per destinatari funciona variant el cos per persona i un sol bloc segellat no pot variar, i un enllaç reescrit és un enllaç que podem llegir, que és el contrari de l'afirmació. Un enviament xifrat tampoc no es pot desduplicar mai amb una clau d'idempotència: una clau de sessió nova fa que el text xifrat siguin bytes diferents a cada intent, de manera que un reintent no té mai la mateixa empremta que l'original.
  • La programació segella en el moment de redactar, no en el d'enviar. El redactor construeix el text xifrat contra les claus que tenen els destinataris el dia que escrius, no el dia que sortiria el missatge, la regla que aquest producte ja aplica a les plantilles i a les traduccions, on un missatge programat porta el que vas aprovar i no pas el que hagi canviat després. La diferència és que una plantilla desfasada simplement està desactualitzada i una clau desfasada és il·legible, de manera que el redactor anomena la data amb paraules en comptes d'oferir una advertència: “Segellat ara, enviat el …. Tothom qui hi sigui necessitarà la clau que té avui.” El rebuig que protegeix l'altra meitat està desplegat però no s'ha activat mai, perquè encara no pot existir cap missatge així: si n'existís, editar-lo després es rebutjaria en comptes de permetre'l en silenci, ja que pedaçar el cos escriuria text pla sobre el text xifrat i canviar els destinataris canviaria a qui s'havia segellat, i qualsevol de les dues coses el lliura en clar mentre totes les pantalles continuen dient-ne xifrat.
  • Dues coses que el redactor no oferirà en absolut, i ho diu en comptes de fallar al cable. Una plantilla es representa al servidor a partir d'una versió publicada, de manera que en aquest navegador no hi ha res a segellar. Una resposta cita la conversa a sota i aquella citació s'afegeix després del punt on se segellaria el cos, i deixa una còpia llegible de tot el fil fora del segell, de manera que les respostes i els reenviaments no es poden xifrar fins que l'historial citat es plegui dins del text xifrat.
  • Res d'això no amaga la teva línia d'assumpte, a qui vas escriure ni quan. L'assumpte viatja en clar en un missatge segellat exactament igual que en qualsevol altre, i el panell de lectura ho diu sobre el missatge mateix: “L'assumpte i les adreces han viatjat en clar; aquest text no.” PGP cobreix el cos i cap implementació seva no cobreix la resta. Els esborranys tampoc no estan segellats, perquè el desament automàtic continua escrivint text pla a la teva bústia mentre redactes, perquè no desar en silenci faria perdre feina, i el cadenat ho revela amb paraules.
  • Reconèixer el correu que arriba segellat va ser el primer i continua vigent. PGP/MIME, l'armadura PGP en línia i S/MIME es representaven abans com un cos buit amb dos adjunts sense sentit, perquè l'analitzador només tracta el text pla i l'HTML com a llegibles i llençava la resta a la tira de fitxers. Aquelles parts ara s'identifiquen, el mobiliari del protocol es manté fora de la llista d'adjunts, el text xifrat es desa intacte, que és d'on desxifra el lector en comptes de descarregar res de nou, i un missatge que ningú d'aquí no pot obrir ho continua dient clarament.
  • Un missatge signat es tracta com una cosa a part, perquè ho és. El cos d'un missatge així és llegible, de manera que la cerca, les regles i tota la resta hi continuen funcionant; no es tanca mai darrere d'un pany i no es passa mai per un desxifratge. La fila diu “Signat pel remitent. Signatura no comprovada”, atenuada, i continua atenuada fins que alguna cosa d'aquí pugui verificar una signatura de debò, cosa que encara no fa res, tampoc en un missatge que s'hagi desxifrat correctament. Veure que un missatge està segellat no és el mateix que haver-lo obert, i obrir-lo no és el mateix que saber qui el va segellar.
  • En un missatge xifrat, el cos es retira de tot el que altrament el llegiria: el fragment de cerca, la passada pel cos del puntuador de pesca, la comprovació d'escriptura per IA, les condicions sobre el cos a les regles, la importació de convits de calendari i els resums de fil. La meitat d'autenticació de la comprovació de pesca encara s'executa, perquè DMARC, DKIM i SPF es llegeixen de capçaleres que el text xifrat no amaga. Desxifrar no canvia res d'això. El text pla només existeix a la pestanya que l'ha obert, de manera que un missatge segellat continua sense poder-se cercar i queda fora de les funcions d'IA fins i tot després que l'hagis llegit, i no se n'ofereix la traducció. Aquest és el cost de l'afirmació, no pas una omissió.