• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Textverschlüsselung mit Passwort

Bei der Frage ging ich davon aus, dass es darum geht, Text verschlüsselt abzulegen damit nicht jeder Admin ihn lesen kann.
Der Besitzer des Passworts kann ihn ja wieder entschlüsseln.

@EG-net: Geht es um verschlüsselte Ablage oder Übertragung zu einem Empfänger ohne Passwort?
 
Geht es um verschlüsselte Ablage oder Übertragung zu einem Empfänger ohne Passwort?

Letzteres, aber MIT Passwort. D.h., ich habe eine Seite, in der Text in ein Textfeld eingegeben werden kann, und nach Klick auf " Ver/Entschlüsseln" wird dann ein DES-Hash erzeugt. Wenn man dann diesen widerrum einfügt, wird das Zeichenwirrwar ja entschlüsselt, da DES ja eine rekursive, "primitive" Verschlüsselung ist. Darum möchte ich, dass der Text nur entschlüsselt werden kann, wenn man ein zuvor gewähltes Passwort eingibt.

Also: Der Benutzer soll einen Text und ein Passwort eingeben. Dann klickt er auf Weiter und erhält den verschlüsselten Zeichen"salat". Wenn er dann diesen kopiert und z.b. versendet und der Empfänger ihn wieder einfügt, soll der Text BEI EINGABE DES RICHTIGEN PASSWORTES entschlüsselt werden, d.h., irgendwie muss das Passwort in die Verschlüsselung "verknüpft werden".
 
Dann kann man diese crypt Verfahren nutzen. Allerdings kommt bei falschem Passwort trotzdem ein Ergebnis raus. Das ist zwar ebensolcher Salat wie vorher aber das macht ja nichts.
Schau dir mal die verlinkte Funktion mit CRYPT_BLOWFISH an. Ich denke, das könnte dir gefallen.

Wenn du ein Verfahren suchst, bei dem bei falschem Passwort ein "kein Zugriff" kommt dann weiß ich leider nicht.
Aber man könnte das vielleicht so bewerkstelligen, dass man dem Text eine Konstante an den Anfang oder das Ende setzt die immer gleich ist.
Wenn die nach dem Entschlüsseln lesbar ist, dann stimmte das Passwort und man entfernt sie aus dem Text.
Also ein Workaround.
 
Die Idee mit der Endmarke ist nicht schlecht. Dass es bei falschem Passwort trotzdem einen "entschlüsselten" Text gibt, ist jetzt nicht so schlimm. Ich schau mir das auf jeden Fall mal an und meld mich wieder, wenn ich ein Skript gebastelt habe.
Danke! :D
 
@mikdoe: crypt ist keine Verschlüsselungsfunktion, sondern eine Hashfunktion. Das ist ein großer Unterschied, da eine Verschlüsselungsfunktion reversibel ist (wenn man das Passwort weiß) und eine Hashfunktion nicht.
Auch braucht eine Hashfunktion kein Passwort, sondern sollte (und nicht muss) ein Salt bekommen. Dieses Salt braucht man, um den Hash zu wiederholen uns so zu überprüfen, ob zwei Eingaben identisch sind. Genau dafür ist die crypt-Funktion in PHP gedacht. Verschlüsseln und/oder entschlüsseln kann man damit nicht.

@EG-net: wenn du ernsthaft verschlüsseln willst, solltest du nicht DES verwenden. Ich würde AES nehmen. Auch solltest du die Daten nicht auf dem Server ver- und entschlüsseln, sondern auf dem Client, da sonst die Daten unverschlüsselt über die Leitung laufen.
 
Zuletzt bearbeitet:
@mikdoe: crypt ist keine Verschlüsselungsfunktion, sondern eine Hashfunktion. Das ist ein großer Unterschied, da eine Verschlüsselungsfunktion reversibel ist (wenn man das Passwort weiß) und eine Hashfunktion nicht.
Was meinst du mit reversibel?
Wenn ich das Passwort weiß kann ich doch bei beiden Verfahren an den Ursprungstext kommen.
Und wenn ich es nicht weiß komme ich in beiden Fällen nicht dran, oder doch?
 
...Genau dafür ist die crypt-Funktion in PHP gedacht. Verschlüsseln und/oder entschlüsseln kann man damit nicht.

@EG-net: wenn du ernsthaft verschlüsseln willst, solltest du nicht DES verwenden..
. Auch solltest du die Daten nicht auf dem Server ver- und entschlüsseln, sondern auf dem Client, da sonst die Daten unverschlüsselt über die Leitung laufen.

Hab mich gerade eingelesen, ist genauso wie du beschreibt: crypt-blowfish wäre rein um zu überprüfen, ob das Passwort mit seinem Hash übereinstimmt. Von daher, mcrypt.

Zum letzten Absatz: Klar, DES ist ja überspitzt formuliert ein Witz.
Die Daten laufen über meine SSL-gesicherte Seite, von daher kann ich's serverseitig machen...
 
Zuletzt bearbeitet:
Was meinst du mit reversibel?
Dass man es wieder rückgängig machen kann.
Wenn ich das Passwort weiß kann ich doch bei beiden Verfahren an den Ursprungstext kommen.
Nein. Genau das ist ja der Witz an Hashes. Wenn ich einen Hash wieder "enthashen" könnte, wenn ich das Passwort (ich weiß nicht, was du in diesem Zusammenhang mit Passwort genau meinst... meinst du den Salt?) weiß, wäre es kein Unterschied, ob man Passwörter als (im besten Fall gesalzene) Hashes oder im Klartext speichert.
Und wenn ich es nicht weiß komme ich in beiden Fällen nicht dran, oder doch?
Im Falle des Hashes brauch' ich da auch gar nicht ran zu kommen (wie schon EG-net geschrieben hat, werden dann einfach die Hashes verglichen.).

@EG-net: wenn der Server in deinem Wohnzimmer steht und wirklich nur du softwaretechnischen und physikalischen Zugang zu deinem Server hast, kann du (und wirklich nur du alleine) dem Server trauen. VPS ist kein "Hoste selbst".

Vom Design her brauchst du die Klartextdaten gar nicht beim Server. Du speicherst ja nur das Verschlüsselte. Dann solltest du auch nur das Verschlüsselte bekommen... außer du hast noch irgendwas anderes mit den Daten vor, alter NSAler ;)
 
Zuletzt bearbeitet:
...wenn der Server in deinem Wohnzimmer steht und wirklich nur du softwaretechnischen und physikalischen Zugang zu deinem Server hast, kann du (und wirklich nur du alleine) dem Server trauen. VPS ist kein "Hoste selbst".

Das stimmt, aber es ist zumindest sicherer, als eine normale Hosting-Lösung.

Du speicherst ja nur das Verschlüsselt…außer du hast noch irgendwas anderes mit den Daten vor, alter NSAler ;)

Wer hat was von Speichern gesagt? :D
Eigentlich möchte ich nur Usern die Möglichkeit bieten, ihren Text zu verschlüsseln und an andere zu senden. Der Empfänger kann dann bequem mit copy&paste den Text wieder auf meiner Seite entschlüsseln...
 
OK - dann brauchst du gar keinen dynamischen Server, sondern nur einen, der dir das HTML, CSS und JS ausliefert. Vielleicht hab' ich morgen mal Zeit um dir ein kleines Beispiel zu machen.
 
Also ich hab' mal ein kleines Interface für meine AES-Implementierung (war nur zu Übungszwecken - kann also auf jeden Fall sein, dass da noch ein paar Bugs drin sind. Also fleißig testen;)): AES en-/decryption
Dabei muss man natürlich etwas verstehen, wie AES funktioniert und wie es auf beliebigen Text angewendet werden kann.

Für so einen kleinen Verschlüsselungstool für "Normalverbraucher" würde ich sowas machen: AES en-/decryption with password only

Wichtig bei beiden: das sind rein statische Seiten und es wird nichts an den Server übermittelt.
 
Hatte einen kleinen Bug in der Key Expansion drin, der jetzt heraußen ist.

Man sollte hald zuerst die ganzen KATs (known answer tests), die die NIST bereit stellt (oder besser hat, da die Website irgendwie abgeschaltet wurde - zum Glück hatte ich mir die schon mal früher gezogen), durchlaufen lassen und dann erst veröffentlichen...
Aber jetzt läuft alles durch.

PS: AES ist eigentlich nur für 128-bit Blöcke und 128-, 192- und 256-bit Schlüssel definiert. Also eigentlich hab' ich Rijndael implementiert...
PPS: die NIST stellt natürlich nur AES-Tests zur Verfügung. Es könnte also durchaus sein, dass in den anderen Bit-Kombinationen ev. noch ein Bug ist - wäre ja nicht das erst mal ;)
 
@kkapsner: Also, vielen Dank für Dein fertiges Skriptbeispiel :D
Ich schau mal, ob ich auch eine sozusagen serverseitige Version mit PHP hinbekomme, die stell ich dann auch hier zur Verfügung.
 
Zurück
Oben