Autor Beitrag
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: So 16.03.08 20:20 
Hallo,

Mein Programm ruft ein php skript auf meinem Sever mit idhttp auf. Die Post-Daten sollen aber verschlüsselt werden, da u.a. auch ein Passwort übertragen wird und um sicherzustellen, dass die Anfrage nicht ohne das Programm emuliert werden kann.

Wie verschlüssel ich das? In einem PHP-Forum hab ich was über HTTPS gelesen, aber funktioniert das überhaupt so ohne weiteres mit idhttp? Kann ihc nicht einfach eine "ganz normale" verschlüsselung benutzen? Also z.B. meine Daten in Delphi mit Blowfish oder was auch immer verschlüsseln, diese Daten dann ganz normal posten und vom PHP Skript entschlüsseln und verarbeiten lassen? Welche Verschlüsselung bietet sich da an, sprich ist in Delphi und PHP verwendbar?
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Mo 17.03.08 16:34 
Ja klar kannst du Daten verschlüsseln, mittels POST verschicken und dann im PHP-Script entschlüsseln!

Ich glaube so circa jeder bekannte Verschlüsselungsalgo (Beispiele: Blowfish, Twofisch, AES, DES, RSA, DH) ist in PHP und Delphi implementiert, jedoch stellt sich die Wahl des Algos und deren Zusätzen nach dem Einsatzgebiet deines Programmes!
Wie sensiebel sind die Daten?! Ist das Programm öffentlich oder privat?! Sollte der Schlüssel oft getauscht werden?! und und und ... es gibt viel worüber man sich Gedanken machen sollte, weil sonst bringt die beste Verschlüsselung nichts!
Karlson Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Mo 17.03.08 22:25 
Moin!

Eigentlich geht es darum wie sicher es ist (jajaja ich weiss, 100%ige Sicherheit gibt es nicht usw. ;) ).
Ich kenne mich mit Cracking und Hacking nicht sonderlich aus. Wie schnell knackt ein Skriptkiddie heutzutage eine Blowfish-verschlüsselung? Auf einer anderen Seite habe ich jetzt nämlich gelesen Zwei-Weg-Verschlüsselungen seien grundsätzlich sehr unsicher. Hashs seien das einzig wahre (was mir aber ja auch nichts bringt).

Das Programm ist nicht privat. Und es wäre fatal, wenn jemand entschlüsseln würde was an den Server übertragen wird und daraufhin ohne den Client das Skript auf dem Server aufrufen und benutzen kann.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 17.03.08 22:45 
Moin!

user profile iconKarlson hat folgendes geschrieben:
Eigentlich geht es darum wie sicher es ist
[...]
Das Programm ist nicht privat. Und es wäre fatal, wenn jemand entschlüsseln würde was an den Server übertragen wird
Besteht Grund zu Annahme, dass es Leute versuchen werden? Wenn ja, dann lass es lieber, zumindest bei diesem Wort würde ich dazu raten... :?

Da du die Daten ja wieder am Server entschlüsseln musst, wird zwangsweise das Verschlüsselungsgeheimnis in deinem Programm enthalten sein müssen. Damit ist der Angriffspunkt klar: deine Clientanwendung! :shock: Vermutlich wird sich niemand die Mühe machen, den Datenstrom zu analysieren, wenn man einfach(er) die Anwendung zerlegen kann. :idea:

Wenn du kein Experte im Absichern von Win32-Anwendungen bist, wird es ein leichtes sein, deinem Programm das Verschlüsselungsgeheimnis abzuringen (frag mal uall... :lol:), und selbst wenn du Experte bist, ist es immer noch möglich, weil das Programm ja schließlich auch damit umgehen muss. :nixweiss:

Das Problem der Authentizität eines Absenders lässt sich nur mit Compliance der Nutzer lösen (hier gibt´s ja genügend Alternativen an asymetrischen Verfahren, die gegen Angriffe von Dritten schützen :arrow: Homebanking, SecureMail, etc.pp.), wenn aber die Nutzer selbst schon als nicht vertrauenswürdig einzustufen sind, hast du verloren. :| :? :(

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
artelogic
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Di 18.03.08 04:40 
Warum nimmste nicht einfach HTTPS so wie es alle machen, die was verschlüsseltes im Web zu übertragen haben? Zu erprobt? ;)
Karlson Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Di 18.03.08 06:22 
Ich finde keinen Einstieg :p Daher wäre es halt toll wenn es so funktionieren könnte wie es mir im Vorfeld logisch erscheint.
Obwohl ich lange gegoogelt habe und in diversen Foren gesucht habe kann ich mich unter HTTPS noch garnichts vorstellen. Es gibt auch nicht wirklich Tutorials o.ä. in dem Bereich, zumindest findet man sie schwer wenn man nicht weiss wie man danach sucht.

Was ich aber, ohne wirklich Ahnung zu haben, befürchte ist dass sich durch https viel ändern wird wenn ihr versteht was ich mein ;)

Ich habe in meiner Clientanwendung einen IDHttp der mit meinem Script im Internet kommuniziert. Das jetzt dahingehend abzuändern dass die post-daten die idhttp an das php-skript sendet verschlüsselt und im script entschlüsselt werden ist kein Problem. Und soviel wie ich jetzt über HTTPS gelesen habe scheint das komplett anders zu gehen.

Aber ich merke schon, lieber viel Stress mit einer sauberen Lösung als schon beim Grundgerüst zu pfuschen.

Deswegen eine konkrete Frage und hoffentlich nicht zu konkret: Wie sende ich denn aus meiner Delphi-Anwendung eine verschlüsselte Anfrage an mein PHP Skript auf dem Server?

Zitat:

Besteht Grund zu Annahme, dass es Leute versuchen werden? Wenn ja, dann lass es lieber, zumindest bei diesem Wort würde ich dazu raten...

Da du die Daten ja wieder am Server entschlüsseln musst, wird zwangsweise das Verschlüsselungsgeheimnis in deinem Programm enthalten sein müssen. Damit ist der Angriffspunkt klar: deine Clientanwendung! Vermutlich wird sich niemand die Mühe machen, den Datenstrom zu analysieren, wenn man einfach(er) die Anwendung zerlegen kann.

Wenn du kein Experte im Absichern von Win32-Anwendungen bist, wird es ein leichtes sein, deinem Programm das Verschlüsselungsgeheimnis abzuringen (frag mal uall... ), und selbst wenn du Experte bist, ist es immer noch möglich, weil das Programm ja schließlich auch damit umgehen muss.

Das Problem der Authentizität eines Absenders lässt sich nur mit Compliance der Nutzer lösen (hier gibt´s ja genügend Alternativen an asymetrischen Verfahren, die gegen Angriffe von Dritten schützen Homebanking, SecureMail, etc.pp.), wenn aber die Nutzer selbst schon als nicht vertrauenswürdig einzustufen sind, hast du verloren.


Servus :)

Am besten lässt sich mein Vorhaben mit einer Online-Highscoreliste vergleichen (im Prinzip hat es ähnliche Eigenschaften nur eben das mein Client kein Spiel ist). Es besteht also eher weniger das Problem das für den Benutzer sensible Daten übertragen werden und dritte da mitlesen könnten.

Es soll aber halt verhindert werden dass der Benutzer herausfindet mit welchen Parametern er welches Skript aufrufen zu müssen um einen Highscore zu übermitteln der nicht erspielt wurde.



Lg.
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Di 18.03.08 11:00 
Es gibt mit Sicherheit einige Algorithmen, die ein solches Vorhaben realisieren lassen, doch solle das hier sehr schwer sein!

Das Problem ist nämlich nicht die Übertragung der Dateien, die würde bei der Verwendung von HTTPS nicht angegrifen werden, weil dort so gut wie keine Möglichkeit besteht an Daten heranzukommen, sondern bereits bei der Vorbereitung der zu sendenden Daten. Diese können bereits abgeändert werden, sodass von vorne herein falsche Daten gesendet werden, ohne dass der Angreifer eben iwelche Verschlüsselungen oder ähnlichem umgehen muss! Das ist das was user profile iconNarses bereits gesagt hatte:
user profile iconNarses hat folgendes geschrieben:
Das Problem der Authentizität eines Absenders lässt sich nur mit Compliance der Nutzer lösen (hier gibt´s ja genügend Alternativen an asymetrischen Verfahren, die gegen Angriffe von Dritten schützen :arrow: Homebanking, SecureMail, etc.pp.), wenn aber die Nutzer selbst schon als nicht vertrauenswürdig einzustufen sind, hast du verloren. :| :? :(


Verschlüsselung funktioniert nämlich nur dann, wenn Empfänger und Sender vertrauenswürdig sind!
artelogic
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Di 18.03.08 16:57 
user profile iconSirke hat folgendes geschrieben:

Verschlüsselung funktioniert nämlich nur dann, wenn Empfänger und Sender vertrauenswürdig sind!


So ist es! Also musst du dir jetzt erstmal darüber Gedanken machen... Und dann über die sichere Übertragung, die sich mit HTTPS, da es transparent ist, vergleichsweise simpel bewerkstelligen lässt.

Du bleibst bei IdHttp. Es werden nur ein paar Properties gesetzt. Wenn überhaupt, überleg ich grad. (ich hab nämlich mit dem Ding noch nix gemacht.) Vielleicht reicht auch einfach als Adresse "https://deinserver.de/deinirgendwas.php" aufzurufen.

Was aber mal sicher ist, der Server muss es können! Ist der selbstgebaut, TIdHttpServer?
Karlson Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Mi 19.03.08 02:42 
Moin!

Okay, was ihr sagt klingt zunächst mal wieder nicht sonderlich gut...Im Klartext: Eine Highscore-Funktion in einem Spiel kann immer beschissen werden.

Nur wie macht das denn Microsoft? Da gabs doch mal die Debatte darüber das MS irgendwelche Daten an ihre Server überträgt (als WinXP eingeführt wurde war das). Das könnte sich doch einfach mal jemand ansehen um was für Daten es sich handelt? Oder ist das längst geschehen?

Okay ich kann nur abwarten. Die Verbindung zu verschlüsseln sollte allerdings auf jedenfall der standard sein. Muss also rein. Wenn das System genutzt wird (wovon ich wie so häufig nicht ausgehe ;) ) muss ich nocheinmal darum kümmern, bzw. beobachten ob jemand etwas in der Richtung anbietet. Es ist nicht so dass die Benutzer mit den Daten irgendetwas anstellen könnten. Sie könnten das System nur bescheissen.

Momentan benutze ich zum Testen einen Funpic-Server. Ich hab gegoogelt, die scheinen kein HTTPS anzubieten. Im Endeinsatz würde es aber über meinen (Bezahl-)Webspace gehen. Ich hoffe dass ein Bezahlwebspace dies anbietet. Find da auf die Schnelle jetzt nichts zu auf derren Webseite. Aber ich mach nun erstmal wie geplant weiter und baue das HTTPS dann am Ende ein. Insofern habe ich noch Zeit das abzuklären.

lg.
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Mi 19.03.08 10:17 
user profile iconKarlson hat folgendes geschrieben:
Okay, was ihr sagt klingt zunächst mal wieder nicht sonderlich gut...Im Klartext: Eine Highscore-Funktion in einem Spiel kann immer beschissen werden.
Ja, das kann man so zusammenfassen ;-)

user profile iconKarlson hat folgendes geschrieben:
Nur wie macht das denn Microsoft? Da gabs doch mal die Debatte darüber das MS irgendwelche Daten an ihre Server überträgt (als WinXP eingeführt wurde war das). Das könnte sich doch einfach mal jemand ansehen um was für Daten es sich handelt? Oder ist das längst geschehen?
Die übertragen - so weit ich weiß - nicht auf HTTP-Protokolle, sondern bauen dirket eine Verbindung zu einem Server auf und übertragen Daten.

user profile iconKarlson hat folgendes geschrieben:
Okay ich kann nur abwarten. Die Verbindung zu verschlüsseln sollte allerdings auf jedenfall der standard sein. Muss also rein. Wenn das System genutzt wird (wovon ich wie so häufig nicht ausgehe ;) ) muss ich nocheinmal darum kümmern, bzw. beobachten ob jemand etwas in der Richtung anbietet. Es ist nicht so dass die Benutzer mit den Daten irgendetwas anstellen könnten. Sie könnten das System nur bescheissen.
Wenn die Daten lediglich falsch sein können, dann muss man nicht unbedingt per HTTPS übertragen, weil das nur dazu dient, das keiner der zwischen Sender und Empfänger sitzt mithören kann!

user profile iconKarlson hat folgendes geschrieben:
Momentan benutze ich zum Testen einen Funpic-Server. Ich hab gegoogelt, die scheinen kein HTTPS anzubieten. Im Endeinsatz würde es aber über meinen (Bezahl-)Webspace gehen. Ich hoffe dass ein Bezahlwebspace dies anbietet. Find da auf die Schnelle jetzt nichts zu auf derren Webseite. Aber ich mach nun erstmal wie geplant weiter und baue das HTTPS dann am Ende ein. Insofern habe ich noch Zeit das abzuklären.
Es gibt genug Server die HTTPS anbieten, leider immer erst be größeren Paketen, weshalb das ganze ziemlich teuer werden kann ...!

Aber hier jetzt mal eine Möglichkeit, mit der man eventuell doch komplett ohne HTTPS auskommt:
  1. Zu beginn sendet man per HTTP-Protokoll die Startzeit an den Server, indem man z.B. folgende Seite aufruft: http://url.de/score.php?action=start&value=xx:xx:xx:xx:xx:xx! Hierbei steht in value ein Hex-String mit (verschlüsseltem) Inhalt.
  2. Nach jeder Etappe oder nach einer bestimmten Zeit wird erneut eine Zeit und ein Wert übertragen. Dadurch weiß der Server wie lange er für eine bestimmte Etappe benötigt hat und welche Punktzahl bis dahin erarbeitet wurden. Wenn man pro Etappe nur eine gewisse Anzahl an Punkten erarbeiten kann, hat man bereits hier eine Möglichkeit die Korrektheit der Daten zu testen.
  3. Der zweite Schritt wiederholt sich für jede Etappe oder Zeitintervall!
  4. Am Ende wird wiederum eine Endzeit, die Etappe und ein Wert übertragen. Der Server weiß jetzt, dass der maximale Wert hier nur etappe * max_etappte_wert sein kann.
Dies ist eine sehr aufwendige Methode und nach jeder Etappe wird eine Übertragung getätigt. Die Antwort die man vom Server bekommt, kann man dann auswerten! Hier benötigt man nicht einmal eine externe Komponente, weil man nicht unbedingt POST benötigt und man auch über GET die Daten übertragen kann!
Wer eine solches "Protokoll" umgehen kann, hat es auch verdient oben in der Highscore zu stehen! :P

Weiß eben nur nicht, ob das für dich hinkommt, leider machst du zu deinem Projekt immer nur Andeutungen, sodass man da nicht genau weiß, wie man dir helfen kann ;-) Hoffe aber es hilft ... =)

LG Sirke
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mi 19.03.08 10:40 
Für mein Spiel Heiliger Damm, habe ich ein PHP-Script geschrieben um "Cheating" beim Highscore aufzudecken. Dieses Script arbeitet mit mehreren Methoden:

1. Es werden das Level, die Punkte, Anzahl gezogener Zäune, etc. an das Script geschickt
2. Es wird ein weiterer Wert an das Script geschickt, ganz einfach "verschlüsselt" mit einer einfachen mathematischen Funktion.
3. Das Script überprüft nun:
- Passen die Punkte zum Level? 10.000 Punkte in Level 1 -> Cheat
- Passen die gezogenenen Zäune zu den Punkten? 10.000 Punkte bei 10 gezogenen Zäunen -> Cheat
- Passt die "entschlüsselte" Variable zum Originalwert? Ansonsten -> Cheat

Alle als Cheat erkannten Einträge, werden erstmal gesondert behandelt. Ich als Admin kann diese dann freigeben oder löschen lassen.

Damit der Highscore-Eintrag gefakt werden kann, müsste der Troll wissen, wie viele Punkte man in welchem Level machen kann und wie viele Zäune man ziehen muss und das steht eben nur im PHP-Script (oder er braucht einige Zeit um das ganze zu rekonstruieren). Außerdem muss er wissen, was es mit dieser mathematischen Formel* auf sich hat (und dazu müsste er erst das Programm zerlegen).

Fazit: Auch diese Highscores sind austricksbar, aber um einiges schwerer, denn den Trolls geht es ja darum, möglichst viele Punkte einzutragen (einer hat es schon unter dem Namen "Chuck Norris" probiert :mrgreen:) und dafür brauchen sie viele verschiedene Informationen, an die sie nicht so leicht rankommen.

Dein Fall mag zwar komplett anders sein, aber vielleicht hilft findest du durch meine Erklärung die ein oder andere Möglichkeit deine Daten zu schützen.


*Falscher Begriff, das ist keine Formel, das ist en Witz, aber trotzdem effektiv :-P

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)