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

End-zu-End Verschlüsselung • Ansatz

J

j-l-n

Guest
Guten Morgen!

Da zurzeit das Thema "End-to-End"-Verschlüsselung stark diskutiert wird, würde mich interessieren, wie man denn so etwas realisieren kann.
Wie setze ich an, wenn ich eine ganz einfache Demo von End-zu-End-Verschlüsselung erstellen will?
 
Meinst du damit sowas wie es von threma genutzt wird oder das eigentliche e2e?

Naja, eigentlich generell. Aber es geht mir ohnehin nur um den Grundansatz, von daher ist es relativ egal, wie ich die hinbekomme. Es würde so wie bei Threma passen; d.h., dass man die auf dem Server gespeicherten Nachrichten nicht entschlüsseln kann...
 
das wird schwer, nur php wird nicht reichen wenn es absolut sicher sein soll. und absolut ist in diesem fall relativ!

Strings verschlüsseln und entschlüsseln (PHP, Beispiele)

das ist auf php-basis aber die kann jeder knacken. mit einer ssl-übertragung kannst das auslesen während des übertragens unterbinden. aber auch threma wird nicht sicher sein, denn irgendwie muss der decode-schlüssel auch zwischen sender/empfänger übertragen werden und der kann nur unverschlüsselt gesendet werden.
 
aber auch threma wird nicht sicher sein, denn irgendwie muss der decode-schlüssel auch zwischen sender/empfänger übertragen werden und der kann nur unverschlüsselt gesendet werden.
Und genau da ist für mich der springende Punkt. So sagt ja z.B. eben Threma sinngemäß, dass "nicht einmal auf dem Server die Nachrichten vom Anbieter gelesen werden können". Und hier stellt sich mir jetzt die Frage, ob es überhaupt möglich ist, dass man Nachrichten über einen Server versendet, ohne dass der Serverbetreiber - in dem Fall also ich - die Nachrichten mitlesen/entschlüsseln kann. Und wenn ja, wie?


wenn es absolut sicher sein soll. und absolut ist in diesem fall relativ!
Cooler Spruch! :D
 
Sehr gute Frage, Julian. Das frage ich mich auch. Wie stellt man es an, dass selbst der Serveradmin die Daten nicht entschlüsseln kann?
 
denn irgendwie muss der decode-schlüssel auch zwischen sender/empfänger übertragen werden und der kann nur unverschlüsselt gesendet werden.

Warum nur unverschlüsselt?

Folgendes Szenario:
Sender und Empfänger haben einen fixen Schlüssel, der nicht über die Transferstrecke zur Verfügung gestellt wird (z.B. per Einschreiben).
Zu Beginn jeder Übertragung wird ein neuer (zufälliger) Schlüssel generiert, welcher mit dem fixen Schlüssel verschlüsselt und übertragen wird.
Für die Übertragung wird dann mit mit den jeweils neuen Schlüssel gearbeitet. Mit entsprechend langen Schlüsseln (z.B. String mit Länge 48) ist
dies schon schwer zu entschlüsseln. Das mal testweise mit PHP zu realisieren dürfte machbar sein.
 
Warum nur unverschlüsselt?

Folgendes Szenario:
Sender und Empfänger haben einen fixen Schlüssel, der nicht über die Transferstrecke zur Verfügung gestellt wird (z.B. per Einschreiben).

Ja, stimmt schon. Aber dann kennt ja der Anbieter diesen trotzdem.
 
Ja, Julian, genau. Und selbst wenn er nicht Empfänger des Briefes mit dem Schlüssel ist kann er ja in den Quellcode schauen als Serveradmin. Dann hat er es auch wieder entschlüsselt.
 
Warum nur unverschlüsselt?

Folgendes Szenario:
Sender und Empfänger haben einen fixen Schlüssel, der nicht über die Transferstrecke zur Verfügung gestellt wird (z.B. per Einschreiben).
Zu Beginn jeder Übertragung wird ein neuer (zufälliger) Schlüssel generiert, welcher mit dem fixen Schlüssel verschlüsselt und übertragen wird.
Für die Übertragung wird dann mit mit den jeweils neuen Schlüssel gearbeitet. Mit entsprechend langen Schlüsseln (z.B. String mit Länge 48) ist
dies schon schwer zu entschlüsseln. Das mal testweise mit PHP zu realisieren dürfte machbar sein.

gut, da habe ich mich schlecht ausgedrückt. ja sie kann und sollte verschlüsselt übertragen werden, aber nur in einer verschlüsselung die standardmäßig hinterlegt wurde. und damit ist jeder der im besitz einer solchen app oder des quellcodes ist automatisch fähig den schlüssel zu holen.

ergo, man müsste auf einen externen datentransfer zurückgreifen. damit ist man das problem von mitlesenden erstmal los...

sicher ist hier nur, dass nichts sicher ist.

@julian

eine möglichkeit wäre, bspw. bei einer app, dem user die möglichkeit zu geben seinen schlüssel, egal wie lang er ist, selbererstellen zu lassen, lokal abzuspeichern sodass er für jedes gespräch einen eigenen anlegen kann. er müsste sich dann nur mit seinem gespächspartner extern absprechen wie der schlüsselcode lautet.

dann kennst du ihn nicht und kannst nicht direkt mitlesen. sofern du ehrlich bist und nicht irgendwas installierst um diesen schlüssel von der anwendung auszulesen.
 
Das wäre natürlich eine Möglichkeit. Aber kann es denn nicht auch funktionieren, ohne dass der User mitwirken muss? Also dass dieser ganz normal seine Nachrichten im Klartext schreibt, sich keine Kennworte merken muss; und dennoch eine E2E-Encryption gewährleistet ist?
 
ich weiß es nicht, glaube aber dass das so nichts wird. irgendwoher muss der schlüssel kommen. der empfänger braucht denselben sonst kommt da wohl nur kauderwelsch raus :D
 
Sowas wird normalerweise über asymmetrische Verschlüsselung realisiert (z.B. RSA oder elliptische Kurven). Da gibt es zwei verschiedene Schlüssel: einen öffentlichen und einen privaten. Den öffentlichen darf jeder wissen und mit diesem wird der Text verschlüsselt. Aber entschlüsseln kann man den Text nur mit dem privaten Schlüssel, den nur der Empfänger kennt.

Da ein Angreifer auf ein symmetrisches Verschlüsselung mehr Information über das System hat (den öffentlichen Schlüssel) müssen hier die Schlüssel auch länger sein als bei symmetrischer Verschlüsselung. Als ich das letzt mal nachgeschaut habe, wurde für RSA eine Mindestlänge von 2048 bit (256 byte) empfohlen - aber auch nur für Daten, die nur kurzzeitig gespeichert werden.
 
Weil ich das Thema immer noch interessant finde: kennt irgendwer Links zu bestehenden Projekten? Denn eine Suche nach z.B. PHP End-zu-End Verschlüsselung Demo liefert erstaunlicherweise keinen einzigen brauchbaren Treffer...
 
Also mit PHP kannst du keinen End-zu-End-Verschlüsselung machen, da PHP ja normalerweise nur auf dem Server ist und du damit eine unverschlüsselte Kommunikation zwischen Client und Server hättest bzw. auf dem Server die unverschlüsselten Daten irgendwo hast.

Du musst da schon eine Sprache wählen, die auf dem Client läuft (z.B. Java oder als native Anwendung oder JS...). Das ist ja der ganze Witz daran, dass auf den kompletten Transportebenen überall verschlüsselt versendet wird und wirklich nur der Empfänger die Daten entschlüsselt sehen kann. Auf dem Server können dann gar keine Plaintexte irgendwo abgegriffen werden.
 
Also mit PHP kannst du keinen End-zu-End-Verschlüsselung machen, da PHP ja normalerweise nur auf dem Server ist und du damit eine unverschlüsselte Kommunikation zwischen Client und Server hättest bzw. auf dem Server die unverschlüsselten Daten irgendwo hast.

Und wenn der Inhalt über SSL zum Server über tragen wird und dort sofort nur temporär in einer Variable gespeichert wird, die dann gleich verschlüsselt wird?
 
Du musst die komplette Verschlüsselung mit JS machen.
Wenn du symmetrische Schlüssel verwendest, muss auch die Schlüsselverwaltung in JS passieren. Wenn du asymmetrische verwendest, kann sie für die öffentlichen Schlüssel mit PHP gemacht sein - die privaten müssen weiterhin mit JS verwaltet werden.

PHP macht dann nur die Zustellung der (verschlüsselten) Nachrichten.
 
Zurück
Oben