Pergunta

Eu estou escrevendo um programa simples para criptografia de arquivo. Principalmente como um exercício acadêmico, mas, possivelmente, para futura utilização séria. Todo o trabalho pesado é feito com bibliotecas de terceiros, mas a juntar as peças de forma segura ainda é um grande desafio para o não-criptógrafo. Basicamente, eu tenho quase tudo funcionando da maneira que eu acho que deveria.

Eu estou usando AES de 128 bits para a criptografia com um comprimento de chave de 128 bits. Eu quero que os usuários possam entrar em senhas de comprimento variável, então eu decidi botar a senha com MD5 e, em seguida, usar o hash como a chave. Achei que isso era aceitável -. A chave é sempre suposto ser um segredo, então não há nenhuma razão para se preocupar com ataques de colisão

Agora que eu tenho implementado isso, eu corri através de um par artigos indicando que esta é uma má idéia. Minha pergunta é: por quê? Se uma senha boa é escolhido, a cifra é suposto ser forte o suficiente por si só para não revelar a chave exceto através de uma extraordinária (leia-se: atualmente inviável) esforço de força bruta, certo? Deveria eu estar usando algo como PBKDF2 para gerar a chave ou isso é apenas um exagero para todos, mas a maioria das aplicações criptográficas extremas?

Foi útil?

Solução

Este artigo sobre Key fortalecimento pode ajudá-lo. Basicamente, você quer fazer a chave mais forte (mais entropia do que em uma senha) e fazer a sua derivação a partir da senha confiável demorado.

Outras dicas

Bem, como o seu post é geral, deixe-me dizer algumas coisas gerais:

  1. MD5, SHA-0, SHA-1 são hashes quebrado, e você não deve usá-los para qualquer finalidade criptográfico, o uso SHA-2.

  2. Você deve, em geral, o uso bem conhecido e documentado abordagens para derriving chaves de senhas (não mencionar o idioma, por favor diga qual deles você está usando).

  3. Ao fazer qualquer tipo de programação de segurança, a coisa mais importante a fazer é, antes de fazer qualquer coisa, documentar estritamente o seu 'modelo de ameaça'. Esta é basicamente uma lista de todos os ataques que você está tentando evitar, e como você vai fazer isso, e também que tipo ataques você não pode prevenir contra. É muito divertido de fazer, e você começa a aprender sobre todos os ataques e outras coisas interessantes.

A resposta à sua nova pergunta é: você definitivamente deveria estar usando algo como PBKDF2 para gerar a chave.

Eu suponho que você vai ter uma senha (pelo menos 10 caracteres números inferiores e superiores pontuação certo?) Que irá gerar uma chave AES-256. A chave será usada para criptografar / descriptografar o arquivo (s). Você quer usar algo como PBKDF2 a fim de diminuir a capacidade de alguém que recebe seu arquivo para descobrir sua chave / senha através de ataques de força bruta. Usando algo como PBKDF2 (e um sal aleatório!) Aumenta o custo de quebrar a criptografia no arquivo.

O que eu realmente recomendo é que você use isso como um brinquedo e não para proteger algo que você realmente se preocupam. Se você não é um especialista em segurança, você vai cometer erros, mesmo os especialistas (e muitos deles juntos) erros make: http://www.sslshopper.com/article-ssl-and-tls-renegotiation-vulnerability-discovered.html

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