Questão Comprimir e depois criptografar ou vice-versa?


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

Basicamente eu quero passar 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 garantir que a compactação seja o mais eficiente possível.

Então, meu pensamento é que eu deveria compactar os pacotes antes criptografar como um pacote não criptografado irá comprimir melhor do que um criptografado? Ou o contrário?

Eu provavelmente usarei o zlib para a compressão.

Leia mais aqui: http://blog.superuser.com/2011/03/21/compression-and-encryption


85


origem


Escrevendo como "programação"? Seria mais adequado para o Stack Overflow. - Suma
Se eu estivesse perguntando sobre a programação, sim, mas não estou. Esta é uma compressa geral, em seguida, criptografar ou criptografar, em seguida, comprimir pergunta que poderia se aplicar a apenas trabalhar com arquivos simples, se você quisesse. O lado da programação é apenas o contexto pelo qual estou fazendo a pergunta. - Majenko
Veja também: stackoverflow.com/questions/4676095  stackoverflow.com/questions/4399812 - BlueRaja - Danny Pflughoeft
Provavelmente uma pergunta melhor para security.stackexchange.com - Jeff Ferland
Eles sabem sobre compressão, não? - Majenko


Respostas:


Se a criptografia é feita corretamente então 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.

Comprimir antes de criptografar.


169



Mais importante: a compactação adiciona entropia. Adicionar entropia é bom para a sua criptografia (mais difícil de romper com ataques de texto simples conhecidos). - Olli
Além disso, criptografar recursos de custos, criptografar um arquivo menor exigirá menos recursos. Então, comprima antes de criptografar. - GAThrawn
@Olli - não necessariamente se o esquema de compactação adicionar texto conhecido. Na pior das hipóteses, imagine se colocasse um cabeçalho de 512 bytes na frente dos dados e estivesse usando uma criptografia no modo de bloco. - Martin Beckett
Não tenho certeza do motivo pelo qual o comentário de @ Olli seria votado, já que é incorreto; não só é significativamente Menos importante, para qualquer criptografia meio decente, deve ser não é importante em tudo. Ou seja, a força da criptografia deve ser completamente não relacionada à entropia da mensagem. - BlueRaja - Danny Pflughoeft
Se você comprimir tudo, isso só poderá ser feito antes de criptografar a mensagem, mas tenha em mente que isso pode vazar informações sobre a 'compressibilidade' da mensagem original, então você deve considerar se há consequências para esse lado. canal. Considere um arquivo de tamanho fixo que seja todos os 0s ou uma mensagem. O arquivo todo 0 resultará em uma carga útil menor em qualquer esquema de compactação razoável. Não é provável que haja um problema nesse caso de uso específico. - Edward KMETT


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.


21



Bem, isso está correto, mas foi postado duas horas antes de você postou ... Entropia - Konerak


Mesmo se depender do caso de uso específico, 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: http://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf


3





Minha opinião é que, quando você compacta uma mensagem, projeta-a para uma dimensão menor e, portanto, há menos bits, o que significa que a mensagem compactada (assumindo a compactação sem perdas) tem a mesma informação em menos bits (aqueles que você eliminou eram 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, aleatoriedade é outra questão e é aí que os padrões de compressão podem jogar uma chave de macaco.


2





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.


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.


1



Isso parece ser uma repetição das respostas aceitas e secundárias. Cada resposta deve contribuir com uma solução substancialmente nova para a questão. - fixer1234


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.


0



Espere, você não tem isso para trás? Eu pensei que a entropia aumentava à medida que a redundância diminuía. Portanto, a compactação deve aumentar a entropia. - Zan Lynx
Nop, menos entropia = mais padrões. Aleatoriedade tem mais entropia. - AbiusX
Mas isso é em formação entropia por isso é tudo sobre o significado. Aleatoriedade não significa nada, por isso não se aplica. Uma frase em inglês pode ter letras alteradas e ainda significar a mesma coisa, por isso, tem baixa entropia. Uma frase em inglês comprimida pode ser ilegível se um único bit for alterado para que tenha mais. Ou então eu acho. - Zan Lynx
A entropia não tem a ver com sentido e capacidade de ler ou entender, é tudo sobre padrões. Os arquivos compactados estão cheios de padrões. - AbiusX
@AbiusX: Certo. Padrões E quanto menos padrões, mais entropia. O que significa que a compactação que substitui todos os padrões repetidos por uma única cópia aumenta a entropia. - Zan Lynx