Convergence

From
Jump to navigation Jump to search

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