Sicher Verbindung
-
- Beiträge: 275
- Registriert: 27.08.2009 14:14
- Computerausstattung: Intel Quad Core 2.5 GHz; 8GB DDR2 RAM; NVIDIA GeForce GT 130 mit 1500 MB; 2TB HDD;
- Kontaktdaten:
Sicher Verbindung
Hallo,
ich benötige eine sicher Verbindung zwischen meinen PureBasic Programm und einer einfachen Website (.de Domain, 1GB Webspace, PHP5, MySQL...).
Ich habe schon mal was von SSL gehört (auch etwas eingelesen jedoch nicht wirklich verstanden...)
Bei meinem letzen Projekt habe ich immer MD5 Checksummen von bestimmten Sachen als Sicherheit gesendet... Jedoch war dies sehr instabil und leicht zu knacken...
Wie kriege ich also eine sicherere Verbindung zustande wo man nicht einfach den Traffic loggen kann und dann alles weiß?
Hoffen ihr helft mir nochmal
Euer netzcoder (php-freak)
ich benötige eine sicher Verbindung zwischen meinen PureBasic Programm und einer einfachen Website (.de Domain, 1GB Webspace, PHP5, MySQL...).
Ich habe schon mal was von SSL gehört (auch etwas eingelesen jedoch nicht wirklich verstanden...)
Bei meinem letzen Projekt habe ich immer MD5 Checksummen von bestimmten Sachen als Sicherheit gesendet... Jedoch war dies sehr instabil und leicht zu knacken...
Wie kriege ich also eine sicherere Verbindung zustande wo man nicht einfach den Traffic loggen kann und dann alles weiß?
Hoffen ihr helft mir nochmal
Euer netzcoder (php-freak)
Zuletzt geändert von netzcoder am 04.06.2010 15:04, insgesamt 1-mal geändert.
PB 4.40 Final Full Version
Re: SSL oder andere sicher Verbindung
Z.B. mit XOr-Verschlüsselung. Du benutzt einfach einen relativ langen Schlüssel und speicherst den in deinem PHP-Script und in deinem PB-Programm. Dann verschlüsselst du die zu sendenden Daten und entschlüsselst sie wieder auf dem Server und umgekehrt.
SSL geht eh nur, wenn der Server das unterstützt.
SSL geht eh nur, wenn der Server das unterstützt.
-
- Beiträge: 275
- Registriert: 27.08.2009 14:14
- Computerausstattung: Intel Quad Core 2.5 GHz; 8GB DDR2 RAM; NVIDIA GeForce GT 130 mit 1500 MB; 2TB HDD;
- Kontaktdaten:
Re: SSL oder andere sicher Verbindung
Okay das ist sicherlich eine Möglichkeit. Danke schon mal. Wenn jemand noch eine hat dann lasst es mich wissen.
PB 4.40 Final Full Version
-
- Beiträge: 275
- Registriert: 27.08.2009 14:14
- Computerausstattung: Intel Quad Core 2.5 GHz; 8GB DDR2 RAM; NVIDIA GeForce GT 130 mit 1500 MB; 2TB HDD;
- Kontaktdaten:
Re: SSL oder andere sicher Verbindung
Vielen Dank. Hab auch mal auf PureArea.net im Codearchiv geschaut und auch was sehr brauchbares gefunden. Bei Google habe ich einige Tipps für eine XOR-Verschlüsslung gefunden und einer war: "Der KEY muss die gleiche länge wie der Plaintext haben"...
Stimmt das? Eigentlich ja schon denn weniger ist ja schlecht weil es sich dann ja wiederholt und länger bringt ja nicht wirklich was. Könnt ihr mir noch ein paar Tipps geben wie man es anstellt das man die größtmögliche Sicherheit hat?
Euer netzcoder
Stimmt das? Eigentlich ja schon denn weniger ist ja schlecht weil es sich dann ja wiederholt und länger bringt ja nicht wirklich was. Könnt ihr mir noch ein paar Tipps geben wie man es anstellt das man die größtmögliche Sicherheit hat?
Euer netzcoder
PB 4.40 Final Full Version
Re: SSL oder andere sicher Verbindung
Er muss nicht, sollte aber im Idealfall. Außerdem sollte er zufällig erzeugt worden sein. Ein Key der "ABCDE..." lautet ist weniger sinnvoll.
Für nicht-Klartext kann der Key auch kürzer sein, denn wenn du ein Passwort überträgst, dass so lautet "hF7.Ax-Re", kann man mit Bruteforce lange rumtun und muss jede Möglichkeit am Server testen, was immens Zeit kostet.
Wenn das Passwort Bello heißt, braucht sich der Hacker nur den Output vom Bruteforce Programm anschauen und kommt dann auf den Trichter dass Bello sehr viel wahrscheinlicher ist als "g.Hi9" und "l)a.g" und andere kryptische Kombinationen.
Ein möglichst langer Key ist natürlichsinnvoll, wenn du nicht weiß, wie lange die Daten sein können.
Du könntest auch ein One-Time-Pad erstellen.
Also einen seeeehr langen Key.
Nur fängst du nicht immer am Anfang an, sondern zufällig irgendwo.
Dann sendest du einfach das Offset vorne weg.
Anstatt Debug XOrEncode("bla", "key")
Dann folgendes:
Für nicht-Klartext kann der Key auch kürzer sein, denn wenn du ein Passwort überträgst, dass so lautet "hF7.Ax-Re", kann man mit Bruteforce lange rumtun und muss jede Möglichkeit am Server testen, was immens Zeit kostet.
Wenn das Passwort Bello heißt, braucht sich der Hacker nur den Output vom Bruteforce Programm anschauen und kommt dann auf den Trichter dass Bello sehr viel wahrscheinlicher ist als "g.Hi9" und "l)a.g" und andere kryptische Kombinationen.
Ein möglichst langer Key ist natürlichsinnvoll, wenn du nicht weiß, wie lange die Daten sein können.
Du könntest auch ein One-Time-Pad erstellen.
Also einen seeeehr langen Key.
Nur fängst du nicht immer am Anfang an, sondern zufällig irgendwo.
Dann sendest du einfach das Offset vorne weg.
Anstatt Debug XOrEncode("bla", "key")
Dann folgendes:
Code: Alles auswählen
text.s = "bla"
onetimepad.s="e6M7asdjng1pmgfngmgf"
randomOffset.i = Random( Len( onetimepad ) )
key.s = Mid(onetimepad, randomOffset +1, Len(text))
Debug RSet(Str( randomOffset ), 5, "0") + XOrEncode(text)
-
- Beiträge: 275
- Registriert: 27.08.2009 14:14
- Computerausstattung: Intel Quad Core 2.5 GHz; 8GB DDR2 RAM; NVIDIA GeForce GT 130 mit 1500 MB; 2TB HDD;
- Kontaktdaten:
Re: SSL oder andere sicher Verbindung
So nun habe ich mich mal drangesetzt und auch was hinbekomen:
PHP:
Und mein PB Code sieht so aus:
Ich bekommen aber leider nur die ersten beiden Zeichen entschlüsselt zurück also hier würde ich anstatt Hallo nur Ha rauskriegen... Jemand ne Idee woran das liegt?
Vielen Dank für eure Hilfe
Euer netzcoder
PHP:
Code: Alles auswählen
<?php
function xOrcrypt($text, $key)
{
if(strlen($key) == 0)
return "Fehler"; //$text; // Ohne Key keine Verschlüsselung
$result = "";
for($i=0;$i<strlen($text);$i++)
{
$result = $result.chr(ord($text[$i]) ^ ord($key[$i % strlen($key)]));
}
return $result;
}
// $incode = "*4";
$incode = $_GET['xfg'];
$passwort = "HUlwZaL9EvIPE824MLJI95XGb71q6CHk3IVcM2ImrKWMGUC5qziNZtAAUprNO4FaaZiM0SNo0U1nuAVTeMttqRU8I4E36AAYOGgsc23MRMutsFtDIamP5YirgEhAggcZerqtlIV5sfGGN0BmZrabloA0VVI42d5aT9Xky1KWmHbNzDxoY8PE21qYb3unjyIK3ahp8iWT";
$code = xOrcrypt($incode, $passwort); //ver oder entschlüsseln
echo $code;
/*
echo '<p><b>Klartext:</b> '.$incode.'</p>';
echo '<p><b>Schlüssel:</b> '.$passwort.'</p>';
echo '<p><b>Entschlüsselt:</b> '.$encoded.'</p>';
*/
?>
Code: Alles auswählen
EnableExplicit
InitNetwork()
Procedure.s DownloadToString(URL$, TimeOut=5000)
Protected Event, Time, Size, String$
Protected BufferSize = $1000
Protected *Buffer = AllocateMemory(BufferSize)
Protected ServerName$ = GetURLPart(URL$, #PB_URL_Site)
Protected ConnectionID = OpenNetworkConnection(ServerName$, 80)
Protected Inhalt.i
If ConnectionID
SendNetworkString(ConnectionID, "GET "+URL$+" HTTP/1.0"+#LFCR$+#LFCR$)
Time = ElapsedMilliseconds()
Repeat
Delay(10)
Event = NetworkClientEvent(ConnectionID)
Until Event Or ElapsedMilliseconds()-Time > TimeOut
If Event
Repeat
Size = ReceiveNetworkData(ConnectionID, *Buffer, BufferSize)
String$ + PeekS(*Buffer, Size, #PB_Ascii)
Until Not Size
Inhalt = FindString(String$, #LFCR$, 1)
If Inhalt
ProcedureReturn Mid(String$,Inhalt+3)
Else
ProcedureReturn String$
EndIf
EndIf
EndIf
EndProcedure
Procedure.s XOREncode(text.s, key.s)
Protected result.s, textLen.l
textLen = Len(text)
If textLen
result = text
Protected keyLen.l
keyLen = Len(key)
If keyLen
Protected i.l
For i = 0 To (textLen - 1)
; using modulo to determine which letter from key to use
PokeB(@result + i, PeekB(@result + i) ! (PeekB(@key + (i % keyLen))))
Next i
EndIf
EndIf
ProcedureReturn result
EndProcedure
Define keygen.s, url.s, str.s
keygen = "HUlwZaL9EvIPE824MLJI95XGb71q6CHk3IVcM2ImrKWMGUC5qziNZtAAUprNO4FaaZiM0SNo0U1nuAVTeMttqRU8I4E36AAYOGgsc23MRMutsFtDIamP5YirgEhAggcZerqtlIV5sfGGN0BmZrabloA0VVI42d5aT9Xky1KWmHbNzDxoY8PE21qYb3unjyIK3ahp8iWT"
url = "http://www.****.de/network/"
str = "Hallo"
Debug XOREncode(str,Mid(keygen,1,Len(str)))
Debug DownloadToString(url+"test.php?xfg="+XOREncode(str,Mid(keygen,1,Len(str))))
Vielen Dank für eure Hilfe
Euer netzcoder
PB 4.40 Final Full Version
-
- Beiträge: 275
- Registriert: 27.08.2009 14:14
- Computerausstattung: Intel Quad Core 2.5 GHz; 8GB DDR2 RAM; NVIDIA GeForce GT 130 mit 1500 MB; 2TB HDD;
- Kontaktdaten:
Sicher Verbindung
Hat keiner eine Idee oder ein Codebeispiel? Ich kann den Fehler einfach nicht finden...
EDIT: So ich habe es nun hingekriegt indem ich das mit xOr verschlüsselte nochmal mit Base64 verschlüsselt habe und dies dann an den Server senden.
EDIT: So ich habe es nun hingekriegt indem ich das mit xOr verschlüsselte nochmal mit Base64 verschlüsselt habe und dies dann an den Server senden.
PB 4.40 Final Full Version
- Blackskyliner
- Beiträge: 532
- Registriert: 28.07.2005 00:54
- Wohnort: /home/Blackskyliner/
Re: Sicher Verbindung
Okay... Also debugge ich dein Programm, lese den Key aus und kann die Daten dann wieder abfangen, entschlüsseln und fertig ist der Salat...
Wirklich sicher ist das nicht...
Das Programm sollte entsprechend gesichert sein, am besten mit einem eigenen Packer wo der Algorithmus weitestgehend unbekannt ist etc. damit man den Schlüssel, der ja im Klartext im Programm steht nicht so schnell knacken kann. Oder aber einen Algorithmus der das zur Laufzeit irgendwie entschlüsselt, wobei letzteres auch nur eine Frage der Zeit ist bis man diese dann irgendwann durchs debug-stepping herausgefunden hat...
Möglich währe doch eine Art Serverside-SingleKey Request oder so, wo man den KeyRohling vom Server holt, der einmal gültig ist, sich daraus anhand eines Algo. den richtigen Key erstellt, mit dem man dann wiederum die Nachricht verschlüsselt, welche dann (am besten via private/public key verfahren o.ä.) auf dem Server wieder entschlüsselt werden kann. Dabei wird der Public/Private Key part entsprechend der Entropischen Daten erstellt, die vorher zwischen beiden ausgehandelt wurden...
Natürlich alles sehr theoretisch, Beispiel hab ich auch keins, aber auf jeden Fall wäre das sicherer als des andere. Wobei man dann nur den Algorithmus wiederum isolieren müsste um dann den Key direkt abfangen zu können, den eigenen schlüssel via Algo. erstellen zu können um dann die Daten die getauscht werden entschlüsseln zu können. Das bessere an dieser Methode allerdings wäre, das man dies dann je nachricht machen müsste, wodurch der Aufwand entsprechend größer ist, was einige Leute abschrecken dürfte.
Nur um einen Beitrag zu einem Sicherheitsrelevanten Thema gemacht zu haben
Für Leute die mit einem Debugger nicht umgehen können, reicht die XOR Varaiante auch aus um sie davon abzuhalten mitzulesen.
MFG
Blackskyliner
Wirklich sicher ist das nicht...
Das Programm sollte entsprechend gesichert sein, am besten mit einem eigenen Packer wo der Algorithmus weitestgehend unbekannt ist etc. damit man den Schlüssel, der ja im Klartext im Programm steht nicht so schnell knacken kann. Oder aber einen Algorithmus der das zur Laufzeit irgendwie entschlüsselt, wobei letzteres auch nur eine Frage der Zeit ist bis man diese dann irgendwann durchs debug-stepping herausgefunden hat...
Möglich währe doch eine Art Serverside-SingleKey Request oder so, wo man den KeyRohling vom Server holt, der einmal gültig ist, sich daraus anhand eines Algo. den richtigen Key erstellt, mit dem man dann wiederum die Nachricht verschlüsselt, welche dann (am besten via private/public key verfahren o.ä.) auf dem Server wieder entschlüsselt werden kann. Dabei wird der Public/Private Key part entsprechend der Entropischen Daten erstellt, die vorher zwischen beiden ausgehandelt wurden...
Natürlich alles sehr theoretisch, Beispiel hab ich auch keins, aber auf jeden Fall wäre das sicherer als des andere. Wobei man dann nur den Algorithmus wiederum isolieren müsste um dann den Key direkt abfangen zu können, den eigenen schlüssel via Algo. erstellen zu können um dann die Daten die getauscht werden entschlüsseln zu können. Das bessere an dieser Methode allerdings wäre, das man dies dann je nachricht machen müsste, wodurch der Aufwand entsprechend größer ist, was einige Leute abschrecken dürfte.

Nur um einen Beitrag zu einem Sicherheitsrelevanten Thema gemacht zu haben

Für Leute die mit einem Debugger nicht umgehen können, reicht die XOR Varaiante auch aus um sie davon abzuhalten mitzulesen.
MFG
Blackskyliner
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
-
- Beiträge: 275
- Registriert: 27.08.2009 14:14
- Computerausstattung: Intel Quad Core 2.5 GHz; 8GB DDR2 RAM; NVIDIA GeForce GT 130 mit 1500 MB; 2TB HDD;
- Kontaktdaten:
Re: Sicher Verbindung
Danke für deinen Beitrag. Ja ich denke auch das sicherste ist das nicht. Meiner Meinung nach wäre SSL eine gute alternative. Leider gibt es hier und auch im Englischen Forum nichts zu SSL. Im CodeArchiv habe ich ein Beispiel gefunden welches jedoch nicht ganz auf mein Problem zutrifft.
PB 4.40 Final Full Version