OpenSSL 0.9.8o と 1.1.0f 間の不正な復号化

OpenSSL 0.9.8o と 1.1.0f 間の不正な復号化

私は 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�

デコード作業中:

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

そこで、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��

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▒▒

OpenSSL の依存関係を確認し、各バージョンで複数のサーバーでテストしました。

答え1

申し訳ありませんが、数分後に Debian バグ トラッカーで Sebastian Andrzej Siewior による回答を見つけました。

Debian バグレポート #843064

ふーん。キーを作成するために、デフォルトのダイジェストが md5 から sha256 に変更されました。1.1. openssl に '-md md5' を追加すれば動作します。逆に、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

他の人の時間を節約するためにスレッドを維持します :)

関連情報