0.9.8o와 1.1.0f 사이의 OpenSSL 잘못된 암호 해독

0.9.8o와 1.1.0f 사이의 OpenSSL 잘못된 암호 해독

저는 OpenSSL을 사용하여 일반 텍스트를 인코딩하고 여러 원격 서버에서 디코딩합니다. Debian 9 Stretch 호환성을 확인하기 위해 스크립트를 테스트하는 동안 오류를 발견했습니다.

제가 테스트하는 방법은 다음과 같습니다: Debian 6, OpenSSL 0.9.8o, 문자열 인코딩:

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

동일한 서버에서 디코딩:

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

Debian 9, OpenSSL 1.1.0f, 문자열 디코딩:

# 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�

디코딩이 진행되는 동안:

데비안 7, OpenSSL 1.0.1t:

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

데비안 8, OpenSSL 1.0.1t

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

그래서 저는 Debian 9, OpenSSL 1.1.0f 테스트 서버에서 인코딩을 테스트했습니다.

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

그리고 동일한 서버에서 디코딩이 작동 중입니다.

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

하지만 다른 3개 서버(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��

데비안 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▒▒

데비안 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▒▒

OpenSSL 종속성을 확인하고 각 버전의 여러 서버에서 테스트했습니다.

답변1

죄송합니다. 몇 분 후에 저는 Sebastian Andrzej Siewior의 Debian 버그 추적기에서 답변을 찾았습니다.

데비안 버그 보고서 #843064

바. 키를 생성하기 위해 기본 다이제스트를 md5에서 sha256으로 변경했습니다. 1.1에 '-md md5'를 추가하면. openssl 그러면 작동합니다. 반대로 1.0을 만족시키려면 '-md sha256'이 필요합니다.

따라서 Debian 9에 "-md md5"를 추가하면 이전 OpenSSL 인코딩 문자열에서 작동합니다.

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

그리고 이전 Debian에 "-md sha256"을 추가하면 최신 OpenSSL 인코딩 문자열도 작동합니다.

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

다른 사람들의 시간을 절약하기 위해 스레드를 유지하십시오 :)

관련 정보