Algorithmen möglich. • Beide Seiten müssen sich auf einen gemeinsamen Schlüssel einigen. • Der Schlüssel muss unvorhersagbar sein und regelmäßig ausgetauscht werden. Problem: Schlüsselaustausch
(Malleability von Verschlüsselungsalgorithmen) • Verbindungsaufbau ist besonders gefährdet, zum Beispiel für downgrade attacks. • Erkennung von Manipulation durch 'Message Authentication Code' (MAC) oder authentifizierten Verschlüsselungsmodus (AEAD). Problem: MAC und AEAD benötigen auch einen Schlüssel.
fälschungssicher beim Client ausweisen. (umgekehrt in der Regel über Passwörter) • Kein Dritter darf sich als ein Service ausgeben dürfen. • Authentifizierung muss für viele Millionen Services (Webseiten, Mailserver) skalieren. • 'Ausweis' muss zurückgezogen werden können (Diebstahl, Eigentümerwechsel der Domain) Problem: Sichere Ausweise und effiziente Verteilung.
Kreditkarte 1234 an Chuck. Mallory → Alice Bank Überweise 50.00 EUR von Kreditkarte 1234 an Chuck. Überweise 50.00 EUR von Kreditkarte 1234 an Chuck. Überweise 50.00 EUR von Kreditkarte 1234 an Chuck. Aufgabe: Mallory kann eine aufgezeichnete Übertragung später nicht unbemerkt wiederspielen.
Inhalt eines zweiten verschlüsselten Texts schließen dürfen. Aufgabe: Verschlüsselte Nachrichten dürfen selbst bei gleichem Inhalt nicht deterministisch sein, sondern ununterscheidbar (probabilistisch).
Blockgröße • Schlüsselgröße 128, 196, 256 Bit. • performant in Software und Hardware • AES-NI Befehlssatz in modernen CPUs (>700 MB/sec) Problem: AES kann nur 16 Bytes verschlüsseln, benötigt daher einen Betriebsmodus und Padding.
• AES mit Galois/Counter Mode berechnet verschlüsselten Text und Prüfsumme gleichzeitig. • Zusätzliche Hardwarebeschleunigung mit AES-NI. AES-GMC ist schneller und sicherer als AES-CBC + HMAC (BEAST padding oracle attack durch MAC-then-encrypt).
– symmetrische Verschlüsselung – HMAC / AEAD – Schutz des Verbindungsaufbau • Verhinderung von Replay-Attacks ohne persistente Daten – Datenbank mit allen jemals verwendeten Schlüsseln ist zu aufwendig und ein Sicherheitsrisiko.
den Server. • Server sendet 32 Bytes Zufallszahlen an den Client. • Client und Server tauschen ein pre master secret aus. master_secret = PRF(pre_master_secret, “master secret“, client_random + server_random) key_block = PRF(master_secret, “key expansion“, server_random + client_random)
Client verschlüsselt das pre master secret mit dem öffentlichen RSA-Schlüssel des Servers. • Client sendet das verschlüsselte Geheimnis an den Server. • Server entschlüsselt das Geheimnis mit seinem privaten RSA- Schlüssel. • Server verschlüsselt Prüfsummen mit dem master secret und beweist damit den Besitz des privaten Schlüssels.
Partei in die Hände fällt (Diebstahl, Sicherheitslücke, Durchsuchungsbefehl), so kann diese alle Sitzungsschlüssel entschlüsseln. Dies hat zur Folge, dass ein passiver Mithörer sämtliche Kommunikation entschlüsseln kann. Davon betroffen sind auch verschlüsselte Daten, die ggf. über Jahre aufgezeichnet worden sind.
under Creative Commons Attribution-Share Alike 3.0 via Wikimedia Commons - http://commons.wikimedia.org/wiki/File:Digital_Signature_diagram.svg#mediaviewer/File:Digital_Signature_diagram.svg Data Hash function 101100110101 Hash Encrypt hash using signer's private key 111101101110 Signature Certificate Attach to data Digitally signed data Digitally signed data Data Hash function 101100110101 Hash 111101101110 Signature Decrypt using signer's public key 101100110101 Hash ? If the hashes are equal, the signature is valid. Signing Verification
domain via Wikimedia Commons - http://commons.wikimedia.org/wiki/File:Public_key_shared_secret.svg#mediaviewer/File:Public_key_shared_secret.svg Alice's private key Combine keys Bob's public key 751A696C 24D97009 Alice's public key Bob's private key Alice Alice and Bob's shared secret Bob Combine keys 751A696C 24D97009 Alice and Bob's shared secret
privaten und öffentlichen Schlüssel. • Server sendet Parameter und öffentlichen Schlüssel an Client. • Client erzeugt privaten und öffentlichen Schlüssel. • Client sendet öffentlichen Schlüssel an Server. • Beide berechnen pre master key.
mit seinem privaten RSA- oder ECDSA-Schlüssel. • Server sendet DH-Parameter, öffentlichen Schlüssel und die Signatur an den Client. • … • Client validiert Signatur mit dem öffentlichen RSA oder ECDSA- Schlüssel des Servers.
Cipher Suites • Zertifikate austauschen und prüfen – Server sendet Endzertifikat und Zwischenzertifikate • Sitzungsschlüssel aushandeln – RSA oder Diffie-Hellmann • Validierung des Verbindungsaufbau (verschlüsselt) – Validierung Prüfsumme alle Daten des Verbindungsaufbaus
(PKI) • aktuelle Version X.509v3 • ASN.1-Format • hierarchische Struktur von Zertifizierungsstellen (CA) – Stammzertifikate beglaubigen weitere Zertifikate
• Stammzertifikate (root CA certs) – Im Browser oder Betriebsystem eingebaut. • Zwischenzertifikate (intermediate CA certs) – in der Regel ein bis drei Zwischenzertifikate • Endzertifikate (leaf certificate) des Servers
Client sucht Stammzertifikat im Trust Store und baut Vertrauenskette auf. • Client prüft Vertrauenskette von Stamm- zu Endzertifikat. – Signaturen – Gültigskeitsdatum – Revocations – Extensions (critical, policies, constraints ...)
dem Hostname des Service übereinstimmen. • Hostnamen stehen im Subject Alternative Name (SAN) Feld oder im CN (common name) des Inhabers (subject). • … nicht so trivial, wie man denkt. Meine CVEs und Issues: – Python: CVE-2013-4238, CVE-2013-2099, Issue #17997 – PHP: CVE-2013-4248 – Firefox / NSS: CVE-2014-1492 / MFSA-2014-45 – OpenSSL 1.0.2dev IDNA bug