Hoppa yfir í efnið

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ð:

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.

  1. Þau byrja með opinberan grunnlit sem allir mega sjá.
  2. Anna blandar leyndum lit sínum við grunnlitinn.
  3. Bjarni blandar sínum leynda lit við grunnlitinn.
  4. Þau senda blönduðu litina sín á milli.
  5. Anna blandar leynda litnum sínum við blöndu Bjarna.
  6. 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
  1. Reiknaðu A = gᵃ mod p.
  2. Reiknaðu B = gᵇ mod p.
  3. Reiknaðu sameiginlega leyndarmálið frá báðum hliðum.
Lausn við æfingu 1
  1. Anna sendir:
A = 5⁴ mod 23 = 625 mod 23 = 4
  1. Bjarni sendir:
B = 5³ mod 23 = 125 mod 23 = 10
  1. 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:

  1. Anna býr til A og sendir „til Bjarna“.
  2. Marta stöðvar skilaboðið og sendir Bjarna sitt eigið gildi M₁.
  3. Bjarni býr til B og sendir „til Önnu“.
  4. Marta stöðvar það líka og sendir Önnu annað eigið gildi M₂.
  5. Anna og Marta reikna eitt sameiginlegt leyndarmál.
  6. Bjarni og Marta reikna annað sameiginlegt leyndarmál.
  7. 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.

  1. Hvað getur Marta hafa gert?
  2. Hvers vegna hjálpar það ekki að Anna og Bjarni hafi reiknað sama gildi hvor í sínu lagi?
  3. Hvað þurfa þau til viðbótar við Diffie–Hellman?
Lausn við æfingu 2
  1. 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.
  2. 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ð.
  3. Þ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:

  1. Anna og Bjarni búa til tímabundin Diffie–Hellman-gildi.
  2. Anna undirritar mikilvæg samskiptagildi með einkalyklinum sínum.
  3. Bjarni sannreynir undirskriftina með dreifilykli Önnu.
  4. Bjarni gerir hið sama fyrir sín skilaboð.
  5. Þ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:

  1. Þjónninn sendir vottorð.
  2. Vafrinn athugar vottorð þjónsins.
  3. Diffie–Hellman kemur á sameiginlegu leyndarmáli.
  4. Lykilafleiðsla býr til samhverfa lykla.
  5. 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.

  1. Hvað gæti verið að?
  2. Hvaða hætta skapast ef notandinn hunsar viðvörunina?
  3. Er nóg að sjá hengilás í vafranum til að treysta öllu innihaldi síðunnar?
Lausn við æfingu 4
  1. 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.
  2. 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.
  3. 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?