Verschlüsselung | |
Aus einem Passwort werden MD5- und SHA1-Fingerprints errechnet. Diese Fingerprints können immer nur in eine Richtung berechnet werden. Aus einem Fingerprint kann das Passwort nicht mehr direkt ermittelt werden (nur per brute force). SHA1-Fingerprint ist 20 Byte lang und wird in Map-Datei gespeichert. Dies wird nur benutzt, um blitzschnell das Passwort auf Richtigkeit zu überprüfen. MD5-Fingerprint wird "missbraucht", um einen 16 Byte langen Schlüssel zu generieren. Selbst wenn nur ein Passwort mit paar Zeichen benutzt wird, kann ein Schlüssel sehr kryptisch aussehen. Aus dem letzten MD5-Fingerprint werden immer wieder neue Fingerprints berechnet, solange bis insgesamt 16 Fingerprints festliegen. Es ergibt sich ein 256 Byte langer Schlüssel! Alle Daten werden byteweise per XOR verschlüsselt und entschlüsselt (result=byte XOR key). Der Schlüssel wird "rotierend" eingesetzt: Nach dem letzen Zeichen folgt wieder das Erste. Der Code unten generiert eine Integer-Tabelle:
|
|
Sicherheitslücken | |
1) Standardmässig wird eine entschlüsselte Tmp-Datei erzeugt. Eine Datei könnte jedoch auch direkt in den Speicher entschlüsselt werden. Dazu muss Map-Loader angepasst werden. 2) Passwort steht meistens im Klartext in einer EXE drin. Es wird empfohlen einen verschleiernden Algorithmus zu schreiben, der das Passwort zur Laufzeit generiert. |