Door Named: 1. Beveiligen van de verbinding: We willen AitM aanvallen en afluistersessies voorkomen. Certificate Authorities zijn blijkbaar een zeer zwak punt hiervoor. Er zijn genoeg incidenten geweest om dit aan te tonen.
Met alle respect, maar die incidenten ken ik niet; je lijkt zaken door elkaar te halen.
De (TLS-) verbinding is
zelden of nooit het probleem.
Ouderwetse https
Bij ouderwetse https verbindingen (zonder foward secrecy) stuurde de server diens certificaat (over de nog onversleutelde verbinding) naar de browser, met daarin een public key bedoeld voor encryption. De browser genereerde een random symmetrische sessiesleutel, versleutelde die met de public key in het certificaat en stuurde het resultaat naar de server. Als uitsluitend die server de private key heeft (passend bij de public key in het certificaat), kan uitsluitend die server dat resultaat ontsleutelen. Daarmee kennen zowel de server als de browser de symmetrische sessiesleutel.
De browser verifieert dat de domeinnaam, getoond in de adresbalk van de browser, als geldig is opgenomen in het certificaat.
Het certificaat en sleutelpaar werden zowel gebruikt voor veilige uitwisseling van de symmetrische sessiesleutel, als voor authenticatie van de server.
Diffie-Hellman
De Diffie-Hellman key agreement vind ik wat lastig uit te leggen, maar stel je het volgende voor bij https met forward secrecy.
Fictieve forward secrecy
Bij elke nieuwe verbinding genereert de server een nieuw random asymmetrisch sleutelpaar en stuurt de publieke sleutel (over de nog onversleutelde verbinding) naar de browser. De browser genereert een random symmetrische sessiesleutel, versleutelt die met de verse public key van de server (bij TLS v1.3 heeft de browser het certificaat überhaupt nog niet ontvangen), en stuurt het resultaat naar de server (die op dat moment nog een AitM kan zijn). De server genereert (met diens private key behorend bij de public key in het certificaat) een digitale handtekening over "het resultaat" en stuurt zowel het certificaat als de digitale handtekening naar de browser. De browser verifieert, met de public key uit het certificaat, dat de digitale handtekening klopt, en dat de domeinnaam getoond in de adresbalk van de browser als geldig is opgenomen in het certificaat.
Het certificaat en bijbehorende sleutelpaar werd hier uitsluitend gebruikt voor authenticatie van de server.
Geen AitM's in https-verbindingen
Mijn punt is: behoudens te zwakke cryptografie of inplementatiefouten (bijv. een slechte random number generator) kom je hier, als AitM, niet tussen.
De
techniek achter TLS en https is
niet het probleem.
Wél het probleem
Het probleem is: over
welke server hebben we het: de "echte", een niet-kwaadaardige MitM of een AitM?
Ik zie op z'n minst drie verschillende mogelijkheden.
1) Onterecht uitgegeven certificaten
Gelukkig komt dit relatief zelden voor (risico met kleine kans doch potentieel gigantische impact): onterecht uitgegeven certificaten. Zie
https://infosec.exchange/@ErikvanStraten/112914047006977222.
2) Afwijkende of misleidende domeinnamen
Voorbeeld:
https://nefkens-opel.nl is niet van een Opel garage van Nefkens.
3) CDN's zoals Fastly en Cloudflare
Als een server van Cloudflare een certificaat (met bijbehorende private key) heeft van
https://vvd.nl, en je opent die link, dan heeft jouw browser een niet-te-AitM'en verbinding met een server van Cloudflare.
Dat is
niet de échte server van de VVD (los van dat die waarschijnlijk op een cloudserver van een andere Amerikaanse partij gehost wordt). En je hebt geen idee over de betrouwbaarheid van de verbinding tussen de Cloudflare server en de "echte" VVD-server.
Er gaat steeds meer internetverkeer via Cloudflare, en Cloudflare heeft toegang tot al dat netwerkverkeer - ontsleuteld wel te verstaan.
Je
zou het terecht kunnen noemen dat Cloudflare een certificaat voor
https://vvd.nl kan verkrijgen, maar Cloudflare is niet de VVD. Op z'n minst zou jouw browser hiervoor moeten waarschuwen. Cloudflare kan besluiten jou te blokkeren, andere informatie te laten zien of jouw account te kapen (indien jij dat hebt en inlogt).
Cloudflare weet van alle websites "achter hen" dat jij ze bezoekt, welke pagina's je bekijkt en welke gegevens jij opstuurt. Terwijl in de adresbalk van jouw browser allerlei domeinnamen staan (niet Cloudflare.com) met een hangslotje ervoor.
En toen
Als je het bovenstaande niet begrijpt heeft verdere discussie geen zin vrees ik.