Comprime e criptografa ou vice-versa?

86
Estou escrevendo um sistema VPN que criptografa (AES256) seu tráfego através da rede (por que escrever o meu próprio quando há 1.000.001 outros já lá fora? Bem, o meu é um especial para uma tarefa específica que nenhum dos outros se encaixam ).

Basicamente, quero passar o meu pensamento além de você para ter certeza de que estou fazendo isso na ordem correta.

No momento, os pacotes são apenas criptografados antes de serem enviados, mas eu quero adicionar algum nível de compactação a eles para otimizar um pouco a transferência de dados. Compressão não pesada - não quero maximizar a CPU o tempo todo, mas quero ter certeza de que a compactação será o mais eficiente possível.

Então, meu pensamento é, eu deveria compactar os pacotes antes de criptografar, pois um pacote não criptografado será compactado melhor do que um criptografado? Ou o contrário?

Provavelmente usarei o zlib para a compactação.

Leia mais no blog do Super User.

    
por Majenko 15.03.2011 / 10:37

7 respostas

172

Se a criptografia for feita corretamente , o resultado é basicamente dados aleatórios. A maioria dos esquemas de compressão funciona encontrando padrões em seus dados que podem ser, de alguma forma, fatorados e, graças à criptografia, agora não há nenhum; os dados são completamente incompressíveis.

Comprima antes de criptografar.

    
por 15.03.2011 / 11:41
21

Comprimir antes da criptografia. Os dados compactados podem variar consideravelmente para pequenas alterações nos dados de origem, dificultando, assim, a realização de análise criptográfica diferencial.

Além disso, como aponta o Sr.Alpha, se você criptografar primeiro, o resultado é muito difícil de compactar.

    
por 15.03.2011 / 14:01
3

Mesmo que isso dependa do caso de uso específico, eu aconselho Encrypt-then-Compress. Caso contrário, um invasor pode vazar informações do número de blocos criptografados.

Assumimos que um usuário envia uma mensagem para o servidor e um invasor com a possibilidade de anexar texto à mensagem do usuário antes de enviar (por meio de javascript, por exemplo). O usuário quer enviar alguns dados sensatos ao servidor e o invasor deseja obter esses dados. Assim, ele pode tentar anexar mensagens diferentes aos dados que o usuário envia ao servidor. Em seguida, o usuário compacta sua mensagem e o texto anexado do invasor. Assumimos uma compressão DEFLATE LZ77, então a função substitui a mesma informação por um ponteiro para a primeira aparição. Portanto, se o invasor puder reproduzir o texto simples do furo, a função de compactação reduzirá o tamanho do texto simples para o tamanho original e um ponteiro. E após a criptografia, o invasor pode contar o número de blocos de cifra, para que ele possa ver se os dados anexados foram os mesmos que os dados enviados pelo usuário ao servidor. Mesmo que esse caso pareça um pouco construído, é um sério problema de segurança no TLS. Essa ideia é usada por um ataque chamado CRIME para vazar cookies em uma conexão TLS para roubar sessões.

fonte: link

    
por 14.01.2014 / 22:32
2

Minha opinião é que quando você compacta uma mensagem, você a projeta para uma dimensão menor e, portanto, há menos bits, o que significa que a mensagem compactada (assumindo compactação sem perda) tem a mesma informação em menos bits foram redundantes!) Então você tem mais informações por bit e, consequentemente, mais entropia por bit, mas a mesma entropia total que você tinha antes quando a mensagem não foi compactada. Agora, a aleatoriedade é outra questão e é aí que os padrões de compressão podem jogar uma chave de macaco.

    
por 09.10.2012 / 06:11
1

A compactação deve ser feita antes da criptografia. um usuário não quer perder tempo esperando pela transferência de dados, mas precisa que seja feito imediatamente sem perder tempo.

    
por 16.03.2011 / 09:39
1

Compactação antes da criptografia, como foi apontado anteriormente. A compactação procura a estrutura que pode compactar. A criptografia embaralha os dados para evitar que a estrutura seja detectada. Ao comprimir primeiro, é muito mais provável que você tenha um arquivo menor e, portanto, menos carga útil para transferir. A criptografia fará seu trabalho independentemente de estar ou não compactada e, como já foi apontado anteriormente, provavelmente será mais difícil executar a análise cripto diferencial em um arquivo compactado.

    
por 19.06.2015 / 21:54
0

A compactação reduz a entropia da informação. A compactação máxima faz a entropia mínima. Para um dado perfeitamente criptografado (ruído), a entropia máxima e mínima é a mesma.

    
por 16.03.2011 / 01:19