molily: Welche Hash-Technik verwenden?

Beitrag lesen

Hallo,

so ganz habe ich deinen Anwendungsfall noch nicht verstanden, daher ein paar Rückfragen:

ich habe hier ~5000 Emailadressen und muss diese in einer URL Variablen (GET) einem PHP Script übergeben. (nicht gleichzeitig, sondern per User Link)

Was macht das Script mit der Adresse? Woher kommt die URL und wer macht den Request? Geht es hier vielleicht um eine Newsletter-Steuerung oder ähnliches?

Aus sicherheitsgründen möchte ich aber dies natürlich nicht im Klartextmodus machen, sondern ich würde diese Adresse gerne maskieren/schützen.

Geht es dir darum, dass die E-Mail-Adresse nicht in der URL auftaucht, ein Angreifer also nicht einfach eine andere Adresse eintragen und durchprobieren kann?

Jetzt hatte ich folgende Idee: Ich rechne zu jeweils allen Emailadressen einen Hashwert aus. Diesen Hashwert übergebe ich dann per URL. Die Rückführung und zuordnung der Kontakte erfolgt dann wieder mit diesem Hashwert.

Die Frage ist: Hat das Script Zugriff auf die Zuordnungstabelle Hash <> E-Mail? Oder ist dem Script die E-Mail-Adresse noch nicht bekannt? Ohne eine solche Datenbank kannst du den Hash nicht umkehren und »zurückrechnen« – das ist ja der Sinn eines (guten kryptographischen, gesalzenen) Hashes.

Im Beispielfall der Newsletter-Bestätigung oder -Abmeldung generiert man üblicherweise einen zufälligen Token, der vom Angreifer schwer erraten werden kann (man müsste einen großen Zahlenraum per Brute Force durchprobieren) und nicht von der E-Mail-Adresse abgeleitet ist (also kein Hash). Dieser Zufallswert muss eindeutig pro Kontakt sein. Das wird mit einer Schleife sichergestellt: Solange neue Token erzeugen, bis im aktuellen Kontext kein Konflikt gefunden wird.

Hier kann man entweder mit einem einmal generierten Identifier arbeiten oder mit einem One-Time-Pad, das nur für die gewünschte Aktion gültig ist (Bestätigung der Anmeldung, Abmeldung, weitere Aktionen…).

Würde es auch einen Weg geben, mit dem ich die Emailadresse codieren, per URL versenden und dann im PHP wieder decodieren könnte?

Im Prinzip ist eine solche synchrone Verschlüsselung möglich. Beide Seiten müssen dann den Schlüssel kennen, wenn du wirklich neue Daten übertragen willst. Falls du via HTTP verschlüsselt und authentifiziert Daten von A nach B transportieren willst, wären SSL und HTTP Basic Authentication sinnvoller. Wenn du nur einen nicht erratbaren Identifier brauchst, erscheint mir das unnötig kompliziert.

</afaik>
Mathias