-
33C3 intromusiikki
-
Herald: Seuraava esitelmä käsittelee
TLS 1.3 käyttöönottoa
-
ja sen esittävät Filippo Valsorda
sekä Nick Sullivan,
-
jotka he molemmat työskentelevät
Cloudflarelle.
-
Joten toivottakaamme lämpimästi
tervetulleeksi Nick ja Filippo!
-
aplodeja
-
Filippo: Hei kaikki. Puheenaiheenamme
tänään on TLS 1.3.
-
TLS 1.3 on tietenkin uusin versio
TLS:stä, joka tulee sanoista
-
"Transport Layer Security".
Se on ehkä tutuin
-
vihreästä lukon kuvasta selaimessa,
tai vanhasta nimestään: SSL,
-
jota yritämme edeelleen tappaa.
TLS on
-
läpinäkyvä turvallisuusprotokolla,
joka voi turvallisesti tunneloida
-
mielivaltaista sovellusliikennettä.
Sitä käyttävät tietenkin web-selaimet,
-
sitä käyttävät sähköpostipalvelimet
turvaamaan keskinäistä
-
SMTP liikennettään. Sitä käyttävät
Tor-solmut keskinäiseen kommunikointiinsa.
-
Mutta se kehittyi yli 20 vuoden ajan,
-
mutta pohjimmiltaan se koskee asiakasta
ja palvelinta jotka haluavat kommunikoida
-
turvallisesti verkon yli.
Kommunikoidakseen turvallisesti verkon yli
-
niiden täytyy luoda avainmateriaalia,
sopia keskenään avainmateriaalista
-
molemmin puolin salatakseen
tulevan liikenteen.
-
Se, miten avainmateriaalista sovitaan,
hoidetaan vaiheessa, jota kutsumme
-
"kättelyksi". Kättelyssä on mukana
julkisen avaimen kryptografiaa ja
-
dataa, jota lapioidaan asiakkaalta
palvelimelle, palvelimelta asiakkaalle.
-
Tältä kättely näyttää TLS 1.2:ssa.
-
Asiakas aloittaa tanssit
lähettämällä "Client Hello"-viestin,
-
jossa kertoo, mitä tuettuja
parametreja se voi käyttää.
-
Palvelin vastaanottaa sen ja lähettää
oman viestinsä, joka on
-
"Server Hello", joka sanoo "Selvä!
Käytetään tätä salausalgoritmien yhdistelmää,
-
jota sanot tukevasi, ja tässä on minun
avainosuuteni käytettäväksi
-
tässä avaintenvaihtoalgoritmissa.
Lisäksi, tässä on sertifikaatti,
-
jonka on allekirjoittanut auktoriteetti,
joka todistaa, että todellakin olen
-
Cloudflare.com. Ja tässä on allekirjoitus
sertifikaatista todistamaan, että tämä
-
avainosuus on todellakin se, jota haluan
sinun käyttävän avainten luomiseen."
-
Asiakas vastaan ottaa sen ja generoi
oman avainosuutensa, eli oman puolensa
-
Diffie-Hellman avaintenvaihdosta,
ja lähettää avainosuuden sekä
-
viestin kertoakseen: "Se oli siinä.
Kättely on nyt paketissa".
-
Tätä kutsutaan "Finished" viestiksi.
Palvelin vastaanottaa sen, luo
-
oman "Finished" viestinsä ja
vastaa sillä. Eli
-
nyt voimme vihdoin lähettää sovellusdataa.
Kerrataanpa vielä prosessi:
-
Asiakas -> Palvelin, Palvelin -> Asiakas;
Asiakas -> Palvelin, Palvelin -> Asiakas.
-
Meidän täytyi tehdä 2 edestakaista matkaa
asiakkaan ja palvelimen välillä ennen
-
mitään muuta. Emme ole lähettäneet
tavuakaan sovelluskerroksella
-
ennen tätä. Tämä tietenkin
matkapuhelinverkoissa
-
tai tietyissä maailmankolkissa
voi kerryttää
-
satojen millisekuntien viiveen.
Ja tämä täytyy tehdä
-
joka kerta, kun uutta yhteyttä avataan.
Joka kerta asiakkaan ja palvelimen
-
täytyy kulkea kahdesti välinsä
luodakseen avaimet ennen
-
kuin yhteyttä voi oikeasti
käyttää. TLS 1.1
-
ja 1.0 eivät eronneet suuresti
1.2:sta. Voisikin kysyä: miksi sitten
-
pitää kokonainen esitys TLS 1.3:sta,
joka on luultavasti vain taas yksi
-
iteraatio samasta konseptista? No,
TLS 1.3 on oikeasti iso uudelleensuunnittelu.
-
Erityisesti kättely on uudelleen järjestetty.
Ja tämän näkyvin tulos
-
on se, että yksi kokonainen
edestakainen matka on karsittu pois.
-
Eli, tältä näyttää TLS 1.3-kättely.
-
Kuinka 1.3 poistaa edestakaisen matkan?
Miten se pystyy siihen? Se kykenee siihen
-
ennustamalla, mitä
avaintenvaihtoalgoritmia
-
palvelin tulee käyttämään, ja
lähettämällä ennakkoon avainosuuden
-
tuota algoritmia varten palvelimelle.
Eli ensimmäisessä viestissä meillä oli
-
"Client Hello", tuetut parametrit
ja avainosuus algoritmille,
-
josta asiakas uskoo palvelimen pitävän.
Palvelin vastaanottaa viestin
-
ja jos kaikki menee hyvin, se ajattelee:
"Ah! Okei! Tykkään tästä avainosuudesta.
-
Tässä on oma avainosuuteni samaa
algoritmia varten, ja tässä muut
-
parametrit, joita meidän tulisi käyttää."
Se välittömästi sekoittaa avainosuudet
-
saadakseen jaetun yhteisen avaimen, koska
nyt sillä on molemmat avainosuudet -
-
asiakkaan ja palvelimen - ja lähettää
taas sertifikaatin ja allekirjoituksen
-
sertifikaatista, ja sitten välittömästi
lähettää "Finished"-viestin, koska
-
se ei tarvitse mitään muuta asiakkaalta.
Asiakas vastaanottaa tuon, ottaa
-
avainosuuden, luo jaetun yhteisen avaimen
ja lähettää oman "Finished" viestinsä,
-
ja on valmis lähettämään sitä sovellus-
dataa, jota olikaan lähettämässä.
-
Esimerkiksi HTTP-pyyntösi.
Nyt prosessi meni näin:
-
Asiakas -> Palvelin, Palvelin -> Asiakas.
-
Ja olemme valmiita lähettämään
sovelluskerroksen dataa. Eli, jos olit
-
avaamassa HTTPS-yhteyttä, selaimesi
-
ei tarvitse odottaa nelinkertaista viivettä,
nelinkertaista pingiä. Sen täytyy
-
odottaa vain kaksinkertainen, ja tämä
tietysti säästää satoja millisekunteja
-
viivettä kun avataan uusia yhteyksiä.
Tämä oli onnellinen tapaus.
-
Näin käy kun ennustus osuu oikeaan
ja palvelin tykkää asiakkaan
-
avainosuudesta. Jos palvelin ei tue
avainosuutta, jonka
-
asiakas lähetti, se lähettää kohteliaan
pyynnön käyttää jotain toista algoritmiä,
-
jota asiakas sanoi tukevansa. Tätä viestiä
kutsutaan nimellä "Hello Retry Request".
-
Siinä on eväste, joten se voi olla tilaton
mutta periaatteessa se on varakeino,
-
jolla palataan käytännössä TLS 1.2
kaltaiseen kättelyyn. Eikä se ole kovin
-
vaikea toteuttaa, koska asiakas jatkaa
uudella "Client Hello":lla, joka näyttää
-
periaattessa täysin samalta kuin
täysin tuorekin. Nyt...
-
Tässä kohtaa olen valehdellut. TLS 1.2
ei aina ole 2 edestakaista matkaa.
-
Suurin osa yhteyksistä, joita näemme
esimerkiksi Cloudflaren reunalta ovat
-
istunnon jatkamisia. Eli asiakas on ollut
yhteydessä k.o. sivustolle aiemmin.
-
Ja voimme käyttää tätä, voimme hyödyntää
tätä ja tehdä kättelystä nopeamman.
-
Tämä tarkoittaa, että asiakas muistaa
jotain avainmateriaalista, jotta pystyy
-
avaamaan seuraavan yhteyden vain yhdellä
edestakaisella matkalla myös TLS 1.2:ssa.
-
Eli tältä se näyttää. Tässä on normaali
TLS 1.2 täysi kahden edestakaisen
-
matkan yhteys. Ja tässä palvelin lähettää
lipun uutta istuntoa varten. Istuntolippu
-
ei ole sen kummempi kuin salattu
kapseloitu blob sisältäen avainmateriaalia
-
jonka asiakas säilyttää. Lippu on
salattu ja allekirjoitettu avaimella,
-
jonka vain palvelin tietää. Eli se on
täysin läpinäkymätön asiakkaalle.
-
Mutta asiakas säilyttää sen sekä
yhteyden avainmateriaalin,
-
jotta seuraavan kerran kun se avaa
yhteyttä samalle sivustolle
-
se lähettää "Client Hello":n ja
istuntolipun.
-
Jos palvelin tunnistaa lipun, se purkaa
salauksen ja löytää sisältä
-
avainmateriaalin. Ja nyt, vain yhden edes-
takaisen matkan jälkeen, palvelimella on
-
yhteistä avainmateriaalia asiakkaan kanssa
koska asiakas säilytti sen viime kerrasta
-
ja palvelin juuri purki sen
salatusta istuntolipusta.
-
Ok? Eli nyt palvelimella on jo käytet-
tävissä yhteisiä jaettuja avaimia ja se
-
lähettää "Finished" viestin ja asiakas
vastaa "Finished" viestillä ja pyynnöllä.
-
Eli tämä on TLS 1.2. Tätä tapahtuu jo
joka päivä useimpien
-
modernien TLS-yhteyksien kanssa.
-
TLS 1.3-istunnon jatkaminen ei ole kovin
erilainen. Siinäkin on istuntolipun käsite
-
Istuntolipun sisällön nimi on muutettu
"PSK":ksi, mutta se tulee vain sanoista
-
"Pre-shared Key", koska sitähän se on:
pelkkää avainmateriaalia, josta
-
oli sovittu aiemmin.
Ja se toimii samalla tavalla:
-
palvelin vastaanottaa istuntolipun,
purkaa salauksen ja hyppää
-
"Finished" viestiin.
-
Ongelma istunnon jatkamisessa on se, että
jos hyökkääjällä on hallussaan
-
istuntolippu - eli avain, jota palvelin
käyttää salamaan istuntolipun,
-
jonka sisällä avainmateriaali on -
-
hyökkääjä voi passiivisesti, tai jopa
tulevaisuudessa kaapatun yhteyden
-
tapauksessa, purkaa istuntolipun
"Client Hello":sta, löytää sieltä PSK:n
-
ja käyttää sitä purkamaan koko yhteyden
salauksen. Tämä ei ole hyvä.
-
Tämä tarkoittaa, että joku voi tehdä
passiivisesti purkaa salausta
-
hallinnoimalla istuntolippua. Tähän
vastataan yleensä sanomalla, että
-
istuntoliput vanhenevat nopeasti. Mutta
eikö olisi mukavaa, jos meidän ei
-
tarvitsisi luottaa siihen. Ja on olemassa
julkaisuja, jotka kertovat meille,
-
että toteutukset eivät aina tee tätä
oikein. Siispä,
-
TLS 1.3 sen sijaan mahdollistaa
Diffie-Hellmanin käytön
-
istunnon jatkamisessa. 1.2:ssa ei ollut
keinoja suojautua
-
istuntolipun joutumiselta vääriin
käsiin. 1.3:ssa voi sen sijaan
-
lähettää avainosuuden osana
"Client Hello":ta
-
ja palvelin lähettää avainosuuden
"Server Hello":n yhteydessä,
-
ja osapuolet suorittavat Diffie-Hellmanin.
Diffie-Hellmania käytettiin
-
jatkosuojauksen toteuttamiseen esimerkiksi
sen varalta, että sertifikaatin yksityinen
-
avain joutuisi vääriin käsiin 1.2:ssa, ja
tässä sitä käytetään jatkosuojauksen
-
toteuttamiseen istunnon jatkamisessa.
Nyt, saatatte miettiä:
-
"Tämä näyttää periaatteessa normaalilta
1.3 kättelyltä,
-
mikä virka PSK:lla on ylipäätään?"
Tästäpä puuttuukin jotakin,
-
sertifikaattia ei ole. Koska ei ole
tarvetta uudelleen autentikoida
-
sertifikaatin avulla, koska asiakas ja
palvelin juttelivat aiemmin, joten
-
palvelin tietää tarkistaneensa jo
palvelimen sertifikaatin,
-
ja mikäli palvelin pystyy purkamaan
istuntolipun salauksen, se tarkoittaa,
-
että palvelin on se joksi itseään väittää.
Joten kaksi avainosuutta yhdistetään.
-
Sitten yhdistetään PSK:n kanssa, jotta
saadaan avain, jolla salataan loput
-
yhteydestä. On olemassa vielä yksi
uusi ominaisuus, jonka
-
TLS 1.3 istunnon jatkaminen tuo mukanaan.
Se on se seikka, että se
-
mahdollistaa kättelyn ilman edestakaista
matkaa (0-RTT). Muistutuksena,
-
kaikki kättelyt 1.3:ssa koostuvat enim-
mäkseen yhdestä edestaikaisesta matkasta.
-
TSL 1.2 istunnon jatkamiset voivat olla
minimissään yhden edestakaisen matkan.
-
TLS 1.3 istunnon jatkamiset voivat toimia
ilman edestakaista matkaa. Kuinka se
-
toimii? Ajatellaanpa.
Alkuun on PSK.
-
Pre-shared Key.
Asiakas voi käyttää sitä salaamaan
-
tämän alkudatan, jonka haluaa lähettää
palvelimelle. Joten asiakas avaa
-
yhteyden, palvelimeen johon on aiemmin
jo ollut yhteydessä,
-
ja lähettää "Client Hello":n,
istuntolipun,
-
avainosuuden Diffie-Hellmaniin ja
alkudatan. Alkudata on
-
blob sovellusdataa - se voi olla
esimerkiksi HTTP-pyyntö -
-
salattuna PSK:lla.
Palvelin vastaanottaa tämän,
-
purkaa istuntolipun, löytää PSK:n,
käyttää PSK:ta purkamaan
-
alkudatan ja jatkaa sitten normaalisti:
yhdistää avainosuudet, lisää PSK:N,
-
luo uuden avaimen lopulle yhteydelle
ja jatkaa yhteyttä.
-
Eli mitä tässä tapahtui? Voimme lähettää
sovellusdataa välittömästi yhteyden
-
avaamisen yhteydessä. Tämä tarkoittaa,
että poistimme suorituskyvyn
-
yleiskustannukset TLS:ssä.
-
0-RTT kättelyissä on kuitenkin kaksi
vaaran paikkaa, jotka ovat teoriassa
-
mahdoton poistaa. Yksi on se, että
se kiva asia joka tuli PSK ECDHE moodin
-
mukana, se jossa käytetään Diffie-
Hellmania istunnon jatkamiseen
-
1.3:ssa ei auta 0-RTT datan kanssa.
-
Käytämme Diffie-Hellmania kun saavumme
dian vihreään laatikkoon.
-
Tietysti alkudata on salattu vain
PSK:lla. Mietitäänpä taas
-
hyökkääjää. Hyökkääjä jollain keinolla
varasti istuntolippumme salausavaimet.
-
Se voi katsoa "Client Hello":a, purkaa
istuntolipun, saada PSK:n,
-
käyttää PSK:ta purkamaan alkudatan
salauksen.
-
Se voi tehdä tämän kaapatustakin liiken-
teestä, jos saa istuntolipun myöhemmin.
-
Siispä alkudata ei ole jatkosuojattu
istuntolipun avainten suhteen.
-
Pelkkä PSK on kuitenkin hyödytön, jos
käytämme Diffie-Hellmania palvelimen
-
vastauksessa. Se on hyödyllinen ainoastaan
asiakkaan ensimmäisen viestin kohdalla.
-
Kerrataanpa. Tässä on paljon
asiaa. TLS 1.2 toi
-
jatkosuojauksen sen varalle, että
sertifikaatin yksityinen avain
-
joutuisi vääriin käsiin jo kauan sitten
käyttämällä ECDHE moodeja.
-
Siis 1.2 yhteydet voivat olla aina jatko-
suojattuja sertifikaatin väärinkäyttöä
-
vastaan. TLS 1.3 toimii samoin.
-
Ei ole moodia joka olisi jatkosuojaamaton
sertifikaatin väärinkäytön varalta.
-
Mutta jos ajatellaan mitä istuntolipun
avaimelle voi käydä:
-
TLS 1.2 ei koskaan ole jatkosuojattu.
-
TLS 1.2:ssa istuntolipun murtaminen
johtaa aina kykyyn passiivisesti
-
ja jatkossa murtaa jatkettujen istuntojen
salaus.
-
1.3:ssa sen sijaan, jos käytämme PSK ECDHE:tä,
ainoastaan alkudatan salaus
-
voidaan purkaa käyttämällä
pelkästään istuntolippua.
-
Kuten sanoin, vaaran paikkoja on kaksi.
-
Toinen se, että 0-RTT dataa voidaan
käyttää toistohyökkäyksessä.
-
Olkoon tilanne tämä: alkudata
sisältää dataa, joka on jollain tapaa
-
autentikoitu. Se voi olla HTTP-pyyntö,
joka sisältää evästeitä.
-
Tuo HTTP-pyyntö jollain tapaa
suorittaa transaktion,
-
okei? Ehkä se on tilisiirto. Ohjeistaa
palvelinta tekemään jotain. Hyökkääjä
-
haluaa toistaa tuota tapahtumaa. Se ei
tietenkään voi purkaa sen salausta
-
- sehän on suojattu TLS:llä. Eli se ei voi
nähdä evästeen sisältöä eikä se voi
-
muokata sitä, koska se on TLS-suojattu.
Mutta se voi kaapata salatun
-
viestin ja lähettää sen uudelleen
-
palvelimelle. Jos palvelimia on yksi,
tähän on helppo ratkaisu.
-
Pidä kirjaa nähdyistä viesteistä
ja ajattele kutakuinkin näin:
-
"Ei. Tämä näyttää täsmälleen samalta kuin
mitä sain aiemmin." Mutta jos esimerkiksi
-
kuten Cloudflare pyörität useita data-
keskuksia ympäri maailmaa, et voi pitää
-
yhdenmukaisia tiloja jatkuvasti, reaali-
ajassa, kaikkien koneiden välillä. Olisi
-
ei koneita, jotka tämän viestin saatuaan
ajattelisivat näin:
-
"Toki, minulla on istuntolipun avain,
dekryptaan PSK:n, käytän PSK:ta,
-
dekryptaan alkudatan, löydän sieltä jotain,
ja suoritan sen, mitä se käskee minun
-
tehdä." Tämä ei tietenkään ole suotavaa.
-
Yksi TLS.n tarjoama vastatoimi on,
että asiakas lähettää samassa
-
paketissa arvon, joka kertoo
millisekunteina, kuinka kauan sitten sain
-
haltuuni istuntolipun. Palvelin katsoo
sitä arvoa, ja jos se ei täsmää
-
sen omaan näkemykseen tästä
tiedosta, se hylkää viestin.
-
Tämä tarkoittaa, että jos hyökkääjä
kaappaa viestin ja 10s myöhemmin
-
yrittää toistohyökkäystä, ajat eivät
täsmää ja palvelin hylkää viestin.
-
Tämä ei kuitenkaan ole täysi ratkaisu,
sillä tarpeeksi nopea hyökkääjä voi
-
silti tehdä toistohyökkäyksiä.
Eli, palvelin voi ainoastaan joko
-
hyväksyä 0-RTT datan tai
hylätä sen.
-
Se ei voi vain ottaa jotain osaa siitä tai
kurkistaa siihen ja päättää sitten, koska
-
"Server Hello" viesti kertoo
hyväksyttiinkö vai hylättiinkö se.
-
Ja asiakas jatkaa alkudatan lähettämistä
kunnes se saa "Server Hello" viestin.
-
Tässä on kilpailu. Joten palvelimen täytyy
sokkona pättää "Otanko 0-RTT data vastaan
-
vai hylkäänkö sen kaiken?" Jos se hyväksyy
sen, ja sitten huomaa sen olevan jotain
-
mitä se ei voi prosessoida koska "Herran-
jestas, täällä on HTTP POST, joka käskee
-
siirtämään rahaa. En voi tehdä tätä, jos
en tiedä ettei tämä ole toistohyökkäys."
-
Palvelimen täytyy saada jonkinlainen
vahvistus. Hyvä uutinen on se, että jos
-
palvelin odottaa "Finished"
viestiä... Palvelin lähettää
-
"Server Hello":n, "Finished":n ja
odottaa asiakkaan vastaavaa.
-
Kun asiakkaan oma saapuu, se tarkoittaa,
ettei kyseessä ollut toistohyökkäys,
-
sillä tuo "Finished" viesti
viimeistelee koko kättelyn
-
yhdessä tietyn satunnaisarvon kanssa,
jonka palvelin lähetti. Kyseessä ei siis
-
voi olla toistohyökkäys. Eli nämä ovat
palvelimen vaihtoehdot: se voi hyväksyä
-
alkudatan ja jos se on jotain mikä
ei ole idempotenttia, jotain mikä on
-
vaarallista, jos se toistetaan, se voi
yksinkertaisesti odottaa vahvistusta.
-
Mutta se tarkoittaa, että se on laitettava
välimuistiin, ja tässä on riski, mikäli
-
hyökkääjä lähettää HTTP POST:n valtavalla
rungolla tarkoituksenaan täyttää muisti.
-
Tajusimme voivamme auttaa tässä, jos
kirjoitamme istuntolippuihin,
-
mikä on maksimimäärä alkudataa,
jonka asiakas voi lähettää.
-
Jos huomaamme jonkun lähettävän enemmän,
kyseessä on hyökkääjä ja
-
katkaisemme yhteyden, tyhjennämme
välimuistin vapauttaaksemme muistia.
-
Mutta. Jokatapauksessa. Vastatoimista
huolimatta, ellemme pysty pitämään
-
yhtenäistä maailmanlaajuista tilaa
palvelimien välillä, meidän täytyy kertoa
-
sovellukselle toistohyökkäyksen mahdol-
lisuudesta. Spesifikaatio tietää tämän.
-
TLS 1.3 spesifikaatio YKSISELITTEISESTI toteaa
-
protokollien EI tule käyttää
0-RTT:tä ilman profiilia, joka
-
määrittelee sen käytön. Eli tarkoittaa
"tietämättä mitä ne ovat tekemässä".
-
Tämä tarkoittaa, että TLS-pinon APIen
täytyy tehdä 1-RTT oletuksena,
-
joihin toistohyökkäykset eivät toimi,
ja sitten antaa palvelimen
-
kutsua joitakin API:ja hylätäkseen
tai odottaakseen vahvistusta,
-
ja antaa asiakkaan päättää, mitä tähän
vaaralliseen toistohyökkäysalttiiseen
-
dataan tulee. Tämä riippuu
-
protokollasta, mutta entäpä
lempiprotokollamme? Entäpä
-
HTTP? HTTP:n pitäisi olla
helppo. HTTP-spesifikaatio,
-
käykää vaikka lukemassa, sanoo:
"GET-pyynnöt ovat idempotentteja,
-
niiden ei tule muuttaa mitään palveli-
mella". Selvä! Sallimme nyt ainoastaan
-
GET-pyynnöt alkudatassa, koska niitä ei
voi hyödyntää toistohyökkäyksissä!
-
Jes! Ei. Internetissä on
takuuvarmasti palvelin,
-
jossa on sen kaltaista kuin
“send-money.php?to=filippo&amount=this”
-
ja se on GET-pyyntö. Ja jos hyökkääjä
kaappaa tämän, mikä on alkudataa,
-
ja sitten käyttää tätä toistohyökkäykses-
sä toista palvelinta vastaan, se
-
suoritetaan kahdesti.
Ja se ei käy päinsä.
-
Mitä siis voidaan tehdä?
-
Teemme kompromisseja!
-
Jos tunntet sovelluksesi, voit tehdä hyvin
spesifejä kompromisseja. Esimerkiksi
-
Google on ajanut QUIC:iä
0-RTT:llä hyvinkin pitkään.
-
Uskoakseni 3 vuotta? Se tarkoittaa, että
he tuntevat oman sovelluksena oiken hyvin.
-
Ja he tietävät ettei heillä ole
"send-money.php" päätepisteitä.
-
Mutta jos olet kuin Cloudflare, joka
hallinnnoi suurta määrää sovelluksia,
-
et voi tehdä noin laajoja olettamuksia,
ja täytyy sen sijaan yrittää
-
löytää kultainen keskitie. Me
saattaisimme esimerkiksi päättää
-
salli GET-pyynnöt juurihakemistoon.
Eli "GET /",
-
mikä saattaisi tuoda eniten hyötyä, sillä
ehkä suurin osa yhteyksistä alkaa noin,
-
ja se on vähiten todennäköinen
aiheuttamaan hankaluuksia.
-
Mietimme edelleen kuinka sovellamme
tätä sovelluksiin. Eli jos tiedossasi
-
on sovellus, joka tulisi kärsimään
jostain noin yksinkertaisesta,
-
lähetä meille sähköpostia. Mutta
itseasiassa, jos sinulla on noin
-
haavoittuvainen sovellus, minulla
on huonoja uutisia. Thai Duong et. al.
-
osoittivat, että tämän päivän selaimet,
ilman TLS 1.3:a tai muutakaan,
-
toistavat HTTP-pyyntöjä
verkkovirheiden sattuessa.
-
Ja ne toistavat ne hiljaisesti.
Eli lopputulema ei välttämättä ole
-
huonompi kuin nykytila. Selvä.
Näen, että kaikki alkavat olla
-
levottomia ja ajattelevat
"Kryptografit ovat taas asialla!
-
He tekevät tarvitsemastamme turvallisuus-
protokollasta tarpeettoman monimutkaisen
-
turvatakseen työpaikkansa
seuraavaksi 15 vuodeksi!" Eikö?
-
Ei. Ei. Voin itseasiassa taata, että
-
yksi suurista muutoksista, mielestäni
suurempi kuin edestakaiset matkat 1.3:ssa,
-
on, että kaikkea punnitaan saadun hyödyn
ja sen aiheuttaman monimutkaisuuden
-
kannalta. Ja vaikka 0-RTT pääsi jatkoon
-
valtaosa ei päässyt.
-
Nick: Selvä. Kiitos Filippo.
-
TLS 1.3 ollessa iteraatio TLS:stä
mekin menimme taaksepäin, tai,
-
"me", jotka olemme ihmiset jotka tutkimme
TLS:ää, katsoimme taaksepäin ja
-
kertasimme olemassaolevia TLS 1.2 ominai-
suuksia, jotka vaikuttivat järkeviltä
-
aikanaan ja päätimme, oliko kompleksisuus
tai vaara, jotka nämä TLS:n ominaisuudet, tai
-
protokollat, tai primitiivit toivat mukanaan
-
järkeviä säilyttää. Ja yksi iso, joka
sattui prosessin alussa on
-
"staattinen RSA" moodi. Näin TLS on
toiminut SSL:n ajoista lähtien.
-
Sen sijaan, että käytettäisiin Diffie-
Hellmania yhteisen avaimen luontiin,
-
asiakas luo oman jaetun avaimensa, ja
salaa sen palvelimen sertifikaatin
-
julkisella avaimella, joka on RSA-avain,
ja lähettää sen sitten
-
sellaisenaan palvelimelle.
Ja palvelin sitten käyttää omaa
-
yksityistä avaintaan purkamaan salauksen ja
luomaan yhteisen avaimen. Eli asiakas
-
luo kaiken avainmateriaalin tässä
tapauksessa. Yksi asia on melko selvä
-
tässä on, että jos sertifikaatin
yksityinen avain murretaan,
-
vaikka vuosiakin myöhemmin, joku
jolla on tallenteet tapahtumista voi
-
mennä taaksepäin ja purkaa tämän avain-
materiaalin ja siten koko keskustelun.
-
Tämä poistettiin ihan TLS 1.3-prosessin
alkuvaiheessa, noin kaksi vuotta sitten.
-
Joten suureksi yllätykseksemme,
ja kaikkien, jotka kuuluvat
-
TLS:ää koskevaan sähköpostitus-
listaa, ihan vasta äskettäin,
-
standardointiprosessin loppuvaiheessa,
kun TLS 1.3 oli melkein valmis,
-
tämä sähköposti ilmestyi. Ja tämä on
Andrew Kennedyltä, joka työskentelee
-
BITS:lle, mikä tarkoittaa pääpiirteittäin,
että hän työskentelee pankeille. Hän sanoo
-
"RSA-avaintenvaihdon tuen lopettaminen
TLS 1.3:ssa aiheuttaa suuria ongelmia
-
finanssilaitoksille, joista melkein kaikki
käyttävät TLS:ää sisäisesti ja joilla on
-
suuria, turvallisuuskriittisiä investoin-
teja ulkopuoliseen TLS-dekryptaamiseen.
-
"Ulkopuoliseen (3. osapuolen) TLS-dekryp-
taamiseen" hmm.. (naurua - aplodeja)
-
Se todella kuulostaa kriittiseltä...
kriittiseltä jollekin, eikö?
-
(naurua - aplodeja)
Eli...
-
(naurua)
(aplodeja)
-
Yksi valonpilkahduksista oli Kenny
Patersonin vastaus tähän,
-
joka kuului näin: "Minun näkemykseni
pyyntöäsi koskien: ei.
-
Perustelu: Yritämme rakentaa turvallisem-
paa internettiä." Korostus
-
on oma lisäykseni, mutta hän varmasti
tarkoitti sitä
-
(aplodeja)
-
Tämän jälkeen pankkiväki saapui IETF:ään
ja näytti tämän dian kuvaillakseen, kuinka
-
vaikeaa heidän järjestelmänsä
debuggaaminen on. Tämä on yksinkertaista..
-
Ilmeisesti pankkiympäristössä. Nuo ovat
eri kytkimiä, reitittimiä,
-
väliohjelmistoja, web-sovelluksia, ja
kaikki keskustelevat TLS:llä.
-
Tämän keskustelun jälkeen
päädyimme kompromissiin.
-
Protokollan vaarantamisen sijaan
Matthew Green
-
opetti heille, kuinka käyttää Diffie-
Hellmania väärin. Lopulta he kykenivät
-
siihen, mitä halusivat ilman,
että me - tai kukaan muu
-
akateemisessa yhteisössä, tai
TLS yhteisössä - palautti
-
TLS:ään tämän turvattoman osan.
-
Jos haluat lukea tämän, se kertoo
kuinka tähän pystytään. Joka tapauksessa
-
- emme laittaneet sitä takaisin.
Kiteytettynä, älkää tehkö näin!
-
(aplodeja)
-
Eli tapoimme staattisen RSA:n, ja mitä
muuta tapoimme? No, kun katsotaan
-
taaksepäin hyötyihin ja haittoihin,
TLS 1.2 käyttää tiettyjä primitiivejä,
-
jotka vain eivät ole kestäneet
ajan hammasta.
-
RC4 jonosalain. Poissa!
(aplodeja)
-
3DES (Triple DES) lohkosalain. Poissa!
(aplodeja)
-
MD5, SHA1... molemmat poissa. Yo!
(jatkuvia aplodeja)
-
On vielä rakennelmia, jotka...
perus lohkosalain rakennelmia,
-
jotka ovat poissa: AES-CBC.
Poissa. RSA-PKCS1-1.5,
-
tämä on tiedetty ongelmalliseksi
jo vuodesta 1998, myöskin poissa!
-
Myös useita ominaisuuksia kuten kompressio
ja uudellenneuvottelu on poistettu, jonka
-
korvasi hyvin kevyt "avaimen päivitys"
mekanismi. Siis TLS 1.3:ssa
-
mikään näistä ei läpäissyt hyöty vs.
kompleksisuus -testiä. Ja monet näistä
-
haavoittuvuksista, joita saatatte
tunnistaa, on mahdottomia TLS 1.3:ssa.
-
(aplodeja)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-