2016-07-15 11 views
0

Was ist die beste Einweg-Permutationsfunktion, die ich verwenden könnte, um eine E-Mail verdauen, so dass ich es als Primärschlüssel verwenden kann, ohne persönliche Daten zu speichern?One-Way-Verschlüsselung Primärschlüssel

Ich bekomme mein erstes F2P-Spiel fertig: ein einfaches, aber (hoffentlich) süchtig machendes 2D-Puzzlespiel, das auf Zielmechanik basiert. Es ist mit Unity gemacht und wird bald auf Android veröffentlicht werden.

Damit der Player die gleichen Daten über verschiedene Geräte behält, habe ich eine SQL-Tabelle mit der Geräte-E-Mail als Primärschlüssel, dann eine andere Zeichenfolge als Savegame-Daten.

Aber ich möchte die Benutzer E-Mail aus Gründen der Privatsphäre nicht speichern. So

Ich dachte, es mit einer gewissen Funktion der Verdauung, die die ursprüngliche E-Mail verwenden würde eine neue Zeichenfolge zu erzeugen, dass:

  • einzigartig ist (kollidieren nie mit einer anderen Zeichenfolge erzeugt aus einer anderen E-Mail Adresse)
  • nicht decypherable ist (sollte es keine Möglichkeit, die Original-E-Mail aus dem aufgeschlossenen Zeichenfolge zu erhalten - oder zumindest sollte es hart genug sein)

So kann ich immer noch das Android-Gerät verwenden könnte E-Mail zum Abrufen der Spielstände, wit hout persönliche Daten vom Spieler speichern.

Soweit ich recherchiert habe, scheint die Lösung eine Einweg-Permutationsfunktion genannt zu werden. Das Problem ist, dass ich keine passende Funktion im Internet finden kann; Stattdessen scheinen alle Antworten mit Lösungen für Password-Hashing geplagt zu sein, was sehr interessant ist (Salzen, MD5, SHAXXX ...), aber nicht meine erste Anforderung von keiner Kollision erfüllen.

Vielen Dank im Voraus für eine Antwort zu diesem Thema.

+0

Danke, ich werde, aber obwohl die Antwort sehr nützlich ist, erfüllt es meine erste Anforderung nicht: wird nie kollidieren. Ja, es ist sehr unwahrscheinlich, aber das ist eine sehr wichtige Voraussetzung in meinem Fall, da ich diese Funktion verwenden würde, um einen Benutzer zu identifizieren. Es wäre nicht sehr gut, wenn jemand das Spiel starten und den Spielstand eines anderen Spielers suchen würde - und es wäre auch nicht für den anderen Spieler zu finden, dass ein Fremder seine Spielstanddaten gelöscht hat. Ich fürchte, wenn ich deine Antwort akzeptiere, wird niemand versuchen, einen besseren Vorschlag zu machen. Also bitte versteh mich, wenn ich noch etwas warte. Vielen Dank! – EJSainz

+4

Ah, mir war nicht klar, dass das Spiel über das Ende des Universums hinausgehen würde. In diesem Fall reicht SHA-256 nicht aus. – zaph

+1

Aber ich unterscheide mich von "sehr unwahrscheinlich", dass nicht einmal ein Power Ball Gewinner ist.Hier ist ein Gedankenexperiment, das wahrscheinlicher ist: Eine SHA-256-Kollision, ein schwerer Sicherheitsfehler in Ihrem Code oder ein erfolgreicher Angriff auf Ihren Server? – zaph

Antwort

1

Was Sie brauchen, ist eine kryptographische Hash-Funktion wie SHA-256. Solche Funktionen sind kollisionsresistent, Git verwendet eine ältere Version SHA-1. Die meisten Sprachen/Systeme unterstützen dies, nur Google "Android SHA-256" zusammen mit Ihrer Sprache der Wahl.

Eine Option besteht darin, einen Erstellungszeitstempel anzuhängen.

Update: Da SHA-256 keine ausreichende Kollision Widerstand betrachten s GUID, von RFC 4122: „Ein UUID ist 128 Bit lang und kann Garantie Einzigartigkeit über Raum und Zeit“. Natürlich müssen Sie eine gute Implementierung finden.

+0

Hallo, @zaph, und vielen Dank für die Antwort. Ich dachte an SHA und andere Hash-Funktion, und lesen, nach Rücksprache mit Kollegen Kollegen und Lesen Ihrer Antwort, machte ich ein wenig Forschung und fand [diese Antwort] (http://stackoverflow.com/questions/4014090/is-it- Sicher-zu-ignorieren-die-Möglichkeit-von-SHA-Kollisionen-in-Praxis-, ob es eine genug gute Idee wäre, SHA-256 zu verwenden. Sieht so aus, als ob das gut genug wäre, aber es ist nicht perfekt - also warte ich noch ein wenig, für den Fall, dass eine perfekte Lösung entsteht. Wenn nicht, ist die Antwort deine :-). – EJSainz

+0

Obwohl die Antwort nicht perfekt ist, habe ich keinen Zweifel, dass es die beste Annäherung ist. Vielen Dank, @zaph :-). – EJSainz