Ich versuche eine Methode zum Verschlüsseln einer Datei-Client-Seite zu erstellen und sie hochzuladen. Ziel ist es, die Datei verschlüsselt auf dem Server zu speichern und nur der Endbenutzer sollte in der Lage sein, die Datei zu entschlüsseln. Diese Frage wurde vorher gestellt , aber ich denke, ich habe etwas mehr Fortschritte gemacht.
Mein Plan ist es, die neue JavaScript-Datei-API zu verwenden, um die Datei zu manipulieren und hochzuladen. Die Verschlüsselung könnte mit der Stanford Javascript Crypto Library durchgeführt werden. Die Datei sollte in Blöcken gelesen werden, damit sie nicht vollständig in den Speicher gelesen wird. Jedes Stück wird dann von der Kryptothek verschlüsselt. Ich kann mir nicht vorstellen, wie ich das umsetzen soll. Als Anfang habe ich das:
%Vor%Was ist nur ein regulärer Javascript-Upload? Ich versuche, ein Crypt-Objekt zu erstellen, das das Verhalten eines File-Objekts nachahmt und dieses an FormData weitergibt. Für jeden von formdata gelesenen Datenblock sollte das Objekt einen Chunk aus der Datei lesen und diesen verschlüsseln. Ich kann einfach nicht herausfinden, wie FormData ein File-Objekt verarbeitet und ob es möglich ist, dieses Verhalten zu replizieren. Ich bin mir nicht sicher, ob es der richtige Weg ist, jemand hat einen Vorschlag?
UPDATE: Ok, ich bin jetzt viel weiter. Ich verwende file.slice, um die Datei in Blöcken zu lesen. Dann wird jeder Chunk verschlüsselt und mit einem BlobBuilder wieder in einen Blob transformiert. Dieser Blob wird dann in ein FormData-Objekt eingefügt und an den Server gesendet. Der Server verkettet diese Blobs. Das Verschlüsseln und Entschlüsseln eines Chunks mit dem Browser funktioniert. Jetzt arbeite ich an Download und Entschlüsselung mehrerer Chunks.
Es gibt noch einige Probleme zu lösen:
Es folgt eine Lösung, die Dateien stark schützt.
Pro:
Nachteile:
Wenn es das ist, was du brauchst, pass auf ^^. Hinweis: Alles was folgt, passiert auf der Serverseite.
Dies bedeutet, dass nur ein angemeldeter Benutzer auf die Daten zugreifen kann. Und nur der Benutzer, zu dem die Daten gehören. Die einzige Möglichkeit, auf die Daten des Benutzers zuzugreifen, besteht darin, sein Passwort zu kennen.
Hinweis: Wenn der Benutzer, der die Datei hochlädt und derjenige, der die Datei liest, nicht dieselbe Person ist, können Sie stattdessen eine Kombination aus asymmetrischer und symmetrischer Verschlüsselung verwenden:
Wenn eine Datei hochgeladen wird, asymmetrische Verschlüsselung mit dem Empfänger
öffentlicher Schlüssel.
(neu) Asymmetrische Verschlüsselung scheint wesentlich langsamer zu sein als symmetrische Verschlüsselung (10-100x je nach Algorithmus / Architektur). Daher ist es viel besser, eine Zufallszahl (den Sitzungsschlüssel) zu generieren, zweimal zu verschlüsseln (einmal mit dem öffentlichen Schlüssel des Absenders, einmal mit dem öffentlichen Schlüssel des Empfängers) und sie zu speichern. Verwenden Sie dann die symmetrische Verschlüsselung, um die Datei zu verschlüsseln (verwenden Sie den einfachen Sitzungsschlüssel als symmetrischen Schlüssel).
Wenn der Empfänger auf die Datei zugreifen möchte:
a) entschlüsseln Sie seinen privaten Schlüssel mit seiner Hash- oder Passwortabhängigkeit.
b) asymmetrisch entschlüsseln Sie die Datei mit dem privaten Schlüssel.
b) (neu) Verwenden Sie den privaten Schlüssel, um den verschlüsselten Sitzungsschlüssel des Empfängers zu entschlüsseln. Verwenden Sie dann die symmetrische Entschlüsselung, um die Datei zu entschlüsseln.
Hoffe, das hilft.
Tags und Links javascript file-upload encryption