AES vs Blowfish para criptografia de arquivos

106

Quero criptografar um arquivo binário. Meu objetivo é evitar que alguém leia o arquivo sem a senha.

Qual é a melhor solução, AES ou Blowfish com o mesmo comprimento de chave? Podemos supor que o atacante possui grandes recursos (softwares, conhecimento, dinheiro) para crackear o arquivo.

mimrock
fonte
4
Blowfish tem mais de uma década, eu acho que você quer dizer aes vs dois peixes ...
torre
Você está certo, eu poderia ter perguntado isso. Felizmente Jerry resumiu o assunto muito bem para mim.
mimrock de
@Rook Quanto mais antigo, melhor é a regra para algoritmos de segurança. Novos algoritmos são para pessoas que estão mais preocupadas com o desempenho do que com a segurança.
ceving

Respostas:

187

Provavelmente AES. Blowfish foi o predecessor direto do Twofish. Twofish foi a entrada de Bruce Schneier na competição que produziu AES. Ele foi julgado como inferior a uma entrada chamada Rijndael, que foi o que se tornou AES.

Interessante à parte: em um ponto da competição, todos os participantes foram convidados a dar sua opinião sobre a classificação das cifras. Provavelmente não é nenhuma surpresa que cada equipe escolheu sua própria entrada como a melhor - mas todas as outras equipes escolheram Rijndael como a segunda melhor.

Dito isso, existem algumas diferenças básicas nos objetivos básicos do Blowfish vs. AES que podem (indiscutivelmente) favorecer o Blowfish em termos de segurança absoluta. Em particular, Blowfish tenta dificultar um ataque de força bruta (exaustão da tecla) tornando a configuração da tecla inicial uma operação bastante lenta. Para um usuário normal, isso é de pouca importância (ainda é menos de um milissegundo), mas se você está tentando milhões de chaves por segundo para quebrá-lo, a diferença é bastante substancial.

No final das contas, não vejo isso como uma grande vantagem, no entanto. Eu geralmente recomendo AES. Minhas próximas escolhas provavelmente seriam Serpent, MARS e Twofish, nessa ordem. O Blowfish viria em algum lugar depois daqueles (embora haja alguns outros que eu provavelmente recomendaria antes do Blowfish).

Jerry Coffin
fonte
11
Acho que outros algoritmos foram considerados mais seguros do que o Rijndael, mas ofereceu um desempenho muito bom, enquanto sua segurança foi considerada boa o suficiente. Projetar um algoritmo de cifra é sempre uma troca entre segurança e desempenho.
CodesInChaos
10
@CodeInChaos: Dependendo do seu ponto de vista, isso é pelo menos meio que verdade - o Serpent foi provavelmente o design mais conservador. Em particular, eles perceberam que uma versão de 16 rodadas seria suficiente - então dobraram para 32 rodadas. O melhor ataque conhecido atualmente é eficaz contra apenas 11 rodadas. Se a pergunta original não tivesse restringido especificamente as escolhas a AES e Blowfish, e simplesmente pedisse a cifra mais segura e razoavelmente conhecida, eu provavelmente teria dito Serpente ...
Jerry Coffin
Além disso, esse "aparte interessante" surgiu em várias questões e fontes quando estudei para meu exame CompTIA Security +. As pequenas coisas podem não ser tão inúteis afinal!
Everlight
Blowfishé o mais rápido
user924
22

É um fato raramente reconhecido que o tamanho do bloco de uma cifra de bloco também é uma consideração importante de segurança (embora nem de longe tão importante quanto o tamanho da chave).

Blowfish (e a maioria das outras cifras de bloco da mesma era, como 3DES e IDEA) têm um tamanho de bloco de 64 bits, o que é considerado insuficiente para os tamanhos de arquivo grandes que são comuns hoje em dia (quanto maior o arquivo e menor o tamanho do bloco , maior a probabilidade de um bloco repetido no texto cifrado - e esses blocos repetidos são extremamente úteis na criptoanálise).

O AES, por outro lado, tem um tamanho de bloco de 128 bits. Esta consideração por si só é justificativa para usar AES em vez de Blowfish.

caf
fonte
2
A vantagem de um tamanho de bloco de 64 bits é que ele torna mais fácil colocar o novo algoritmo em um aplicativo antigo como um substituto para o (3-) DES.
dajames
O tamanho do bloco é um argumento interessante. Eu escrevi, há vários meses, um artigo que teoriza que o tamanho do bloco de qualquer cifra simétrica pode ser estendido para qualquer tamanho: cubicspot.blogspot.com/2013/02/…
CubicleSoft
16

Em termos dos algoritmos em si, eu escolheria o AES, pela simples razão de que ele foi aceito pelo NIST e será revisado por pares e criptanalisado por anos. No entanto, eu sugeriria isso em aplicações práticas, a menos que você esteja armazenando algum arquivo que o governo queira manter em segredo (nesse caso, a NSA provavelmente forneceria a você um algoritmo melhor do que AES e Blowfish), usar qualquer um desses algoritmos venceu não faz muita diferença. Toda a segurança deve estar na chave, e ambos os algoritmos são resistentes a ataques de força bruta. Blowfish só demonstrou ser fraco em implementações que não fazem uso das 16 rodadas completas. E embora o AES seja mais recente, esse fato deve fazer você se inclinar mais para o BlowFish (se você levar apenas a idade em consideração). Pense desta forma,

Aqui está o que eu colocaria para você ... em vez de olhar para esses dois algoritmos e tentar escolher entre o algoritmo, por que você não olha para o seu esquema de geração de chave. Um invasor em potencial que deseja descriptografar seu arquivo não vai sentar lá e apresentar um conjunto teórico de chaves que podem ser usadas e, em seguida, fazer um ataque de força bruta que pode levar meses. Em vez disso, ele vai explorar outra coisa, como atacar o hardware do seu servidor, fazer engenharia reversa do assembly para ver a chave, tentar encontrar algum arquivo de configuração que contenha a chave ou talvez chantagear seu amigo para copiar um arquivo do seu computador . Esses estarão onde você está mais vulnerável, não o algoritmo.

Nerdybeardo
fonte
4
O AES foi recentemente adicionado à lista de "cifras quebradas" na Wikipedia, mas o pior ataque contra Blowfish é contra míseras quatro rodadas e está claramente ausente da lista de cifras quebradas. O comentário de Bruce sobre ficar surpreso que as pessoas ainda usam Blowfish é o que afasta os implementadores. No entanto, ele não está quebrado, tem suporte para tamanhos de chave variáveis, suporta tamanhos de chave maiores do que AES e, de uma perspectiva de programação, é fácil de implementar em comparação com a maioria das outras cifras de bloco simétrico. Blowfish sobreviveu ao teste do tempo, que é a maior ameaça para qualquer cifra simétrica.
CubicleSoft
Eu concordo que o AES está longe de estar quebrado. No entanto, nos próximos 10 anos ou mais, precisaremos de um novo padrão. Além disso, qualquer um dos finalistas do AES foram cifras fantásticas. A serpente é considerada por muitos a mais difícil de quebrar, mas AES foi a mais elegante. (E sim, se você olhar como você faz a criptografia e descriptografia, é definitivamente elegante.)
nerdybeardo
8

AES.

(Também estou assumindo que você quer dizer dois peixes, não o baiacu muito mais velho e mais fraco)

Ambos (AES e twofish) são bons algoritmos. No entanto, mesmo que fossem iguais ou duas vezes estivessem um pouco à frente no mérito técnico, AINDA escolheria AES.

Por quê? Publicidade. AES é O padrão para criptografia governamental e, portanto, milhões de outras entidades também o usam. Um criptanalista talentoso simplesmente obtém mais "retorno do investimento" ao encontrar uma falha no AES do que o muito menos conhecido e usado.

A obscuridade não oferece proteção na criptografia. Mais corpos procurando, estudando, sondando, atacando um algoritmo é sempre melhor. Você quer o algoritmo mais "examinado" possível e, agora, esse é o AES. Se um algoritmo não está sujeito a um escrutínio intenso e contínuo, você deve confiar menos em sua força. Claro que o twofish não foi comprometido. É por causa da força da cifra ou simplesmente porque poucas pessoas deram uma olhada de perto ... AINDA

Gerald Davis
fonte
5

A escolha do algoritmo provavelmente não importa muito. Eu usaria o AES, já que foi mais pesquisado. O que é muito mais importante é escolher o modo de operação correto e a função de derivação de chave .

Você pode querer dar uma olhada na especificação do formato TrueCrypt para se inspirar, se quiser acesso aleatório rápido. Se você não precisa de acesso aleatório, então o XTS não é o modo ideal, já que tem pontos fracos que outros modos não têm. E você pode querer adicionar algum tipo de verificação de integridade (ou código de autenticação de mensagem) também.

CodesInChaos
fonte
1
Absolutamente - é extremamente importante usar uma boa função de derivação de chave, como PBKDF2.
caf
3

Sei que essa resposta viola os termos de sua pergunta, mas acho que a resposta correta para sua intenção é simplesmente esta: use o algoritmo que permitir o comprimento de chave mais longo e, em seguida, certifique-se de escolher uma chave realmente boa. Pequenas diferenças no desempenho da maioria dos algoritmos bem considerados (criptograficamente e cronologicamente) são superadas por alguns bits extras de uma chave.

Mike Jones
fonte
7
Eu não posso concordar. A cifra Lucifer da IBM (predecessora do DES) usada como chave de 128 bits - mas o DES (com apenas uma chave de 56 bits) acabou sendo muito mais seguro depois que a criptoanálise diferencial foi (re) descoberta.
Jerry Coffin de
3
Apenas observar o comprimento da chave é uma métrica muito pobre.
Gerald Davis
2
É por isso que eu disse "algoritmos mais bem vistos". Se você considerar Blowfish 128bit inferior a AES 128bit, você teria que concordar que Blowfish 256bit expande AES 128bit para fora d'água. Da mesma forma, a geração e o gerenciamento de chaves são igualmente importantes. Se sua chave for "senha", realmente não importa o algoritmo que você usa. O que estou dizendo é que o OP provavelmente está olhando para a coisa errada.
Mike Jones
2
Afirma-se na pergunta que as chaves serão derivadas de senhas. É provável que quebrar o sistema por força bruta da senha seja muito mais fácil do que atacar qualquer um dos algoritmos mencionados aqui. O comprimento da chave é quase totalmente irrelevante quando a chave é derivada de uma senha.
dajames
Você anota minha resposta, apesar do fato de dizer exatamente a mesma coisa que eu? Eu disse o comprimento da chave e escolha uma chave realmente boa. Por qual definição de "bom" você consideraria uma chave boa se ela não preenchesse todos os bits da chave?
Mike Jones
3

Ambos os algoritmos (AES e twofish) são considerados muito seguros. Isso foi amplamente abordado em outras respostas.

No entanto, como o AES é amplamente usado agora em 2016, ele foi especificamente acelerado por hardware em várias plataformas, como ARM e x86. Embora não seja significativamente mais rápido do que o twofish antes da aceleração de hardware, o AES agora é muito mais rápido graças às instruções dedicadas da CPU.

galinette
fonte