Bester Ansatz, um große Dateien mit PHP zu verschlüsseln

Ich entwickle ein Projekt in PHP, in dem von Benutzern hochgeladene Dateien verschlüsselt werden müssen. Diese Dateien können mehr oder weniger als 1 MB bis 200 MB groß sein. Bei der Suche im Web bin ich zu dem Schluss gekommen, dass die beste Methode darin bestand, Dateien in Blöcke von beispielsweise 4096 Byte zu unterteilen. Also verschlüssele ich jeden Chunk und hänge ihn an die vollständig verschlüsselte Datei an. Ich verwende derzeit mcrypt und AES-256-Verschlüsselung im CBC-Modus.

Meine Fragen lauten also: 1) Ich muss für jeden Block einen neuen Anfangsvektor erstellen, oder kann ich die letzten 16 Byte des letzten Blocks eines vorherigen Blocks als Anfangsvektor des ersten Blocks des aktuellen Blocks abrufen? Dies hat zur Folge, dass nur ein iv am Anfang der verschlüsselten Datei angehängt wird und nicht ein iv für jeden Block, der vor dem verschlüsselten Block angehängt wird.

2) Um eine HMAC-Authentifizierung hinzuzufügen. Diese Frage ist mit der vorherigen verknüpft. Sollte ich es für die gesamte Datei oder einzeln für jeden Chunk hinzufügen. In diesem Fall ist es ein Problem, dies für die gesamte Datei zu tun, da es normalerweise am Anfang der Datei hinzugefügt wird und ich den hmac erst berechnen kann, wenn die verschlüsselte Datei vollständig ist.

3) Im Zusammenhang damit. Ist es für den Dateidownload eine gute Idee, die Datei (in Stücken) zu entschlüsseln und gleichzeitig an den Benutzer zu senden, oder ist es besser, sie zuerst zu entschlüsseln und später zu senden?

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage