PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Betrugssicheres Tippspiel ?!



Procyon
27.06.2004, 12:18
Tach erstmal

wir tippen gerade in unserer Stufe die EM-Spiele. Organisiert hab' ich das über unsere Stufenhomepage mit einem Bereich für das Tippspiel, in dem jeder nach Anmeldung die ganzen Spiele tippen kann ...

Das Problem ist jetzt nur: Es gibt in unserer Stufe mindestens 5 Leute, die kompletten Zugriff auf die MySQL-Datenbank haben und somit *theoretisch* ohne weiteres Tipps ändern könnten bzw. anderweitig betrügen könnten ... Ich vertraue denen zwar allen, dass sie es nicht tun, mir geht's um das Prinzip eines betrugssicheren Tippspiels.

Als allererstes müsste ja die Kontrolle über die Tipps weg von den Administratoren und hin zu dem einzelnen Tipper. Da man dem Admin aber schlecht den Zugriff auf die Datenbank entziehen kann, hab' ich mir gedacht, man verschlüsselt die Tipps mit dem Passwort des Benutzers. Das kennt der Admin nicht, da zum einloggen ja nur ein Hash-Wert in der Datenbank abgelegt wird. Also kann der Admin den Tipp nicht unbemerkt ändern. Löschen könnte er ihn allerdings, solange man keinen verschlüsselten Index aller abgegebenen Tipps hat. Dieser Index müsste natürlich immer da sein und im Zweifelsfall eine leere Liste der abgegebenen Tipps für einen bestimmten Benutzer haben.

Diese Verschlüsselung bringt nur 2 Probleme:

Man kann die Punkte nicht mehr unabhängig von den Benutzern berechnen, da man nicht mehr an die Tipps drankommt.
Wenn der Benutzer sein Passwort vergessen hat, sind auch alle seine Tipps futsch (Passwort ändern geht, man muss dann nur alle Tipps ent- und mit dem neuen Passwort verschlüsseln).


Als Lösung dazu hab' ich mir gedacht, man macht zwei Tabellen für die abgegebenen Tipps:

eine Tabelle mit den unverschlüsselten Tipps. Diese wird zum Einen benutzt um die Punkte unabhängig von den Benutzern (die ja die Passwörter haben) zu berechnen und zum Andern um bei einem vergessenen Passwort die Tipps wiederherzustellen.
eine Tabelle mit den verschlüsselten Tipps der Benutzer. Mit dieser Tabelle kann der Benutzer schwindel nachweisen.


Trotzdem kann der Admin betrügen:


Der Admin kann zwar die Einträge in der unverschlüsselten Tabelle ändern und damit auch die Gesamtpunktzahl, aber der Benutzer kann das nachweisen indem er die verschlüsselten Tipps entschlüsselt und sie mit denen in der unverschlüsselten Tabelle vergleicht.
Außerdem kann der Admin beim Vergessen eines Passwortes "nachhelfen", indem er den gespeicherten Passworthash verändert. Dann sieht das so aus als ob der Benutzer sein Passwort vergessen hat. Dann muss der Benutzer die (inzwischen durch den Admin manipulierten) Tipps aus der unverschlüsselten Tabelle übernehmen und bemerkt eventuelle Änderungen nicht, weil er sich nicht mehr an alle Tipps erinnern kann.


Aber ein Problem bleibt: Eine betrugssichere Kontrolle, wann die Tipps abgegeben wurden ... dazu ist mir bis jetzt noch nichts eingefallen ...

PS: Die Implementierung von dem ganzen Zeug muss natürlich vertrauenswürdig sein (offen), sonst könnte ja der Admin die zum Einloggen oder bei der Registrierung eingegebenen Passwörter einfach wo anders abspeichern und sie dann zum Betrügen verwenden ...

Was sagt ihr zu diesem Konzept? ;)

i_hasser
27.06.2004, 22:15
Habs mir jetzt nicht ganz genau durchgelesen, aber hier mal ein paar Anregungen:

Denk dir irgendein Passwort aus, oder irgend einen Wert eben.
Damit verschlüsselst du die Eintragungen im Skript (schätze das kann der Admin nicht einsehen, oder?).
Sichere alles mit Hash Werten gegen Veränderungen.

Procyon
27.06.2004, 22:44
Tach erstmal


Original geschrieben von intel_hasser
Denk dir irgendein Passwort aus, oder irgend einen Wert eben.
Damit verschlüsselst du die Eintragungen im Skript (schätze das kann der Admin nicht einsehen, oder?).
Sichere alles mit Hash Werten gegen Veränderungen.

Mit "im Script" meinst du im PHP-Skript, oder?

Naja ein Admin hat in der Regel auch FTP-Zugang, insofern kommt der natürlich auch an dieses fest eingebaute Passwort dran ... :(

Und Hashwerte kann man neu berechnen :(