Descriptografia incorreta do OpenSSL entre 0.9.8o e 1.1.0f

Descriptografia incorreta do OpenSSL entre 0.9.8o e 1.1.0f

Eu uso OpenSSL para codificar texto não criptografado e decodificá-lo em vários servidores remotos. Enquanto eu estava testando meus scripts para garantir a compatibilidade do Debian 9 Stretch e encontrei um erro.

Aqui está como eu testo: Debian 6, OpenSSL 0.9.8o, codificando uma string:

# echo "Hi guys" | openssl des3 -salt -a -k "testkey"
U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=

Decodificação no mesmo servidor:

# echo "U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=" | openssl des3 -salt -a -d -k "testkey"
Hi guys

Debian 9, OpenSSL 1.1.0f, decodificando a string:

# echo "U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=" | openssl des3 -salt -a -d -k "testkey"
bad decrypt
140259873273088:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:../crypto/evp/evp_enc.c:535:
z���AR�

Enquanto a decodificação está funcionando:

Debian 7, OpenSSL 1.0.1t:

$ echo "U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=" | openssl des3 -salt -a -d -k "testkey"
Hi guys

Debian 8, OpenSSL 1.0.1t

# echo "U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=" | openssl des3 -salt -a -d -k "testkey"
Hi guys

Então testei a codificação no servidor de teste Debian 9, OpenSSL 1.1.0f:

# echo "Hi guys" | openssl des3 -salt -a -k "testkey"
U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=

E a decodificação no mesmo servidor está funcionando:

# echo "U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=" | openssl des3 -salt -a -d -k "testkey"
Hi guys

Mas a decodificação não está funcionando nos outros 3 servidores: Debian 6, OpenSSL 0.9.8o:

# echo "U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=" | openssl des3 -salt -a -d -k "testkey"
bad decrypt
12605:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:330:
��Rv��

Debian 7, OpenSSL 1.0.1t:

$ echo "U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=" | openssl des3 -salt -a -d -k "testkey"
bad decrypt
139771367589544:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:516:
▒▒Rv▒▒

Debian 8, OpenSSL 1.0.1t:

# echo "U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=" | openssl des3 -salt -a -d -k "testkey"
bad decrypt
139719827605136:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:516:
▒▒Rv▒▒

Verifiquei as dependências do OpenSSL e testei em vários servidores em cada versão.

Responder1

Desculpe pessoal, alguns minutos depois encontrei a resposta no rastreador de bugs do Debian por Sebastian Andrzej Siewior:

Relatório de bug do Debian #843064

bah. Eles alteraram o resumo padrão de md5 para sha256 para criar a chave. Se você adicionar '-md md5' ao seu arquivo 1.1. openssl então funcionará. O contrário, você precisa de '-md sha256' para manter o 1.0 feliz.

Então, adicionando "-md md5" no Debian 9, ele funciona em strings codificadas OpenSSL mais antigas:

# echo "U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=" | openssl des3 -salt -md md5 -a -d -k "testkey"
Hi guys

E adicionando "-md sha256" no Debian mais antigo, a string codificada OpenSSL mais recente também funciona:

# echo "U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=" | openssl des3 -md sha256 -salt -a -d -k "testkey"
Hi guys

Mantendo o tópico para economizar tempo para outros caras :)

informação relacionada