Achtung:
Bitte verwendet diese Version von ISPEM nicht (mehr)!
Hier ist ein Fehler unterlaufen, der Dank P.B. enthüllt wurde.
Bitte verwendet folgenden Link um eine korrekte sichere ISPEM-Funktion zu bekommen: ISPEM Sicherheitsupdate
Individual Secure Password Encryption Method, das ist ISPEM. Dahinter steckt nicht viel Innovatives, aber Nützliches. Auch heute sieht man, wenn man in den Quellcode schaut, bei vielen Programmen noch die MD5-Verschlüsselung.
Passwörter werden MD5-verschlüsselt in die DB eingetragen und verglichen. Um eingeloggt zu bleiben muss das verschlüsselte Passwort aber im Cookie gespeichert werden und hier beginnt das Risiko von normaler MD5-Verschlüsselung: Wird das Cookie durch XSS oder auch auf andere Weise gestohlen lässt man entweder Bruteforce, oder noch viel einfacher, einen Decryptor drüberlaufen. Denn viele wissen nicht, dass es offen zugängliche MD5-Datenbanken gibt, die jede Verschlüsselung speichern und demnach auch reversibel funktionieren.
Die Lösung ist ISPEM. ISPEM ist die Verknüpfung verschiedener Methoden mit MD5.
define('ISPEM_FCONST_SPL','your_unknown_value1',true); define('ISPEM_SCONST_SPL','your_unknown_value2',true); function ISPEM_encrypt($clear_password){ $p = str_rot13($clear_password); $p = base64_encode($p); $S1 = md5(ISPEM_FCONST_SPL,true); $S2 = md5(ISPEM_SCONST_SPL,false); $SC = md5(strlen($p).$S1,false); $p = substr(($S2.$SC),0,45); return $p; //liefert einen 45 zeichenlangen Encrypted String, unknackbar }
Dadurch, dass der String abgeschnitten ist ist es prinzipiell unmöglich, dass wahre Passwort rauszufinden.
Wäre die kodierte konstante an hinterer Stelle, wäre es einfacher, da man dann nach Abzug von 13 Zeichen “nur” noch den SC-String hätte.
Bei ISPEM fehlt dem Cracker aber ein wichtiger Teil des SC-Strings, den er nicht “schätzen” kann, da er das Passwort nicht kennt.
Mit ISPEM ist man in Sachen Verschlüsselung auf der richtigen Seite. Natürlich gibt es keine ISPEM_decode, da es nicht reversibel ist.
ISPEM steht natürlich völlig frei zur Nutzung.
Nachtrag (So, 19. Juli 2009):
Das substr() kann natürlich auch variieren. Eine Idee wäre z.B. statt einfach nur substr($str,0,45) ein mehrteilig abgeschnittenes Crypting zu nutzen, durch substr($str, 4, 49);.
[...] Websider stieß ich gestern auf einen kurzen, aber interessanten Codeschnippsel zur sicheren [...]
Habe darüber bei uns im Blog tegget.de berichtet.
http://www.tegget.de/745_passwort-verschlusselung-via-ispem.html
Ähhh Warum so umständlich? md5($string . $keyphase) hat den selben Effekt. Ich würde mir lieber sorgen um die Kommunikation zwischen Passworteingabe und Serverannahme machen.
Hallo Phap,
das ist leider falsch. Was du machst ist einfach nur Salting. Wenn du dich mal näher mit dem Thema beschäftigst, dann weißt du, dass auch gesaltete MD5’s leicht knackbar sind heutzutage.
Natürlich kann man AntiHacker-Schutzmethoden wie IPLocking bei zu vielen Versuchen und Ähnlichem einbauen, jedoch geht es hier vorranging um die Sicherheit eines Passwortes.
Die ist mit ISPEM zu 100% gegeben. Es ist unmöglich ein ISPEM-gecryptetes Passwort zu entschlüsseln.
Das Passwörter zu 100% sicher sind ist schon oft behauptet worden - bis das Gegenteil bewiesen worden ist. Daher empfinde ich “100% sicher” und “unmöglich” in diesem Zusammenhang als beschönigend.
Hallo Marc,
du siehst das von der falschen Ansicht. Passwörter sind grundsätzlich immer knackbar, egal welche Verschlüsselung angewandt wird. Social Hacking und Bruteforce sind hier Dinge die irgendwann _immer_ zum Ergebnis führen.
Aber: Es geht hier um eine eigens entwickelte Verschlüsselungsmethode, die zu 100% (ja, hundert) nicht reversibel ist.
Beispiel: Du bist im Internetcafe, loggst dich aus, doch die entsprechende Seite löscht dein Passwort-Cookie nicht. Nicht schlimm sagst du dir, denn es ist ja sowieso verschlüsselt. Doch weit gefehlt: Auch heute benutzen viele Seiten nur md5, teilweise salted, aber auch unsalted, als Verschlüsselungsmethode. Das ist jedoch reversibel. Eine ISPEM-Verschlüsselung ist nicht reversibel und deswegen sinnvoll.
[...] Strings verschieden. Nun aber zu der neuen Methode welche ich benutze seit ich den Beitrag “Passwort-Verschlüsselung ISPEM” auf derWebsider.de gelesen [...]
Hey David,
ich hab ja auch in meinen Blog Web-Schnipsel darüber gebloggt, und habe es auch gleich in ein Script von mir eingebaut, und bei ein paar zufälligen Tests habe ich festgestellt das es doch leichter ist als erwartet das System zu knacken. Ich bin mir nun nicht sicher ob das wirklich geht, oder ob es einen sonstigen Fehler bei mir gab, aber würde mich freuen wenn du mir eine E-Mail schreibst, dann können wir das mal besprechen
Viele Grüße Philipp
[...] Was ISPEM ist und wodurch es sich auszeichnet findet ihr im Beitrag ISPEM-Verschlüsselung. [...]
Hallo Philipp,
vielen Dank für den Bericht, die neue Version findet man hier (dieses Mal geprüft):
Klick mich
Ich habe lange Zeit selbst eine MD5 & SHA1 Datenbak betrieben und kann dieser Methode nur ein müdes Lächeln abgewinnen.
Damals galkten auch WEB und/pder MD5 als unknackbar, die heutige Zeit lehrt uns etwas anderes. Es ist immer nur eine Frage der Zeit, bis entsprechende Gegenstücke zu einem Hash verfügbar sind. In meiner Datenbank waren damals gut 45.000.000 (!!!) UNIQUE Hashes gespeichert. Man konnte also einfach den Hash eingeben und hat das passende Wort, sofern es denn vorhanden war, zurückgeliefert bekommen.
Auch mit dieser Methode sollte das genauso funktionieren. Nehmen wir meinen Datenbestand von 40.000.000 Passwörtern und speichern Sie gleichfalls als SHA1, MD5 und deinem Algorythmus ab, dann gäbe es schonmal 45.000.000 Gegenstücke, die binnen Sekunden abzufragen sind.
Seis drum, ein salted SHA1 Hash ist für mich das einzigste was ich in meinen Anwendungen erlaube. Dazu ein sicheres Passwort welches der Benutzer nur nach strenger Syntax anlegen/ändern darf und gut.
Der Entwickler hat die Sicherheit seiner Anwendungen in der Hand, nicht irgend ein Hash.
MfG egal
Hallo “egal” (wenigstens ein Name wäre das nächste Mal schön gewesen
).
Im Prinzip hast auch du Recht, ich komme ja nicht vom Mars, sondern entwickle selbst wichtige Applikationen.
Aber ISPEM basiert natürlich auch auf der Basis von Security through Obfuscation und genau hier setze ich an und dieses Prinzip ist sehr sinnvoll.
MD5 gilt heute immernoch als “unknackbar”. Daran hat sich bis heute nichts geändert. Das Problem und das Problem aller Verschlüsselungen ist Bruteforce, Library-Attack usw.
Diese Dinge funktionieren immer, egal wieviel Bit die Verschlüsselung hat. Eine Passwort-Verschlüsselung ganz allein macht noch lange kein sicheres System, wenn der Rest nicht stimmt.
ISPEM ist eine Methode zur Passwortverschlüsselung. Es gibt also nicht DIE ISPEM-Funktion. Das Passwort wird mehrfach “gesalzen”, durch die beliebig veränderbaren Konstanten. Ein 45-Zeichen-Hash sagt grundsätzlich so viel aus wie die Antwort “Nein” auf die Frage “Wie geht es dir?” ;). Mit einem 45-, 43-, oder von mir aus auch 46-Zeichen-Hash kann einfach niemand einfach so ne Attacke vornehmen. Hier ist der Aufwand viel zu groß. Eine Library-Attacke bringt bei ISPEM rein gar nichts, weil derjenige den Algorithmus nicht kennt.
Wenn du nun immernoch lächelst, soll es dir gegönnt sein