WEBVTT 00:00:00.000 --> 00:00:14.820 33C3 intromusiikki 00:00:14.820 --> 00:00:20.190 Herald: Seuraava esitelmä käsittelee TLS 1.3 käyttöönottoa 00:00:20.190 --> 00:00:23.509 ja sen esittävät Filippo Valsorda sekä Nick Sullivan, 00:00:23.509 --> 00:00:26.989 jotka he molemmat työskentelevät Cloudflarelle. 00:00:26.989 --> 00:00:32.110 Joten toivottakaamme lämpimästi tervetulleeksi Nick ja Filippo! 00:00:32.110 --> 00:00:39.490 aplodeja 00:00:39.490 --> 00:00:43.820 Filippo: Hei kaikki. Puheenaiheenamme tänään on TLS 1.3. 00:00:43.820 --> 00:00:48.340 TLS 1.3 on tietenkin uusin versio TLS:stä, joka tulee sanoista 00:00:48.340 --> 00:00:52.960 "Transport Layer Security". Se on ehkä tutuin 00:00:52.960 --> 00:00:57.900 vihreästä lukon kuvasta selaimessa, tai vanhasta nimestään: SSL, 00:00:57.900 --> 00:01:02.510 jota yritämme edeelleen tappaa. TLS on 00:01:02.510 --> 00:01:07.890 läpinäkyvä turvallisuusprotokolla, joka voi turvallisesti tunneloida 00:01:07.890 --> 00:01:12.460 mielivaltaista sovellusliikennettä. Sitä käyttävät tietenkin web-selaimet, 00:01:12.460 --> 00:01:16.760 sitä käyttävät sähköpostipalvelimet turvaamaan keskinäistä 00:01:16.760 --> 00:01:22.270 SMTP liikennettään. Sitä käyttävät Tor-solmut keskinäiseen kommunikointiinsa. 00:01:22.270 --> 00:01:26.810 Mutta se kehittyi yli 20 vuoden ajan, 00:01:26.810 --> 00:01:31.320 mutta pohjimmiltaan se koskee asiakasta ja palvelinta jotka haluavat kommunikoida 00:01:31.320 --> 00:01:36.119 turvallisesti verkon yli. Kommunikoidakseen turvallisesti verkon yli 00:01:36.119 --> 00:01:41.170 niiden täytyy luoda avainmateriaalia, sopia keskenään avainmateriaalista 00:01:41.170 --> 00:01:47.349 molemmin puolin salatakseen tulevan liikenteen. 00:01:47.349 --> 00:01:51.989 Se, miten avainmateriaalista sovitaan, hoidetaan vaiheessa, jota kutsumme 00:01:51.989 --> 00:01:57.890 "kättelyksi". Kättelyssä on mukana julkisen avaimen kryptografiaa ja 00:01:57.890 --> 00:02:02.670 dataa, jota lapioidaan asiakkaalta palvelimelle, palvelimelta asiakkaalle. 00:02:02.670 --> 00:02:07.170 Tältä kättely näyttää TLS 1.2:ssa. 00:02:07.170 --> 00:02:12.790 Asiakas aloittaa tanssit lähettämällä "Client Hello"-viestin, 00:02:12.790 --> 00:02:18.960 jossa kertoo, mitä tuettuja parametreja se voi käyttää. NOTE Paragraph 00:02:18.960 --> 00:02:23.430 Palvelin vastaanottaa sen ja lähettää oman viestinsä, joka on 00:02:23.430 --> 00:02:28.200 "Server Hello", joka sanoo "Selvä! Käytetään tätä salausalgoritmien yhdistelmää, 00:02:28.200 --> 00:02:33.230 jota sanot tukevasi, ja tässä on minun avainosuuteni käytettäväksi 00:02:33.230 --> 00:02:39.270 tässä avaintenvaihtoalgoritmissa. Lisäksi, tässä on sertifikaatti, 00:02:39.270 --> 00:02:45.300 jonka on allekirjoittanut auktoriteetti, joka todistaa, että todellakin olen 00:02:45.300 --> 00:02:50.370 Cloudflare.com. Ja tässä on allekirjoitus sertifikaatista todistamaan, että tämä 00:02:50.370 --> 00:02:55.450 avainosuus on todellakin se, jota haluan sinun käyttävän avainten luomiseen." 00:02:55.450 --> 00:03:00.940 Asiakas vastaan ottaa sen ja generoi oman avainosuutensa, eli oman puolensa 00:03:00.940 --> 00:03:06.200 Diffie-Hellman avaintenvaihdosta, ja lähettää avainosuuden sekä NOTE Paragraph 00:03:06.200 --> 00:03:10.999 viestin kertoakseen: "Se oli siinä. Kättely on nyt paketissa". 00:03:10.999 --> 00:03:15.490 Tätä kutsutaan "Finished" viestiksi. Palvelin vastaanottaa sen, luo 00:03:15.490 --> 00:03:20.679 oman "Finished" viestinsä ja vastaa sillä. Eli 00:03:20.679 --> 00:03:25.930 nyt voimme vihdoin lähettää sovellusdataa. Kerrataanpa vielä prosessi: 00:03:25.930 --> 00:03:30.022 Asiakas -> Palvelin, Palvelin -> Asiakas; Asiakas -> Palvelin, Palvelin -> Asiakas. 00:03:30.022 --> 00:03:34.960 Meidän täytyi tehdä 2 edestakaista matkaa asiakkaan ja palvelimen välillä ennen 00:03:34.960 --> 00:03:40.730 mitään muuta. Emme ole lähettäneet tavuakaan sovelluskerroksella 00:03:40.730 --> 00:03:46.010 ennen tätä. Tämä tietenkin matkapuhelinverkoissa 00:03:46.010 --> 00:03:50.539 tai tietyissä maailmankolkissa voi kerryttää 00:03:50.539 --> 00:03:55.320 satojen millisekuntien viiveen. Ja tämä täytyy tehdä 00:03:55.320 --> 00:04:00.930 joka kerta, kun uutta yhteyttä avataan. Joka kerta asiakkaan ja palvelimen 00:04:00.930 --> 00:04:06.490 täytyy kulkea kahdesti välinsä luodakseen avaimet ennen 00:04:06.490 --> 00:04:12.730 kuin yhteyttä voi oikeasti käyttää. TLS 1.1 00:04:12.730 --> 00:04:17.950 ja 1.0 eivät eronneet suuresti 1.2:sta. Voisikin kysyä: miksi sitten 00:04:17.950 --> 00:04:23.750 pitää kokonainen esitys TLS 1.3:sta, joka on luultavasti vain taas yksi 00:04:23.750 --> 00:04:31.430 iteraatio samasta konseptista? No, TLS 1.3 on oikeasti iso uudelleensuunnittelu. 00:04:31.430 --> 00:04:36.740 Erityisesti kättely on uudelleen järjestetty. Ja tämän näkyvin tulos 00:04:36.740 --> 00:04:43.139 on se, että yksi kokonainen edestakainen matka on karsittu pois. 00:04:43.139 --> 00:04:48.929 Eli, tältä näyttää TLS 1.3-kättely. 00:04:48.929 --> 00:04:53.479 Kuinka 1.3 poistaa edestakaisen matkan? Miten se pystyy siihen? Se kykenee siihen 00:04:53.479 --> 00:04:59.799 ennustamalla, mitä avaintenvaihtoalgoritmia 00:04:59.799 --> 00:05:04.740 palvelin tulee käyttämään, ja lähettämällä ennakkoon avainosuuden 00:05:04.740 --> 00:05:10.029 tuota algoritmia varten palvelimelle. Eli ensimmäisessä viestissä meillä oli 00:05:10.029 --> 00:05:15.529 "Client Hello", tuetut parametrit ja avainosuus algoritmille, 00:05:15.529 --> 00:05:21.549 josta asiakas uskoo palvelimen pitävän. Palvelin vastaanottaa viestin 00:05:21.549 --> 00:05:27.239 ja jos kaikki menee hyvin, se ajattelee: "Ah! Okei! Tykkään tästä avainosuudesta. 00:05:27.239 --> 00:05:32.789 Tässä on oma avainosuuteni samaa algoritmia varten, ja tässä muut 00:05:32.789 --> 00:05:37.719 parametrit, joita meidän tulisi käyttää." Se välittömästi sekoittaa avainosuudet 00:05:37.719 --> 00:05:42.319 saadakseen jaetun yhteisen avaimen, koska nyt sillä on molemmat avainosuudet - 00:05:42.319 --> 00:05:47.089 asiakkaan ja palvelimen - ja lähettää taas sertifikaatin ja allekirjoituksen 00:05:47.089 --> 00:05:51.339 sertifikaatista, ja sitten välittömästi lähettää "Finished"-viestin, koska 00:05:51.339 --> 00:05:56.339 se ei tarvitse mitään muuta asiakkaalta. Asiakas vastaanottaa tuon, ottaa 00:05:56.339 --> 00:06:02.020 avainosuuden, luo jaetun yhteisen avaimen ja lähettää oman "Finished" viestinsä, 00:06:02.020 --> 00:06:07.009 ja on valmis lähettämään sitä sovellus- dataa, jota olikaan lähettämässä. 00:06:07.009 --> 00:06:12.650 Esimerkiksi HTTP-pyyntösi. Nyt prosessi meni näin: 00:06:12.650 --> 00:06:15.919 Asiakas -> Palvelin, Palvelin -> Asiakas. 00:06:15.919 --> 00:06:21.330 Ja olemme valmiita lähettämään sovelluskerroksen dataa. Eli, jos olit 00:06:21.330 --> 00:06:27.239 avaamassa HTTPS-yhteyttä, selaimesi 00:06:27.239 --> 00:06:32.769 ei tarvitse odottaa nelinkertaista viivettä, nelinkertaista pingiä. Sen täytyy 00:06:32.769 --> 00:06:38.929 odottaa vain kaksinkertainen, ja tämä tietysti säästää satoja millisekunteja 00:06:38.929 --> 00:06:46.199 viivettä kun avataan uusia yhteyksiä. Tämä oli onnellinen tapaus. 00:06:46.199 --> 00:06:52.299 Näin käy kun ennustus osuu oikeaan ja palvelin tykkää asiakkaan 00:06:52.299 --> 00:06:58.449 avainosuudesta. Jos palvelin ei tue avainosuutta, jonka 00:06:58.449 --> 00:07:05.169 asiakas lähetti, se lähettää kohteliaan pyynnön käyttää jotain toista algoritmiä, 00:07:05.169 --> 00:07:10.530 jota asiakas sanoi tukevansa. Tätä viestiä kutsutaan nimellä "Hello Retry Request". 00:07:10.530 --> 00:07:16.469 Siinä on eväste, joten se voi olla tilaton mutta periaatteessa se on varakeino, 00:07:16.469 --> 00:07:21.970 jolla palataan käytännössä TLS 1.2 kaltaiseen kättelyyn. Eikä se ole kovin 00:07:21.970 --> 00:07:26.939 vaikea toteuttaa, koska asiakas jatkaa uudella "Client Hello":lla, joka näyttää 00:07:26.939 --> 00:07:34.489 periaattessa täysin samalta kuin täysin tuorekin. Nyt... 00:07:34.489 --> 00:07:42.179 Tässä kohtaa olen valehdellut. TLS 1.2 ei aina ole 2 edestakaista matkaa. 00:07:42.179 --> 00:07:47.779 Suurin osa yhteyksistä, joita näemme esimerkiksi Cloudflaren reunalta ovat 00:07:47.779 --> 00:07:53.299 istunnon jatkamisia. Eli asiakas on ollut yhteydessä k.o. sivustolle aiemmin. 00:07:53.299 --> 00:07:59.079 Ja voimme käyttää tätä, voimme hyödyntää tätä ja tehdä kättelystä nopeamman. 00:07:59.079 --> 00:08:06.290 Tämä tarkoittaa, että asiakas muistaa jotain avainmateriaalista, jotta pystyy 00:08:06.290 --> 00:08:10.959 avaamaan seuraavan yhteyden vain yhdellä edestakaisella matkalla myös TLS 1.2:ssa. 00:08:10.959 --> 00:08:16.019 Eli tältä se näyttää. Tässä on normaali TLS 1.2 täysi kahden edestakaisen 00:08:16.019 --> 00:08:22.479 matkan yhteys. Ja tässä palvelin lähettää lipun uutta istuntoa varten. Istuntolippu 00:08:22.479 --> 00:08:30.029 ei ole sen kummempi kuin salattu kapseloitu blob sisältäen avainmateriaalia 00:08:30.029 --> 00:08:35.100 jonka asiakas säilyttää. Lippu on salattu ja allekirjoitettu avaimella, 00:08:35.100 --> 00:08:40.039 jonka vain palvelin tietää. Eli se on täysin läpinäkymätön asiakkaalle. 00:08:40.039 --> 00:08:45.040 Mutta asiakas säilyttää sen sekä yhteyden avainmateriaalin, 00:08:45.040 --> 00:08:49.340 jotta seuraavan kerran kun se avaa yhteyttä samalle sivustolle 00:08:49.340 --> 00:08:54.439 se lähettää "Client Hello":n ja istuntolipun. 00:08:54.439 --> 00:08:59.180 Jos palvelin tunnistaa lipun, se purkaa salauksen ja löytää sisältä 00:08:59.180 --> 00:09:04.090 avainmateriaalin. Ja nyt, vain yhden edes- takaisen matkan jälkeen, palvelimella on 00:09:04.090 --> 00:09:09.820 yhteistä avainmateriaalia asiakkaan kanssa koska asiakas säilytti sen viime kerrasta 00:09:09.820 --> 00:09:15.460 ja palvelin juuri purki sen salatusta istuntolipusta. 00:09:15.460 --> 00:09:20.890 Ok? Eli nyt palvelimella on jo käytet- tävissä yhteisiä jaettuja avaimia ja se 00:09:20.890 --> 00:09:26.150 lähettää "Finished" viestin ja asiakas vastaa "Finished" viestillä ja pyynnöllä. 00:09:26.150 --> 00:09:31.550 Eli tämä on TLS 1.2. Tätä tapahtuu jo joka päivä useimpien 00:09:31.550 --> 00:09:37.380 modernien TLS-yhteyksien kanssa. 00:09:37.380 --> 00:09:43.530 TLS 1.3-istunnon jatkaminen ei ole kovin erilainen. Siinäkin on istuntolipun käsite 00:09:43.530 --> 00:09:48.300 Istuntolipun sisällön nimi on muutettu "PSK":ksi, mutta se tulee vain sanoista 00:09:48.300 --> 00:09:53.220 "Pre-shared Key", koska sitähän se on: pelkkää avainmateriaalia, josta 00:09:53.220 --> 00:09:58.480 oli sovittu aiemmin. Ja se toimii samalla tavalla: 00:09:58.480 --> 00:10:02.830 palvelin vastaanottaa istuntolipun, purkaa salauksen ja hyppää 00:10:02.830 --> 00:10:07.450 "Finished" viestiin. 00:10:07.450 --> 00:10:13.070 Ongelma istunnon jatkamisessa on se, että jos hyökkääjällä on hallussaan 00:10:13.070 --> 00:10:17.130 istuntolippu - eli avain, jota palvelin käyttää salamaan istuntolipun, 00:10:17.130 --> 00:10:21.540 jonka sisällä avainmateriaali on - 00:10:21.540 --> 00:10:27.050 hyökkääjä voi passiivisesti, tai jopa tulevaisuudessa kaapatun yhteyden 00:10:27.050 --> 00:10:33.460 tapauksessa, purkaa istuntolipun "Client Hello":sta, löytää sieltä PSK:n 00:10:33.460 --> 00:10:38.320 ja käyttää sitä purkamaan koko yhteyden salauksen. Tämä ei ole hyvä. 00:10:38.320 --> 00:10:42.519 Tämä tarkoittaa, että joku voi tehdä passiivisesti purkaa salausta 00:10:42.519 --> 00:10:47.819 hallinnoimalla istuntolippua. Tähän vastataan yleensä sanomalla, että 00:10:47.819 --> 00:10:52.540 istuntoliput vanhenevat nopeasti. Mutta eikö olisi mukavaa, jos meidän ei 00:10:52.540 --> 00:10:56.270 tarvitsisi luottaa siihen. Ja on olemassa julkaisuja, jotka kertovat meille, 00:10:56.270 --> 00:11:01.310 että toteutukset eivät aina tee tätä oikein. Siispä, 00:11:01.310 --> 00:11:07.050 TLS 1.3 sen sijaan mahdollistaa Diffie-Hellmanin käytön 00:11:07.050 --> 00:11:11.760 istunnon jatkamisessa. 1.2:ssa ei ollut keinoja suojautua 00:11:11.760 --> 00:11:16.720 istuntolipun joutumiselta vääriin käsiin. 1.3:ssa voi sen sijaan 00:11:16.720 --> 00:11:21.409 lähettää avainosuuden osana "Client Hello":ta 00:11:21.409 --> 00:11:25.499 ja palvelin lähettää avainosuuden "Server Hello":n yhteydessä, 00:11:25.499 --> 00:11:31.710 ja osapuolet suorittavat Diffie-Hellmanin. Diffie-Hellmania käytettiin 00:11:31.710 --> 00:11:36.009 jatkosuojauksen toteuttamiseen esimerkiksi sen varalta, että sertifikaatin yksityinen 00:11:36.009 --> 00:11:41.339 avain joutuisi vääriin käsiin 1.2:ssa, ja tässä sitä käytetään jatkosuojauksen 00:11:41.339 --> 00:11:46.290 toteuttamiseen istunnon jatkamisessa. Nyt, saatatte miettiä: 00:11:46.290 --> 00:11:51.240 "Tämä näyttää periaatteessa normaalilta 1.3 kättelyltä, 00:11:51.240 --> 00:11:55.770 mikä virka PSK:lla on ylipäätään?" Tästäpä puuttuukin jotakin, 00:11:55.770 --> 00:11:59.510 sertifikaattia ei ole. Koska ei ole tarvetta uudelleen autentikoida 00:11:59.510 --> 00:12:04.620 sertifikaatin avulla, koska asiakas ja palvelin juttelivat aiemmin, joten 00:12:04.620 --> 00:12:09.099 palvelin tietää tarkistaneensa jo palvelimen sertifikaatin, 00:12:09.099 --> 00:12:12.819 ja mikäli palvelin pystyy purkamaan istuntolipun salauksen, se tarkoittaa, 00:12:12.819 --> 00:12:17.879 että palvelin on se joksi itseään väittää. Joten kaksi avainosuutta yhdistetään. 00:12:17.879 --> 00:12:22.860 Sitten yhdistetään PSK:n kanssa, jotta saadaan avain, jolla salataan loput 00:12:22.860 --> 00:12:29.580 yhteydestä. On olemassa vielä yksi uusi ominaisuus, jonka 00:12:29.580 --> 00:12:34.701 TLS 1.3 istunnon jatkaminen tuo mukanaan. Se on se seikka, että se 00:12:34.701 --> 00:12:40.830 mahdollistaa kättelyn ilman edestakaista matkaa (0-RTT). Muistutuksena, 00:12:40.830 --> 00:12:47.280 kaikki kättelyt 1.3:ssa koostuvat enim- mäkseen yhdestä edestaikaisesta matkasta. 00:12:47.280 --> 00:12:52.140 TSL 1.2 istunnon jatkamiset voivat olla minimissään yhden edestakaisen matkan. 00:12:52.140 --> 00:12:58.331 TLS 1.3 istunnon jatkamiset voivat toimia ilman edestakaista matkaa. Kuinka se 00:12:58.331 --> 00:13:04.210 toimii? Ajatellaanpa. Alkuun on PSK. 00:13:04.210 --> 00:13:10.119 Pre-shared Key. Asiakas voi käyttää sitä salaamaan 00:13:10.119 --> 00:13:15.680 tämän alkudatan, jonka haluaa lähettää palvelimelle. Joten asiakas avaa 00:13:15.680 --> 00:13:20.439 yhteyden, palvelimeen johon on aiemmin jo ollut yhteydessä, 00:13:20.439 --> 00:13:25.349 ja lähettää "Client Hello":n, istuntolipun, 00:13:25.349 --> 00:13:29.920 avainosuuden Diffie-Hellmaniin ja alkudatan. Alkudata on 00:13:29.920 --> 00:13:34.410 blob sovellusdataa - se voi olla esimerkiksi HTTP-pyyntö - 00:13:34.410 --> 00:13:39.409 salattuna PSK:lla. Palvelin vastaanottaa tämän, 00:13:39.409 --> 00:13:45.369 purkaa istuntolipun, löytää PSK:n, käyttää PSK:ta purkamaan 00:13:45.369 --> 00:13:50.770 alkudatan ja jatkaa sitten normaalisti: yhdistää avainosuudet, lisää PSK:N, 00:13:50.770 --> 00:13:55.270 luo uuden avaimen lopulle yhteydelle ja jatkaa yhteyttä. 00:13:55.270 --> 00:14:00.289 Eli mitä tässä tapahtui? Voimme lähettää sovellusdataa välittömästi yhteyden 00:14:00.289 --> 00:14:05.339 avaamisen yhteydessä. Tämä tarkoittaa, että poistimme suorituskyvyn 00:14:05.339 --> 00:14:11.320 yleiskustannukset TLS:ssä. 00:14:11.320 --> 00:14:16.460 0-RTT kättelyissä on kuitenkin kaksi vaaran paikkaa, jotka ovat teoriassa 00:14:16.460 --> 00:14:22.540 mahdoton poistaa. Yksi on se, että se kiva asia joka tuli PSK ECDHE moodin 00:14:22.540 --> 00:14:27.829 mukana, se jossa käytetään Diffie- Hellmania istunnon jatkamiseen 00:14:27.829 --> 00:14:33.040 1.3:ssa ei auta 0-RTT datan kanssa. 00:14:33.040 --> 00:14:38.620 Käytämme Diffie-Hellmania kun saavumme dian vihreään laatikkoon. 00:14:38.620 --> 00:14:44.000 Tietysti alkudata on salattu vain PSK:lla. Mietitäänpä taas 00:14:44.000 --> 00:14:49.150 hyökkääjää. Hyökkääjä jollain keinolla varasti istuntolippumme salausavaimet. 00:14:49.150 --> 00:14:54.969 Se voi katsoa "Client Hello":a, purkaa istuntolipun, saada PSK:n, 00:14:54.969 --> 00:15:00.029 käyttää PSK:ta purkamaan alkudatan salauksen. 00:15:00.029 --> 00:15:05.350 Se voi tehdä tämän kaapatustakin liiken- teestä, jos saa istuntolipun myöhemmin. 00:15:05.350 --> 00:15:11.519 Siispä alkudata ei ole jatkosuojattu istuntolipun avainten suhteen. 00:15:11.519 --> 00:15:16.679 Pelkkä PSK on kuitenkin hyödytön, jos käytämme Diffie-Hellmania palvelimen 00:15:16.679 --> 00:15:23.020 vastauksessa. Se on hyödyllinen ainoastaan asiakkaan ensimmäisen viestin kohdalla. 00:15:23.020 --> 00:15:28.340 Kerrataanpa. Tässä on paljon asiaa. TLS 1.2 toi 00:15:28.340 --> 00:15:33.379 jatkosuojauksen sen varalle, että sertifikaatin yksityinen avain 00:15:33.379 --> 00:15:39.119 joutuisi vääriin käsiin jo kauan sitten käyttämällä ECDHE moodeja. 00:15:39.119 --> 00:15:45.030 Siis 1.2 yhteydet voivat olla aina jatko- suojattuja sertifikaatin väärinkäyttöä 00:15:45.030 --> 00:15:50.300 vastaan. TLS 1.3 toimii samoin. 00:15:50.300 --> 00:15:55.090 Ei ole moodia joka olisi jatkosuojaamaton sertifikaatin väärinkäytön varalta. 00:15:55.090 --> 00:16:01.279 Mutta jos ajatellaan mitä istuntolipun avaimelle voi käydä: 00:16:01.279 --> 00:16:06.000 TLS 1.2 ei koskaan ole jatkosuojattu. 00:16:06.000 --> 00:16:11.149 TLS 1.2:ssa istuntolipun murtaminen johtaa aina kykyyn passiivisesti 00:16:11.149 --> 00:16:15.819 ja jatkossa murtaa jatkettujen istuntojen salaus. 00:16:15.819 --> 00:16:22.689 1.3:ssa sen sijaan, jos käytämme PSK ECDHE:tä, ainoastaan alkudatan salaus 00:16:22.689 --> 00:16:28.270 voidaan purkaa käyttämällä pelkästään istuntolippua. 00:16:28.270 --> 00:16:33.199 Kuten sanoin, vaaran paikkoja on kaksi. 00:16:33.199 --> 00:16:39.329 Toinen se, että 0-RTT dataa voidaan käyttää toistohyökkäyksessä. 00:16:39.329 --> 00:16:45.449 Olkoon tilanne tämä: alkudata sisältää dataa, joka on jollain tapaa 00:16:45.449 --> 00:16:51.709 autentikoitu. Se voi olla HTTP-pyyntö, joka sisältää evästeitä. 00:16:51.709 --> 00:16:58.070 Tuo HTTP-pyyntö jollain tapaa suorittaa transaktion, 00:16:58.070 --> 00:17:03.150 okei? Ehkä se on tilisiirto. Ohjeistaa palvelinta tekemään jotain. Hyökkääjä 00:17:03.150 --> 00:17:07.580 haluaa toistaa tuota tapahtumaa. Se ei tietenkään voi purkaa sen salausta 00:17:07.580 --> 00:17:13.149 - sehän on suojattu TLS:llä. Eli se ei voi nähdä evästeen sisältöä eikä se voi 00:17:13.149 --> 00:17:17.689 muokata sitä, koska se on TLS-suojattu. Mutta se voi kaapata salatun 00:17:17.689 --> 00:17:23.069 viestin ja lähettää sen uudelleen 00:17:23.069 --> 00:17:27.900 palvelimelle. Jos palvelimia on yksi, tähän on helppo ratkaisu. 00:17:27.900 --> 00:17:32.520 Pidä kirjaa nähdyistä viesteistä ja ajattele kutakuinkin näin: 00:17:32.520 --> 00:17:37.500 "Ei. Tämä näyttää täsmälleen samalta kuin mitä sain aiemmin." Mutta jos esimerkiksi 00:17:37.500 --> 00:17:42.270 kuten Cloudflare pyörität useita data- keskuksia ympäri maailmaa, et voi pitää 00:17:42.270 --> 00:17:47.650 yhdenmukaisia tiloja jatkuvasti, reaali- ajassa, kaikkien koneiden välillä. Olisi 00:17:47.650 --> 00:17:52.370 ei koneita, jotka tämän viestin saatuaan ajattelisivat näin: 00:17:52.370 --> 00:17:57.530 "Toki, minulla on istuntolipun avain, dekryptaan PSK:n, käytän PSK:ta, 00:17:57.530 --> 00:18:02.080 dekryptaan alkudatan, löydän sieltä jotain, ja suoritan sen, mitä se käskee minun 00:18:02.080 --> 00:18:07.510 tehdä." Tämä ei tietenkään ole suotavaa. 00:18:07.510 --> 00:18:13.010 Yksi TLS.n tarjoama vastatoimi on, että asiakas lähettää samassa 00:18:13.010 --> 00:18:18.689 paketissa arvon, joka kertoo millisekunteina, kuinka kauan sitten sain 00:18:18.689 --> 00:18:23.790 haltuuni istuntolipun. Palvelin katsoo sitä arvoa, ja jos se ei täsmää 00:18:23.790 --> 00:18:29.080 sen omaan näkemykseen tästä tiedosta, se hylkää viestin. 00:18:29.080 --> 00:18:34.020 Tämä tarkoittaa, että jos hyökkääjä kaappaa viestin ja 10s myöhemmin 00:18:34.020 --> 00:18:40.000 yrittää toistohyökkäystä, ajat eivät täsmää ja palvelin hylkää viestin. 00:18:40.000 --> 00:18:44.510 Tämä ei kuitenkaan ole täysi ratkaisu, sillä tarpeeksi nopea hyökkääjä voi 00:18:44.510 --> 00:18:50.369 silti tehdä toistohyökkäyksiä. Eli, palvelin voi ainoastaan joko 00:18:50.369 --> 00:18:55.970 hyväksyä 0-RTT datan tai hylätä sen. 00:18:55.970 --> 00:19:00.570 Se ei voi vain ottaa jotain osaa siitä tai kurkistaa siihen ja päättää sitten, koska 00:19:00.570 --> 00:19:05.540 "Server Hello" viesti kertoo hyväksyttiinkö vai hylättiinkö se. 00:19:05.540 --> 00:19:09.759 Ja asiakas jatkaa alkudatan lähettämistä kunnes se saa "Server Hello" viestin. 00:19:09.759 --> 00:19:15.960 Tässä on kilpailu. Joten palvelimen täytyy sokkona pättää "Otanko 0-RTT data vastaan 00:19:15.960 --> 00:19:20.990 vai hylkäänkö sen kaiken?" Jos se hyväksyy sen, ja sitten huomaa sen olevan jotain 00:19:20.990 --> 00:19:26.750 mitä se ei voi prosessoida koska "Herran- jestas, täällä on HTTP POST, joka käskee 00:19:26.750 --> 00:19:32.470 siirtämään rahaa. En voi tehdä tätä, jos en tiedä ettei tämä ole toistohyökkäys." 00:19:32.470 --> 00:19:37.060 Palvelimen täytyy saada jonkinlainen vahvistus. Hyvä uutinen on se, että jos 00:19:37.060 --> 00:19:40.600 palvelin odottaa "Finished" viestiä... Palvelin lähettää 00:19:40.600 --> 00:19:45.280 "Server Hello":n, "Finished":n ja odottaa asiakkaan vastaavaa. 00:19:45.280 --> 00:19:51.050 Kun asiakkaan oma saapuu, se tarkoittaa, ettei kyseessä ollut toistohyökkäys, 00:19:51.050 --> 00:19:54.950 sillä tuo "Finished" viesti viimeistelee koko kättelyn 00:19:54.950 --> 00:19:59.769 yhdessä tietyn satunnaisarvon kanssa, jonka palvelin lähetti. Kyseessä ei siis 00:19:59.769 --> 00:20:04.380 voi olla toistohyökkäys. Eli nämä ovat palvelimen vaihtoehdot: se voi hyväksyä 00:20:04.380 --> 00:20:08.780 alkudatan ja jos se on jotain mikä ei ole idempotenttia, jotain mikä on 00:20:08.780 --> 00:20:14.610 vaarallista, jos se toistetaan, se voi yksinkertaisesti odottaa vahvistusta. 00:20:14.610 --> 00:20:18.850 Mutta se tarkoittaa, että se on laitettava välimuistiin, ja tässä on riski, mikäli 00:20:18.850 --> 00:20:25.580 hyökkääjä lähettää HTTP POST:n valtavalla rungolla tarkoituksenaan täyttää muisti. 00:20:25.580 --> 00:20:31.840 Tajusimme voivamme auttaa tässä, jos kirjoitamme istuntolippuihin, 00:20:31.840 --> 00:20:37.240 mikä on maksimimäärä alkudataa, jonka asiakas voi lähettää. 00:20:37.240 --> 00:20:41.500 Jos huomaamme jonkun lähettävän enemmän, kyseessä on hyökkääjä ja 00:20:41.500 --> 00:20:47.499 katkaisemme yhteyden, tyhjennämme välimuistin vapauttaaksemme muistia. 00:20:47.499 --> 00:20:52.969 Mutta. Jokatapauksessa. Vastatoimista huolimatta, ellemme pysty pitämään 00:20:52.969 --> 00:20:58.780 yhtenäistä maailmanlaajuista tilaa palvelimien välillä, meidän täytyy kertoa 00:20:58.780 --> 00:21:03.429 sovellukselle toistohyökkäyksen mahdol- lisuudesta. Spesifikaatio tietää tämän. 00:21:03.429 --> 00:21:08.150 TLS 1.3 spesifikaatio YKSISELITTEISESTI toteaa 00:21:08.150 --> 00:21:14.420 protokollien EI tule käyttää 0-RTT:tä ilman profiilia, joka 00:21:14.420 --> 00:21:19.159 määrittelee sen käytön. Eli tarkoittaa "tietämättä mitä ne ovat tekemässä". 00:21:19.159 --> 00:21:24.419 Tämä tarkoittaa, että TLS-pinon APIen täytyy tehdä 1-RTT oletuksena, 00:21:24.419 --> 00:21:30.360 joihin toistohyökkäykset eivät toimi, ja sitten antaa palvelimen 00:21:30.360 --> 00:21:35.571 kutsua joitakin API:ja hylätäkseen tai odottaakseen vahvistusta, 00:21:35.571 --> 00:21:41.470 ja antaa asiakkaan päättää, mitä tähän vaaralliseen toistohyökkäysalttiiseen 00:21:41.470 --> 00:21:46.040 dataan tulee. Tämä riippuu 00:21:46.040 --> 00:21:49.840 protokollasta, mutta entäpä lempiprotokollamme? Entäpä 00:21:49.840 --> 00:21:55.329 HTTP? HTTP:n pitäisi olla helppo. HTTP-spesifikaatio, 00:21:55.329 --> 00:22:00.759 käykää vaikka lukemassa, sanoo: "GET-pyynnöt ovat idempotentteja, 00:22:00.759 --> 00:22:06.149 niiden ei tule muuttaa mitään palveli- mella". Selvä! Sallimme nyt ainoastaan 00:22:06.149 --> 00:22:10.670 GET-pyynnöt alkudatassa, koska niitä ei voi hyödyntää toistohyökkäyksissä! 00:22:10.670 --> 00:22:16.640 Jes! Ei. Internetissä on takuuvarmasti palvelin, 00:22:16.640 --> 00:22:23.020 jossa on sen kaltaista kuin “send-money.php?to=filippo&amount=this” 00:22:23.020 --> 00:22:28.870 ja se on GET-pyyntö. Ja jos hyökkääjä kaappaa tämän, mikä on alkudataa, 00:22:28.870 --> 00:22:33.510 ja sitten käyttää tätä toistohyökkäykses- sä toista palvelinta vastaan, se 00:22:33.510 --> 00:22:38.780 suoritetaan kahdesti. Ja se ei käy päinsä. 00:22:38.780 --> 00:22:43.300 Mitä siis voidaan tehdä? 00:22:43.300 --> 00:22:46.890 Teemme kompromisseja! 00:22:46.890 --> 00:22:51.779 Jos tunntet sovelluksesi, voit tehdä hyvin spesifejä kompromisseja. Esimerkiksi 00:22:51.779 --> 00:22:57.020 Google on ajanut QUIC:iä 0-RTT:llä hyvinkin pitkään. 00:22:57.020 --> 00:23:02.200 Uskoakseni 3 vuotta? Se tarkoittaa, että he tuntevat oman sovelluksena oiken hyvin. 00:23:02.200 --> 00:23:07.419 Ja he tietävät ettei heillä ole "send-money.php" päätepisteitä. 00:23:07.419 --> 00:23:12.710 Mutta jos olet kuin Cloudflare, joka hallinnnoi suurta määrää sovelluksia, 00:23:12.710 --> 00:23:17.720 et voi tehdä noin laajoja olettamuksia, ja täytyy sen sijaan yrittää 00:23:17.720 --> 00:23:22.570 löytää kultainen keskitie. Me saattaisimme esimerkiksi päättää 00:23:22.570 --> 00:23:28.730 salli GET-pyynnöt juurihakemistoon. Eli "GET /", 00:23:28.730 --> 00:23:33.200 mikä saattaisi tuoda eniten hyötyä, sillä ehkä suurin osa yhteyksistä alkaa noin, 00:23:33.200 --> 00:23:38.710 ja se on vähiten todennäköinen aiheuttamaan hankaluuksia. 00:23:38.710 --> 00:23:43.140 Mietimme edelleen kuinka sovellamme tätä sovelluksiin. Eli jos tiedossasi 00:23:43.140 --> 00:23:48.199 on sovellus, joka tulisi kärsimään jostain noin yksinkertaisesta, 00:23:48.199 --> 00:23:53.840 lähetä meille sähköpostia. Mutta itseasiassa, jos sinulla on noin 00:23:53.840 --> 00:23:59.160 haavoittuvainen sovellus, minulla on huonoja uutisia. Thai Duong et. al. 00:23:59.160 --> 00:24:04.150 osoittivat, että tämän päivän selaimet, ilman TLS 1.3:a tai muutakaan, 00:24:04.150 --> 00:24:09.740 toistavat HTTP-pyyntöjä verkkovirheiden sattuessa. 00:24:09.740 --> 00:24:15.670 Ja ne toistavat ne hiljaisesti. Eli lopputulema ei välttämättä ole 00:24:15.670 --> 00:24:21.990 huonompi kuin nykytila. Selvä. Näen, että kaikki alkavat olla 00:24:21.990 --> 00:24:27.959 levottomia ja ajattelevat "Kryptografit ovat taas asialla! 00:24:27.959 --> 00:24:32.740 He tekevät tarvitsemastamme turvallisuus- protokollasta tarpeettoman monimutkaisen 00:24:32.740 --> 00:24:38.889 turvatakseen työpaikkansa seuraavaksi 15 vuodeksi!" Eikö? 00:24:38.889 --> 00:24:44.479 Ei. Ei. Voin itseasiassa taata, että 00:24:44.479 --> 00:24:49.709 yksi suurista muutoksista, mielestäni suurempi kuin edestakaiset matkat 1.3:ssa, 00:24:49.709 --> 00:24:54.770 on, että kaikkea punnitaan saadun hyödyn ja sen aiheuttaman monimutkaisuuden 00:24:54.770 --> 00:24:59.180 kannalta. Ja vaikka 0-RTT pääsi jatkoon 00:24:59.180 --> 00:25:02.630 valtaosa ei päässyt. 00:25:02.630 --> 00:25:07.890 Nick: Selvä. Kiitos Filippo. 00:25:07.890 --> 00:25:13.640 TLS 1.3 ollessa iteraatio TLS:stä mekin menimme taaksepäin, tai, 00:25:13.640 --> 00:25:18.120 "me", jotka olemme ihmiset jotka tutkimme TLS:ää, katsoimme taaksepäin ja 00:25:18.120 --> 00:25:22.770 kertasimme olemassaolevia TLS 1.2 ominai- suuksia, jotka vaikuttivat järkeviltä 00:25:22.770 --> 00:25:27.439 aikanaan ja päätimme, oliko kompleksisuus tai vaara, jotka nämä TLS:n ominaisuudet, tai 00:25:27.439 --> 00:25:32.349 protokollat, tai primitiivit toivat mukanaan 00:25:32.349 --> 00:25:37.739 järkeviä säilyttää. Ja yksi iso, joka sattui prosessin alussa on 00:25:37.739 --> 00:25:43.790 "staattinen RSA" moodi. Näin TLS on toiminut SSL:n ajoista lähtien. 00:25:43.790 --> 00:25:48.179 Sen sijaan, että käytettäisiin Diffie- Hellmania yhteisen avaimen luontiin, 00:25:48.179 --> 00:25:52.320 asiakas luo oman jaetun avaimensa, ja salaa sen palvelimen sertifikaatin 00:25:52.320 --> 00:25:56.570 julkisella avaimella, joka on RSA-avain, ja lähettää sen sitten 00:25:56.570 --> 00:26:00.770 sellaisenaan palvelimelle. Ja palvelin sitten käyttää omaa 00:26:00.770 --> 00:26:04.650 yksityistä avaintaan purkamaan salauksen ja luomaan yhteisen avaimen. Eli asiakas 00:26:04.650 --> 00:26:09.710 luo kaiken avainmateriaalin tässä tapauksessa. Yksi asia on melko selvä 00:26:09.710 --> 00:26:13.650 tässä on, että jos sertifikaatin yksityinen avain murretaan, 00:26:13.650 --> 00:26:18.149 vaikka vuosiakin myöhemmin, joku jolla on tallenteet tapahtumista voi 00:26:18.149 --> 00:26:23.480 mennä taaksepäin ja purkaa tämän avain- materiaalin ja siten koko keskustelun. 00:26:23.480 --> 00:26:28.419 Tämä poistettiin ihan TLS 1.3-prosessin alkuvaiheessa, noin kaksi vuotta sitten. 00:26:28.419 --> 00:26:33.919 Joten suureksi yllätykseksemme, ja kaikkien, jotka kuuluvat 00:26:33.919 --> 00:26:39.680 TLS:ää koskevaan sähköpostitus- listaa, ihan vasta äskettäin, 00:26:39.680 --> 00:26:44.610 standardointiprosessin loppuvaiheessa, kun TLS 1.3 oli melkein valmis, 00:26:44.610 --> 00:26:50.800 tämä sähköposti ilmestyi. Ja tämä on Andrew Kennedyltä, joka työskentelee 00:26:50.800 --> 00:26:56.550 BITS:lle, mikä tarkoittaa pääpiirteittäin, että hän työskentelee pankeille. Hän sanoo 00:26:56.550 --> 00:27:01.670 "RSA-avaintenvaihdon tuen lopettaminen TLS 1.3:ssa aiheuttaa suuria ongelmia 00:27:01.670 --> 00:27:06.760 finanssilaitoksille, joista melkein kaikki käyttävät TLS:ää sisäisesti ja joilla on 00:27:06.760 --> 00:27:12.510 suuria, turvallisuuskriittisiä investoin- teja ulkopuoliseen TLS-dekryptaamiseen. 00:27:12.510 --> 00:27:17.810 "Ulkopuoliseen (3. osapuolen) TLS-dekryp- taamiseen" hmm.. (naurua - aplodeja) 00:27:17.810 --> 00:27:23.490 Se todella kuulostaa kriittiseltä... kriittiseltä jollekin, eikö? 00:27:23.490 --> 00:27:26.140 (naurua - aplodeja) Eli... 00:27:26.140 --> 00:27:32.200 (naurua) (aplodeja) 00:27:32.200 --> 00:27:37.039 Yksi valonpilkahduksista oli Kenny Patersonin vastaus tähän, 00:27:37.039 --> 00:27:41.680 joka kuului näin: "Minun näkemykseni pyyntöäsi koskien: ei. 00:27:41.680 --> 00:27:44.920 Perustelu: Yritämme rakentaa turvallisem- paa internettiä." Korostus 00:27:44.920 --> 00:27:47.350 on oma lisäykseni, mutta hän varmasti tarkoitti sitä 00:27:47.350 --> 00:27:54.100 (aplodeja) 00:27:54.100 --> 00:27:58.840 Tämän jälkeen pankkiväki saapui IETF:ään ja näytti tämän dian kuvaillakseen, kuinka 00:27:58.840 --> 00:28:04.460 vaikeaa heidän järjestelmänsä debuggaaminen on. Tämä on yksinkertaista.. 00:28:04.460 --> 00:28:09.270 Ilmeisesti pankkiympäristössä. Nuo ovat eri kytkimiä, reitittimiä, 00:28:09.270 --> 00:28:14.480 väliohjelmistoja, web-sovelluksia, ja kaikki keskustelevat TLS:llä. 00:28:14.480 --> 00:28:19.730 Tämän keskustelun jälkeen päädyimme kompromissiin. 00:28:19.730 --> 00:28:24.160 Protokollan vaarantamisen sijaan Matthew Green 00:28:24.160 --> 00:28:28.900 opetti heille, kuinka käyttää Diffie- Hellmania väärin. Lopulta he kykenivät 00:28:28.900 --> 00:28:33.110 siihen, mitä halusivat ilman, että me - tai kukaan muu 00:28:33.110 --> 00:28:36.780 akateemisessa yhteisössä, tai TLS yhteisössä - palautti 00:28:36.780 --> 00:28:41.720 TLS:ään tämän turvattoman osan. 00:28:41.720 --> 00:28:45.580 Jos haluat lukea tämän, se kertoo kuinka tähän pystytään. Joka tapauksessa 00:28:45.580 --> 00:28:49.970 - emme laittaneet sitä takaisin. Kiteytettynä, älkää tehkö näin! 00:28:49.970 --> 00:28:54.300 (aplodeja) 00:28:54.300 --> 00:29:00.100 Eli tapoimme staattisen RSA:n, ja mitä muuta tapoimme? No, kun katsotaan 00:29:00.100 --> 00:29:03.769 taaksepäin hyötyihin ja haittoihin, TLS 1.2 käyttää tiettyjä primitiivejä, 00:29:03.769 --> 00:29:08.519 jotka vain eivät ole kestäneet ajan hammasta. 00:29:08.519 --> 00:29:12.130 RC4 jonosalain. Poissa! (aplodeja) 00:29:12.130 --> 00:29:14.790 3DES (Triple DES) lohkosalain. Poissa! (aplodeja) 00:29:14.790 --> 00:29:21.529 MD5, SHA1... molemmat poissa. Yo! (jatkuvia aplodeja) 00:29:21.529 --> 00:29:26.480 On vielä rakennelmia, jotka... perus lohkosalain rakennelmia, 00:29:26.480 --> 00:29:31.640 jotka ovat poissa: AES-CBC. Poissa. RSA-PKCS1-1.5, 00:29:31.640 --> 00:29:36.810 tämä on tiedetty ongelmalliseksi jo vuodesta 1998, myöskin poissa! 00:29:36.810 --> 00:29:41.770 Myös useita ominaisuuksia kuten kompressio ja uudellenneuvottelu on poistettu, jonka 00:29:41.770 --> 00:29:47.130 korvasi hyvin kevyt "avaimen päivitys" mekanismi. Siis TLS 1.3:ssa 00:29:47.130 --> 00:29:52.490 mikään näistä ei läpäissyt hyöty vs. kompleksisuus -testiä. Ja monet näistä 00:29:52.490 --> 00:29:58.030 haavoittuvuksista, joita saatatte tunnistaa, on mahdottomia TLS 1.3:ssa. 00:29:58.030 --> 00:30:04.010 (aplodeja) 00:30:04.010 --> 00:30:09.149 00:30:09.149 --> 00:30:14.549 00:30:14.549 --> 00:30:18.680 00:30:18.680 --> 00:30:24.030 00:30:24.030 --> 00:30:27.640 00:30:27.640 --> 00:30:32.340 00:30:32.340 --> 00:30:37.520 00:30:37.520 --> 00:30:41.810 00:30:41.810 --> 00:30:47.020 00:30:47.020 --> 00:30:53.090 00:30:53.090 --> 00:30:59.300 00:30:59.300 --> 00:31:02.669 00:31:02.669 --> 00:31:06.980 00:31:06.980 --> 00:31:11.649 00:31:11.649 --> 00:31:16.129 00:31:16.129 --> 00:31:21.290 00:31:21.290 --> 00:31:27.860 00:31:27.860 --> 00:31:33.410 00:31:33.410 --> 00:31:36.920 00:31:36.920 --> 00:31:41.949 00:31:41.949 --> 00:31:47.940 00:31:47.940 --> 00:31:51.960 00:31:51.960 --> 00:31:56.540 00:31:56.540 --> 00:32:01.199 00:32:01.199 --> 00:32:05.599 00:32:05.599 --> 00:32:10.760 00:32:10.760 --> 00:32:15.690 00:32:15.690 --> 00:32:21.970 00:32:21.970 --> 00:32:27.800 00:32:27.800 --> 00:32:33.301 00:32:33.301 --> 00:32:37.441 00:32:37.441 --> 00:32:43.410 00:32:43.410 --> 00:32:49.199 00:32:49.199 --> 00:32:55.679 00:32:55.679 --> 00:33:02.509 00:33:02.509 --> 00:33:07.860 00:33:07.860 --> 00:33:13.619 00:33:13.619 --> 00:33:18.139 00:33:18.139 --> 00:33:23.859 00:33:23.859 --> 00:33:29.780 00:33:29.780 --> 00:33:35.950 00:33:35.950 --> 00:33:42.090 00:33:42.090 --> 00:33:46.770 00:33:46.770 --> 00:33:52.990 00:33:52.990 --> 00:33:58.579 00:33:58.579 --> 00:34:04.090 00:34:04.090 --> 00:34:09.439 00:34:09.439 --> 00:34:13.619 00:34:13.619 --> 00:34:18.949 00:34:18.949 --> 00:34:25.959 00:34:25.959 --> 00:34:31.729 00:34:31.729 --> 00:34:36.760 00:34:36.760 --> 00:34:41.779 00:34:41.779 --> 00:34:47.990 00:34:47.990 --> 00:34:53.490 00:34:53.490 --> 00:34:58.670 00:34:58.670 --> 00:35:04.040 00:35:04.040 --> 00:35:10.130 00:35:10.130 --> 00:35:14.670 00:35:14.670 --> 00:35:18.820 00:35:18.820 --> 00:35:23.400 00:35:23.400 --> 00:35:28.620 00:35:28.620 --> 00:35:33.060 00:35:33.060 --> 00:35:38.720 00:35:38.720 --> 00:35:44.350 00:35:44.350 --> 00:35:49.830 00:35:49.830 --> 00:35:55.580 00:35:55.580 --> 00:35:59.420 00:35:59.420 --> 00:36:04.230 00:36:04.230 --> 00:36:10.920 00:36:10.920 --> 00:36:12.840 00:36:12.840 --> 00:36:15.710 00:36:15.710 --> 00:36:20.670 00:36:20.670 --> 00:36:25.840 00:36:25.840 --> 00:36:30.310 00:36:30.310 --> 00:36:34.170 00:36:34.170 --> 00:36:40.120 00:36:40.120 --> 00:36:45.360 00:36:45.360 --> 00:36:50.570 00:36:50.570 --> 00:36:54.730 00:36:54.730 --> 00:36:59.760 00:36:59.760 --> 00:37:03.461 00:37:03.461 --> 00:37:07.910 00:37:07.910 --> 00:37:13.250 00:37:13.250 --> 00:37:19.920 00:37:19.920 --> 00:37:24.630 00:37:24.630 --> 00:37:29.200 00:37:29.200 --> 00:37:34.330 00:37:34.330 --> 00:37:39.980 00:37:39.980 --> 00:37:46.080 00:37:46.080 --> 00:37:51.590 00:37:51.590 --> 00:37:57.330 00:37:57.330 --> 00:38:02.400 00:38:02.400 --> 00:38:07.860 00:38:07.860 --> 00:38:12.220 00:38:12.220 --> 00:38:15.550 00:38:15.550 --> 00:38:21.380 00:38:21.380 --> 00:38:27.561 00:38:27.561 --> 00:38:32.521 00:38:32.521 --> 00:38:36.330 00:38:36.330 --> 00:38:40.980 00:38:40.980 --> 00:38:46.910 00:38:46.910 --> 00:38:52.810 00:38:52.810 --> 00:38:59.020 00:38:59.020 --> 00:39:04.190 00:39:04.190 --> 00:39:09.300 00:39:09.300 --> 00:39:14.190 00:39:14.190 --> 00:39:18.370 00:39:18.370 --> 00:39:23.230 00:39:23.230 --> 00:39:29.230 00:39:29.230 --> 00:39:34.130 00:39:34.130 --> 00:39:38.620 00:39:38.620 --> 00:39:43.550 00:39:43.550 --> 00:39:49.980 00:39:49.980 --> 00:39:55.650 00:39:55.650 --> 00:40:00.610 00:40:00.610 --> 00:40:04.950 00:40:04.950 --> 00:40:10.510 00:40:10.510 --> 00:40:16.330 00:40:16.330 --> 00:40:21.670 00:40:21.670 --> 00:40:27.230 00:40:27.230 --> 00:40:32.550 00:40:32.550 --> 00:40:38.180 00:40:38.180 --> 00:40:44.000 00:40:44.000 --> 00:40:49.071 00:40:49.071 --> 00:40:54.950 00:40:54.950 --> 00:40:59.860 00:40:59.860 --> 00:41:02.030 00:41:02.030 --> 00:41:07.840 00:41:07.840 --> 00:41:12.940 00:41:12.940 --> 00:41:18.040 00:41:18.040 --> 00:41:22.520 00:41:22.520 --> 00:41:25.780 00:41:25.780 --> 00:41:30.400 00:41:30.400 --> 00:41:35.410 00:41:35.410 --> 00:41:38.860 00:41:38.860 --> 00:41:44.800 00:41:44.800 --> 00:41:50.040 00:41:50.040 --> 00:41:55.300 00:41:55.300 --> 00:42:00.240 00:42:00.240 --> 00:42:05.210 00:42:05.210 --> 00:42:10.720 00:42:10.720 --> 00:42:14.870 00:42:14.870 --> 00:42:20.030 00:42:20.030 --> 00:42:23.870 00:42:23.870 --> 00:42:28.130 00:42:28.130 --> 00:42:32.780 00:42:32.780 --> 00:42:37.640 00:42:37.640 --> 00:42:43.720 00:42:43.720 --> 00:42:49.000 00:42:49.000 --> 00:42:53.761 00:42:53.761 --> 00:42:58.511 00:42:58.511 --> 00:43:02.670 00:43:02.670 --> 00:43:07.960 00:43:07.960 --> 00:43:13.080 00:43:13.080 --> 00:43:18.780 00:43:18.780 --> 00:43:24.880 00:43:24.880 --> 00:43:30.680 00:43:30.680 --> 00:43:35.610 00:43:35.610 --> 00:43:39.640 00:43:39.640 --> 00:43:44.340 00:43:44.340 --> 00:43:48.820 00:43:48.820 --> 00:43:53.920 00:43:53.920 --> 00:43:56.980 00:43:56.980 --> 00:44:01.050 00:44:01.050 --> 00:44:06.320 00:44:06.320 --> 00:44:08.760 00:44:08.760 --> 00:44:13.850 00:44:13.850 --> 00:44:18.830 00:44:18.830 --> 00:44:23.430 00:44:23.430 --> 00:44:28.680 00:44:28.680 --> 00:44:32.950 00:44:32.950 --> 00:44:37.740 00:44:37.740 --> 00:44:43.250 00:44:43.250 --> 00:44:48.850 00:44:48.850 --> 00:44:52.890 00:44:52.890 --> 00:44:57.640 00:44:57.640 --> 00:45:02.950 00:45:02.950 --> 00:45:08.330 00:45:08.330 --> 00:45:13.370 00:45:13.370 --> 00:45:17.990 00:45:17.990 --> 00:45:24.210 00:45:24.210 --> 00:45:28.500 00:45:28.500 --> 00:45:33.970 00:45:33.970 --> 00:45:38.990 00:45:38.990 --> 00:45:45.190 00:45:45.190 --> 00:45:50.510 00:45:50.510 --> 00:45:56.000 00:45:56.000 --> 00:46:00.830 00:46:00.830 --> 00:46:06.960 00:46:06.960 --> 00:46:12.010 00:46:12.010 --> 00:46:17.800 00:46:17.800 --> 00:46:23.630 00:46:23.630 --> 00:46:29.140 00:46:29.140 --> 00:46:34.590 00:46:34.590 --> 00:46:40.030 00:46:40.030 --> 00:46:44.970 00:46:44.970 --> 00:46:50.610 00:46:50.610 --> 00:46:54.980 00:46:54.980 --> 00:47:00.170 00:47:00.170 --> 00:47:05.050 00:47:05.050 --> 00:47:11.160 00:47:11.160 --> 00:47:16.110 00:47:16.110 --> 00:47:21.560 00:47:21.560 --> 00:47:26.510 00:47:26.510 --> 00:47:30.640 00:47:30.640 --> 00:47:36.230 00:47:36.230 --> 00:47:40.830 00:47:40.830 --> 00:47:46.080 00:47:46.080 --> 00:47:50.860 00:47:50.860 --> 00:47:56.210 00:47:56.210 --> 00:47:59.990 00:47:59.990 --> 00:48:11.770 00:48:11.770 --> 00:48:15.690 00:48:15.690 --> 00:48:19.770 00:48:19.770 --> 00:48:23.930 00:48:23.930 --> 00:48:28.160 00:48:28.160 --> 00:48:32.450 00:48:32.450 --> 00:48:34.130 00:48:34.130 --> 00:48:40.230 00:48:40.230 --> 00:48:45.500 00:48:45.500 --> 00:48:50.791 00:48:50.791 --> 00:48:54.800 00:48:54.800 --> 00:48:59.980 00:48:59.980 --> 00:49:06.920 00:49:06.920 --> 00:49:09.570 00:49:09.570 --> 00:49:12.680 00:49:12.680 --> 00:49:17.610 00:49:17.610 --> 00:49:21.170 00:49:21.170 --> 00:49:24.580 00:49:24.580 --> 00:49:28.000 00:49:28.000 --> 00:49:33.250 00:49:33.250 --> 00:49:39.120 00:49:39.120 --> 00:49:43.260 00:49:43.260 --> 00:49:47.700 00:49:47.700 --> 00:49:55.100 00:49:55.100 --> 00:49:57.630 00:49:57.630 --> 00:50:01.720 00:50:01.720 --> 00:50:07.350 00:50:07.350 --> 00:50:11.330 00:50:11.330 --> 00:50:17.670 00:50:17.670 --> 00:50:23.120 00:50:23.120 --> 00:50:27.080 00:50:27.080 --> 00:50:31.820 00:50:31.820 --> 00:50:36.400 00:50:36.400 --> 00:50:42.890 00:50:42.890 --> 00:50:46.660 00:50:46.660 --> 00:50:49.590 00:50:49.590 --> 00:50:54.430 00:50:54.430 --> 00:50:57.940 00:50:57.940 --> 00:51:03.800 00:51:03.800 --> 00:51:09.190 00:51:09.190 --> 00:51:14.600 00:51:14.600 --> 00:51:20.140 00:51:20.140 --> 00:51:21.990 00:51:21.990 --> 00:51:24.950 00:51:24.950 --> 00:51:28.940 00:51:28.940 --> 00:51:32.720 00:51:32.720 --> 00:51:37.120 00:51:37.120 --> 00:51:41.550 00:51:41.550 --> 00:51:45.920 00:51:45.920 --> 00:51:49.670 00:51:49.670 --> 00:51:55.590 00:51:55.590 --> 00:52:01.790 00:52:01.790 --> 00:52:06.210 00:52:06.210 --> 00:52:11.250 00:52:11.250 --> 00:52:17.230 00:52:17.230 --> 00:52:22.550 00:52:22.550 --> 00:52:29.450 00:52:29.450 --> 00:52:35.270 00:52:35.270 --> 00:52:39.620 00:52:39.620 --> 00:52:44.960 00:52:44.960 --> 00:52:49.140 00:52:49.140 --> 00:52:53.050 00:52:53.050 --> 00:52:59.030 00:52:59.030 --> 00:53:03.180 00:53:03.180 --> 00:53:08.820 00:53:08.820 --> 00:53:14.210 00:53:14.210 --> 00:53:19.700 00:53:19.700 --> 00:53:21.950 00:53:21.950 --> 00:53:25.520 00:53:25.520 --> 00:53:29.480 00:53:29.480 --> 00:53:33.200 00:53:33.200 --> 00:53:38.170 00:53:38.170 --> 00:53:41.240 00:53:41.240 --> 00:53:47.440 00:53:47.440 --> 00:53:54.350 00:53:54.350 --> 00:53:59.030 00:53:59.030 --> 00:54:02.650 00:54:02.650 --> 00:54:06.600 00:54:06.600 --> 00:54:11.810 00:54:11.810 --> 00:54:18.430 00:54:18.430 --> 00:54:22.970 00:54:22.970 --> 00:54:27.490 00:54:27.490 --> 00:54:30.960 00:54:30.960 --> 00:54:36.440 00:54:36.440 --> 00:54:42.690 00:54:42.690 --> 00:54:48.810 00:54:48.810 --> 00:54:52.740 00:54:52.740 --> 00:54:59.600 00:54:59.600 --> 00:55:04.180 00:55:04.180 --> 00:55:09.990 00:55:09.990 --> 00:55:16.460 00:55:16.460 --> 00:55:21.610 00:55:21.610 --> 00:55:25.830 00:55:25.830 --> 00:55:30.620 00:55:30.620 --> 00:55:35.990 00:55:35.990 --> 00:55:41.650 00:55:41.650 --> 00:55:45.670 00:55:45.670 --> 00:55:51.620 00:55:51.620 --> 00:55:57.940 00:55:57.940 --> 00:56:01.910 00:56:01.910 --> 00:56:07.310 00:56:07.310 --> 00:56:12.900 00:56:12.900 --> 00:56:18.630 00:56:18.630 --> 00:56:23.910 00:56:23.910 --> 00:56:28.520 00:56:28.520 --> 00:56:32.490 00:56:32.490 --> 00:56:34.610 00:56:34.610 --> 00:56:37.760 00:56:37.760 --> 00:56:43.060 00:56:43.060 --> 00:56:45.800 00:56:45.800 --> 00:56:47.910 00:56:47.910 --> 00:56:53.250 00:56:53.250 --> 00:56:59.290 00:56:59.290 --> 00:57:03.450 00:57:03.450 --> 00:57:06.750 00:57:06.750 --> 00:57:12.690 00:57:12.690 --> 00:57:18.310 00:57:18.310 --> 00:57:23.540 00:57:23.540 --> 00:57:28.110 00:57:28.110 --> 00:57:32.420 00:57:32.420 --> 00:57:37.970 00:57:37.970 --> 00:57:44.040 00:57:44.040 --> 00:57:50.980 00:57:50.980 --> 00:57:54.050 00:57:54.050 --> 00:57:59.300 00:57:59.300 --> 00:58:02.951 00:58:02.951 --> 00:58:08.010 00:58:08.010 --> 00:58:13.990 00:58:13.990 --> 00:58:21.070 00:58:21.070 --> 00:58:28.150 00:58:28.150 --> 00:58:32.950 00:58:32.950 --> 00:58:37.650 00:58:37.650 --> 00:58:42.470 00:58:42.470 --> 00:58:47.460 00:58:47.460 --> 00:58:53.171 00:58:53.171 --> 00:58:57.600 00:58:57.600 --> 00:59:02.560 00:59:02.560 --> 00:59:08.240 00:59:08.240 --> 00:59:13.010 00:59:13.010 --> 00:59:18.750 00:59:18.750 --> 00:59:24.960 00:59:24.960 --> 00:59:30.340 00:59:30.340 --> 00:59:35.500 00:59:35.500 --> 00:59:41.610 00:59:41.610 --> 00:59:44.540 00:59:44.540 --> 00:59:47.480 00:59:47.480 --> 00:59:51.750 00:59:51.750 --> 00:59:57.110 00:59:57.110 --> 01:00:02.350 01:00:02.350 --> 01:00:08.640 01:00:08.640 --> 01:00:14.480 01:00:14.480 --> 01:00:18.490 01:00:18.490 --> 01:00:22.780 01:00:22.780 --> 01:00:28.070 01:00:28.070 --> 01:00:33.100 01:00:33.100 --> 01:00:38.330 01:00:38.330 --> 01:00:41.860 01:00:41.860 --> 01:00:43.890 01:00:43.890 --> 01:00:47.450 01:00:47.450 --> 01:00:49.590 01:00:49.590 --> 01:00:53.480 01:00:53.480 --> 01:00:58.800 01:00:58.800 --> 01:01:03.020 01:01:03.020 --> 01:01:06.600 01:01:06.600 --> 01:01:08.670 01:01:08.670 --> 01:01:11.430 01:01:11.430 --> 01:01:20.010 01:01:20.010 --> 01:01:39.080 01:01:39.080 --> 01:01:43.981