もはや会社で働いていない人が作った古いシェルスクリプトがあり、このスクリプトはアクセスパスワードを暗号化して復号化します。以前のスクリプトは基本的に次のようになりました。
PFILE=/home/user/keys/pwfile
if [ ! -f $PFILE ] || [[ "$NEW_FILE" == "true" ]]; then
rm -rf $PFILE
echo "PASSWORD=notset" >> $PFILE
fi
if [ -n "$PASSWORD" ]; then
echo "changing PASSWORD"
P=`echo ${PASSWORD} | openssl enc -aes-128-cbc -a -salt -pass pass:${SECRET}`
sed -i "/PASSWORD=/ s|=.*|=${P}|" ${PFILE}
fi
復号化スクリプトはデフォルトで次のことを行います。
PASSWORD=$(sed -n 's|^PASSWORD=||p' $PFILE)
password=`echo $PASSWORD | openssl enc -aes-128-cbc -a -d -salt -pass pass:${SECRET}`
しかし、今これを実行するとエラーが発生します。
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
この新しいバージョンを試すためにテストスクリプトを作成しました。
P=`echo 'rawpassword' | openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 1000 -salt -pass pass:'secret'`
echo "P = " $P
U= `echo P | openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 1000 -d -salt -pass pass:'secret'`
echo "U = " $U
暗号化しているようですが、空の文字列を印刷してエラーが発生したため、復号化プロセス中に問題が発生しました。
error reading input file
復号化中に何が間違っていますか?