AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 507131
Accepted
Vlastimil Burián
Vlastimil Burián
Asked: 2019-03-20 01:27:34 +0800 CST2019-03-20 01:27:34 +0800 CST 2019-03-20 01:27:34 +0800 CST

Aviso do OpenSSL 1.1.1b: Usar -iter ou -pbkdf2 seria melhor ao descriptografar um arquivo criptografado usando OpenSSL 1.1.0g

  • 772

Hoje recebi este aviso emitido pelo OpenSSL no Cygwin após atualizar alguns pacotes, acredito que opensslfoi incluído:

*** AVISO: derivação de chave obsoleta usada.
Usando -iterou -pbkdf2seria melhor.


A versão OpenSSL usada no Cygwin foi:

OpenSSL 1.1.1b  26 Feb 2019

Isso aconteceu ao descriptografar meu Backup em BluRay, que criei no Linux Mint 19.1 , onde a versão do OpenSSL é significativamente mais antiga :

OpenSSL 1.1.0g  2 Nov 2017

O comando usado para criptografar e descriptografar (basta adicionar -dno final) foi:

$ openssl enc -aes-256-cbc -md sha256 -salt -in "${InputFilePath}" -out "${OutputFilePath}"

O que significa este aviso e posso fazer alguma coisa para evitá-lo em futuros backups?

encryption openssl
  • 3 3 respostas
  • 42576 Views

3 respostas

  • Voted
  1. Best Answer
    Vlastimil Burián
    2019-03-20T01:27:34+08:002019-03-20T01:27:34+08:00

    Comparando a sinopse das duas versões principais e recentes do OpenSSL, deixe-me citar as páginas man.

    OpenSSL 1.1.0

    openssl enc -ciphername [-help] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]
    

    OpenSSL 1.1.1

    openssl enc -cipher [-help] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a] [-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-iter count] [-pbkdf2] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-rand file...] [-writerand file] [-engine id]
    

    Obviamente, existem algumas diferenças maiores, ou seja, considerando esta questão, existem esses dois switches ausentes no 1.1.0:

    • pbkdf2

    • iter


    Você tem basicamente duas opções agora. Ignore o aviso ou ajuste seu comando de criptografia para algo como:

    openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -in InputFilePath -out OutputFilePath
    

    Onde esses interruptores:

    • -aes-256-cbcé o que você deve usar para proteção máxima ou a versão de 128 bits, o 3DES (Triple DES) foi abandonado há algum tempo, veja Triple DES foi preterido pelo NIST em 2017 , enquanto o AES é muito acelerado por todas as CPUs modernas; você pode simplesmente verificar se sua CPU possui o conjunto de instruções AES-NI, por exemplo, usando grep aes /proc/cpuinfo; vencer, vencer

    • -md sha512 é a variante mais rápida da família de funções SHA-2 em comparação com SHA-256 , embora possa ser um pouco mais segura; vencer, vencer

    • -pbkdf2: use o algoritmo PBKDF2 (Função de Derivação de Chave Baseada em Senha 2)

    • -iter 100000está substituindo a contagem padrão de iterações para a senha, citando a página man:

      Use um determinado número de iterações na senha para derivar a chave de criptografia. Valores altos aumentam o tempo necessário para forçar o arquivo resultante com força bruta. Esta opção permite o uso do algoritmo PBKDF2 para derivar a chave.

    • 20
  2. K.Karamazen
    2019-04-10T09:52:15+08:002019-04-10T09:52:15+08:00

    Recentemente eu instalei a versão mais recente do cygwin. "openssl" começou a dar um aviso:

    *** WARNING : deprecated key derivation used.
    Using -iter or -pbkdf2 would be better.
    

    Então agora eu uso o seguinte para criptografar:

    openssl aes-256-cbc -salt -pbkdf2 -in name -out name.aes
    

    e o seguinte para descriptografar:

    openssl aes-256-cbc -d -salt -pbkdf2 -in name.aes -out name
    
    • 7
  3. Xen2050
    2019-03-21T16:38:00+08:002019-03-21T16:38:00+08:00

    Parece que o OpenSSL está finalmente, depois de pelo menos 6 anos, reconhecendo que o enccomando tem algumas falhas bastante sérias (sua própria página de manual as chama de "bugs"). Talvez eles estejam sendo corrigidos agora, mas se seus dados são importantes, por que não usar uma ferramenta (relativamente) muito mais segura como o GnuPG ? Você também não precisa necessariamente usar criptografia de chave pública, o gpg também faz criptografia convencional (somente senha/arquivo-chave).

    Aqui está um trecho da minha outra resposta , destacando o básico:

    O OpenSSL deve ser capaz de fazer as mesmas coisas que o gpg faz (o OpenSSL existe desde 1998, mas se os números de versão significam alguma coisa, atingiu a versão 1 em 2010), mas é muito fácil cometer um erro que pode diminuir drasticamente a segurança. E a partir desta postagem em security.stackexchange.com (de janeiro de 2013) e outra de um usuário de reputação de 287K, o openssl enccomando pode deixar algo a desejar:

    O formato de criptografia usado pelo OpenSSL não é padrão: é "o que o OpenSSL faz", e se todas as versões do OpenSSL tendem a concordar entre si, ainda não há documento de referência que descreva esse formato, exceto o código-fonte do OpenSSL. O formato do cabeçalho é bastante simples:

    magic value (8 bytes): the bytes 53 61 6c 74 65 64 5f 5f
    salt value (8 bytes)
    

    Daí um cabeçalho fixo de 16 bytes, começando com a codificação ASCII da string "Salted__", seguida pelo próprio salt. Isso é tudo ! Nenhuma indicação do algoritmo de criptografia; você deve acompanhar isso sozinho.

    O processo pelo qual a senha e o sal são transformados em chave e IV não está documentado, mas uma olhada no código-fonte mostra que ele chama a função EVP_BytesToKey() específica do OpenSSL , que usa uma função de derivação de chave personalizada com alguns hashing repetidos . Esta é uma construção não padronizada e não bem avaliada (!) que se baseia na função de hash MD5 de reputação duvidosa (!!); essa função pode ser alterada na linha de comando com o sinalizador não documentado -md (!!!); a "contagem de iteração" é definida pelo enccomando para 1 e não pode ser alterada (!!!!). Isso significa que os primeiros 16 bytes da chave serão iguais a MD5(password||salt) , e pronto.

    Isso é bem fraco! Qualquer pessoa que saiba escrever código em um PC pode tentar decifrar esse esquema e será capaz de "tentar" várias dezenas de milhões de senhas em potencial por segundo (centenas de milhões serão conseguidas com uma GPU). Se você usar "openssl enc", certifique-se de que sua senha tenha uma entropia muito alta! (ou seja, maior do que o normalmente recomendado; aponte para 80 bits, pelo menos). Ou, de preferência, não use; em vez disso, escolha algo mais robusto ( GnuPG , ao fazer criptografia simétrica para uma senha, usa um KDF mais forte com muitas iterações da função hash subjacente).

    man encaté tinha isso em "BUGS":

    Deve haver uma opção para permitir que uma contagem de iteração seja incluída.

    Um dos comentários do primeiro post até menciona que esses problemas existem há quase 10 anos...

    Esse problema de contagem de iterações é um verdadeiro incômodo. Tanto que quase 10 anos atrás eu fiz um script perl "encrypt" que faz essencialmente a mesma coisa que "openssl enc", mas usa hash PBKDF2 iterativo. ict.griffith.edu.au/anthony/software#encrypt Ele descriptografará arquivos "openssl enc" salgados, mas criptografará novamente usando PBKDF2. Eu teria que a criptografia de arquivos OpenSSL teria melhorado até agora! – anthony 7 de fevereiro às 5:05

    Aqui está um exemplo de criptografia simétrica com gpg .
    Resumidamente:

    gpg --symmetric --cipher-algo AES256 --output file.gpg file.txt
    

    e

    gpg --decrypt --output file.txt file.gpg
    
    • 4

relate perguntas

  • dm-crypt / cryptsetup que bloqueia o uso da dimensão de criptografia

  • Como usar o pv para mostrar o progresso da criptografia/descriptografia do openssl?

  • Confuso sobre o sal no arquivo de criptografia openssl

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve