-
Translated by Roope Salminen
(ITKST56 course assignment at JYU.FI)
(33C3 intromusiikki)
-
Herald: Seuraava esitelmä
käsittelee TLS 1.3:n käyttöönottoa
-
ja sen pitävät Filippo Valsorda
sekä Nick Sullivan,
-
jotka molemmat
työskentelevät Cloudflarelle.
-
Joten toivottakaamme lämpimästi
tervetulleeksi Nick ja Filippo!
-
(aplodeja)
-
Filippo: Hei kaikki. Puheen-
aiheenamme 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ä tunnetuin
-
vihreästä lukosta selaimessa,
tai vanhalta nimeltään SSL,
-
jota yritämme edelleen
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äyte-
tää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 varmenne,
-
jonka on allekirjoittanut auktoriteetti,
joka todistaa, että todellakin olen
-
Cloudflare.com. Ja tässä on allekirjoitus
varmenteesta todistamaan, että tämä
-
avainosuus on todellakin se, jota haluan
sinun käyttävän avainten luomiseen."
-
Asiakas vastaanottaa 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ä osissa
maailmaa 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 restukturoitu.
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 varmenteen ja allekirjoituksen
-
varmenteesta, 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-pyynnön.
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 algoritmia,
-
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:n täysi kahden edestakaisen
-
matkan yhteys. Ja tässä palvelin lähettää
lipun uutta istuntoa varten. Istuntolippu
-
ei ole sen kummempi kuin salattu kapse-
loitu blob sisältäen avainmateriaalia,
-
jonka asiakas säilyttää. Istuntolippu 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 istuntolipun, se
purkaa sen 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 nyt 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. Nyt...
-
Ongelma istunnon jatkamisessa on se,
että jos hyökkääjällä on hallussaan
-
istuntolipun avain - 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 loppu-
yhteyden salauksen. Tämä ei ole hyvä.
-
Tämä tarkoittaa, että joku voi
passiivisesti purkaa salauksen
-
hallinnoimalla istuntolipun avainta.
Tähän vastataan yleensä sanomalla, että
-
Lippujen avaimet vanhenevat nopeasti.
Mutta eikö olisi mukavaa, jos meidän ei
-
tarvitsisi luottaa siihen. Ja on itse
asiassa julkaisuja, jotka kertovat meille
-
että toteutukset eivät aina
tee tuota oikein. Siispä,
-
TLS 1.3 sen sijaan mahdollistaa
Diffie-Hellmanin käytön
-
istunnon jatkamisessa. 1.2:ssa
ei ollut keinoja suojautua istunto-
-
lipun avaimen murtamisen
seurauksilta. 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ä varmenteen 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.
-
Varmennetta ei ole. Koska ei ole
tarvetta autentikoida uudelleen
-
varmenteen avulla, koska asiakas ja
palvelin juttelivat aiemmin, joten
-
asiakas tietää tarkistaneensa jo
palvelimen varmenteen,
-
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 ne 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ä edestakaisesta matkasta.
-
TSL 1.2 istunnon jatkamiset voivat olla
minimissään yhden edestakaisen matkan.
-
TLS 1.3 istunnon jatkamiset voivat toimia
ilman edestakaista matkaa. Kuinka 0-RTT
-
kättely 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 jo aiemmin 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ä
varmenteen 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 varmenteen murtamisen
-
varalta. TLS 1.3 toimii samoin.
-
Ei ole moodia, joka olisi jatkosuojaamaton
varmenteen murtamisen varalta.
-
Mutta, jos ajatellaan mitä
istuntolipun avaimelle voi käydä:
-
TLS 1.2 ei koskaan tarjoa jatkosuojausta.
-
TLS 1.2:ssa istuntolipun avaimen
murtaminen johtaa aina kykyyn passiivisesti
-
murtaa tulevien 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 istuntolipun avainta.
-
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
-
eri 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 10 s 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 (asiakkaalle)
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 dataa vastaan
-
vai hylkäänkö sen kaiken?" Jos se ottaa
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. Joka tapauksessa. 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ä oletuksena 1-RTT,
-
johon toistohyökkäykset eivät
toimi, ja sitten antaa palvelimen
-
kutsua joitakin API:a 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. (huokaus) Internetissä on
takuuvarmasti palvelin,
-
jossa on jotain 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ök-
käyksessä 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 sovelluksensa oikein 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ää
-
sallia GET-pyynnöt ainoastaan
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
itse asiassa, 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. Toimiiko
mikrofonini? Kuuletteko minut? Selvä.
-
TLS 1.3:n ollessa iteraatio TLS:stä
mekin katsoimme taaksepäin, tai,
-
"me", jotka olemme ihmiset jotka tutkivat
TLS:ää, katsoimme taaksepäin ja
-
kertasimme olemassa olevia TLS 1.2:n omi-
naisuuksia, jotka vaikuttivat järkeviltä
-
aikanaan ja päätimme, oliko kompleksisuus
tai vaara, jonka 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 varmenteen
-
julkisella avaimella, joka on
RSA-avain, ja lähettää sen sitten
-
sellaisenaan palvelimelle. Ja
palvelin sitten käyttää omaa
-
yksityistä avaintaan purkamaan salauksen
ja löytää yhteisen avaimen. Eli asiakas
-
luo kaiken avainmateriaalin tässä
tapauksessa. Yksi asia on melko selvä
-
tässä on, että jos varmenteen
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-
listaan, 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 internetiä." 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...
peruslohkosalainrakennelmia,
-
jotka ovat poissa: AES-CBC.
Poissa. RSA-PKCS1-1.5,
-
tämä on tiedetty ongelmalliseksi
jo vuodesta 1998, myöskin poissa!
-
Myös muita ominaisuuksia, kuten kompressio
ja uudellenneuvottelu, on poistettu.
-
Jälkimmäisen 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, ovat mahdottomia TLS 1.3:ssa.
-
(aplodeja)
-
TLS 1.3:n filosofia monessa kohtaa
on yksinkertaistaa ja lujittaa
-
mahdollisimman paljon. Tästä on
useita pieniä esimerkkitapauksia.
-
Osa tämän julkaisun kirjoittajista
saattaa löytyä yleisöstä. Oli tapa
-
käytää lohkosalaimia itse
tallennekerroksella tavalla,
-
joka ei ollut niin kestävä kuin se
voisi olla. Se on korvattu paljon
-
yksinkertaisemmalla tavalla.
TLS 1.2:ssa oli tällainen
-
erikoinen "Catch 22", jossa
salaimen neuvottelua suojaa
-
"Finished"-viesti, joka on viestin
autentikointikoodi, mutta
-
tuon koodin algoritmi päätettiin
salainneuvottelussa, joten
-
siinä oli tällainen takaisinsyöttö-
efekti. Hyökkäykset kuten FREAK, LogJam ja
-
CurveSwap onnistuivat hyödyntämään näitä
alentaakseen yhteyksien turvallisuuksia.
-
Tätä tapahtui ihan käytännössä.
Syy on, että näitä salausalgoritmien
-
joukkoja kättelyssä ei ole
digitaalisesti allekirjoitettu
-
yksityisellä vaimella. Tämä muutettiin
TLS 1.3:ssa. Kaikki allekirjoituksen
-
yläpuolella oleva on
allekirjoitettu. Tämä on hienoa!
-
Mitä muuta muutimme? Tai, mitä
muuta TLS 1.3 muutti verrattuna
-
TLS 1.2:een? Vähemmän, mutta parempia
valintoja. Kryptografiassa paremmat
-
valinnat tarkoittavat aina vähemmän
valintoja. Nyt on tietyt ehdokkaat
-
käyrille ja äärellisille kunnille, joita
voi käyttää. Ei mielivaltaisia palvelimen
-
keksimiä DH-ryhmiä, ei mielivaltaisia
käyriä. Ja tämä sopivien parametrien listan
-
karsiminen, johtaa siihen
että 1-RTT toimii niin usein.
-
Kuten Filippo sanoi,
asiakkaan täytyy arvata
-
mitä avaimenmuodostus-
metodeja palvelin tukee,
-
ja lähettää sopiva avainosuus. Jos on
olemassa lyhyt lista pelkästään turvallisia
-
vaihtoehtoja, tätä tapahtuu
useammin. Eli, kun konfiguroit
-
TLS-palvelintasi, se ei enää näytä
monimutkaiselta pikaruokalistalta,
-
vaan enemmänkin häämenulta. Ota yksi
jokaisesta kategoriasta ja lopputulos on
-
herkullisempikin. Voit tutkia tätä
Wiresharkissakin, sekin on yksinkertaista.
-
Salausalgoritmit, laajennukset,
käyrät ja voit jatkaa siitä.
-
Filippo: TLS 1.3 korjasi myös
sen, mikä mielestäni oli yksi
-
suurimpia suunnitteluvirheitä
TLS 1.2:ssa. Puhuimme siitä,
-
miten jatkosuojaus toimii istuntojen
jatkamisessa 1.2:ssa ja 1.3:ssa.
-
Mutta TLS 1.2 on vieläkin ongelmallisempi.
TLS 1.2 käärii istuntolippujen
-
sisään vanhan yhteyden
varsinaisen pääsalaisuuden.
-
Eli se ottaa varsinaiset alkuperäisen yhteyden
liikenteen salaamiseen käytetyt avaimet,
-
salaa ne istuntolipun avaimella, ja
lähettää ne asiakkaalle, jotta se voi
-
lähettää ne takaisin ensi kerralla.
Puhuimme riskistä, että hyökkääjä saa
-
istuntolipun avaimet haltuunsa,
dekryptaa instuntoliput ja murtaa
-
jatkosuojauksen ja
dekryptaa jatketut istunnot.
-
TLS 1.2:ssa asiat ovat vielä huonommin.
Jos hyökkääjä dekryptaa istuntoliput, se
-
voi takaperoisesti dekryptata
koko alkuperäisen
-
jatkamattoman istunnon. Ja
tämä on täysin tarpeetonta.
-
Meillä on tiivistefunktioita, yksisuun-
taisia funktioita, joihin laitetaan syöte
-
ja saadaan jotain, josta ei päästä
takaisin alkuperäiseen. Näin 1.3 tekee.
-
1.3. johtaa uusia, tuoreita avaimia
seuraavaa istuntoa varten
-
ja käärii ne istuntolipun sisään, jotta
niistä saadaan PSK. Eli vaikka
-
dekryptaisit 1.3 istuntolipun,
voit yrittää murtaa
-
seuraavaa yhteyttä ja olemme nähneet,
että saatat pystyä dekryptaamaan
-
ainoastaan alkudatan, tai koko yhteyden,
käytetystä moodista riippuen. Mutta
-
et mitenkään voi dekryptata alkuperäistä
jatkamattoman istunnon yhteyttä.
-
Tämä olisi itsessään riitävän huono asia,
mutta 1.2 tekee toisen päätöksen, joka
-
ihmetytti minua. Koko "käytetään pää-
salaisuutta" saataa johtua siitä, että
-
istuntoliput olivat pelkkä laajennus
1.2:ssa, mitä ne eivät ole 1.3:ssa.
-
Mutta 1.2 lähettää "New Session
Ticket"-viestin alkuperäisen
-
kättelyn alussa
- salaamattomana! Tarkoitan siis,
-
salattuna istuntolipun avaimilla, mutta
ei nykyisen istunnon avaimilla.
-
Eli mikä tahansa palvelin, joka tukee
-
istuntolippuja, tulee kaikkien
yhteyksien alussa - vaikka
-
istunnon jatkamista ei ikinä tapahtuisi -
lähettämään istuntolipun, joka ei ole
-
muuta kuin sen yhteyden
hetkelliset (katoavat) avaimet
-
käärittynä istuntolipun
avaimilla. Nyt, jos olet
-
Maailmanlaajuinen pahantekijä,
joka haluaa suorittaa
-
joukkovalvontaa ja haluaisit
dekryptata jälkikäteen
-
kaikki yhteydet, ja jotenkin saisit
käsiisi istuntolippujen avaimet,
-
se mitä löytäisit kaikkien
TLS 1.2-yhteyksien alusta, on
-
istuntoavaimet salattuna
istuntolipun avaimilla.
-
1.3 ratkaisee tämän ja 1.3:ssa tällaiset
hyökkäykset ovat täysin mahdottomia.
-
Ainoa asia, jonka voisit passivisesti,
siis jälkikäteen, dekryptata
-
on alkudata. Et mitenkään voisi
dekryptata jatkamattomia yhteyksiä ja
-
mitään mikä tulee 0-RTT:n jälkeen.
-
Nick: Eli se on turvallisempi.
Lyhyesti sanottuna.
-
Filippo: Toivon mukaan!
Nick: ...toivottavasti.
-
Ja mistä tiedämme sen olevan turvallisempi?
Nämä turvallisuusparametrit ja turvallisuus-
-
vaatimukset koskien TLS:ää on
formalisoitu ja, toisin kuin aiemmissa
-
TLS-versioissa, formalisointia
harjoittavat akateemikot otettiin
-
mukaan aiemmin. Useat julkaisut
ovat analysoineet tilakonetta
-
ja TLS 1.3:n eri moodeja, ja
nämä ovat auttaneet paljon
-
protokollan kehityksessä.
-
Kuka siis oikeastaan kehittää
TLS 1.3:a? No, kyseessä
-
on järjestö nimeltä IETF, joka tulee
sanoista Internet Engineering Taskforce.
-
Se on ryhmä vapaaehtoisia, jotka tapaavat
kolmesti vuodessa, joilla on postituslistoja
-
ja he väittelevät loputtomasti näistä
protokollista. He määrittelevät internetissä
-
käytettävät protokollat. Ja alunperin,
ensimmäinen asia mitä tästä näin - tässä
-
on twiittini syyskuulta 2013 - oli
toivomuslista koskien TLS 1.3:a.
-
Ja sen jälkeen IETF julkaisi
ensimmäisen version...
-
Dokumentit, jotka määrittelevät proto-
kollia tunnetaan nimellä RFC, ja
-
ennen kuin jostakin tulee RFC, siitä käy-
tetään nimeä "Internet Draft". Eli
-
aloitetaan Internet Draft 0:sta, ja sitä
iteroidaan, kunnes lopulta se joko
-
hylätään tai hyväksytään RFC:ksi. Ensim-
mäinen oli siis melkein 3 vuotta sitten
-
huhtikuussa 2014, ja nykyinen
luonnos (18), jonka ajatellaan olevan
-
melkein valmis, on vaiheessa jota
kutsutaan "Last Call":ksi IETF:ssä,
-
julkaistiin vastikään lokakuussa.
Tietoturvallisuusympäristössä tällä
-
aikavälillä on nähty todella monia
erilaisia hyökkäyksiä TLS:ää vastaan.
-
Esim: Triple Handshake, POODLE, FREAK,
LogJam, DROWN (josta oli esitys aiemmin
-
tänään), Lucky Microseconds, SLOTH.
Kaikki nämä eri akronyymit - joista
-
ehkä olette tai ette ole kuullut -
ovat tapahtuneet kehitystyön aikana.
-
Eli TLS 1.3 on kehittyvä
dokumentti, ja toivottavasti
-
siitä tulee lyhyt. Tarkoitan
siis, että TLS 1.2 oli 79 sivua.
-
Se on vähän vaikeaselkoinen, mutta lukekaa
toki jos kiinnostaa. TLS 1.3 sen sijaan,
-
jos lopusta karsii ylimääräistä tavaraa
pois, tulee aika lähelle. Ja se on
-
helppolukuisempi. Se on paljon tarkempi,
vaikka sieltä löytyykin kiinnostavia
-
ominaisuuksia kuten 0-RTT istunnon jatka-
minen. Kuinka se käytännössä kirjoitetaan?
-
Vastaus on... Github! Ja postituslista!
Eli, jos haluat lähettää pull pyynnön
-
tähän TLS-työryhmään, sieltä se löytyy.
Tällä tavoin luonnos oikeasti muotoutuu.
-
Ja kannattanee lähettää viesti
postituslistaan, jossa kuvailet
-
muutoksiasi, jos haluat. Ehdottaisin,
jos joku haluaa osallistua - nyt on aika
-
myöhäistä - onhan se "Last Call"-vaiheessa,
mutta postituslista on vielä avoinna.
-
Olen työstänyt tätä useiden muiden
kanssa, Filippo mukaan lukien. Olimme
-
osallisina luonnoksessa, työskennelleet
yli vuoden tämän parissa. Voitte käydä
-
katsomassa Githubista ongelmat ja
näette, kuinka paljon työtä se on vaatinut.
-
Luonnos on muuttunut
vuosien ja kuukausien varrella.
-
Esim. luonnos 9:ssä oli tämä
monimutkainen puumalli
-
kierrosavaimen laskennalle, tässä
näette "htk"... kaikki nämä eri asiat
-
liittyivät TLS-kättelyn eri avaimiin.
Tämän inspiraation lähteenä oli QUIC,
-
Googlen protokolla, jonka Filippo mainitsi
aiemmin, sekä julkaisu nimeltä "OPTLS".
-
Ja siinä oli useita eri moodeja:
semistaattinen Diffie-Hellman ja tämä
-
puumallinen avaintenlaskenta. Ajan
mittaan tätä pelkistettiin tästä
-
monimutkaisesta kaaviosta siihen, mitä
nyt käytämme TLS 1.3:ssa. Joka on hyvin
-
yksinkertainen avaimenjohtamisalgoritmi.
Vaati paljon työtä päästä jostain suuresta
-
johonkin näin pieneen. Mutta se onnistui!
Muita TLS 1.3:n kanssa sattuneita,
-
kryptografisesti vähemmän
merkittäviä asioita, on
-
nimeäminen! Jos joku on seurannut
kehitystä, TLS 1.3 ei välttämättä ole
-
yksimielinen valinta tämän protokollan
nimeksi. Kuten Filippo mainitsi, 1.0,
-
1.1, 1.2 ovat melko pieniä iteraatioita
jopa SSLv3:een verrattuna, kun taas
-
TLS 1.3 on aika iso muutos.
Siispä nimelle on paljon
-
vaihtoehtoja! Otetaanpa äänestys
kättä nostamalla. Kenen
-
mielestä nimen pitäisi olla 1.3?
(nauraa)
-
Kiitos Filippo! (Filippo nauraa)
Jep, eli aika suuri osa.
-
Entäpä TLS 2? Ketään? Oho. Tämä
näyttää itse asiassa enemmältä kuin...
-
Filippo: Muistakaa että SSLv2
on juttu! Ja se on kamala juttu!
-
Nick: Ette halua sekoittaa sitä
meihin! No entä sitten TLS 4?
-
Edelleen merkittävä osa ihmisiä...
Entäs TLS 2017? Noniin...
-
Selvä. TLS 7 ketään? Okei...
-
Filippo: TLS Millenium 2019 X?
-
Kyllä! Myyty!
Nick: TLS Vista?
-
(naurua) - (Nick ja Filippo nauravat)
(aplodeja)
-
Nick: Paljon vaihtoehtoja! Mutta ihan
vain muistutuksena, muu maailma ei
-
oikeastaan käytä nimeä TLS. Tässä on
Google trends, kiinnostus aikajanalla,
-
kun vertaillaan "SSL vs. TLS". SSL on nimi,
jota suuri osa maailmasta käyttää. SSL:n
-
korkein versio on versio 3, ja siinä on
syy miksi ihmiset ajattelivat, että
-
"TLS 4" on hyvä ajatus. Koska: "Ihmiset
ovat hämillään: 3 on enemmän
-
kuin 1.2 jne. jne."
-
Tämä äänestys ei ollut ainoa. Tässä
on epävirallisia Twitter-äänestyksiä.
-
"Mmm, pekonia!" oli hyvä.
52 % Ryan Hurstin äänestykessä.
-
(naurua)
-
Versionumerot TLS:ssä
ovat inhottava aihe.
-
Esim. olemassa olevat versiot TLS:stä
- jos katsotaan verkon yli kulkevaa tietoa,
-
ne eivät täsmää. Eli SSL 3
on 3.0, mikä täsmää.
-
Mutta TLS 1 on 3.1, 3.2...
TLS 1.2 on 3.3 ja alun perin
-
uskoakseni TLS 1.3:n
luonnokseen 16 asti se oli 3.4
-
Eli ikäänkuin pikkupäivitys
TLS 1.2:een, hyvin hämmentävää.
-
Internetmittausten jälkeen pääteltiin,
-
että moni palvelin, jos lähetät "Client
Hello":n arvolla "3.4", katkaisee yhteyden.
-
Tämä on oikeasti todella huono juttu, se
estää selaimia alentamasta yhteyttä
-
turvallisesti. Mitä palvelimen kuuluisi
tehdä, jos se näkee version joka on
-
korkeampi kuin 3.3, on vain vastata "3.3"
sanoakseen: "Tämän parempaan en pysty".
-
Mutta kävi ilmi, että moni näistä vain
hajoaa. Joten 3.3 on nyt "Client Hello":ssa
-
ja 3.4 neuvotellaan aliprotokollana.
Eli tämä on sotkuista.
-
Eikö? Mutta punnitsemme hyötyjä moni-
mutkaisuutta vastaan, ja tämä on niitä
-
missä palvelimien toimivuus painaa
enemmän kuin lisääntynyt monimutkaisuus,
-
jonka tuo uuden asian lisääminen. Ja tämän
estämiseksi tulevaisuudessa
-
David Benjamin ehdotti jotain nimeltä
GREASE, missä jokaiseen TLS-neuvottelun
-
osaan tulee, asiakkaana, lisätä
jotain satunnaista tavaraa,
-
jotta palvelimet tottuvat
näkemään asioita, jotka eivät ole
-
versioita, joihin ne ovat tottuneet.
Eli, 0x8a8a. Se on GREASE-d!
-
Filippo: Se on ihan todellinen asia!
Se on todellinen hyvin hyödyllinen asia!
-
Nick: Tämä tulee olemaan hyvin
hyödyllinen, tulevaisuutta ajatellen,
-
estämään tällaisia asioita tapahtumasta.
Mutta on ikävää, että sen täytyi tapahtua.
-
Aikamme on käymässä vähiin, mutta
me halusimme todella päästä mukaan
-
ja sotkemaan kätemme. Ja yksi asia
mitä IETF rakastaa, kun kehittelee näitä
-
standardeja on koodin ajaminen. Joten
aloitimme IETF 95 Hackathonilla,
-
joka pidettiin huhtikuussa ja
onnistuimme lopulta saamaan Firefoxin
-
lataamaan Cloudflaren isännöimän
palvelimen TLS 1.3:lla. Tämä oli suuri
-
saavutus silloin. Käytimme NSS:ää,
joka on Firefoxin turvallisuuskirjasto ja
-
"Mint":iä, joka oli uusi tyhjästä
-
rakennettu versio TLS 1.3:sta Go-kielellä.
-
Ja lopputulema oli, että se toimi! Mutta
tämä oli ainoastaan konseptitodistus (PoC).
-
Filippo: Rakentaaksemme jotain tuotanto-
valmiimpaa, katsoimme TLS-kirjastoa,
-
jonka muokkaaminen tuntui meistä
helpoimmalta. Yllätyksettömästi se
-
ei ollut OpenSSL. Joten päätimme
-
rakentaa 1.3:n Go:n
crypto/tls-kirjaston päälle,
-
joka löytyy Go:n standardikirjastosta.
Lopputulos on "tls-tris", ja se on
-
suora korvaaja crypto/tls:lle ja
se tulee tämän varoituksen
-
saattelemana, joka sanoo: "Kaiken hyvän
ja oikeudenmukaisuuden nimessä,
-
älä käytä tätä!". Varoitus koski alunperin
kaikkea, mutta nyt se ei enää niinkään
-
koske tietoturvaa, auditoitutimme tämän,
mutta se koskee edelleen vakautta.
-
Työstämme tämän saamista ylävirtaan,
mikä tulee vakiinnuttamaan API:n.
-
Ja voitte seurata ylävirtaprosessia,
Googlen väki oli ystävällinen ja
-
avasi meille oman haaran kehitystyötä
varten, ja se ei varmasti tule osumaan
-
seuraavaan Go:n julkaisuun, Go 1.8, mutta
odotamme innolla, että saamme tämän ylävirtaan.
-
Joka tapauksessa, vaikka käyttäisit
Go:ta, käyttöönotto on vaikeaa.
-
Ensimmäisen kerran kun otimme Tris:n
käyttöön, luonnoksen numero oli 13.
-
Ja tukeakseen selaimia tästä
eteenpäin, meidän täytyi tukea
-
useita luonnosversioita saman
aikaisesti käyttämällä joskus
-
erikoisia yksityiskohtia. Ja joskus meidän
täytyi tukea asioita, jotka eivät todellakaan
-
olleet edes luonnoksia, koska selaimet
alkoivat... hajaantua eri suuntiin.
-
No, joka tapauksessa meillä
oli testimatriisi, joka ajoi
-
kaikki meidän commit:imme kaikkia
asiakaskirjastojen versioita vastaan,
-
ja tämä varmisti, että olemme
aina yhteensopivia selainten kanssa.
-
Ja nykyään asiakkaat ovat itse asiassa
paljon vakaampia, ja todellakin,
-
saatat jopa jo tietämättäsi
käyttää sitä. Esim. Chrome Beta,
-
beta-kanavalla se on päällä noin 50 %:lla
instansseista kokeiluna Googlen puolelta.
-
Ja tältä meidän kuvaajamme
näyttivät julkaisun aikaan,
-
kun Firefox Nightly laittoi sen oletuksena
päälle ja kun Chrome Canary laittoi sen
-
oletuksena päälle. Nykyään meno on
vakaata: noin 700 pyyntöä sekunnissa
-
kulkee TLS 1.3:a käyttäen. Ja omalla
puolellamme laitoimme sen
-
päälle miljoonille Cloudflaren
isännöimille sivustoille.
-
Ja, kuten sanottua, spesifikaatio
on muuttuva dokumentti
-
ja se on kaikille avoin. Sen voi nähdä
Githubissa. Tris implementaatio on siellä
-
myös, vaikkakin siinä on tämä pelottava
varoitus, ja tässä blogissa tulemme
-
luultavasti julkaisemaan kaiken jatko-
tutkimuksen ja tulokset. Kiitos paljon ja
-
jos teillä on kysymyksiä, astukaa esiin,
uskon että meillä on muutama minuutti.
-
(aplodeja)
-
Herald: Kiitos, meillä on reilusti
aikaa kysymyksille. Ensimmäinen
-
kysymys tulee internetistä.
-
Signal Angel: Ensimmäisessä kysymyksessä
ihmiset kysyvät onko viisasta, että
-
päätös 0-RTT:n suhteen menee
sovellukselle, eli se jätetään
-
sovelluksen kehittäjille?
-
Filippo: (nauraa)
(aplodeja)
-
Filippo: Hyvä kysymys. Kuten sanoimme,
tämä tosiaan rikkoo abstraktion.
-
Eli se EI ole oletusarvoisesti rikki.
Jos ainoastaan päivität Go:n ja
-
saat käyttöösi TLS 1.3:n, et tule
kohtaamaan yhtään 0-RTT:tä,
-
koska tosiaan se vaatisi yhteistyötä
sovellukselta. Eli mikäli sovellus ei
-
tiedä mitä tekee sen kanssa, se ei
yksinkertaisesti voi käyttää sitä, mutta
-
saa kaikki turvallisuushyödyt sekä 1-RTT-
kättelyn hyödyt joka tapauksessa.
-
Herald: Selvä, seuraava kysymys
tulee mikrofonista yksi.
-
Kysyjä: Protokollan ensimmäisten
testien yhteydessä, oletteko
-
saaneet konkreettisia arvoja sille, miltä
nuo suorituskyvyn parannukset näyttävät?
-
(Filippo huokaisee)
-
Nick: Yhdeltä edestakaiselta matkalta!
(nauraa) Riippuu siitä paljonko 1-RTT on.
-
Filippo: Nimenomaan. Yksi edestakainen
matka on... en pysty sanomaan lukua
-
koska tietysti, jos asut San Franciscossa,
jossa on nopea kuituyhteys, se on
-
mitä? Ehkä 3 millisekuntia? 6...?
Jos taas asut vaikka jossain maassa,
-
missä EDGE on ainoa
käytettävissä oleva yhteys,
-
se on ehkä sekunti. Meillä taitaa
olla keskiarvo, joka on noin... 100
-
ja 200 millisekunnin välillä, mutta emme
ole virallisesti mitanneet näitä lukuja.
-
Herald: Ok, seuraava kysymys
tulee mikrofonista 3.
-
Kysyjä: Yksi huomautus, jonka haluan sanoa
on, että yksi parannus joka saavutettiin
-
TLS 1.3:ssa on että asiakas-
varmenteisiin lisättiin salaus.
-
Joten asiakasvarmenteet lähetetään
salattuina, mikä on tärkeää, jos
-
ajattelee asiakasta, joka liikkuu sekä
joukkovalvovaa elintä, joka voisi
-
jäljittää asiakkaita tällä. Ja toinen
huomio/kysymys, joka saattaisi...
-
Herald: Kysymykset päättyvät kysymys-
merkkiin. Joten yritäthän pitää lyhyenä?
-
Kysyjä: Kyllä... Tämä saattaa
olla tyhmä kysymys...
-
Vakio Diffie-Hellman-ryhmät...
eivätkö ne olleet ongelma LogJam-
-
hyökkäyksessä, joten... auttaako
tämä LogJam-hyökkäyksiä vastaan?
-
Nick: Viittaatko siihen pankeille
suunnattuun ehdotukseen?
-
Kysyjä: Ei ei, yleisesti siihen,
että voidaan laskea ennakkoon...
-
Nick: Aivan, kyllä, eli LogJamin kohdalla
oli ongelma, missä oli DH-ryhmä, joka
-
oli oletuksena käytössä monella
eri palvelimella. Apachen käyttämä,
-
joka oli 1024 (bittiä).
TLS 1.3:ssa tämä rajoitettiin
-
ennalta laskettuun DH-ryhmään,
joka on yli 2000 bittiä pienimmilläänkin,
-
ja valtavallakin laskentateholla varustettuna,
jos on 2000 bitin DH ryhmä, ei ole
-
käytännössä mahdollista tehdä esilasken-
taa minkäänlaista hyökkäystä varten.
-
Mutta kyllä, tuo on hyvä pointti.
-
Filippo: ...ja koska ne ovat kiinteitä, ei
ole keinoa pakottaa protokollaa käyttämään
-
mitään muuta, joka ei olisi niin vahva.
Kysyjä: Selvä, kiitos!
-
Herald: Seuraava kysymys mikrofonista 4.
-
Kysyjä: Kiitos esityksestä!
Tiivistelmässä mainitsitte, että eräs
-
toinen lopetettava ominaisuus oli SNI,
-
yhdessä 0-RTT:n kanssa, mutta on edelleen
tapoja implementoida se. Voitteko selventää?
-
Filippo: Pidimme siis tämän esitelmän
kahdesti sisäisesti, ja tämä kysymys
-
esitettiin molemmilla
kerroilla. Joten... (nauraa)
-
Eli, SNI on pieni parametri, jonka asiakas
lähettää palvelimelle kertoakseen,
-
mille sivustolle se yrittää
yhdistää. Esim. Cloudflarella on
-
useita sivustoja koneidemme takana, joten
sinun täytyy kertoa meille "Haluan siis
-
oikeasti yhdistää "blog.filippo.io":n. Tämä
on yksityisyyden kannalta ongelmallista,
-
koska joku voi pelkästään verkon yli
kulkevista tavuista nähdä, mihin
-
nimenomaiseen sivuun yhdistät. Epäonninen
seikka on se, että tässä on sama onglema
-
kuin alkudatan jatkosuojauksessa.
SNI lähetetään "Client Hello":ssa, ja
-
tässä kohtaa ei ole vielä neuvoteltu
yhtään avainta, joten ei ole mitään millä
-
sen voisi salata. Mutta jos ei lähetä
SNI:tä ensimmäisessä viestissä,
-
palvelin ei tiedä minkä sertifikaatin
se lähettää, joten se ei voi lähettää
-
allekirjoitusta ensimäisessä viestissä,
joten ei ole avaimia. Eli täytyisi tehdä
-
2-RTT, ja nyt olisimme taas samassa
pisteessä kuin TLS 1.2. Joten,
-
valitettavasti, se ei
toimi 1-RTT kättelyissä.
-
Nick: HTTP2:n spesifikaatiossa on kuitenkin
ehdotuksia, jotka mahdollistaisivat multi-
-
pleksaamisen. Tämä on vielä työn alla.
Voisi olla mahdollista yhdistää ensin
-
yhteen verkkotunnukseen ja sitten luoda
toinen yhteys olemassa olevan sisällä.
-
Ja tämä voisi mahdollisesti
suojata SNI:tä.
-
Filippo: Eli joku tarkkailija ajattelisi,
että menet sivulle blog.filippo.io mutta
-
kun avaat yhteyden, voisit pyytää
HTTP2:ta näyttämään myös
-
"tämän toisen sivun". Kiitos!
-
Herald: Selvä, seuraava
kysymys, mikrofoni 7,
-
tai itse asiassa 5, pahoittelut.
-
Kysyjä: Mainitsitte, että TLS 1.3:sta
on olemassa formaali verifikaatio.
-
Millä ohjelmistolla tämä
formaali verifikaatio on tehty?
-
Nick: Oli useita ohjelmisto-
implementaatioita ja protokollia...
-
Katsotaanpa, jos pääsen
takaisinpäin... tässä.
-
Tamarin on ohjelmisto, jonka on
kehittänyt muun muassa Cas Cremers
-
Oxfordissa ja Royal Hollowayssa.
miTLS on uskoakseni kirjoitettu F#:lla
-
INRIA:n toimesta. Ja nqsb-TLS
on kirjoitettu OCaml:lla.
-
Joten useita eri kieliä käytettiin näiden
kehityksessä ja käsittääkseni nqsb-TLS:n
-
kehittäjät ovat paikalla...
-
Herald: Selvä, seuraava
kysymys mikrofoni 8.
-
Kysyjä: Hei! Kiitos. Kiitos
informatiivisesta esityksestä.
-
SSL:n ja TSL:n historia on täynnä "mikä
muka voisi mennä vikaan"-ideoita ja hetkiä,
-
jotka lopulta kostautuivat. Joten
kysymykseni, kun otetaan huomioon,
-
että on useita pienempiä organisaatioita
tai pienempiä hosting-yrityksiä jne.,
-
jotka luultavasti implementoivat 0-RTT:n
väärin. Mikä on ensivaikutelmanne? Kuinka
-
todennäköistä on, että tämä todella
tulee kostautumaan pian? Kiitos.
-
Filippo: Kuten sanoin, olen itse asiassa
aavistuksen skeptinen vaikutusten suhteen
-
koskien HTTP:tä, sillä selaimet saadaan
uudelleenlähettämään pyyntöjä jo nyt.
-
Ja olemme nähneet tästä
julkaisuja ja blogipostauksia. Mutta
-
kukaan ei kyennyt näyttämään
toteen, että se olisi rikkonut
-
suuren osuuden internetistä. Ollakseni
rehellinen, en osaa vastata, kuinka
-
pahasti se kostautuu. Mutta muistetaan,
että tasapainon toinen puoli
-
on se määrä ihmisiä, jotka sanovat
etteivät aio ottaa TSL:ää käyttöön
-
koska se on "hidas". Ei.
-
Se on 0-RTT, TLS on nopea!
Menkää ja salatkaa kaikki!
-
Siis nuo ovat ne kaksi huolenaihetta,
jotka täytyy saada tasapainoon.
-
Lisäksi, oma henkilökohtainen
mielipiteeni ei paina paljoa.
-
Tämä oli päätös, jonka teki koko
postituslistasta koostuva yhteisö.
-
Ja voin vakuuttaa, että jokainen on ollut
hyvin konservatiivinen kaiken suhteen,
-
ottanut huomioon jopa... niin, senkin
olisiko nimi johtanut ihmisiä harhaan.
-
En osaa ennustaa tulevaisuutta. Voin
vain sanoa toivovani, että teimme
-
parhaan valinnan tehdäksemme suurimman
osan verkosta niin turvalliseksi kuin voimme.
-
Herald: Seuraava kysymys
tulee internetistä.
-
Signal Angel, onko meillä vielä
kysymys internetistä?
-
Signal Angel: Kyllä meillä on.
-
Mitkä ovat suurimmat implementoinnin
yhteensopimattomuudet, jotka on löydetty
-
nyt kun lopullinen spesifikaatio
on melko valmis?
-
Herald: Voitko toistaa kysymyksen?
-
(Signal Angel toistaa kysymyksen)
-
Filippo: Okei. Koskien
luonnosteluvaihetta?
-
Osa niistä, jotka eivät olleet versio-
yhteensopivia oli, uskoakseni, enimmäkseen
-
"middleboxeja" ja palomuureja.
-
Nick: Oli joitain todella isoja
sivustojakin. Paypal taisi olla yksi?
-
Filippo: Vaikkakin, prosessin aikana
meillä oli yhteensopivuusongelmia monista
-
syistä. Mukaanlukien se, missä
toinen kehittäjistä kirjoitti väärin
-
muuttujan numeron.
(nauraa)
-
Luonnosten aikana joskus yhteensopivuus
meni rikki, mutta oli myös paljon yhteis-
-
työtä asiakasimplementaatioiden ja meidän
puolemme palvelinimplementaatioiden välillä.
-
Voin onnekseni todeta, että varsinaisten
1.3 implementaatioiden kanssa tehtiin
-
paljon yhteensopivuustestejä, ja kaikki
ongelmat saatiin melko nopeasti korjattua.
-
Herald: Okei, seuraava kysymys
tulee mikrofonista numero 1.
-
Kysyjä: Minulla on 2 nopeaa kysmystä
koskien istunnon jatkamista.
-
Jos palvelimelle tallennetaan jotain
dataa istunnosta, eikö se olisi tavallaan
-
jonkinlainen supereväste? Eikö se ole
yksityisyyden kannalta vaarallista?
-
Ja toinen kysymys on: entä DNS-
kuormantasaajat tai jotkut muut
-
valtavat määrät palvelimia, missä pyynnöt
menevät joka kerta eri palvelimelle?
-
Filippo: Ok, eli nämä koskevat yksityiskohtia
istuntolippujen tehokkaasta jakelusta.
-
TLS 1.3 ottaa huomioon yksityisyydensuojan
koskien istuntolippuja, ja tosiaan se
-
mahdollistaa palvelimen lähettämään useita
istuntolippuja. Palvelin voi siis edelleen
-
tietää mikä asiakas sen lähettää, jos niin
haluaa. Mutta kukaan ulkopuolelta yhteyttä
-
tarkkaileva ei siihen kykene, koska ne
lähetetään salattuina, toisin kuin TLS 1.2:ssa
-
ja niitä voi olla useita. Kukaan ulko-
puolinen ei pysty yhdistämään sitä
-
alkuperäiseen yhteyteen. Tämän parempaan
ei pysty, sillä jos palvelimen ja asiakkaan
-
täytyy käyttää uudelleen jotain jaettua
tietoa, palvelimen täytyy saada tietää
-
kuka oli kyseessä. Mutta istuntolippuja
ei voi 1.3:ssa jäljittää kolmannen
-
osapuolen toimesta. Ja... kun tehdään
kuormantasausta... on eräs mielenkiintoinen
-
julkaisu istuntolippujen jakelusta, mutta
olennaista on, että kannattaa varmaan
-
selvittää miten asiakkaat liikkuvat
palvelimien välillä ja löytää tasapaino
-
sen välillä kannattaako istuntolipun
avain jakaa, jolloin se on tehokkaampaa
-
vai jättää istuntolipun avain jakamatta,
jolloin niitä on vaikeampi saada käsiinsä.
-
Saattaisit tehdä maantieteellisen
sijainnin mukaan, tai yhden räkin...
-
Se riippuu ihan toteutuksesta.
-
Herald: Okei, viimeinen
kysymys menee mikrofonille 3.
-
Kysyjä: Minulla on kysymys koskien
GREASE-mekanismia, joka toteutetaan
-
asiakkaan puolella. Jos
ymmärsin oikein, siinä lisätään
-
satunnaisia versionumeroita
olemattomista TLS- tai SSL-versioista
-
ja siten koulutetaan
palvelimet mukautumaan
-
spesifikaatioon. Mitkä ovat
tosielämän testien tulokset?
-
Moniko palvelin menee
tästä oikeasti nurin?
-
Filippo: Odotusarvoisesti ei yksikään,
koska ne kaikki ovat nyt ottamassa
-
1.3:a käyttöön, joten kaikki asiakkaat,
joita ne kohtaavat käyttäisivät GREASE:a.
-
Kuitenkin, juuri kun Google otti GREASE:n
käyttöön luulen sen rikkoneen... En ole
-
varma, joten en sano mikä palvelin-
implementaatio, mutta yhden pienemmistä
-
tunnistettiin heti olevan...
se Haskell-kielellä kirjoitettu!
-
Nick: Aivan!
Filippo: En muista sen nimeä,
-
en osaa lukea Haskellia, joten en
tarkalleen tiedä mitä ne tekivät, mutta
-
ne katkaisivat yhteyksiä
GREASE:n takia.
-
Nick: Ja huomautuksena, GREASE:a käytetään
myös salausneuvotteluissa ja kaikessa
-
mikä on neuvottelu TLS 1.3:ssa.
Tämä tosiaan rikkoi
-
pienen osan palvelimista, mutta
sen verran pienen osan,
-
että ihmiset hyväksyivät sen.
-
Kysyjä: Kiitos!
Nick: 2 % on liikaa!
-
Herald: Kiitos oikein paljon.
Filippo: Kiitos!
-
(aplodeja)
-
(33C3 loppumusiikki)
-
Translated by Roope Salminen
(ITKST56 course assignment at JYU.FI)