PHP eigene Verschlüsselung bauen?

Domi83

Rear Admiral
Registriert
Feb. 2010
Beiträge
5.325
Hallo Leute, ich habe da mal eine kleine Frage...
Hat schon mal jemand eine eigene Verschlüsselung für sich gebaut, und ist das besonders kompliziert / komplex? :)

Hintergrund der Idee ist folgender, ich habe alle meine Kennwörter im KeePass gespeichert. Ich überlege aber, ob ich das alles in eine MySQL Datenbank abspeichere, mir ein Webinterface baue wo ich nach dem Login meinen Schlüssel (vielleicht den Algorithmus) für meine SESSION abspeichere und alles ist offen.

Hoffe ich konnte das gerade erklären.
Ich würde ganz gerne von allen Systemen gleichzeitig auf die Kennwörter zugreifen können. Und vielleicht kann man das später weiter spinnen, und ich könnte mal das eine oder andere Kennwort in der Firma auch in dem System unter bringen. Aber primär geht es um meine Kennwörter :)

So.. Ich hoffe man hat mein Anliegen verstanden, vielleicht hat das ja schon jemand realisiert und kann mir sagen, wie komplex so etwas ist.

Gruß, Domi
 
Du willst also keine "Verschlüsselung" erstellen sondern eine Art von Single Sign On System?
 
Öhm.. Ich habe mir gerade mal den Wiki Artikel zum "Single Sign-On" durchgelesen, aber jetzt sind noch mehr Fragezeichen da :D

Falls es hilft, ich habe ein Webinterface, dort logge ich mich mit meinem Benutzernamen + Kennwort ein, anschließend kann ich so etwas wie meinen privaten PGP Schlüssel für meine Session hinterlegen und alles was ich mit diesem Schlüssel verschlüsselt habe, kann ich dann im Webinterface als "Klartext" einsehen.

Also ähnlich wie das PGP System... Nur möchte ich mir dann meinen Schlüssel selbst erstellen und dann bei mir abspeichern. Wenn Schlüssel weg, dann Daten auch verloren. Oder mit Hilfe von eine Kennwort verschlüsseln.

Im Prinzip möchte ich gucken, ob man da Prinzip von KeePass in PHP + MySQL übertragen könnte, nur für meine Wünsche angepasst :) Hoffe ich konnte damit etwas mehr aufklären :D
 
Ohne Komfortfunktionen wie automatisches ausfüllen sondern wenns nur eine Liste werden soll:

Apache Server mit folgenden Einstellungen:
http://it.toolbox.com/blogs/securit...-a-website-with-client-ssl-certificates-11500
Damit kommst du nur auf die Homepage wenn du das richtige Zertifikat besitzt.
Dann ein php Script, welches mit Benutzername + Passwort die Passwörter symetrisch verschlüsselt in der Datenbank speichert.
Damit wäre allerdings kein "recover Password" möglich.

Das wäre mein Ansatz.
Klar gibts noch viele anderen. Man könnte z.B auch die Strings per RSA verschlüsseln und im Browser per RSA verschlüsseln.
Wie du es machst hängt primär von den Sprachen an die du beherrscht.

Wäre also noch dazu gut zu wissen was du bereits kannst.
 
Zuletzt bearbeitet:
Also einen Apache aufsetzen, ein eigenes SSL Zertifikat erstellen, eine MySQL Datenbank anlegen, PHP einrichten ist alles nicht das Problem. Habe einen vServer, da habe ich mir auch ein eigenes Zertifikat erstellt und das auf meinen persönlichen Clients installiert...

Im Prinzip bräuchte ich doch (ganz klassisch gesehen) einen Algorithmus, der aus A -> BX macht, und jeden Buchstaben irgendwie anders umdreht. Und das ganze muss ja dann auch wieder umgedreht werden können. Das ist dann bestimmt das "recover Password" was Du meintest, richtig?

Das wird ja benötigt, denn ich muss ja die Umkehrformel haben um aus BX -> A zu machen. Oder ist mein Denkansatz falsch?

Gruß, Domi
 
Ahh ok. Jetzt verstehe ich was du meinst.

Kurz: Nein, so einfach ist das nicht. Alleine eine ordentliche (=sichere) Verschlüsselung zu implementieren ist sehr aufwändig. Public/Private Keys macheb es nicht einfacher. Man könnte Standardfunktionen verwenden, dann wäre schon ein Großteil "gelöst". Bleibt die Frage, wie man erkennt, welche Passwörter ordentlich mithilfe des Passphrase entschlüsselt wurden.

Vom Prinzip würde es meiner Meinung nach durchaus funktionieren.
 
Ok, das WICHTIGSTE vorweg:
Niemals eine Verschlüsselung selbst bauen. Es gibt sowohl für symetrische, asymetrische Verschlüsselungen und Hashfunktionien bereits etablierte Standards welche weltweit von Kryptographie-Experten geprüft und untersucht wurden.

Wichtig ist, zuerst die Architektur zu überlegen.

MUSS es mit einem Zertifikat sein, oder reicht ein Passwort?
Sollen die Passwörter nur im Klartext auf einer Homepage stehen, oder wie soll das ganze ablaufen?

Desswegen die große Frage: Welche Sprachen kennst du?

EDIT: Mit recover password meine ich, dass man ohne das Master-Passwort keine Möglichkeit hat aus der Datenbank die Passwörter auszulesen.
 
Zuletzt bearbeitet:
Hm.. Schade.. Ich hatte mir schon fast gedacht, dass es nicht einfach wird. Aber das mit der ordentlichen Entschlüsselung ist natürlich ein guter Grund. Es bringt mir ja nichts, wenn ich "hallo" als Kennwort verschlüsselt abspeichere und im Umkehrschluss macht er mir da ein "hulla" daraus...

Dann möchte ich gar nicht wissen, was er auf einmal mit Kennwörtern macht, die ich mit einem Generator generieren lasse :D

@Zeroflow, was die Sprachen angeht.. Da bin ich eigentlich auf PHP angewiesen, da ich es im Internet auf meinem Server laufen lassen wollte. Und weil das die einzige Sprache ist, die ich kann... im Vergleich zu den anderen ;)

Nachtrag: Ne, es muss auch keine eigene Verschlüsselung sein, also ich möchte keinen eigenen Algorithmus schreiben, wenn es schon welche gibt! Was das "recover Passwort", genau so etwas in der Art ist mein Ziel. Hat man das Kennwort nicht, sind die Daten zwar in der Datenbank.. aber man kommt nicht mehr ran! Es muss halt kein Zertifikat sein, ein einfaches Kennwort (Passphrase) reicht ja auch.

Im Prinzip möchte ich die Daten im Klartext in meine Eingabe eingeben, diese werden verschlüsselt in der MySQL Datenbank gespeichert, und wenn ich meine Passphrase eingebe oder mein Zertifikat verwende, kann ich mir das Kennwort wieder als Klartext anschauen. Hoffe ich kann die Verwirrung jetzt etwas lösen.

Beispiel, Versuch 1:
Schreiben: "hallo" -> verschlüsseln -> MySQL DB
Abrufen: MySQL DB -> entschlüsseln -> "hallo"
 
Zuletzt bearbeitet:
Warum sollte die Verschlüsslung nicht funktionieren?
Wenn du nur Passwörter speichern möchtest, dann reicht eine symetrische Verschlüsselung wie AES.

In php loggst du dich ein.
Damit lädt php die Kennwörter die zu deinem Benutzer gehören aus einer Datenbank und entschlüsselt sie mit dem von dir eingegebenen Passwort.
Stimmt das Passwort, dann kommt dabei wieder der Klartext raus. Ist es allerdings falsch, dann sind die Passwörter unlesbar.

Das wäre eine recht einfache Möglichkeit das zu machen was du vor hast.

EDIT: Mit recover Password meine ich, dass du die Passwörter retten kannst, wenn du das Master-Passwort vergisst.
In meinem Beispiel sind die gespeicherten Passwörter unwiederbringlich verloren, sobald du das Master-Passwort vergisst.
 
Zuletzt bearbeitet:
Yes...! So etwas war mein Wunsch... Ob nun AES, Tripple-DES und was es alles gibt (bin schon etwas aus aus der Schule raus) ist ja egal, aber das Prinzip würde mir schon ausreichen :)

Dann wäre das Prinzip ja ungefähr so... erst das Kennwort eingeben und in einer Session speichern,
Schreiben: "hallo" -> AES verschlüsseln -> MySQL DB -> fertig!

Kennwort wieder eingeben (oder man hat es noch in der Session)
Abrufen: MySQL DB -> AES entschlüsseln -> "hallo" -> fertig!

oder irre ich mich da? So etwas einfaches sollte ja ausreichen.. hast Du da Tipps, für die Suche, oder direkt einen Link zu einer Anleitung damit ich mir das mal anschauen kann? :)

Nachtrag: Ahh.. Ich glaube jetzt macht es "ding", das recover Passwort soll so etwas wie eine Hintertür sein, falls ich mal mein Kennwort vergesse.. richtig? Klingt zwar doof, aber im Moment stehe ich ein wenig auf dem Schlauch :(
 
Zuletzt bearbeitet:
richtig. Nur wäre dieses recover passwort eben ein großes Problem falls jemand auf deinen Server Zugriff bekommt...
 
Okay, dann komme ich darauf hinterher zurück und nehme zu Anfang erst einmal die normale Version ohne "recovery Passwort" :)

Nachtrag1: Also ich habe mal ein wenig mit mcrypt rum gespielt,
PHP:
<?php
 $pass = "test";
 $text = "hallo";

 $hash = mcrypt_encrypt(MCRYPT_TWOFISH, $pass, $text, MCRYPT_MODE_ECB);
 echo "Encrypt: ".$hash."<br />";

 $hash2 = mcrypt_decrypt(MCRYPT_TWOFISH, $pass, $hash, MCRYPT_MODE_CBC);
 echo "Decrypt: ".$hash2."<br />";
?>
das scheint sogar zu funktionieren. Der echo von meinem encrypt sieht allerdings etwas komisch aus, aber es funktioniert.. ist das soweit eigentlich richtig, oder sollte man noch etwas abändern?

Nachtrag2: Mir geht es bei der Ausgabe von "encrypt" nur darum, ob man das problemlos in der MySQL Datenbank abspeichern kann.. ich bekomme nämlich Zeichen raus, als hätte ich umlaute falsch codiert. Und versuche gerade einen Umlaut in HTML ohne Unicode anzuzeigen. Falls Das eine Hilfe ist...
 
Zuletzt bearbeitet:
Weil ich nicht auf die Idee gekommen bin, das ganze mit der Hilfe von MySQL zu verschlüsseln, sondern weil ich davon ausging, ich mache das auf PHP ebene.. :D Aber Du hast recht, mit der SQL Lösung ist das doch um einiges einfacher :)
Code:
INSERT INTO aes_test (kennwort) VALUES (AES_ENCRYPT('hallo', 'passphrase'))
SELECT id, AES_DECRYPT(kennwort, 'passphrase') AS kennwort FROM aes_test
Mehr als diese beiden Befehle werden gar nicht benötigt. Dann noch dem Kennwort sagen das es ein "varbinary" ist und der ganze Spaß ist erledigt.

Damit kann ich sogar leben.. zumal es auf de von Dir genannten Seite sogar noch andere Verfahren als das AES gibt... ABER ich tippe mal darauf, dass AES schon recht gut ist.

Schonmal vielen Dank dafür, dann könnte ich ja damit schon mal meine Kennwörter in der Datenbank ablegen.. jetzt baue ich mir nur noch eine Eingabe und eine Ausgabe, und alles sollte schick sein :)

Gruß, Domi
 
denk dran, die ein- und ausgabe abzusichern... je nachdem, wo du den SQL-Server etc. betreibst.
 
Ganz doofe Frage... schon mal über etwas wie Wuala nachgedacht?

Um Sicherheitsbedenken präventiv entgegenzuwirken:
http://www.wuala.com/de/support/faq schrieb:
Das bedeutet, dass niemand, der Ihr Passwort nicht kennt, auf Ihre Daten zugreifen kann (nicht einmal wir).
 
1668mib schrieb:
Ganz doofe Frage... schon mal über etwas wie Wuala nachgedacht?
Mein Motto ist immer, "gibt keine doofen Fragen" ;) Wuala sieht aus wie Dropbox, nur sicher :D

Wenn das richtig ist, dann habe ich solch eine Lösung schon. Ich verwende KeePass für meine Kennwörter, die kdbx Datei von KeePass liegt in meinem BoxCryptor Laufwerk, welches in der Dropbox liegt :)
 
Yap, so kann man Wuala bezeichnen. Nur könnte Wuala halt bequemer sein als die Dropbox-Variante.
 
Okay, dann würde ich ja wieder die Kennwörter in KeePass und deren kdbx Datei drin haben. Und ich möchte ja eine Lösung / Möglichkeit haben, wo ich von mehreren Quellen gleichzeitig drauf zugreifen und arbeiten kann ;)
 
Zurück
Oben