CBC requer um IV : o primeiro bloco de dados deve ser aleatório. Ele é enviado com os dados para que o destinatário tenha o que eles precisam para descriptografar a mensagem. O IV para CBC deve ser uniformemente aleatório e imprevisível . O comando openssl enc
cria um IV com 8 bytes fixos e 8 bytes aleatórios (deve ser 16 bytes aleatórios). Quando você criptografa a mesma mensagem duas vezes, o IV muda. (Há uma opção -nosalt
para usar um IV fixo, o que é ainda pior para a segurança e não deve ser feito a menos que a própria senha seja gerada aleatoriamente para uma única mensagem.)
Todos os modos de criptografia não quebrados têm um IV ou equivalente, de forma que a criptografia da mesma mensagem duas vezes resulta em diferentes textos cifrados. Isso é necessário, pelo menos, para que um adversário não possa detectar se duas mensagens criptografadas têm o mesmo texto simples. Repetir o IV para mensagens distintas pode abrir outros ataques; por exemplo, com o CBC, um prefixo comum para duas mensagens é visível no texto cifrado se o IV for reutilizado. Se você descobrir que criptografar a mesma mensagem duas vezes leva ao mesmo texto cifrado, algo está quebrado.
Não use o comando openssl
para trabalhos sérios . Ele serve apenas como uma vitrine das funções da biblioteca e é mal projetado até para isso. Como vimos, o comando enc
não faz as coisas com segurança, já que seu IV não é tão aleatório quanto deveria. Um problema pior é a maneira como a chave é derivada da senha: openssl enc
usa uma única rodada de MD5 , o que é ruim - derivar uma chave de uma senha deve usar uma função intrinsecamente lenta (a função de alongamento de teclas ) para retardar as tentativas de quebra de força bruta, onde o invasor tenta senhas prováveis (palavras do dicionário, variações de 1337, etc.).
A principal ferramenta de criptografia em nível de usuário é GPG , disponível no Ubuntu no < hnf="http://packages.ubuntu.com/gnupg"> gnupg ou gnupg pacote. Para criptografar um arquivo com uma senha, use
gpg -c filename
Você receberá uma solicitação para a frase secreta. O arquivo criptografado será armazenado em filename.gpg
. Para descriptografar, execute gpg filename.gpg
e insira a frase secreta.