Sou um iniciante em criptografia. Projetei um algoritmo de criptografia-descriptografia baseado em senha, que usa um salt aleatório e uma senha para criptografar uma mensagem. Estou usando SHA-512 para hash, operações de matriz para embaralhar, XOR bit a bit para misturar dados e recuperar. O comprimento do salt e do texto cifrado é de 256 letras.
Até onde sei, o efeito de avalanche significa que uma ligeira alteração em qualquer um dos seguintes:
- cifra
- senha
- salt
deve mudar a saída drasticamente.
Em minha implementação, se eu mudar o salt ou a cifra, não vejo nenhuma grande mudança em meu resultado. No entanto, quando há uma pequena mudança na senha, a saída muda drasticamente.
Então, minhas perguntas:
- Meu entendimento do efeito da avalanche está geralmente correto? Se não, o que deveria ser?
- O que posso fazer para produzir melhor o efeito de avalanche na minha (ou em qualquer outra) cifra? devo reduzir o comprimento do sal menos e gerar um texto cifrado menor para criar um efeito de avalanche? Se não, como posso fazer isso?
Comentários
- Por curiosidade, para que você está usando o hash?
- Bem-vindo ao Cryptography Stack Exchange. @Avinash, sua pergunta foi migrada para cá porque é mais no tópico do que no Stack Overflow. Por favor, registre sua conta aqui para poder comentar e aceitar uma resposta.
- Se você quiser alguma resposta construtiva, deve mostrar como sua cifra funciona atualmente (em fórmulas matemáticas, de preferência). Então, podemos dar uma olhada para ver como melhorá-lo.
- Eu ‘ removi comentários semelhantes a ” não ‘ crie sua própria cifra ” – aqui na criptografia ‘ s perfeitamente aceitável tentar, embora você deva entender que é por sua própria conta e risco, é claro 🙂 Eu ‘ também editei a questão um pouco para focar mais no efeito de avalanche na ausência das construções de cifras relevantes. Se alguém achar que isso é desnecessário, sinta-se à vontade para reverter ou melhorar o que eu ‘ fiz.
Resposta
Não se preocupe em alterar o algoritmo de criptografia real. Leia sobre o princípio de Kerckhoffs “: você deve apenas mude coisas como a chave e o IV, não o algoritmo real.
Para testar sua avalanche, gire um bit em sua chave. Isso deve mudar cerca de metade dos bits em sua saída.
Para design de cifras, a Criptografia aplicada já foi sugerida. Além disso, você precisa examinar a introdução de Difusão e Confusão em seu algoritmo. Também vale a pena estudar os algoritmos existentes para ver como funcionam as coisas. Comecei projetando minha própria cifra Feistel simples, de forma que grande parte da estrutura circundante já foi feita para você. Também simplifica o projeto, pois a função F não precisa ser invertível. Isso permite muito mais flexibilidade nessa área.
O aviso sobre não usar seu próprio design para nada além de um exercício de aprendizagem é bom.
Comentários
- Muito obrigado ….
- Cypher / cipher é uma coisa do Reino Unido / EUA.
Resposta
Eu acho incrível que você esteja construindo seu próprio algoritmo de criptografia-descriptografia. Você aprenderá muito sobre criptografia dessa forma. Até agora, todos os que constroem um O algoritmo de criptografia e descriptografia cria algo terrivelmente defeituoso de uma forma ou de outra – muito educacional – na primeira vez.
terminologia
Se entendi sua pergunta corretamente, você tem um perfeito questão razoável sobre o efeito da avalanche, mas a maioria das pessoas neste site está tão confusa sobre sua terminologia fora do padrão que nem consegue entender o que você está perguntando.
Se entendi sua pergunta corretamente, você está construindo um sistema de criptografia-descriptografia que recebe texto simples como entrada, armazena dados como arquivos criptografados e, mais tarde, permite que alguém com a senha correta descriptografe esses arquivos armazenados e recupere texto simples descriptografado bit a bit idêntico à entrada de texto simples original.
Como você provavelmente já sabe, um programa de criptografia típico cria arquivos criptografados que começam com um vetor de inicialização (IV) que foi recentemente gerado por um gerador de números aleatórios criptograficamente seguro quando o arquivo criptografado foi criado.O programa de criptografia divide o arquivo de entrada em blocos de texto simples de algum tamanho de bloco fixo, usa alguns modo de cifra de bloco de operação no “modo de criptografia” para processar cada bloco (e a chave de criptografia) por meio de uma cifra de bloco para eventualmente terminar com um bloco criptografado de o mesmo tamanho de bloco, que é anexado ao arquivo criptografado. Freqüentemente, há alguns bits complicados no final relacionados a “preenchimento” e “autenticação de mensagem”.
Mais tarde, o programa de descriptografia divide o arquivo criptografado em blocos criptografados do mesmo tamanho de bloco fixo, alimenta cada bloco ( e a chave de criptografia) por meio da cifra de bloco usando o mesmo modo de operação de cifra de bloco no “modo de descriptografia” para recuperar o bloco de texto simples e concatena todos os blocos de texto simples para recuperar um arquivo bit a bit idêntico ao arquivo de texto simples original .
Estou usando SHA-512 para hash
OK, SHA-512 é um excelente algoritmo de hash. Se você estiver usando isso como parte da função de rodada interna ou para gerar subchaves a partir da chave de criptografia principal, funcionará; parece desnecessariamente complicado.
Se você estiver usando SHA-512 como uma função de derivação de chave (KDF) para gerar a chave de criptografia principal da senha, muitas pessoas diriam que não é complicado o suficiente.
operações de matriz para embaralhar
Isso é meio incomum, mas pode funcionar.
XOR bit a bit para misturar dados e recuperar.
Praticamente todos os algoritmos de criptografia modernos usam muitas operações XOR bit a bit. Muitos algoritmos de criptografia modernos são projetados para usar apenas adições modulares, rotação com valores de rotação fixos e XORs (ARX) no loop interno (iteração redonda).
Sou muito bonito que uma função redonda interna que usa apenas XOR, ou apenas rotação, ou apenas adição modular, será fatalmente insegura, não importa quantas iterações de rodada sejam usadas.
(Não sei o suficiente para dizer nada sobre a segurança de sua combinação particular de operações XOR e de matriz).
O comprimento do salt e o texto cifrado tem 256 letras.
Presumo que você quisesse dizer “O comprimento do vetor de inicialização (IV) e cada bloco de texto cifrado tem 256 letras . “
Um” sal “é usado em hash criptográfico unilateral – consulte Você pode me ajudar a entender o que é salt ” é? . Um “IV” é usado na criptografia bidirecional – criptografia e descriptografia. Tanto “salt” quanto “IV” são valores aleatórios recém-gerados que são considerados conhecidos publicamente, mas a terminologia sugere que eles serão usados em diferentes tipos de sistemas.
Quase todo mundo define o comprimento de o IV é igual ao tamanho do bloco, então é ótimo.
Meu entendimento é que praticamente todas as cifras desenvolvidas antes do anúncio do concurso AES de 1997 usavam um tamanho de bloco de 64 bits (8 bytes) ou menos. Alguns criptógrafos aparentemente pensei que não era suficiente, mas pelo que eu sei todos agora parecem pensar que um tamanho de bloco de 128 bits (16 bytes) é adequado.
Um tamanho de bloco de 256 bytes funcionaria; parece desnecessariamente grande.
o efeito de avalanche
Ao executar cada bloco de texto simples através da cifra de bloco (em algum modo de criptografia), o efeito de avalanche significa que uma única alteração de bit em qualquer um dos seguintes:
- dados no bloco de texto simples
- senha
- IV
deve alterar o produzir bloco de texto cifrado drasticamente (cerca de metade dos bits).
Ao executar cada bloco de texto cifrado por meio da cifra de bloco (em algum modo de descriptografia), o efeito avalanche significa que uma única alteração de bit em qualquer um dos seguintes:
- bloco de texto cifrado
- senha
- IV
deve alterar drasticamente o bloco de “texto simples” de saída (cerca de metade dos bits).
Na minha implementação, se eu alterar o salt ou a cifra, não vejo grandes mudanças em minha saída.
Acho que você quis dizer uma de duas coisas:
- “se eu mudar um único bit perto do começando o f o arquivo criptografado (ou seja, no IV ou em algum bloco de texto cifrado anterior), não vejo nenhuma grande mudança no final do meu arquivo de texto simples de saída. “
Esta falta de a mudança sempre acontece ao usar o Cipher Block Chaining (CBC) (seguro) ou alguns outros modos de operação. Portanto, não é necessariamente um problema.
No entanto, isso pode ser um problema se você pensava que estava usando o modo (seguro) Propagating Cipher Block Chaining (PCBC), onde esta falta de alteração indica um bug na implementação.
Além disso, essa falta de mudança é o resultado esperado ao usar o modo (inseguro) Electronic Codebook (ECB).
Não importa o modo de operação que você selecionar, o programa de descriptografia deve imprimir grandes avisos assustadores de que o arquivo falhou na verificação de autenticação MAC sempre que qualquer bit do arquivo criptografado for danificado.
- “se eu mudar um único bit em um único bloco de texto criptografado criptografado em um arquivo criptografado, não vejo nenhuma grande mudança no bloco de texto simples correspondente em meu arquivo de texto simples de saída. “
Sim, isso indica uma falha séria – o o algoritmo de codificação de bloco não tem um bom efeito de avalanche. Isso é um sinal de que o algoritmo não tem mixagem suficiente. Isso geralmente significa que o sistema é vulnerável a ataque de texto cifrado escolhido e ataques semelhantes.
O que posso fazer para produzir melhor o efeito de avalanche em minha (ou em qualquer) cifra? devo reduzir o comprimento do sal menos e gerar um texto cifrado menor para criar um efeito de avalanche?
Presumo que você quisesse perguntar “devo reduzir o tamanho de o IV e o tamanho do bloco para criar um efeito de avalanche? “
Isso geralmente não é necessário.
As abordagens mais comuns para produzir o efeito de avalanche estão listadas na Wikipedia cifra de bloco :
Não conheço nenhuma cifra de bloco que produza uma avalanche completa após uma única rodada. As pessoas que projetam cifras de bloco tentam escolher um número de rodadas suficiente para fazer com que a cifra de bloco resista a todos os ataques criptográficos padrão , que são mais que suficientes para produzir uma avalanche completa .
As pessoas que projetam uma cifra de bloco normalmente escolhem um esquema geral de design de cifra de bloco e fazem o programa de cifra de bloco iterá-lo repetidamente o número selecionado de rodadas. Alguns dos esquemas de design de cifra de bloco geral mais populares são:
- rede de substituição-permutação
- cifra Feistel
- cifra Lai-Massey
Cada um deles requer alguma função interna não linear. As primeiras cifras de bloco geralmente usam alguma função interna complicada em cada rodada que quase resulta em avalanche em uma única rodada. Cifras modernas costumam usar uma função interna muito simples e rápida a cada rodada (algumas funções ARX) com não linearidade suficiente para, eventualmente, atingir uma avalanche após um grande número de rodadas.
Comentários
- Observação lateral: a cifra khazad tem difusão total após uma única rodada. Eu ‘ criei brinquedos que também fazem isso, ‘ certamente é possível, e descobrir maneiras de fazer isso é divertido.