Passwortsicherheit erhöhen - SHA1 salzen...

preko

Erfahrenes Mitglied
Hi,

ich habe aufgrund eines aktuellen Projektes mir mal Gedanken gemacht, wie ich die Sicherheit meiner Sessions erhöhen kann.

Daher bin ich auf die Idee gekommen, 3 verschiedene SHA1 Werte meiteinander zu kombinieren und diese als Session_id zu benutzen. Dies sollte die Möglichkeiten des zufälligen Treffers (z. B. mittels Rainbowtabellen/Rainbow Table) gegen Null tendieren lassen denke ich.

Hier mal den Denkansatz:
PHP:
/*
-------------------------------------------------------
Cryptography funktion - 3x SHA1 kombiniert
-------------------------------------------------------
*/
// "ClosedDoor" - SHA1 coded - Vom Benutzer frei gewählt 
// und in Datenbank-Userprofil gespeichert
$salt_1 = "6a2181a17e3a4c902996a33266cfc554cff49be1";

// "MobyDick" - SHA1 coded - Fest implementiert im System 
// vom Entwickler vergeben
$salt_2 = "29edcdf410a7907e3826c5fbc5a15f0a1ae95953";

// "FreeEntry" - SHA1 coded - Passwort des Benutzers 
// von ihm frei gewählt
$password = "c4777c8581cb36c74be0923e4a4b1d753de6d4d6";

function cryptmix($salt_1,$salt_2,$password) {
	echo "<p>".$salt_1."<br />";
	echo $salt_2."<br />";
	echo $password."</p>";
	
	$salt_1 = str_split( $salt_1, 1 );
	$salt_2 = str_split( $salt_2, 1 );
	$password = str_split( $password, 1 );

// Jeweils die 1. Ziffer der 3 Strings wird hintereinandergereiht, 
// dann die 2., etc.
	for($i=0; $i<40; $i++) {
		$mix[] = $salt_1[$i].$salt_2[$i].$password[$i];
	}

// Ausgabe des "gemischten" (Gesamt-) Strings mit 120 Stellen
	echo "Mix: ";
	for($i=0; $i<40; $i++) {
		echo $mix[$i];
	}

// Wandelt das Array $mix[] in den String $mix um zwecks weiterer Verwendung
$mix = join('',$mix);
}

// Aufruf der Funktion
cryptmix($salt_1,$salt_2,$password);

Die Ausgabe sähe wie folgt aus:
Salt_1: 6a2181a17e3a4c902996a33266cfc554cff49be1
Salt_2: 29edcdf410a7907e3826c5fbc5a15f0a1ae95953
Password: c4777c8581cb36c74be0923e4a4b1d753de6d4d6

Mix: 62ca942e71d78c71dcaf8145718e013aca7b493c0697c0e723498b92e660ac93523f32be6c465aca4f1bc515fd5074a5c13fadfee49695db94e5d136

Das Array $mix[] wird dann als Session_id gespeichert. Kann man auch "nur" mit zwei SHA1 Werten machen, was die Arraylänge auf 80 Zeichen reduziert und die Reproduzierbarkeit auch minimal erscheinen lässt.

Was haltet ihr davon?

Beste Grüße!
 
Zuletzt bearbeitet:
Meiner Meinung nach ist das eher ein Beitrag für Security through obscurity.

Die Gefahr von Rainbow Tables, von denen es für SHA noch nicht soviele gibt, wie z. B. bei [phpf]md5[/phpf], sind ja nicht direkt für das Finden von Passwörtern da, sondern für die Kollisionsmenge.

Hier würde ich sagen: Zuviel Rechenaufwand für zuwenig Ertrag.

Für einen vernünftigen Salt:
Man nehme das Passwort, verlängere es mit einem Salt und erstelle einen Hash, fertig.
 
Ich bin ein Fan von folgeneder Verschlüsselung:

Passwort wird md5 verschlüsselt. Dann wird mit einen : ein salt drangehangen. Dieses Konstrukt wird dann nochmal md5 verschlüsselt
 
Ich bin ein Fan von folgeneder Verschlüsselung:

Passwort wird md5 verschlüsselt. Dann wird mit einen : ein salt drangehangen. Dieses Konstrukt wird dann nochmal md5 verschlüsselt

Es gibt riesige Rainbowtables in [phpf]md5[/phpf] und es sollte, imho, einfach nicht mehr benutzt werden. Es geht nicht um Passwörter die gefunden werden, sondern um Kollisionen bei md5.
D. h. unterschiedliche Werte erzeugen den gleichen Hash. Und in dieser Hinsicht ist md5 geknackt, weshalb da auch kein Salt mehr hilft. Dieser hilft hier nur keinen Rückschluss auf das richtige Passwort zu bekommen, falls der User auf mehreren Seiten das gleiche Passwort verwendet. Aber es hilft nicht die Applikation vor dem Login zu schützen. Deshalb lieger auf einen stärkeren Algorithmus setzen.
 
Zurück