Pergunta

Estou escrevendo um programa que pega uma senha do usuário e, em seguida, grava alguns dados criptografados para arquivar. O método que eu criei até agora é o seguinte:

  • Gere um IV de 128 bits a partir do hash do nome do arquivo e do tempo do sistema e escreva isso no início do arquivo.
  • Gere uma chave de 256 bits a partir da senha usando SHA256.
  • Criptografar os dados (começando com uma assinatura estática de 32 bits) com essa tecla usando AES no modo CBC e escreva-os no arquivo.

Ao descriptografar, o IV é lido e, em seguida, a senha usada para gerar a chave da mesma maneira, e os primeiros 32 bits são comparados com o que a assinatura deve ser para saber se a chave é válida.

No entanto, eu estava olhando para o Exemplo de AES Fornecido em PolarSSL (A biblioteca que estou usando para fazer o hash e a criptografia) e eles usam um método muito mais complexo:

  • Gere um IV de 128 bits a partir do hash do nome do arquivo e do arquivo e escreva isso no início do arquivo.
  • Gere uma chave de 256 bits a partir de hash (sha256) a senha e o IV juntos 8192 vezes.
  • Inicialize o HMAC com esta chave.
  • Criptografar os dados com essa tecla usando AES no modo CBC e escreva -os no arquivo, enquanto atualiza o HMAC a cada bloco criptografado.
  • Escreva o HMAC até o final do arquivo.

Tenho a impressão de que o segundo método é mais seguro, mas não tenho conhecimento suficiente para apoiar isso, além disso, parece mais complicado.

  • Se for mais seguro, quais são as razões para isso?
  • Anexar um HMAC até o final do arquivo está mais seguro do que ter uma assinatura no início dos dados criptografados?
  • O hashing 8192 vezes aumenta a segurança?

Observação: Este é um projeto de código aberto; portanto, seja qual for o método que eu use, ele estará disponível gratuitamente para qualquer pessoa.

Foi útil?

Solução

A segunda opção é mais segura.

Seu método, não fornece nenhuma integridade da mensagem. Isso significa que um invasor pode modificar partes do texto cifrado e alterar para o que o texto simples descriptografa. Desde que eles não modifiquem nada que altere sua assinatura estática de 32 bits, você confiará nela. O HMAC no segundo método fornece integridade da mensagem.

Ao hash a chave 8192 vezes, ele adiciona etapas computacionais extras para alguém tentar e fortalecer a chave. Suponha que um usuário escolha uma senha baseada no dicionário. Com o seu método, um invasor deve executar SHA256(someguess) E então tente descriptografar. No entanto, com a versão PolarsSL, eles terão que calcular SHA256(SHA256(SHA256...(SHA256(someguess))) por 8192 vezes. Isso só diminuirá um atacante, mas pode ser suficiente (por enquanto).

Pelo que vale a pena, use uma biblioteca existente. A criptografia é difícil e é propensa a erros sutis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top