Melhor abordagem para criptografar arquivos grandes com php

Estou desenvolvendo um projeto em php onde é necessário criptografar arquivos enviados por usuários. Esses arquivos podem ser de 1mb a 200mb mais ou menos. Pesquisando na web, cheguei à conclusão de que a melhor maneira de fazer isso era dividir arquivos em pedaços de, por exemplo, 4096 bytes. Então eu criptografo cada pedaço e o adiciono ao arquivo criptografado completo. Na verdade, estou usando criptografia mcrypt e AES-256 no modo CBC.

Então, minhas perguntas são: 1) Eu tenho que criar um novo vetor inicial para cada pedaço, ou posso obter os últimos 16 bytes do último bloco de um pedaço anterior como o vetor inicial do primeiro bloco do pedaço atual? Isso resultará em apenas um iv para ser anexado no início do arquivo criptografado, e não um iv para cada parte a ser anexada antes do bloco encriptado.

2) Para adicionar uma autenticação HMAC. Esta questão está ligada à anterior. Devo adicioná-lo para o arquivo inteiro ou individualmente para cada pedaço. Nesse caso, fazer isso para o arquivo inteiro é um problema, já que ele é normalmente adicionado no início do arquivo, e não consigo calcular o hmac até que o arquivo criptografado esteja completo.

3) Relacionado com isso. Para download de arquivo, é uma boa idéia descriptografar (em partes) e enviar arquivo para o usuário simultaneamente ou é melhor descriptografá-lo primeiro e enviá-lo depois?

obrigado

questionAnswers(2)

yourAnswerToTheQuestion