Decodificação incorreta do OpenSSL entre 0.9.8o e 1.1.0f

8

Eu uso o 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 com o Debian 9 Stretch e encontrei um erro.

Aqui está a maneira 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 estiver trabalhando:

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, eu testei para codificar 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▒▒

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

Leahkim
fonte

Respostas:

15

Desculpe pessoal, alguns minutos depois, encontrei a resposta no Sebastian Tracker de erros de 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 1.1. openssl então funcionará. Por outro lado, você precisa do '-md sha256' para manter a 1.0 feliz.

Então, adicionando "-md md5" no Debian 9, ele funciona na cadeia de caracteres codificada OpenSSL mais antiga:

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

E adicionando "-md sha256" no Debian 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 fio para economizar tempo para outros caras :)

Leahkim
fonte