Otsast lõpuni krüpteerimine, tõeliselt selgitatud
Mida teenusepakkujad ütlevad, kui nad ütlevad E2EE, ja mida nad jäitavad mainimata. Mehhanismi ja selle piirangute õpetlik selgitus ilma reklaamiümbriseta.
Mida krüpteerimine tegelikult tähendabil
Sõnumi krüpteerimine tähendab selle muutmist millekski, mis näib mürana kõigile, kellel puudub teatud teave, mida nimetatakse võtmeks. Operatsioon toimub saatja seadmes ja õige võtmega tühistatakse see vastuvõtja seadmes. Vahepeal liigub sõnum baitide jadana, millel puudub nähtav tähendus. See on lihtne idee. Ülejäänud artikkel käsitleb nüansse, mis muudavad selle sõltuvalt juhust kas tõeliseks garantiiks või turundussildiks.
Omadussõna otspunkt- —inglise keeles end-to-end, lühendatult E2EE— lisab täpsustuse. Krüpteerimist ei tehta selleks, et vaheserver saaks seda lugeda ja edastada. See tehakse nii, et ainult kahel otspunktil, saatja seadmel ja vastuvõtja seadmel, oleks võti. Iga server, mida sõnum läbib, näeb müra, mitte sõnumit. See on tehniline erinevus krüpteerimisest edastamisel, kus sisu krüpteeritakse ühest serverist teise liikumisel, kuid iga server dekrüpteerib selle edasisaatmiseks, taastades ajutiselt selgeteksti.
Jagatud saladuse paradoks
On ilmne probleem. Selleks, et kaks inimest saaksid omavahel sõnumeid krüpteerida ja dekrüpteerida, vajavad mõlemad sama võtit. Kuid kuidas nad selles võtmes kokku lepivad, kui kõik, mida nad üksteisele saadavad, läbib definitsiooni kohaselt kanali, kus keegi võib pealt kuulata? Võtmes kokkuleppimine samas kanalis, kus nad seda hiljem kasutavad, tundub võimatu: kui ründaja kuuleb seda kokkuleppimise ajal, saab ta dekrüpteerida kõik järgneva. Aastakümneid lahendas klassikaline krüptograafia selle rängal viisil: võtmed anti üle isiklikult enne kasutamise alustamist füüsilistel kohtumistel. Suursaadikud kandsid kaasas võtmetega kohvreid, mis olid õmmeldud mantli voodri sisse.
Kaasaegses e-posti suhtluses see lahendus ei scaleeru. Kui me peaksime füüsiliselt minema iga inimese juurde, kellega kavatseme krüpteeritult suhelda, ei saaks me kellegagi rääkida. Küsimus, mille krüptograafiline kogukond viiskümmend aastat tagasi esitas, oli järgmine: kas on võimalik, et kaks inimest, kes üksteist ei tunne ja jagavad vaid avalikku kanalit, lepivad samas avalikus kanalis kokku saladuses, mida keegi kanalit pealt kuulaja ei saa teada?
Diffie-Hellmani elegants
1976. aastal demonstreerisid kaks matemaatikut nimega Whitfield Diffie ja Martin Hellman midagi pealtnäha võimatut: et kaks inimest, rääkides ainult avaliku kanali kaudu — kanali kaudu, kus kõik saavad kuulda kõike, mida nad ütlevad —, saavad kokku leppida salajases paroolis ilma, et ükski kuulaja saaks seda avastada. See kõlab nagu maagia. See ei ole: see on matemaatika. Diffie-Hellmani võtmevahetus, nagu seda sellest ajast peale teatakse, on praktiliselt kogu krüpteeritud internetisuhtluse alus ning pool sajandit intensiivset kasutamist ja ülemaailmset akadeemilist kontrolli kinnitavad selle kindlust. Kes soovib näha visuaalset intuitsiooni või matemaatikat, võib lugemist jätkata. Kes eelistab usaldada, et see töötab, võib samuti jätkata ilma artikli lõime kaotamata.
Neile, kes soovivad seda pildis ette kujutada, on olemas tuntud analoogia värvidega. Kujutage ette, et Alice ja Bruno lepivad avalikult kokku põhivärvis — ütleme kollases — neid pealt kuulava Eva silme all. Kumbki valib privaatselt teise salajase värvi ja segab oma saladuse kollasega. Alice saab teatud oranži; Bruno saab teatud rohelise. Nad vahetavad tulemusi Eva silme all. Nüüd segab kumbki saadud värvi oma saladusega ja mõlemad jõuavad sama lõppvärvini, sest segamise järjekord ei ole oluline. Eva on näinud kollast ja kahte vahepealset segu, kuid mitte saladusi; ilma ühegi saladuseta ei jõua ta lõppvärvini. Reaalne matemaatika asendab värvid astendamisega moodulrühmades või elliptilistes kõverates, kuid idee on sama: jagatud saladus luuakse avalikult ilma, et keegi kanalis saaks seda rekonstrueerida.
Diffie-Hellmanist Signal-protokollini
Otsast lõpuni krüpteerimine, mida tänapäevased professionaalsed sõnumirakendused kasutavad, tugineb peaaegu ilma eranditeta Diffie-Hellmani vahetuse elegantsele ja tugevdatud versioonile. Signal-protokoll, mille disainisid Trevor Perrin ja Moxie Marlinspike aastatel 2013–2016, on etaloniks. See kombineerib kahte põhiideed. Esimene on võtmevahetus elliptilistes kõverates (X25519), mis loob algse jagatud saladuse kahe seadme vahel. Teine on nn Double Ratchet — kahekordne hammasratas —, mis uuendab võtmeid automaatselt iga sõnumiga, nii et seadme kompromiteerimine täna ei võimalda dekrüpteerida varasemaid sõnumeid ega tulevasi sõnumeid pärast hammasratta pööramist.
Zig-is mahub kahe seadme vahel jagatud saladust loov X25519 vahetus kuuele reale, kasutades standardraamatukogu:
const std = @import("std");
const X25519 = std.crypto.dh.X25519;
// Alicia y Bruno generan cada uno un par (privada, pública).
const par_alicia = X25519.KeyPair.generate(io);
const par_bruno = X25519.KeyPair.generate(io);
// Cada parte recibe la clave pública de la otra y deriva el mismo secreto.
const secreto_alicia = X25519.scalarmult(par_alicia.secret_key, par_bruno.public_key) catch unreachable;
const secreto_bruno = X25519.scalarmult(par_bruno.secret_key, par_alicia.public_key) catch unreachable;
// secreto_alicia == secreto_bruno (32 bytes)
Ja mis täpselt asub std.crypto.dh.X25519 sees? Ei mingit varjatud maagiat. Need on kaks lühikest funktsiooni, mida saab täies mahus lugeda Zigi enda standardraamatukogust. Esimene tuletab privaatvõtmest avaliku võtme — vahetuse «gᵃ»:
pub fn recoverPublicKey(secret_key: [secret_length]u8) IdentityElementError![public_length]u8 {
const q = try Curve.basePoint.clampedMul(secret_key);
return q.toBytes();
}
Artikli keeles: privaatvõtit «korrutatakse» — elliptilises, mitte elementaarses aritmeetilises mõttes — Curve25519 kõvera baaspunktiga ja tulemus serialiseeritakse kolmekümne kaheks baidiks. Operatsioon clampedMul on selle skalaarkorrutise tugevdatud versioon: see sisaldab kaitsemeetmeid, mida krüptograafiline kogukond on aastate jooksul lisanud, et seista vastu teadaolevatele rünnakuperekondadele. Kaks rida funktsiooni keha.
Teine funktsioon kombineerib sinu privaatvõtme avaliku võtmega, mille teine pool sulle saadab. See on vahetuse «(gᵇ)ᵃ», mis toodab kolmekümne kahe baidise jagatud saladuse, mida kumbki teist kunagi ei edastanud:
pub fn scalarmult(secret_key: [secret_length]u8, public_key: [public_length]u8) IdentityElementError![shared_length]u8 {
const q = try Curve.fromBytes(public_key).clampedMul(secret_key);
return q.toBytes();
}
Veel kaks rida. Saadud avalikku võtit tõlgendatakse punktina kõveral ja «korrutatakse» enda privaatvõtmega. Kõvera operatsiooni kommutatiivsuse tõttu — mis on analoogne numbrilises näites nähtud astendajate korrutamise kommutatiivsusega — lõpetavad mõlemad osapooled sama serialiseeritud punktiga: täpselt selle jagatud saladusega, millest artikkel räägib.
Mida otsast lõpuni krüpteerimine kaitseb
Mida E2EE hästi kaitseb, eeldades korrektset teostust, on sõnumi sisu edastamise ajal. Vahepealne server, mis krüpteeritud andmeid vastu võtab ja edasi saadab, näeb arusaamatute baitide jada. Ründaja, kellel on juurdepääs kaablile, ruuterile või wifi pääsupunktile, näeb sama. Teenusepakkuja, kes säilitab liiklusest koopiaid, ei saa seda hiljem lugeda. Valitsus, kes kohustab teenuseoperaatorit sisu üle andma, saab samad arusaamatud baidid, mis serveril algselt olid.
See on praktilises mõttes palju. See on vahe kirja kirjutamise vahel läbipaistmatusse ümbrikusse ja selle kirjutamise vahel postkaardile. Mõlemad jõuavad kohale. Ainult üks säilitab sisu postiljoni eest.
Mida otsast lõpuni krüpteerimine ei kaitse
Seda tasub sama hästi teada. E2EE ei kaitse metaandmeid: server teab endiselt, et kasutaja A saadab andmeid kasutajale B, mis kellaajal, kui sagedasti ja kust, isegi kui ta ei tea, mida öeldakse. Need metaandmed, nagu me juba väitsime artiklis Krüpteerimine ei tähenda privaatsust, on sageli paljastavamad kui sisu. Teadmine, kad keegi helistas lahutustele spetsialiseerunud advokaadibüroosse reedel kell 22:00 kolmekümneks minutiks, räägib loo, mida kõne sisu kunagi ei rääkinud. See on sama olukord nagu näha inimest mitu korda onkoloogiakliinikusse sisenemas ja selt väljumas: pole vaja kuulda midagi siseräägitust, et kujutada ette, mis toimub. Üksik eraldiseisev metaandmeühik ei pruugi tähendada midagi; mitu omavahel ristatud joonistavad midagi tõele liiga sarnast. E2EE ei kaitse otspunkte: kui vastuvõtja seade on pahavaraga kompromiteeritud, dekrüpteeritakse sõnum selle vastuvõtja jaoks tavapäraselt ja pahavara loeb seda. E2EE ei kaitse suhtluspartneri identiteedi enda eest: kui Alice usub, et räägib Brunoga, kuid ründaja on end alguses vahele seganud (man in the middle) ja protokoll ei sisalda sõltumatut kontrolli, lõpetavad mõlemad osapooled sissetungijaga rääkimisega, arvates, et nad räägivad omavahel.
On neljas asi, mida tasub ilma kahemõttelisuseta sõnastada. E2EE ei takista pakkujat, kes väidab end seda pakkuvat, hoidmast lisaks krüpteerimata sõnumi koopiat oma süsteemides. Väide „minu sõnumid on otsast lõpuni krüpteeritud“ ja väide „pakkuja ei säilita minu sisu“ ei ole samad. Rakendus võib täita esimest, rikkudes samal ajal teist; oleme seda alates 2018. aastast korduvalt pressi pealkirjades näinud. Kasutajal puudub tehniline viis ühe juhu eristamiseks teisest ilma ekspertuuringuta, välja arvatud juhul, kui kliendi kood on kontrollitav. Üldsusele tuntuim juhtum: WhatsApp krüpteerib sõnumid transiidi ajal otsast lõpuni, kuid kui kasutaja aktiveerib varundamise iCloudi või Google Drive'i ilma täiendava krüpteerimiseta, salvestatakse see koopia loetavana kolmanda osapoole infrastruktuuris ja krüpteerimine tühistatakse kasutaja enda poolt.
Küsimus, mida operaator ei soovi kuulda
Rakendus, mis väidab, et krüpteerib otsast lõpuni, võib tehniliselt teha võtmete osas ühte kolmest asjast:
- Võtmed asuvad ainult seadmetes. Need luuakse ja asuvad eranditult kasutajate seadmetes; operaator ei tea neid ega salvesta neid. See on optimaalne juhtum.
- Operaator saab soovi korral ligi. Operaatoril on kasutajate võtmed (või ta saab neid soovi korral genereerida) ja ta hoiab neid oma andmebaasides. Kui ta soovib või teda sunnitakse, saab ta sisu lugeda. Nii on see enamiku pilveteenuste puhul.
- Operaatoril puudub disaini poolest ligipääs, kuid ta kontrollib ligipääsu. Operaatoril ei ole võtmeid, kuid tal on kontroll rakenduse üle, mis neid genereerib. Sunni korral saab ta saata pahatahtliku uuenduse, mis püüab võtmed või sisu kinni enne krüpteerimist. Nii on see paljude kommertsiaalsete E2EE teenuste puhul.
Professionaali jaoks on operatiivne küsimus, kus asuvad võtmed, kes neid kontrollib ja mis juhtuks, kui operaatorile saabuks homme kohtumäärus, mis nõuab minu vestluste dekrüpteerimist — mitte see, kas pakkuja väidab pakkuvat otspunktkrüpteerimist. Kolm vastust sellele küsimusele on täiesti erinevad, isegi kui kõik kolm rakendust esitlevad end reklaamides sama märgendiga.
Ümbrik ja teine võti
Läbipaistmatu ümbrik lahendab kirjakandja probleemi: keegi, kes selle teel kinni püüab, ei saa selle sisu lugeda. See ei lahenda teist probleemi: kes veel võtme koopiat hoiab ja millise diskreetse nime all — konto taastamine, varukoopia, seadmetevaheline sünkroonimine — seda koopiat säilitatakse. Kolm eespool kirjeldatud arhitektuuri kasutavad sama ümbrikku ja lubavad oma reklaamides sama asja; see, mida nad teevad teise võtmega, on täpselt see, mida silt ei ütle.
Suletud ümbrik, mille võtme koopia on hoiul teises sahtlis, on praktikas avatud ümbrik.
Otsast lõpuni krüpteerimine, kui see on õigesti tehtud, on üks peenemaid konstruktsioone, mida kaasaegne krüptograafia on igapäevasesse praktika toonud. Algne idee — kaks inimest saavad avaliku kanali kaudu saladuses kokku leppida — kuulub Whitfield Diffie'le ja Martin Hellmanile (1976); pool sajandit hiljem elame endiselt selle tagajärgedes. Kuid nagu iga tehnilise lubaduse puhul, sõltub selle väärtus tegelikust täitmisest, mitte sildist. Ausa professionaali küsimus ei ole „kas see on krüpteeritud?“, vaid „kelle käes on võtmed?“. Vastustel on erinevad tagajärjed. Neid tasub teada.
Allikad ja täiendav lugemine
- Diffie, W.; Hellman, M. — New Directions in Cryptography, IEEE Transactions on Information Theory, november 1976. Avaliku võtme krüptograafia alusartikkel.
- Perrin, T.; Marlinspike, M. — The Double Ratchet Algorithm, Open Whisper Systemsi avalik spetsifikatsioon, 2016. aasta versioon. Signal-protokolli ja selle tööstuslike tuletiste alus.
- RFC 7748 — Elliptic Curves for Security (IETF, jaanuar 2016). Kaasaegsetes võtmevahetustes kasutatavate kõverate X25519 ja X448 normatiivne spetsifikatsioon.
- Ferguson, N.; Schneier, B.; Kohno, T. — Cryptography Engineering: Design Principles and Practical Applications (Wiley, 2010). Peatükid võtmevahetuse ja autenditud krüpteerimisprotokollide kohta.
- Määrus (EL) 2024/1183 Euroopa digitaalse identiteedi raamistiku kohta (eIDAS 2) — kehtestab raamistikud, kus vestluspartneri sõltumatu kontroll omandab institutsionaalse toe ja kus erinevusel nimelise ja tegeliku krüpteerimise vahel on erinevad õiguslikud tagajärjed.