Sichere Diffie-Hellman Parameter vor und nach Logjam

Adrian et al zeigen in ihrem spannenden Paper nicht nur den von ihnen Logjam genannten Angriff, der auf einem Downgrade auf nur 512-Bit Diffie-Hellman Parameter des unsicheren Ciphers DHE_EXPORT (abschalten!) basiert, sondern haben in HTTPs Scans auch beobachtet, dass in TLS vielfach quasi Standard-Gruppen sowohl für 512 als auch für 768 und 1024 Bit verwendet werden, dies sind entweder die Built-ins (dh512_p, dh1024_p) des weit verbreiteten Apache Webservers oder die in RFC 2409 definierten Oakley Gruppen 1 (768 Bit) und 2 (1024 Bit).

Auch wenn sich die Wissenschaftler selbst mit ihren Ressourcen außerstande sehen, 1024-Bit Diffie-Hellman Gruppen zu knacken, muss dies ihren Ausführungen zufolge nicht für Institutionen gelten, die weitaus mehr Geld für derlei Berechnungen ausgeben können. Da zudem die für Logjam verwendete Methode mit weitestgehenden Vorausberechnungen für die 512-Bit Built-in DH Parameter von Apache, die von den Kryptologen in nur einer Woche vorgenommen werden konnten, arbeitet, empfehlen sie den Einsatz eigens erzeugter Diffie-Hellman 2048-Bit Parameter.

Open Source Software arbeitet i.d.R. mit OpenSSL, das die notwendige Sicherheit bzgl. der Diffie-Hellman Parameter bietet. Ein genauer Blick auf die Dokumention und letztlich die Sourcen der eingesetzten Software lohnt sich jedoch und wer selbst bereits 2048-Bit DH Parameter mittels 'openssl dhparam' produziert hat, kann nachvollziehen, dass kein Server diese, nicht einmal 1024-Bit, beim Start erzeugen und trotzdem binnen einer Sekunde für TLS-Verbindungen bereitstehen kann. Wenn man selbst also keine Parameter zum simplen Einlesen für den Server produziert hat, muss er eigene "Tricks" anwenden, z.B. mittels Built-ins, dem Erzeugen geeigneter Primzahlen beim Kompilieren, "einfacheren" DH-Gruppen etc.

Erzeugen der sicheren Diffie-Hellman Primzahl

Mittels OpenSSL kann eine eigene sichere 2048-Bit Diffie-Hellman Gruppe wie folgt erzeugt werden:

[root@popc ~]# openssl dhparam -out dhparam 2048
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..................................................................................................................................+...........+......+........+................................
[...]
......................................................................................+.........++*++*

 Nun liegen die Parameter im PEM-Format in der Datei dhparam vor:

[root@popc ~]# cat dhparam
-----BEGIN DH PARAMETERS-----
MIIBCAKCAQEAqPgJ2zFHMCIUIZ8//c9jGHDh2chL1cslzd1F12n/DwJaQdavxn+L
30m9Q27mC83qmP8mM99nD/R+n3+yDnVPL8ysnwdogkrKjqNtVAtkhG3D/V4nV6qB
vskhBEvIL6GmHWlilQC68tqFKgeP2RQD6aInNoECD8GnuLtkHthxJUKwDBLKWI6C
h2hnd6ubmSk3Y+YYEqMJvWj8b4L+QQAcvr+ymyfSb5Lcp3a9sC7P5lDy5pccGhpg
f32b2by3QUB5gdx1EnISWhga949hy7gqHWrVoDyaiFzZ6WWmJYFxjdD/TxmvdxPM
9atG5VlsA6oduJCTM2U0+1WsYVkOSWreWwIBAg==
-----END DH PARAMETERS-----

Apache httpd

Der Apache Webserver war aufgrund seiner großen Verbreitung das hauptsächliche Forschungsobjekt der Logjam-Autoren.

Apache 2.4 verwendet bis einschließlich Version 2.4.6 standardmäßig sein eigenes 1024-Bit Built-in, außer für DHE_EXPORT, dort ist es sein aus dem Logjam Paper bekanntes 512-Bit Built-in, für das die Wissenschaftler ihre Vorausberechnungen durchgeführt haben:

static unsigned char dh512_p[] = {
0x9F, 0xDB, 0x8B, 0x8A, 0x00, 0x45, 0x44, 0xF0, 0x04, 0x5F, 0x17, 0x37,
0xD0, 0xBA, 0x2E, 0x0B, 0x27, 0x4C, 0xDF, 0x1A, 0x9F, 0x58, 0x82, 0x18,
0xFB, 0x43, 0x53, 0x16, 0xA1, 0x6E, 0x37, 0x41, 0x71, 0xFD, 0x19, 0xD8,
0xD8, 0xF3, 0x7C, 0x39, 0xBF, 0x86, 0x3F, 0xD6, 0x0E, 0x3E, 0x30, 0x06,
0x80, 0xA3, 0x03, 0x0C, 0x6E, 0x4C, 0x37, 0x57, 0xD0, 0x8F, 0x70, 0xE6,
0xAA, 0x87, 0x10, 0x33,
};

Mit Version 2.4.7 wurde der Code bzgl. der DH Parameter komplett umgestellt. Apache verwendet jetzt im Default in Abhängigkeit von der Länge des RSA bzw. DSA Keys DH Parameter mit Primzahlen von 1024, 2048, 3072 oder 4096 Bit sowie ab 2.4.10 auch 6144 und 8192 Bits, und zwar Oakley Group 2 bzw. die in RFC 3526 definierten Oakley Gruppen 5 und 14 bis 18. 

Zudem ist es möglich, DH Parameter in obigem PEM-Format in der Zerfifikatsdatei 'SSLCertificateFile' einzufügen. 

Seit Version 2.4.8 kann man darüber hinaus mittels der neuen Direktive 'SSLOpenSSLConfCmd' die Datei mit den erzeugten Parametern im PEM-Format angeben, z.B.:

SSLOpenSSLConfCmd DHParameters "/etc/httpd/dhparam/dhparam"

Alle drei Varianten können auch auf vhost-Basis konfiguriert werden. 

Apache 2.2 verwendet bis einschließlich der aktuellen Version 2.2.29 dieselben Parameter wie die alten Apache 2.4-Versionen 2.4.6, also 1024- bzw. 512-Bit Built-ins. Version 2.2.30 (noch nicht veröffentlicht) kann ebenso konfiguriert werden wie Apache 2.4.8.

Sendmail

Sendmail kann für 512, 1024 (Default) oder (ab Version 8.15.1) 2048 Bit Diffie-Hellman Parameter konfiguriert werden.

Update: Default ab Sendmail 8.15.2 ist ein 2048-Bit Built-in.

Konfiguration in sendmail.mc:

define(`confDH_PARAMETERS', `2048')dnl

In diesem Fall werden von Sendmail beim Start DSA Parameter erzeugt, deren Verwendung für Diffie-Hellman von den Logjam-Autoren als sicher angesehen wird.

Alternativ kann man in Sendmail aber auch die Datei (Verzeichnis darf nur für root lesbar sein) mit den selbst erzeugten Diffie-Hellman Parametern im PEM-Format angeben:

define(`confDH_PARAMETERS', `/etc/mail/dhparam/dhparam')dnl

Cyrus imapd

Cyrus verwendet standardmäßig Oakley Group 2 (1024 Bit). Eigene Diffie-Hellman Parameter können in 'tls_key_file' (NICHT 'tls_cert_file') im PEM-Format untergebracht werden.

Logfile:

May 28 13:00:46 mail imaps[10729]: imapd:Loading DH parameters from file

Andernfalls erhält man beim Laden der Default-Parameter:

May 28 12:10:42 mail imaps[32055]: imapd:Loading hard-coded DH parameters

Perdition

Perdition unterstützt bis einschließlich der aktuellen Version 2.1 ausschließlich den Key Exchange mittels RSA. 

Referenzen:

1. https://weakdh.org/imperfect-forward-secrecy.pdf

2. https://tools.ietf.org/html/rfc2409#section-6

3. http://www.ietf.org/rfc/rfc3526.txt

4. http://archive.apache.org/dist/httpd/httpd-2.4.6.tar.gz

5. http://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile

6. http://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslopensslconfcmd

7. http://archive.apache.org/dist/httpd/httpd-2.2.29.tar.gz

8. https://www.openssl.org/docs/ssl/SSL_CONF_cmd.html#SUPPORTED-CONFIGURATION-FILE-COMMANDS

9. http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslcertificatefile

10. Costales, Jansen, Aßmann. sendmail 4th Edition. 1006-1007

11. ftp://ftp.cyrusimap.org/cyrus-imapd/OLD-VERSIONS/cyrus-imapd-2.4.15.tar.gz

12. http://horms.net/projects/perdition/download/2.1/perdition-2.1.tar.gz