Lykildreifing, miðmannsárásir og HTTPS
Í síðasta kafla sáum við hvernig dreifilyklar geta hjálpað tveimur aðilum að senda leynd skilaboð án þess að deila lykli fyrirfram. Í raunverulegum kerfum viljum við hins vegar oft nota hraða samhverfa dulritun fyrir gögnin.
Þá þurfum við leið til að koma á sameiginlegu leyndarmáli yfir opið net. Það kallast lykildreifing (e. key exchange).
Í þessum kafla skoðum við:
- Diffie–Hellman sem aðferð til að semja um sameiginlegt leyndarmál,
- hvers vegna Diffie–Hellman eitt og sér auðkennir ekki við hvern við erum að tala,
- milligönguárás (e. man-in-the-middle attack),
- hvernig vottorð og stafrænar undirskriftir verja okkur,
- hvernig hugmyndirnar vinna saman í HTTPS.
Einföld mynd af flóknu kerfi
TLS og HTTPS innihalda margar útgáfur, stillingar og smáatriði. Hér skoðum við leiðina sem hugmyndirnar fara í gegnum kerfið. Markmiðið er að geta útskýrt stóru myndina, ekki að muna hvert bæti í handabandinu.
Vandinn við sameiginlega lykilinn
Samhverf dulritun er hröð, en Anna og Bjarni þurfa sama leynda lykilinn. Ef Anna sendir lykilinn sem venjulegan texta geta Marta og allir aðrir sem sjá netumferðina afritað hann.
Við gætum dulritað samhverfa lykilinn með dreifilykli Bjarna. Það er ein leið sem notuð hefur verið, en við viljum líka geta komið á leyndarmáli með aðferð sem er sérstaklega hönnuð fyrir lykildreifingu.
Diffie–Hellman leysir hluta vandans með sniðugri stærðfræði:
- Anna og Bjarni deila opinberum gildum,
- bæði nota sitt eigið leynda gildi,
- þau reikna sama niðurstöðu án þess að senda leyndu gildin,
- hlerari sér opinberu gildin en á erfitt með að reikna sameiginlega leyndarmálið.
Blönduð málning sem samlíking
Ímyndum okkur að Anna og Bjarni vilji búa til sama leyndarmál úr málningu.
- Þau byrja með opinberan grunnlit sem allir mega sjá.
- Anna blandar leyndum lit sínum við grunnlitinn.
- Bjarni blandar sínum leynda lit við grunnlitinn.
- Þau senda blönduðu litina sín á milli.
- Anna blandar leynda litnum sínum við blöndu Bjarna.
- Bjarni blandar leynda litnum sínum við blöndu Önnu.
Vegna þess hvernig blöndunin virkar fá þau sama endanlega litinn, en hlerarinn sér ekki leyndu litina.
Opinber grunnur: gulur
Leyndur litur Önnu: rauður
Leyndur litur Bjarna: blár
Anna sendir: gulur + rauður
Bjarni sendir: gulur + blár
Anna blandar: (gulur + blár) + rauður
Bjarni blandar: (gulur + rauður) + blár
Sameiginlegur leyndur litur: gulur + rauður + blár
Þetta er aðeins samlíking. Raunveruleg Diffie–Hellman notar veldisvísa og leifareikning, ekki málningardósir.
Vissir þú?
Diffie og Hellman birtu lykildreifingarhugmyndina árið 1976. Hún breytti því hvernig fólk hugsaði um leyndarmál á opnum netum: ekki þurfti lengur að senda leynda lykilinn sjálfan milli aðila.
Diffie–Hellman með litlum tölum
Við veljum tvö opinber gildi:
p = 23
g = 5
p er frumtala og g er grunnur. Allir mega vita þessi gildi.
Anna velur leyndu töluna sína:
a = 6
Bjarni velur sína:
b = 15
Þau reikna opinber skilaboð:
A = gᵃ mod p = 5⁶ mod 23 = 8
B = gᵇ mod p = 5¹⁵ mod 23 = 19
Anna sendir A = 8 og Bjarni sendir B = 19.
Sameiginlegt leyndarmál
Anna notar sitt leynda a með opinberu B:
S_A = Bᵃ mod p
= 19⁶ mod 23
= 2
Bjarni notar sitt leynda b með opinberu A:
S_B = Aᵇ mod p
= 8¹⁵ mod 23
= 2
Þau fá sama gildi:
S_A = S_B = 2
Ástæðan er:
Bᵃ = (gᵇ)ᵃ = gᵃᵇ
Aᵇ = (gᵃ)ᵇ = gᵃᵇ
Í alvöru kerfum er niðurstaðan ekki notuð beint sem AES-lykill. Hún fer í gegnum lykilafleiðslu svo búin séu til rétt sniðin og aðskilin lykilgildi.
Æfing: lítið Diffie–Hellman
Æfing 1
Notaðu:
p = 23
g = 5
a = 4
b = 3
- Reiknaðu
A = gᵃ mod p. - Reiknaðu
B = gᵇ mod p. - Reiknaðu sameiginlega leyndarmálið frá báðum hliðum.
Lausn við æfingu 1
- Anna sendir:
A = 5⁴ mod 23 = 625 mod 23 = 4
- Bjarni sendir:
B = 5³ mod 23 = 125 mod 23 = 10
- Anna reiknar:
Bᵃ mod p = 10⁴ mod 23 = 18
Bjarni reiknar:
Aᵇ mod p = 4³ mod 23 = 64 mod 23 = 18
Sameiginlega leyndarmálið er 18.
Í Python má sannreyna:
p, g = 23, 5
A = pow(g, 4, p)
B = pow(g, 3, p)
assert pow(B, 4, p) == pow(A, 3, p) == 18
Hvað sér hlerarinn?
Marta getur séð:
p = 23
g = 5
A = 8
B = 19
Hún sér ekki a = 6 eða b = 15.
Til að finna sameiginlega leyndarmálið þarf hún að geta fundið leynda veldisvísinn út frá til dæmis:
A = gᵃ mod p
Þetta er tengt strjála logratímavandanum (e. discrete logarithm problem). Fyrir litlu tölurnar okkar getur Marta prófað:
5¹ mod 23 = 5
5² mod 23 = 2
5³ mod 23 = 10
...
5⁶ mod 23 = 8
En í raunverulegum kerfum eru gildin valin þannig að slík leit sé óframkvæmanleg með venjulegum aðferðum.
Ekki nota litlu dæmatölurnar
Tölurnar 23 og 5 eru aðeins til að við getum reiknað með blaði og Python. Þær veita enga raunverulega vernd.
Vandinn: Diffie–Hellman auðkennir ekki sjálfkrafa
Diffie–Hellman getur komið á sameiginlegu leyndarmáli, en það veit ekki hvort Anna er í raun að tala við Bjarna. Ef einhver getur breytt skilaboðunum á leiðinni kemur upp milligönguárás.
Milligönguárás skref fyrir skref
Marta situr á milli Önnu og Bjarna:
- Anna býr til
Aog sendir „til Bjarna“. - Marta stöðvar skilaboðið og sendir Bjarna sitt eigið gildi
M₁. - Bjarni býr til
Bog sendir „til Önnu“. - Marta stöðvar það líka og sendir Önnu annað eigið gildi
M₂. - Anna og Marta reikna eitt sameiginlegt leyndarmál.
- Bjarni og Marta reikna annað sameiginlegt leyndarmál.
- Marta dulráðar skilaboð frá Önnu, les eða breytir þeim, dulritar þau aftur og sendir Bjarna.
Anna ◄──── leyndarmál A ────► Marta ◄──── leyndarmál B ────► Bjarni
Anna heldur að hún sé með lykil við Bjarna, en hún er í raun með lykil við Mörtu. Bjarni er í sömu stöðu.
Æfing: finndu árásina
Æfing 2
Anna og Bjarni nota Diffie–Hellman. Eftir samskiptin hafa þau bæði reiknað sama gildi, svo þau telja sambandið öruggt.
Marta hefur þó getað breytt öllum skilaboðum á leiðinni.
- Hvað getur Marta hafa gert?
- Hvers vegna hjálpar það ekki að Anna og Bjarni hafi reiknað sama gildi hvor í sínu lagi?
- Hvað þurfa þau til viðbótar við Diffie–Hellman?
Lausn við æfingu 2
- Marta getur hafa skipt út opinberu gildunum þannig að Anna myndi deila leyndarmáli með Mörtu og Bjarni myndi deila öðru leyndarmáli með Mörtu.
- Anna og Bjarni geta reiknað sama gildi hvort við sitt hvort sambandið, en það sannar ekki að þau séu í sama sambandinu. Þau gætu bæði verið að deila með Mörtu án þess að vita það.
- Þau þurfa auðkenningu. Til dæmis geta þau notað stafrænar undirskriftir og vottorð til að tengja opinbera lykla við rétt auðkenni.
Að tengja lykil við auðkenni
Við lærðum í RSA-kaflanum að stafræn undirskrift getur sýnt að aðili með einkalykil hafi samþykkt gögn. Sú hugmynd má nota til að auðkenna Diffie–Hellman-skilaboð.
Einfölduð útgáfa:
- Anna og Bjarni búa til tímabundin Diffie–Hellman-gildi.
- Anna undirritar mikilvæg samskiptagildi með einkalyklinum sínum.
- Bjarni sannreynir undirskriftina með dreifilykli Önnu.
- Bjarni gerir hið sama fyrir sín skilaboð.
- Þau nota aðeins sameiginlega leyndarmálið ef undirskriftirnar passa.
Vottorð hjálpa ef Anna og Bjarni hafa ekki áður skiptst á dreifilyklum. Vafri treystir ekki vottorði vegna þess að það er fallegt skjal; hann athugar undirskrift vottunarstöðvar, lén og gildistíma.
Hvernig HTTPS setur hlutina saman
HTTPS er HTTP yfir TLS. TLS notar nokkur verkfæri saman. Mjög einfölduð mynd af tengingu við https://example.is er:
1. Vafrinn tengist þjóninum
Vafrinn tengist vefþjóninum og segir meðal annars hvaða TLS-útgáfur og dulritunaraðferðir hann styður.
2. Þjónninn sendir vottorð
Þjónninn sendir vottorð sem á að tengja lénið example.is við dreifilykil. Vafrinn athugar:
- passar lénið við vefslóðina?
- er vottorðið gilt?
- er undirskriftar-keðjan traust?
3. Þau koma á sameiginlegu leyndarmáli
Í nútímalegum TLS-útgáfum er oft notuð tímabundin Diffie–Hellman-lykildreifing. Hún býr til sameiginlegt leyndarmál án þess að senda það beint.
4. Þau leiða út samhverfa lykla
Úr sameiginlega leyndarmálinu eru búnir til lyklar fyrir báðar áttir samskiptanna. Vafrinn og þjónninn þurfa ekki endilega að nota sama lykil í báðar áttir.
5. Gögnin fara yfir tenginguna með AEAD
HTTP-skeyti eru nú dulrituð og auðkennd með hraðri samhverfri aðferð, til dæmis AES-GCM eða ChaCha20-Poly1305.
Vottorð + undirskriftir
│
▼
Diffie–Hellman → sameiginlegt leyndarmál
│
▼
Lykilafleiðsla → samhverfir lotulyklar
│
▼
AEAD → dulrituð og auðkennd HTTP-skeyti
Hvað sér netþjónninn?
HTTPS felur yfirleitt innihald HTTP-skeytanna, en ekki öll lýsigögn. Áhorfandi getur enn séð til dæmis að tækið tengist ákveðnu IP-vistfangi og oft hvaða lén er tengt tengingunni, þó nákvæm vefslóð og innihald séu varin.
Æfing: rekum HTTPS
Æfing 3
Settu þessi skref í eðlilega röð:
- AEAD verndar HTTP-gögn.
- Vafrinn athugar vottorð þjónsins.
- Lykilafleiðsla býr til samhverfa lykla.
- Diffie–Hellman kemur á sameiginlegu leyndarmáli.
- Þjónninn sendir vottorð.
Lausn við æfingu 3
Rétt röð er:
- Þjónninn sendir vottorð.
- Vafrinn athugar vottorð þjónsins.
- Diffie–Hellman kemur á sameiginlegu leyndarmáli.
- Lykilafleiðsla býr til samhverfa lykla.
- AEAD verndar HTTP-gögn.
Í raunverulegri TLS-tengingu skarast nokkur þessara skrefa í skilaboðum og nákvæm röð fer eftir TLS-útgáfu, en hugmyndaflæðið er þetta.
Tímabundnir lyklar og framvirkt leyndarstig
Ef sama langtímalykillinn væri notaður beint til að dulrita öll gömul samskipti gæti leki hans síðar stofnað eldri upptökum í hættu.
Með tímabundnum Diffie–Hellman-lyklum getur kerfi fengið framvirkt leyndarstig (e. forward secrecy): ef langtíma-einkalykill þjónsins lekur síðar á hann ekki sjálfkrafa að gera gömul, rétt framkvæmd samtöl læsileg.
Hugmyndin er:
Langtímalykill → auðkennir tenginguna
Tímabundnir lyklar → búa til lotulykilinn
Lotulykill → verndar gögn þessarar tengingar
Þetta verndar ekki gegn því að árásarmaður taki upp gögn og lesi þau á meðan hann hefur virkan aðgang að tækinu eða lyklunum. Það takmarkar hins vegar tjónið ef ákveðinn langtímalykill lekur síðar.
Hvað hefur hver aðferð leyst?
| Hugmynd | Vandamál sem hún leysir |
|---|---|
| Samhverf dulritun | Fela stór gagnasöfn hratt |
| Dreifilykill | Leyfa öðrum að læsa skilaboðum til okkar |
| RSA-undirskrift | Sannreyna að einkalykill hafi verið notaður |
| Diffie–Hellman | Koma á sameiginlegu leyndarmáli yfir opið net |
| Vottorð | Tengja opinberan lykil við rétt auðkenni |
| AEAD | Fela gögn og uppgötva breytingar |
Lokaverkefni: greindu kerfið
Æfing 4
Vafri sýnir viðvörun um vottorð þegar hann tengist vef.
- Hvað gæti verið að?
- Hvaða hætta skapast ef notandinn hunsar viðvörunina?
- Er nóg að sjá hengilás í vafranum til að treysta öllu innihaldi síðunnar?
Lausn við æfingu 4
- Lénið gæti ekki passað, vottorðið gæti verið útrunnið, undirskriftar-keðjan gæti verið ótraust eða tengingin gæti verið stöðvuð og breytt.
- Ef notandinn heldur áfram getur hann verið að tala við rangan þjón. Þá gæti milligönguaðili lesið gögn eða tekið við aðgangsorðum.
- Nei. Hengilásinn segir fyrst og fremst að tengingin sé dulrituð og að vafrinn hafi sannreynt ákveðið vottorð. Hann segir ekki að vefurinn sé heiðarlegur, að innihaldið sé rétt eða að notandinn geti ekki verið blekktur af vefnum sjálfum.
Samantekt
Í þessum kafla lærðum við að:
- lykildreifing kemur á sameiginlegu leyndarmáli yfir opið net,
- Diffie–Hellman sendir ekki sameiginlega leyndarmálið sjálft,
- hlerari getur séð opinberu gildin en á erfitt með að reikna leynda veldisvísa í stóru kerfi,
- Diffie–Hellman án auðkenningar er viðkvæmt fyrir milligönguárás,
- stafrænar undirskriftir og vottorð tengja lykla við auðkenni,
- HTTPS sameinar vottorð, lykildreifingu, lykilafleiðslu og samhverfa AEAD-dulritun,
- tímabundnir lyklar geta veitt framvirkt leyndarstig,
- hengilás í vafra tryggir ekki að vefurinn sjálfur sé heiðarlegur.
Við höfum nú farið yfir helstu byggingareiningar grunnnámskeiðs í dulritun. Í næsta kafla ætlum við að setja þær í verklegt samhengi: hvernig nálgumst við dulritunarþrautir í gagnaglímum og hvert getum við farið þegar grunnurinn er kominn?