Estou escrevendo um sistema VPN que criptografa (AES256) seu tráfego na rede (por que escrever o meu próprio quando já existem 1.000.001 outros por aí? Bem, o meu é especial para uma tarefa específica que nenhum dos outros se encaixa).
Basicamente, quero passar por meu pensamento para ter certeza de que estou fazendo isso na ordem certa.
No momento, os pacotes são criptografados antes de serem enviados, mas quero adicionar um 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 a mais eficiente possível.
Então, na minha opinião, devo compactar os pacotes antes de criptografar, pois um pacote não criptografado comprimirá melhor do que um pacote criptografado? Ou o contrário?
Provavelmente usarei o zlib para a compactação.
Leia mais no blog Superusuário .
fonte
Respostas:
Se a criptografia for feita corretamente , o resultado será basicamente dados aleatórios. A maioria dos esquemas de compactação funciona encontrando padrões em seus dados que podem ser levados em consideração de alguma forma e, graças à criptografia, agora não há; os dados são completamente incompressíveis.
Comprima antes de criptografar.
fonte
Compactar antes da criptografia. Os dados compactados podem variar consideravelmente para pequenas alterações nos dados de origem, dificultando a realização de análises criptográficas diferenciais.
Além disso, como aponta Mr.Alpha, se você criptografar primeiro, o resultado é muito difícil de compactar.
fonte
Mesmo que dependa 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 ao servidor e um invasor com a possibilidade de anexar texto à mensagem do usuário antes de enviar (via javascript, por exemplo). O usuário deseja enviar alguns dados sensíveis para o servidor e o invasor deseja obter esses dados. Para que ele possa 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 atacante. Assumimos uma compactação DEFLATE LZ77, portanto, a função substitui as mesmas informações por um ponteiro para a primeira aparição. Portanto, se o invasor puder reproduzir o texto sem formatação do furo, a função de compactação reduzirá o tamanho do texto sem formatação ao tamanho original e a um ponteiro. E após a criptografia, o invasor pode contar o número de blocos de criptografia, para poder ver se os dados anexados eram os mesmos que o usuário enviou ao servidor. Mesmo que este 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
fonte
A meu ver, quando você comprime uma mensagem, a projeta para uma dimensão mais baixa e, portanto, há menos bits, o que significa que a mensagem compactada (assumindo a compressão sem perdas) tem as mesmas informações em menos bits (os que você livrou foram redundantes! ) Portanto, 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 era compactada. Agora, a aleatoriedade é outra questão e é aí que os padrões de compressão podem acionar uma chave de macaco.
fonte
A compactação deve ser feita antes da criptografia. um usuário não quer gastar tempo aguardando a transferência de dados, mas precisa que seja feito imediatamente, sem perder tempo.
fonte
Compactação antes da criptografia, conforme apontado anteriormente. A compressão procura a estrutura que pode compactar. A criptografia embaralha os dados para evitar que a estrutura seja detectada. Ao compactar 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 compactada ou não e, novamente, como apontado anteriormente, provavelmente será mais difícil realizar análises criptográficas diferenciais em um arquivo compactado.
fonte
A compactação reduz a entropia da informação. A compressão máxima torna a entropia mínima. Para dados perfeitamente criptografados (ruído), a entropia máxima e mínima é a mesma.
fonte