English version available here: http://www.slideshare.net/StephenKing/secure-password-storing-with-saltedpasswords-in-typo3
Erklärung der Systemextension "saltedpasswords" zur sicheren Speicherung von Passwörtern in TYPO3-Installationen.
Vortrag auf dem TYPO3camp Munich 2010
http://www.typo3camp-munich.de
Official typo3.org infrastructure & the TYPO3 Server Admin Team
TYPO3-Passwörter sicher speichern mit saltedpasswords
1. Image: Carlos Porto / FreeDigitalPhotos.net
TYPO3-Camp München - 11./12. September 2010 Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
2. Passwörter sicher speichern mit der
Systemextension saltedpasswords
Steffen Gebert <steffen@steffen-gebert.de>
TYPO3-Camp München - 11./12. September 2010
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
3. Einführung
Vorstellung
Steffen Gebert
Student, Freelancer
TYPO3 Core Team Member
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
4. Einführung
Upps..
TYPO3 Assicciation, 3rd Quarterly Report 2008
“What happened? An unauthorized person gained
administrative access to the typo3.org website. As
far as we can tell, an admin password was stolen
and used to find out more passwords on typo3.org.”
Speicherung sensibler Daten (z.B. Passwörter) bestmöglichst
vermeiden!
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
5. Einführung
Speicherung von Passwörtern
Absolutes No-Go: Speicherung des Klartextpassworts
Stattdessen
Speicherung eines Hashes (“Prüfsumme”)
Bei Login nur Vergleich mit dieser Prüfsumme
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
6. Einführung
Grundlagen Hashing
Einwegfunktion
gleiche Eingabe => gleiches Ergebnis
md5(‘joh316’) = ‘bacb98acf97e0b6112b1d1b650b84971’
Rückrichtung algorithmisch nicht möglich
Meistgenutzter Algorithmus: MD5
gilt nicht mehr als sicher (Kollisionen relativ einfach, riesige
Rainbowtables verfügbar)
Alternativen (SHA) liefern nur größeren Ergebnisraum
=> Verschiebung des Problems auf neue Rainbowtables
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
7. Einführung
Abspeichern eines salted Passworts
Benutzereingabe: ‘joh316’
Salt generieren, z.B. ‘7deb882cf’
Berechnung des Hashes
md5(‘7deb882cf’ . ‘joh316’) = ‘bacedc598493cb316044207d95f7ad54’
Abspeichern von Salt und Hash
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
8. Einführung
Überprüfen eines Passworts
Benutzereingabe: ‘joh316’
Genutztes Salt aus Datenbank auslesen: ‘7deb882cf’
Berechnung des Hashes
md5(‘7deb882cf’ . ‘joh316’) = ‘bacedc598493cb316044207d95f7ad54’
Vergleich mit abgespeichertem Hash
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
9. Die Extension
Systemextension saltedpasswords
Ursprünglich t3sec_saltedpasswords von Marcus Krause
Aufnahme in den Core in Version 4.3 mit Hilfe von Steffen Ritter
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
10. Die Extension
Implementierte salting-Methoden
Salted MD5
Portable PHP password hashing framework
Verfügbar für diverse PHP Applikationen (Drupal etc.)
Wiederholte Anwendung von MD5 (langsam)
Blowfish
Verfügbarkeit systemabhängig
Ab PHP 5.3 eigene Implementierung
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
11. Die Extension
Der Knackpunkt
Passwort muss im Klartext vorliegen
TYPO3 übermittelt standardmäßig nur MD5-Hash
Klartextübertragung jedoch unsicher
Voraussetzung (mind. eine)
SSL-Verbindung
Systemextension rsaauth
Verschlüsselt Passwörter vor Übertragung mit
RSA-Algorithmus
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
12. Installation & Konfiguration
rsaauth
Voraussetzungen
OpenSSL: PHP-Erweiterung empfohlen, Binary als Fallback
JavaScript
Aktivierung
Frontend
$TYPO3_CONF_VARS[FE][loginSecurityLevel] = ‘rsa’
Backend
$TYPO3_CONF_VARS[BE][loginSecurityLevel] = ‘rsa’;
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
13. Installation & Konfiguration
saltedpasswords mit SSL-Verbindung
Frontend
$TYPO3_CONF_VARS[FE][loginSecurityLevel] = ‘normal’
Backend
$TYPO3_CONF_VARS[BE][lockSSL] > 0
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
14. Installation & Konfiguration
Installation saltedpasswords
Prüft Verfügbarkeit von rsaauth oder lockSSL
Aktivierung für FE / BE getrennt
Wahl des Hashing-Algorithmus
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
15. Kompatibilität
Abwärtskompatibilität
Existierende Passwörter? (unsalted MD5)
können nicht sofort konvertiert werden, da nicht im
Klartext abgespeichert
einzig möglicher Zeitpunkt: während Login
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
16. Kompatibilität
Extensions
Frontend
felogin kompatibel
srfeuserregister_t3secsaltedpw
Alternative FE-User Registrierungen?
Ggf. Anpassungen nötig (Single-Signon etc.)
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
17. Hintergrundwissen
Passwortformate
MD5 ohne Salt (zur Erinnerung)
bacb98acf97e0b6112b1d1b650b84971
MD5 mit Salt
beginnt mit $1$, 12 Zeichen Salt
$1$13NETowd$WFpl6npZF71YKkCCzGds2.
Blowfish
beginnt mit $2a$, 22 Zeichen Salt
$2a$07$DZpLLz7wtIfhSSMwyEXjA.Nbh6rpDlqbgwVKa.IoDLyuLe5C7Jp8W
PHPASS
beginnt mit $P$
$P$Ccw7UIZ..SkvKBXDWnZlZ.qHcbktrB.
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
18. Hintergrundwissen
Passwortformate Pro & Contra
PHPASS
niedrige Systemvoraussetzungen (zu jeder PHP-Version kompatibel)
setzt PHPASS-Implementierung in Applikation voraus
MD5 / Blowfish
Unix crypt() Format, kompatibel zu Systemdiensten (/etc/passwd)
vielleicht doch die bessere Wahl (?)
Algorithmen von PHP/System abhängig
mit PHP 5.3.2 auch SHA-256/512 möglich
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
19. Hintergrundwissen
Nutzung von crypt() [3]
Passwortüberprüfung:
crypt($user_input, $encrypted_password) == $encrypted_password);
Gespeicherter Hash (incl. Salt):
$1$13NETowd$WFpl6npZF71YKkCCzGds2.
crypt(joh316, $1$13NETowd$WFpl6npZF71YKkCCzGds2.)
= $1$13NETowd$WFpl6npZF71YKkCCzGds2.
crypt(password, $1$13NETowd$WFpl6npZF71YKkCCzGds2.)
= $1$13NETowd$SeAArtswHd8jzc9SQvH691
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
20. Weblinks
Free Rainbow Tables
http://www.freerainbowtables.com
PHPASS
http://www.openwall.com/phpass/
PHP Manual: crypt()
http://de2.php.net/manual/en/function.crypt.php
Wikipedia: crypt (Unix)
http://en.wikipedia.org/wiki/Crypt_(Unix)#Library_Function
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share
21. ?????
??
?
??
??
?
Inspiring people to
Passwörter sicher speichern mit saltedpasswords share