PHP/c++, Verschlüsselung

Hallo @all! :)

Vorgeschichte: Ich schreibe ein PHP Script, er [mein Partner] schreib ein C++
Programm. Diese beiden müssen miteinander Kommunizieren.

Aktueller Stand: Damit die (GET/POST) - Übertragungen, nicht ausgelesen
(bzw. verstanden) werden, "verschlüsseln" wir. Der Verschlüsselung-Algorithmus hat er geschrieben, so weit ich weiß, basiert er
auf XOR-Verschlüsselung.

Frage: Ist XOR-Verschlüsselung "sicher"? Ich habe irgendwie im Hintergrund, dass "man Verschlüsselungen nicht selber schreiben sollte" - aber er meinte, die Verschlüsselung "wäre von ihm"...
Wie kann ich überhaupt mit PHP/C++ (ich brauche etwas, was mit beidem funktioniert) verschlüsseln? (ich will keinen Hash, ich muss auch entschlüsseln! ;) )

mfg
d0ne
 
Also ich würde fast sagen einen XOR Verschlüsselung ist völlig unsicher, denn sie hat im Grunde das selbe Prinzip wie eine Virgenere-Verschlüsselung. Auch die Attacken sind im Grunde die gleichen. In C++ und PHP kann man entweder eine Verschlüsselung selber schreiben wie es dein Freund getan hat, aber ich würde euch empfehlen einfach die vorhandenen Bibliotheken zu verwenden. Von C++ weiß ich z.B. dass es haufenweise AES-Implementierungen gibt und für PHP sicher auch.

Ihr könnt aber auch eine XOR Verschlüsselung mit Schlüssellänge = Textlänge nehmen, dann seid ihr 100% sicher, wobei hier die Schlüsselübertragung schwer wird.

Sonst google einfach mal, zudem Thema gibt es tonnenweise gutes Material.

Wenn du dich mal mit der unsicherheit von XOR und Virgene beschäfftigen willst: http://de.wikipedia.org/wiki/Kasiski-Test http://de.wikipedia.org/wiki/Friedman-Test_(Kryptologie)
 
Zuletzt bearbeitet:
Die MCrypt-Library gibt es AFAIK sowohl für PHP als auch für C(++). Damit habt ihr so gut wie alle "echten" Verschlüsslungen dabei (Rijindael=AES, Serpent, Twofish und viele weitere).
 
Also ich würde fast sagen einen XOR Verschlüsselung ist völlig unsicher
Toll! -.-

wobei hier die Schlüsselübertragung schwer wird

Mh, das wird eh noch schwierig, weil das Programm soll später beim Kunden laufen, und da muss der Schlüssel ja auch irgendwie hin ...
Gibt es hier ein paar Stichworte, nach denen ich mich mal erkundigen sollte!?


Sonst google einfach mal, zudem Thema gibt es tonnenweise gutes Material.
Ja, aber leider auch einige veraltet, falsche und verwirrende Beiträge - deshalb finde ich es ab und zu schon schön, einfach mal zu fragen und Leute die es wissen antworten! ;) (glaub mir, ich google schon viel ;P )


Damit habt ihr so gut wie alle "echten" Verschlüsslungen dabei
Mh, und welche nehmen wir, bzw. wie entscheidet man das?


mfg
d0ne
 
Mh, das wird eh noch schwierig, weil das Programm soll später beim Kunden laufen, und da muss der Schlüssel ja auch irgendwie hin ...
Gibt es hier ein paar Stichworte, nach denen ich mich mal erkundigen sollte!?
Asymetrische Kryptographie. Ich hab unten mal einen Link zu einem asymetrischen Kryptosystem angefügt
Mh, und welche nehmen wir, bzw. wie entscheidet man das?

Auf Wikipedia oder sonstwo deren Beschreibung/Geschichte/Auszeichnungen/Schwächen durchlesen und entscheiden, wem du am meisten vertraust.
Beispiele:
Symmetrisch:
Rijndael == AES -> offizieller Standard vom US-„National Institute of Standards and Technology“, in den USA für staatliche Dokumente mit höchster Geheimhaltungsstufe zugelassen.
Asymetrisch
RSA -> wird z.B. in OpenPGP/GnuPG verwendet, nur zu empfehlen, gibt auch gute PHP-Implementationen auf phpclasses.org. C++-Implementationen musste einfach suchen.
 
http://www.staff.uni-mainz.de/pommeren/Kryptologie/Bitblock/6_AES/Auswahl.html

Guck dir mal die Kandidaten der 2. Runde für AES an die sind dort mit Vor- und Nachteilen angegeben. Die Algorithmen wurden seiner Zeit auf Herz und Nieren geprüft.

Das Problem an RSA ist das es relativ langsam ist. Deswegen musst du dir überlegen ob du nicht die Möglichkeit einen sicheren Kanal für das Passwort zu finden. Dh. und gibst es z.B. per Hand auf dem Server und Client einmalig ein, aber man sollte das Passwort doch hin und wieder ändern. Ist das der Fall und du nicht Ressourcenüberschuss hast würde ich dann Hybridverfahren verwenden.( http://www.tcp-ip-info.de/security/verschluesselung.htm ) Da wird der Schlüssel asymmetrisch übertragen und die Daten symmetrisch( und damit schneller). Dabei hast du bei jeder Sitzung ein neues Schlüssel.

Edit:
Ich lese gerade das Buch IT-Sicherheit von C. Eckert zu dem Thema guck mal ob einen nahe liegende Bibliothek so was hast. Gerade wenn man kommerziell arbeitet, sollte man sich ein wenig mit dem Thema Datensicherheit beschäftigt haben.
 
Zuletzt bearbeitet:
So ...

ich habe mir mal die Links (und Sublinks ^^) durchgelesen, und denke dass ein symmetrische Verfahren wegen dem Problem mit dem Schlüssel Transport ausfällt, ein asymmetrisches Verfahren würde denke ich gut passen, aber das soll ja deutlich langsamer sein. Ein Hybrides Verfahren wäre (vll.) die Lösung, aber ich habe irgendwie keins gefunden. Bei symmetrisch gibt es AES, DES, Blowfish etc; beim asymmetrischen RSA, Rabin, Elgamal etc; aber beim Hybriden!? Sehe ich den Wald, vor lauter Bäumen nicht!?

Ich lese gerade das Buch IT-Sicherheit von C. Eckert zu dem Thema guck mal [..]
Oh, ich habe noch so viele Bücher hier herum stehen, die ich endlich lesen will - aber es kommt "auf meine Liste" ^^

Naja, vll. sollte ich mal den Chef fragen, ob er überhaupt eine "gute Verschlüsselung" haben will, oder nur eine "zur Deko" - nicht das ich mir viel zu viel Gedanken mach. (gebe ich dem Chef, was er will, oder was er braucht!?)

mfg
d0ne

EDIT: Https wäre doch vll. auch 'ne Lösungen, oder!? Hat jemand Erfarhung damit, wie kompliziert es ist, Https einzusetzen?
 
Bei symmetrisch gibt es AES, DES, Blowfish etc; beim asymmetrischen RSA, Rabin, Elgamal etc; aber beim Hybriden!? Sehe ich den Wald, vor lauter Bäumen nicht!?
Da gibt es keine "Verfahren". Hybrid bedeutet: Du tauschst per langsamer, aber sicherer asymetrisch verschlüsselter Verbindung einen zufällig generierten Schlüssel aus, mit dem du dann den Rest der Daten symetrisch verschlüsselst ;-)

EDIT: Https wäre doch vll. auch 'ne Lösungen, oder!? Hat jemand Erfarhung damit, wie kompliziert es ist, Https einzusetzen?
Auf PHP-Seite: Keine Änderungen notwendig
Auf Webserver-Seite: Muss angeschaltet werden, geringerer Aufwand, wenn man sich auf self-signed Zertifikate beschränkt
Auf C++-Seite: Keine Ahnung.
 
So...

Auf PHP-Seite: Keine Änderungen notwendig
Auf Webserver-Seite: Muss angeschaltet werden, geringerer Aufwand, wenn man sich auf self-signed Zertifikate beschränkt
Auf C++-Seite: Keine Ahnung.
Das sieht doch gut für mich aus, dann werde ich Https vorschlagen und ich "bin dann fein raus". ;P
Wir hatten bis jetzt noch kein Https benutzt, weil es ihm [meinem Partner] im Moment zu schwer Https zu implementieren - und da ich keine Ahnung von C++ habe, weiß ich auch nicht, ob es wirklich schwer ist, aber da muss er sich drum kümmern! -.-

thx für die Hilfe & mfg
d0ne
 
Zurück
Oben