JS / PHP EndToEnd Verschlüsselung

fabi288

New Member
Hallo,

ich habe eine frage und zwar wie löse ich am besten eine EndToEnd Verschlüsselung wen Daten auf mein Server geladen werden. Im Moment übertrage ich die Daten und verschlüsselt auf den Server und der Server verschlüsselt die Datei dann.

Ich würde aber gerne, das die Datei schon ab dem Client geschützt ist.

Hat dort jemand eine Idee o. Ansatz.

Mfg
 

Joe User

Zentrum der Macht
In der JSLib stecken zu viele Bugs, welche die jeweiligen Cryptofunktionen schwächen oder gar komplett aushebeln.

Kryptographie per Javascript ist zudem ohnehin kaum sicher umzusetzen, weshalb bisher auch nahezu alle derartigen Versuche kläglich gescheitert sind. Gäbe es eine sichere Umsetzung, hätten wir sie längst in diversen Projekten wie etwa Webmailern und CMS oder auch in Firefox/Thunderbird OOTB.

Und solange ich Javascript mit einfachsten Mitteln manipulieren oder deaktivieren kann, notfalls per IFrame oder aus einem zweiten Fenster/Tab heraus, wird es keine vertrauensvolle Grundlage für eine solche Lib geben.

Scriptsprachen sind nunmal keine Programmiersprachen und schon per Design zwischen Script und Interpreter vollkommen unbemerkt und leicht manipulierbar. Nettes Feature, dessen Potential viel zu selten genutzt wird, weder für Gutes (Debugger) noch für Böses (Malware).
 

danton

Debian User
Ich würde aber gerne, das die Datei schon ab dem Client geschützt ist.

Am einfachsten dürfte eine Transport-Verschlüsselung sein, also z.B. statt per http per https die Daten an den Server senden.
Im Zusammenhang mit Mails und PGP wird als Argument immer angeführt, daß ohne PGP ja keine durchgehende Verschlüsselung vorhanden ist und der Provider in die Mails reinschauen kann. Aber wenn es sich um deinen eigenen Server handelt, dürfte dieser Punkt für dich kein Problem darstellen.
 

DeaD_EyE

Blog Benutzer
Wie sieht es denn mit den Zufallszahlen bei JS aus? Wie kann man sicherstellen, dass die Entropie hoch genug ist.

Ich habe mir damals bisschen was zu AES angesehen. Selbst bei der symetrischen Verschlüsselung braucht man einen Initialisierungsvektor, was ich vorher nicht wusste. Dieser sollte wenn möglich eine hohe Entropie haben, da ansonsten die Verschlüsselung geschwächt wird, weil man z.B. irgendwelche angeblichen Zufallszahlen vorhersagen kann. Das ist alles wirklich sehr theoretisch. Jeder Programmierer kann Verschlüsselungsverfahren implementieren. Meist fangen aber dort schon die Fehler an und kaum jemanden fällt es auf, da wir alle kein Krypto[chef] sind.

Scriptsprachen sind nunmal keine Programmiersprachen und schon per Design zwischen Script und Interpreter vollkommen unbemerkt und leicht manipulierbar. Nettes Feature, dessen Potential viel zu selten genutzt wird, weder für Gutes (Debugger) noch für Böses (Malware).

Jetzt zerstörst du gerade mein Weltbild. Dynamische Sprachen (Skriptsprachen) sind Programmiersprachen. Was ist denn dann Java? Was ist mit .net Anwendungen.

Laut deiner Definition sind Programmiersprachen nur Programmiersprachen, sofern diese kompiliert werden und keine VM/Interpreter dazwischen liegt. Also C, C++, Pascal, ADA?
 

Joe User

Zentrum der Macht
Jetzt zerstörst du gerade mein Weltbild.
Sorry ;)
Dynamische Sprachen (Skriptsprachen) sind Programmiersprachen.
Einen Shell-Oneliner hinklatschen, welcher lediglich x externe Programme nacheinander aufruft, wäre nach Deinem Weltbild also Programmieren? Ein HTML/XML-Dokument oder CSS zu erstellen, wäre demnach ebenfalls Programmieren, denn die Files werden letztendlich auch nur interpretiert. etc.

Laut deiner Definition sind Programmiersprachen nur Programmiersprachen, sofern diese kompiliert werden und keine VM/Interpreter dazwischen liegt. Also C, C++, Pascal, ADA?
Mir gefällt diese (alte) Abgrenzung nunmal besser, wie auch der Mehrheit der erfahrenen Programmierer. Das mag nicht der Definition aus Wikipedia oder anderer Lexika entsprechen, dennoch weiss Jeder, der nicht gerade frisch aus der Uni gestolpert ist, worum es geht.

BTW: Auch Du wusstest wie meine vorige Aussage zu verstehen ist, trotzdem danke der Nachfrage ;)
 

nexus

Well-Known Member
Laut deiner Definition sind Programmiersprachen nur Programmiersprachen, sofern diese kompiliert werden und keine VM/Interpreter dazwischen liegt. Also C, C++, Pascal, ADA?

Mir gefällt diese (alte) Abgrenzung nunmal besser, wie auch der Mehrheit der erfahrenen Programmierer. Das mag nicht der Definition aus Wikipedia oder anderer Lexika entsprechen, dennoch weiss Jeder, der nicht gerade frisch aus der Uni gestolpert ist, worum es geht.

Wenn man dieser Ansicht/Definition folgt, dann dürfte ganz streng genommen ausschließlich Maschinencode als Programmiersprache angesehen werden, da nur dieser direkt ausführbare Befehle enthält, die von der CPU ohne weitere Interpretation abgearbeitet werden können.
Jede höhere Programmiersprache wird ja letztlich auch nur durch Interpreter/Compiler in Maschinencode übersetzt, um durch die CPU ausführbar zu sein.
Es ist und bleibt am Ende tatsächlich eine Frage der Abgrenzung, was als Programmiersprache angesehen wird bzw. angesehen werden kann oder sollte.
 
Last edited by a moderator:

danton

Debian User
Das, was Joe User als Programmiersprache ansieht, sind die Sprachen, die compiliert werden, während Script-Sprachen interpretiert werden.
 

d4f

Kaffee? Wo?
danton said:
Das, was Joe User als Programmiersprache ansieht, sind die Sprachen, die compiliert werden, während Script-Sprachen interpretiert werden.
Dieses Weltbild wird natürlich äusserst problematisch wenn man aktuelle Techniken wie JIT-Compiling (Lua, ...) oder AOT-Compiling (ASM.js, ...) von eigentlich interpretierten Sprachen berücksichtigt.

Zur ursprünglichen Frage:
Das Hauptproblem wurde schon paarmal am Rande angekratzt aber nie wirklich deutlich erwähnt. Wer garantiert dir dass die vom Server bereitgestellte Javascript-Bibliotheken überhaupt verschlüsseln? Du vertraust also inherent dem Server die Daten an obwohl (oder genau weil) du ihm die Daten nicht anvertrauen willst.
Die einzige korrekte Lösung hierfür wäre dass die ganze Logik von einem known-good System (bspw self-hosted) bereitgestellt wird und nur der HTTP-Post zur Datenübertragung an den eigentlichen Hoster geht.
 

danton

Debian User
Ich hatte das so verstanden, daß der TE die Daten auf seinen eigenen Server überträgt und sie dort verschlüsselt, bevor aus auch immer mit den Daten geschieht. Damit dürfte der Server ein vertrauenswürdiges System sein. Problematisch scheint ja wohl der Übertragungsweg zum Server zu sein - und sollte IMHO eine Transportverschlüsselung (TLS) ausreichen.
Wäre nur schön, wenn der TE sich mal etwas konkreter äußern würde.
 

DeaD_EyE

Blog Benutzer
Einen Shell-Oneliner hinklatschen, welcher lediglich x externe Programme nacheinander aufruft, wäre nach Deinem Weltbild also Programmieren?

Nur, wenn in dem Shellscript ein Kontrollfluss vorhanden ist. Ich tendiere aber eher zu Python.

Ein HTML/XML-Dokument oder CSS zu erstellen, wäre demnach ebenfalls Programmieren, denn die Files werden letztendlich auch nur interpretiert. etc.

Ja, das wäre/ist es in der Tat. Schau dir z.B. das Framework bootsrap an.

Mir gefällt diese (alte) Abgrenzung nunmal besser, wie auch der Mehrheit der erfahrenen Programmierer. Das mag nicht der Definition aus Wikipedia oder anderer Lexika entsprechen, dennoch weiss Jeder, der nicht gerade frisch aus der Uni gestolpert ist, worum es geht.

Mir gefallen eher dynamische Sprachen. Vielleicht werde ich in ferner Zukunft mit C anfangen. Ich will Mikrokontroller programmieren :)

OT
Mikrokontroller für Python: http://micropython.org/
 
Top