Verschlüsselung ?!

Hallo Ihrs,

wir haben einen Webshop auf MySQL-/PHP-Basis programmiert, der auch ganz gut läuft (ist ein Studienprojekt). Nun sollen die Angaben, der der User über sich bei der Registrierung macht (bspw. die Kontoangaben), „sicher“ gemacht werden, also irgendwie nach einem Verschlüsselungsalgorithmus verschlüsselt werden.

Ich weiss nun gerade leider überhaupt nicht, in welcher Richtung ich da suchen muss… Ich habe zwar mal was von SSL gehört, aber weiss da nix genaues drüber. Auch sollte eine solche Verschlüsselung ja mit PHP zusammenarbeiten…

Welche Verschlüsselungsmöglichkeiten gibt es denn überhaupt und wo finde ich dazu mehr Infos?!

Grüsse
schuelsche,
die nicht mal weiss, nach was sie bei Google suchen muss…

Ich habe zwar mal was von SSL
gehört, aber weiss da nix genaues drüber.

das haette auch nix mit php zu tun.

Auch sollte eine
solche Verschlüsselung ja mit PHP zusammenarbeiten…

Welche Verschlüsselungsmöglichkeiten gibt es denn überhaupt
und wo finde ich dazu mehr Infos?!

die frage ist: welche daten, sollen wogegen geschuetzt und von wem ver- und von wem ent-schluesselt werden?

google sagt:
"Damit der Webserver auch abhörsichere Kommunikation mit den Clients betreiben kann, sollte er SSL sprechen können. Dies bringt man ihm am besten mit dem mod_ssl bei. Das mod_ssl setzt wiederum openssl voraus. Openssl liefert, soweit ich das verstehe, die Verschlüsselungsfunktionalität, mod_ssl integriert die Funktionalität in den Webserver.

OpenSSL - in der aktuellen Version 0.9.6g

Homepage: http://www.openssl.org
Datei: http://www.openssl.org/source/openssl-0.9.6g.tar.gz

mod_ssl - man muß darauf achten, daß die Datei zum jeweiligen Apache passt.

Homepage: http://www.modssl.org
Datei: http://www.modssl.org/source/mod_ssl-2.8.10-1.3.26.t…"

davon abgesehen hat SSL nichts weiter mit PHP zu tun.
Der Secure Socket Layer ist eine verschlüsselungsart zwischen Server und Client. Was genau dann darauf aufsetzt ist nicht weiter relevant, sprich ob da textdokumente übermittelt werden oder Datenbankinhalte.
Vor allem sollte Dir aber im klaren sein, dass Daten nur so sicher sind wie derjenige der sie sichert das auch zulässt. Wenn Grundlegende Kenntnisse über verschlüsselungsalgorythmen fehlen, dann fehlt auch die realistische Absicherung gegen „abhören“ der Daten. Stichworte wie md5 oder htaccess sollten zumindest ein begriff sein wenn es um die Daten dritter geht.

Hallo Ihrs,

wir haben einen Webshop auf MySQL-/PHP-Basis programmiert, der
auch ganz gut läuft (ist ein Studienprojekt). Nun sollen die
Angaben, der der User über sich bei der Registrierung macht
(bspw. die Kontoangaben), „sicher“ gemacht werden, also
irgendwie nach einem Verschlüsselungsalgorithmus verschlüsselt
werden.

Ich weiss nun gerade leider überhaupt nicht, in welcher
Richtung ich da suchen muss… Ich habe zwar mal was von SSL
gehört, aber weiss da nix genaues drüber. Auch sollte eine
solche Verschlüsselung ja mit PHP zusammenarbeiten…

Was willst du verschlüsseln ? Die Daten auf dem Übertragungsweg ?
Dann verwende SSL. SSL ist ein Übertragungsprotokoll „unterhalb“ von HTTP im OSI-Modell, d.h. für PHP ist das Ganze transparent und ohne Änderung der Scripte einsetzbar. Allerdings kannst du im Script per $_SERVER ein paar Variablen abfragen, z.B. mit welcher Verschlüsselungstärke gerade gearbeitet wird.
SSL wird als apache-Modul mod_ssl eingerichtet, http://www.modssl.org. Du brauchst dazu openssl, http://www.openssl.org.
mod_ssl ist bei fqast allen Linux-Dirtributionen bereits dabei…

Willst du die Daten auf dem Server selbst verschlüsseln ?
Wenn du symmetriche Methoden (mcrypt_*) verwendest, hast du das Problem, das du den Schlüssel auch auf dem Server speichern musst, so gehts also nicht. Aber du kannst mit den openssl_* Funktionen auch per RSA / DSA asymmetrisch verschlüsseln. Dann brauchst du auf dem Webserver nur deinen öffentlichen Schlüssel zum Verschlüsseln zu Speichern, und kannst die Daten dann nur auf einem zweiten (sicheren, ggfs. nicht am Internet hängenden) Server, auf welchem du den passenden privaten Schlüssel hast, entschlüsseln.

Welche Verschlüsselungsmöglichkeiten gibt es denn überhaupt
und wo finde ich dazu mehr Infos?!

Bruce Schneier: Angewandte Kryptographie. Protokolle, Algorithmen und Sourcecode in C, ISBN 3893198547 Buch anschauen [Grundlagen zur Verschlüsselung]
http://www.openssl.org
http://www.modssl.org
http://de.php.net/openssl
http://de.php.net/mcrypt

Alexander

Vielen Dank für Eure Antworten.

Ja, es geht darum, den Übertragungsweg abzusichern, d.h. ein User gibt bspw. seine Kontodaten ein und die sollen nicht „abgehört“ werden können.

Soweit ich das jetzt verstanden habe, funktioniert das ganze mit SSL. So weit so gut… gibt es noch andere Möglichkeiten, diese Übertragung abzusichern und die Daten verschlüsselt zu übertragen?

Grüsse
schuelsche

möglichkeiten gibt es immer…
nur ist die Frage wieviel Aufwand das ganze Wert ist…
Ziehen wir mal zum Vergleich die Redewendung „Jede Kette ist nur so stark wie ihr schwächstes Glied“ in relation, dann heisst das doch letztendlich, dass sowohl der Server auf dem Dein Shop liegt sicher sein muss, die verbindung zum Client und auch der Client selbst… Und da ist das grösste Problem, denn Du kannst NIE ausschliessen, dass der Client nicht einen keylogger oder ähnliches installiert hat… naja, aber nachdem wir das eh nicht validieren können sollten wir diesen unsicherheitsfaktor ausser betracht lassen…
SSL ist der Standard, der im Internet verwendet wird um Daten zu verschlüsseln. Sicher gibt es andere Methoden, die Kommunikation herzustellen… Aber ob die hier angewandt werden können wage ich zu bezweifeln.
Allerdings kannst Du eine andere möglichkeit in Betracht ziehen um die sicherheit der Daten zu erweitern… Nämlich eine übergabeverschlüsselung…
Ich nehme mal hier eine recht simples Beispiel:
Kennwort: „12345“ soll verschlüsselt werden. Nun verwendest Du Javascripte um Dir die einzelnen Ziffern ausgeben zu lassen. Nach einem von Dir definiertem Algorythmus werden diese Daten verschlüsselt. In diesem Beispiel wird nun einfach 7 dazuaddiert… wenn der Magische Wert von 9 überschritten wird dann wird einfach von vorne begonnen, statt auf zweistellige Zahlen überzuwechseln…
Somit ist das neue Kennwort „89012“…
das lässt sich natürlich beliebig erweitern… man muss eben nur darauf achten, dass diese entschlüsselung auch nach dem gleichen Prinzip arbeitet und das rausbekommt, was ursprünglich eingegeben wird…
Nun kann man natürlich sagen, dass es nicht viel bringt, wenn man immer die gleichen verschlüsselungsalgorithmen verwendet, aber dafür ist ja php praktisch :wink: Man kann sich ja mit Session-variablen oder cookies eines von in einer Datenbank hinterlegten Verschlüsselungssystemen aussuchen oder aber mit zuhilfenahme der remote-ip ($REMOTE_ADDR) verschlüsseln :wink:
Das macht es zumindest nochmal schwerer für potentielle Angreifer Daten auf dem Weg zu erspähen… Nur hilft das solange nichts gegen keylogger oder trojaner, solange Du nicht schon im Gehirn des Users beginnst die Daten zu verschlüsseln ^^
Aber muss man denn immer so paranoisch sein? :wink:

[…]
Allerdings kannst Du eine andere möglichkeit in Betracht
ziehen um die sicherheit der Daten zu erweitern… Nämlich
eine übergabeverschlüsselung…
[…]

Das Problem bei Deiner Idee ist allerdings, das die Daten immer noch abgefangen werden können. Gut, bei SSL geht das unter enormer Ressourcen- und Hirnaufwendung auch zumnindest theoretisch möglich ( denk dran: they are watching you *grins*). Jedoch ist das Problem der clientseitigen Verschlüsselung via Scriptspracha ala JavaScript, das derjenige, der den Stream abhört / abfängt sofort auch den Algorithmus zur Decodierung an die Hand bekommt!

Für die Übertragung von Daten, welche nicht einwegverschlüsselt werden sollen (also verschlüsselt und nie wieder entschlüsselbar, ausser durch BruteForce o.ä.), hat sich SSL durchgesetzt. Wenn Du zusätzlich noch ein Sicherheitssystem integrieren willst, solltest Du auf asynchrone Verschlüsselung und Applets oder ähnliches setzen. Die Frage bleibt aber - ist es den Aufwand wert? Letztendlich müssen wir alle vor der alles umwitterten Frage kapitulieren: „Kann ein Mensch einen 100%igen Verschlüsselungsalgorithmus erschaffen?“ bzw. die Aussage „Es gibt keine 100%ige Sicherheit!“ gilt nach wie vor!

Und da SSL sehr einfach zu handhaben ist, bietet es sich zudem noch zusätzlich an. Wenn der Server SSL unterstützt, einfach ein HTTPS vor die Adresse schreiben und den Rest machen Client und Server unter sich aus!

Also, um die Frage nach dem Aufwand zu beantworten:

es handelt sich wie gesagt um ein „Studien- bzw. Studentenprojekt“ im Rahmen Onlineshop. Die Aufgabe lautet eben, eine Verschlüsselung zu implementieren. Das dies in erster Linie mal SSL ist, ist klar. Dies ist ja auch sehr praktisch, weil browserseitig schon implementiert. Der Client muss sich also keine extra Software runterladen.
Insofern ist es uns schon einigen Aufwand wert, eine gute Note zu bekommen :wink: Und wenn wir dafür mehrere viell. sogar zusammenfunktionierende Verschlüsselungstechniken anbieten können, dann ist das schon nicht schlecht :wink: Deshalb suche ich noch andere Möglichkeiten ausser der SSL-Verschlüsselung, die, soweit ich das verstanden habe, die Übertragung verschlüsselt, aber nicht die Daten während der Übertragung selbst.

Logischerweise hängt die Sicherheit auch dann damit zusammen, wie sicher die Daten auf dem Webserver liegen, wie gut dieser gegen Angriffe geschützt ist etc… Nur dies sind im allg. Dinge, die wir nicht beeinflussen können, wenn wir nicht gerade zufällig Zugriff auf den Webserver haben. Deshalb geht es also um die möglichst sichere Übertragung von zB Kontodaten, persönliche Daten, die nicht jemand bei der Übertragung abfangen können soll…

Eine andere Möglichkeit in der Richtung könnte doch auch die Versendung per Email sein (mit PGP oder ähnlichem), bei dem halt dann ein Schlüsselaustausch stattfinden muss. Für User, die PGP in ihrem Emailclient am Laufen haben, doch auch keine schlechte Möglichkeit, oder?!

Nach dem Thema mit der Übergabeverschlüsselung mit Javascripten werde ich mich auch mal erkundigen…

Grüsse
schuelsche

Hallo,

clientseitigen
Verschlüsselung via Scriptspracha ala JavaScript

Gibts denn hierfür irgendeine Seite, die beschreibt, wie man eine solche Verschlüsselung umsetzt? Irgendwelche Beispielskripte?! Irgendwelche Hilfen oder Tutorials?!

Grüsse
schuelsche

Also, um die Frage nach dem Aufwand zu beantworten:

es handelt sich wie gesagt um ein „Studien- bzw.
Studentenprojekt“ im Rahmen Onlineshop. Die Aufgabe lautet
eben, eine Verschlüsselung zu implementieren. Das dies in
erster Linie mal SSL ist, ist klar. Dies ist ja auch sehr
praktisch, weil browserseitig schon implementiert. Der Client
muss sich also keine extra Software runterladen.

praktisch ja, aber das ist nicht die letzte Ebene diesbezüglich… Wenn es um Verschlüsselung geht gibt es noch mehr… Nachdem es jetzt doch nicht nur um einen Onlineshop geht sondern wohl viel mehr um die Theorie möchte ich Dir hier mal einen Link und die passenden Keywords dazu nahelegen:
http://www.webopedia.com/TERM/P/public_key_cryptogra…
Die keywords sind public key und private key sowie „Pretty Good Privacy“ (PGP -> http://www.webopedia.com/TERM/P/Pretty_Good_Privacy…)
Dieses System wird wie die Quelle schon sagt immer beliebter, aber gleichzeitig auch komplizierter in der Handhabung…

Insofern ist es uns schon einigen Aufwand wert, eine gute Note
zu bekommen :wink: Und wenn wir dafür mehrere viell. sogar
zusammenfunktionierende Verschlüsselungstechniken anbieten
können, dann ist das schon nicht schlecht :wink: Deshalb suche
ich noch andere Möglichkeiten ausser der SSL-Verschlüsselung,
die, soweit ich das verstanden habe, die Übertragung
verschlüsselt, aber nicht die Daten während der Übertragung
selbst.

hm ich glaub das ist nicht so ganz richtig… Vielleicht hilft Dir auch hier diese Quelle weiter:
http://www.webopedia.com/TERM/S/SSL.html

Logischerweise hängt die Sicherheit auch dann damit zusammen,
wie sicher die Daten auf dem Webserver liegen, wie gut dieser
gegen Angriffe geschützt ist etc… Nur dies sind im allg.
Dinge, die wir nicht beeinflussen können, wenn wir nicht
gerade zufällig Zugriff auf den Webserver haben. Deshalb geht
es also um die möglichst sichere Übertragung von zB
Kontodaten, persönliche Daten, die nicht jemand bei der
Übertragung abfangen können soll…

naja, das geht Hand in Hand mit SSL etc denn wenn Du keinen Zugriff auf den Server hast dann ist es immer unsicher, zum einen weil z.B. alle mails die an eine Adresse @server.de geschickt werden weitergeleitet werden, ohne dass irgendjemand das jemals bemerkt bzw bemerken kann… ähnliches gilt auch für SSL/HTTPS - solange andere darauf zugreifen können ist alles was darauf gesichert wird auch nicht sicher :wink:

Eine andere Möglichkeit in der Richtung könnte doch auch die
Versendung per Email sein (mit PGP oder ähnlichem), bei dem
halt dann ein Schlüsselaustausch stattfinden muss. Für User,
die PGP in ihrem Emailclient am Laufen haben, doch auch keine
schlechte Möglichkeit, oder?!

oh ähm ja *g* Du erwähnst ja selbst schon PGP ^^
naja aber per Email?

Nach dem Thema mit der Übergabeverschlüsselung mit
Javascripten werde ich mich auch mal erkundigen…

Das Problem dabei ist natürlich wie Holger schon meinte dass wenn sich jemand auf den Datenfluss einklinkt auch gleichzeitig den Verschlüsselungsalgorythmus mitbekommt bzw diesen sieht… evtl kann javascript aber auch mit übergebenen Variablen arbeiten… dahingehend weiss ich aber nicht so recht was JavaScript alles kann… und ob z.B. GET-Variablen dann für den Angreifer auch nachzuverfolgen sind, aber anzunehmen wäre es…

[Aufwand = Studienprojekt]

[…]Die Aufgabe lautet
eben, eine Verschlüsselung zu implementieren. Das dies in
erster Linie mal SSL ist, ist klar. Dies ist ja auch sehr
praktisch, weil browserseitig schon implementiert. Der Client
muss sich also keine extra Software runterladen.
Insofern ist es uns schon einigen Aufwand wert, eine gute Note
zu bekommen :wink: Und wenn wir dafür mehrere viell. sogar
zusammenfunktionierende Verschlüsselungstechniken anbieten
können, dann ist das schon nicht schlecht :wink: Deshalb suche
ich noch andere Möglichkeiten ausser der SSL-Verschlüsselung,
die, soweit ich das verstanden habe, die Übertragung
verschlüsselt, aber nicht die Daten während der Übertragung
selbst.

Also das mit der Note verstehe ich nur zu gut :wink:
Nun gut, dann mal los…
Also bei SSL wird der Datenstrom verschlüsselt, so wie ich es verstanden habe.

Logischerweise hängt die Sicherheit auch dann damit zusammen,
wie sicher die Daten auf dem Webserver liegen, wie gut dieser
gegen Angriffe geschützt ist etc… Nur dies sind im allg.
Dinge, die wir nicht beeinflussen können, wenn wir nicht
gerade zufällig Zugriff auf den Webserver haben. Deshalb geht
es also um die möglichst sichere Übertragung von zB
Kontodaten, persönliche Daten, die nicht jemand bei der
Übertragung abfangen können soll…

Da hast Du Recht und das wird auch immer eines der schwierigsten Probleme bleiben!
Daher ist der Ansatz, die Daten verschlüsselt zu speichern gar nicht so abwägig! Nur schwierig zu bewerkstelligen. Denn die Daten gesichert abzulegen ist schon wichtig - aber ein Problem kommt hinzu. Selbst, wenn Ihr die Daten per asynchronem Verschlüsselungsprinzip (wie PGP es einsetzt - also public und private Key) absichert habt Ihr ein Problem: Ihr müsst mit den Daten dynamisch hantieren - also mal angenommen der Kunde ist so dumm (*zwinker*), das er was bestellt und dann kommt die Shopsoftware doch tatsächlich auf den Trichter, die Buchung vorzunehmen, die Rechnung zu erzeugen etc. Nun, grundsätzlich kein Problem, aber dafür benötigt sie den heiligen, privaten Schlüssel. Sobald der irgendwo im Netz liegt habt Ihr ein grosses Sicherheitsproblem. Gut, den Schlüssel kann man sichern (z.B. in einem Verzeichnis ausserhalb von Eurem webzugänglichen Verzeichnissen auf dem Server, aber auch da müsst Ihr höllisch auf die Implementierung aufpassen!

Eine andere Möglichkeit in der Richtung könnte doch auch die
Versendung per Email sein (mit PGP oder ähnlichem), bei dem
halt dann ein Schlüsselaustausch stattfinden muss. Für User,
die PGP in ihrem Emailclient am Laufen haben, doch auch keine
schlechte Möglichkeit, oder?!

Nun, die Idee ist gut - die Praxis zeigt aber folgendes: Ein kleiner Schwenk aus meiner „Du ich habe eine PC Problem, komm mal schnell vorbei“ Rubrik: Es gibt immer wieder Bekannte, Freunde und wer weiss noch wer, die entweder wollen, das ich mich mal auf Ihrem Server umschaue, das ich Ihren PC mal auf Sicherheitslecks checke etc. Nun, dafür wird im allgemeinen ja ein Login benötigt, die IP muss mir bekannt gegeben werden etc. Also sicherheitsrelevante Daten. Nun, die werden natürlich unverschlüsselt und mit dem passenden Betreff (so in der Art: „Hier meine Zugangsdaten für die Webpräsenz xyz.de“ an mein GMX Postfach geschickt! Den schärfsten Fall, den ich mal hatte: Der hatte seine E-Mail gelöscht, wo die Daten drin waren für seinen Webauftritt. Also habe ich sie ihm zugesandt, natürlich unverschlüsselt, weil er ja kein PGP oder ähnliches hat, und weil er danach noch was von mir per Mail wollte hat er halt einfach den Reply-Button als nützlich empfunden und die Daten gleich wieder mitgeschickt.
Nun, worauf ich hinaus will: Ich habe probiert, den Leuten eine Mailverschlüsselung nahe zu legen. Grundsätzlich finden alle die Idee gut, aber irgendwie rafft es keiner. Die wollen Ihre Mails tippen und abschicken. Von Schlüsseln und Sicherheit - nun, da kommt meist „Ist mir zu umständlich“, „Das geht nicht“ etc.
Das gleiche im Chat. Wenn ich mit Leuten in Kontakt trete und diese mich dann persönlich kontaktieren wollen, dann frage ich nach ihren public Keys - oder ob sie PGP oder winPT oder was auch immer benutzen. Da kommt immer: Kenn ich nicht.
Also bis es sich nicht weiter verbreitet hat würde ich die Funktion zwar anbieten, aber nicht um Kontodaten oder ähnliches erstmalig zu erfassen, sondern um wichtige, vertrauliche Daten zu versenden.

Nach dem Thema mit der Übergabeverschlüsselung mit
Javascripten werde ich mich auch mal erkundigen…

Nun, es gibt bestimmt die Möglichkeit eine 128bit Verschlüsselung zu implementieren, das ist bestimmt auch die wohl tragfähigste Variante.
Aber den Ansatz mit der asynchronen Datenverschlüsselung für dynamische Datenverarbeitung würde ich nich aus den Augen verlieren.

Ich selber brüte z.B. über einer Idee, wie ich es schaffe, von überall mit möglichst wenig Aufwand verschlüsselte Mails abzurufen und zu versenden. Bis jetzt drehen sich meine Gedanken noch um ein Java-Applet oder ein ActiveX Control, wobei letzteres mich wieder an Windows und hauptsächlich an den IE kettet.
Der Vorteil dabei ist allerdings, das ich meine privaten Schlüssel nicht zentral lagern muss. Ich will es z.B. so implementieren, das man seine Schlüssel auf einem USB Stick, Disk oder wo auch immer mit sich trägt und sich so auch nachhaltig authentifiziert. Diesen Vorteil könnt Ihr leider nicht nutzen, da der Schlüssel ja von der Shopsoftware regelmäßig gebraucht wird!

Hallo,

[Versenden der Daten per Email mittels PGP]

Nun, worauf ich hinaus will: Ich habe probiert, den Leuten
eine Mailverschlüsselung nahe zu legen. Grundsätzlich finden
alle die Idee gut, aber irgendwie rafft es keiner. Die wollen
Ihre Mails tippen und abschicken. Von Schlüsseln und
Sicherheit - nun, da kommt meist „Ist mir zu umständlich“,
„Das geht nicht“ etc.

Naja, diese Möglichkeit der Datenübertragung würde ja nur für die Leute („Kunden“) interessant sein, die dies auch benutzen.

Wir stellen uns bei der Geschichte halt mehrere Wahlmöglichkeiten vor… „Sie können die Daten unverschlüsselt übersenden…“, „Sie können die Daten verschlüsselt übersenden…“, „Sie können die Daten per Email übersenden…“ usw.

Nur auch mit dem PGP habe ich mich noch nicht näher beschäftigt, weiss also auch noch nicht genau, wie das dann mit dem öffentlichen und privaten Schlüssel funktioniert, bzw. wo der hinterlegt wird. Und schliesslich muss ich die Mail auf dem Server ja auch lesen können…

Gibts denn ein Tutorial in irgendeiner Form, das mir erklärt, wie ich das mit dem SSL genau in meine php-Skripte einbinde?! Was brauche ich dafür vom Server?

Grüsse
schuelsche