Convergence

From
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

TLS CAs Theorie

  • Vertrauensanker
  • Schutz gegen MITM
  • Authentication

TLS CAs Praxis

  • Comodo
  • Diginotar


Perspectives

  • Suche nach einer Alternative zu Authentifizierung via PKI
  • TOFU - trust on first use
    • ssh trust model
    • Unbekannte Schlüssel (für einen spez. host) müssen durch Benutzer bestätigt werden
    • Bestätigte Schlüssel/Host Paare werden gecacht und erfordern keine weitere Benutzer-Interaktion
    • Ändert sich ein Schlüssel muss dieser wiederum vom Benutzer bestätigt werden
  • Problem: MITM/First Use
    • Manuelle Überprüfung i.d.R. nicht praktikabel.
    • Risiko minimieren durch Notare
      • Notare geben Auskunft welche Schlüssel sie "sehen".
      • network perspective
  • Annahme: MITM-Angriff von dem alle Notare betroffen sind sehr unwahrscheinlich
  • Neues Problem: Was wenn sich die Notare nicht einig sind?
    • Benutzer entscheidet
  • "irgendeine CA hat den Schlüssel signiert" vs. "x von y Notaren sehen den selben Schlüssel"
    • kompromittierter Notar weniger fatal als kompromittierte CA.

Convergence

  • will CAs komplett ersetzen
  • basiert auf der Perspectives Idee
  • Notare prinzipiell nicht nur auf Zertifikate beschränkt
    • DNSSEC, Content, ...
    • momentan aber nur Zertifikat Verifier (network perspective) implementiert
  • Privacy
    • Notar als Proxy zu anderen Notaren
  • Benutzer soll letztendlich selbst entscheiden wem er vertraut
    • Trust Agility

Convergence Firefox Add-On

  • installiert lokale CA
  • MITM jeder TLS-Verbindung
  • Unbekannte (Hostname, Port, Zertifikat) Tupel werden über Notare verifiziert
    • generiert neues Zertifikat für Hostname (lokale CA sig.)
    • Cache
  • Browser "sieht" nur noch Zertifikate die von der lokalen CA signiert sind.

Convergence Notary

Notar Protokoll

https://github.com/moxie0/Convergence/wiki/Notary-Protocol

Notary Request

  • HTTP POST request /target/*<host>*+*<port>*
  • fingerprint (SHA1 des Zertifikats)
POST /target/www.google.de+443 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 71
Host: convergence.crypto.is:8843
Connection: close

fingerprint=40:50:62:E5:BE:FD:E4:AF:97:E9:38:2A:F1:6C:C8:7C:8F:B7:C4:E2

Notary Response

  • HTTP Response Status Code
    • 200 fingerprint match
    • 409 fingerprint mismatch
    • ...
{
  "fingerprintList":
  [
    {
      "timestamp": {"start": "1312537562", "finish": "1315604078"},
      "fingerprint": "51:1F:8E:C6:22:82:5B:ED:A2:75:CB:3E:95:AB:63:7F:69:D3:18:1C"
    }
  ],
  "signature": "MHu+jKdTJhRiNqTZleFnTY...RDYcPWuWBawQcReP3N82y54ZcEl3g=="
}

Convergence Proxy

  • Convergence momentan nur für Firefox verfügbar
    • Implementierung in anderen Browsern unwahrscheinlich (fehlende APIs)
  • Probleme mit Clientzertifikaten
  • Plan
    • externer TLS Proxy
    • Passives Mitlesen des TLS-Handshakes
    • kein MITM / keine eigenen Zertifikate
    • Überprüfung der Zertifikate analog zu Convergence Plugin
    • Im Prinzip "Dual-Mode" Convergence + herkömmliche Zertifikats-Validierung des Browsers/Client.

HTTP Tunnel

http://curl.haxx.se/rfc/draft-luotonen-web-proxy-tunneling-01.txt


TLS Handshake

Client                                             Server

ClientHello                -------->
                                              ServerHello
                                              Certificate
                                        ServerKeyExchange
                           <--------      ServerHelloDone
ClientKeyExchange
ChangeCipherSpec
Finished                   -------->
                                         ChangeCipherSpec
                           <--------             Finished
Application Data           <------->     Application Data


TLS Handshake / Proxy

Client                   Proxy                    Server

ClientHello        -->  ------>   -->
                   <--  <------   <--        ServerHello
                          /--     <--        Certificate
                          |
                   verify(certificate)
                          |
                   <--  --/
                   <--  <-----    <--   ServerKeyExchange
                   <--  <-----    <--     ServerHelloDone
ClientKeyExchange
ChangeCipherSpec
Finished           -->  ----->    -->
                                         ChangeCipherSpec
                   <--  <-----    <--            Finished
Application Data   <->  <---->    <->    Application Data

Probleme

  • sauberes beenden der TLS Verbindung falls das Zertifikat nicht verifiziert werden kann
    • disconnect
      • erneuter Verbindungsaufbau
    • TLS-Alert
      • welcher?
  • UI


Misc