Debian/Ubuntu の OpenSSLで暗号化と復号化
暗号化と復号化
echo -n "ひみつのもじれつ" | \ openssl enc -e -k "パスワード" -pbkdf2 -aes256 | \ openssl enc -d -k "パスワード" -pbkdf2 -aes256
暗号化
暗号化は次の感じですね。
echo 文字列 | openssl enc -e -k "パスワード" -pbkdf2 -aes256
暗号化 ファイル指定
ファイルを指定する場合。
openssl enc -e -k "パスワード" -pbkdf2 -aes256 -in a.png
暗号化:パスワードをファイルから
openssl aes-256-cbc -pbkdf2 -e -in src-pass file:./pass.txt
暗号化:標準出入力
標準出入力を使うときはパスワード入力ができなくなるので、-k
で指定するか、file:
でファイルを指定する。
openssl aes-256-cbc -pbkdf2 -e -in - -pass file:./password.txt
暗号化 NoSalt にする
Salt を使わないと、毎回同じバイナリが出力されるので、コマンドのチェックに使える。
echo ひみつ |openssl enc -e -k "パスワード" -pbkdf2 -aes256 -nosalt
毎回同じバイナリが出てくるのを確認する
takuya@:~$ echo ひみつ |openssl enc -e -k "パスワード" -pbkdf2 -aes256 -nosalt | md5sum 473472a107d995fe4ab7dd244041cf1c - takuya@:~$ echo ひみつ |openssl enc -e -k "パスワード" -pbkdf2 -aes256 -nosalt | md5sum 473472a107d995fe4ab7dd244041cf1c -
Saltを使うことで、暗号化の出力バイナリを変えることができる。 no-salt にすることで、あえて一時的にSaltを外すことができる。
暗号化 base64化
出力がバイナリなので、メモ帳などに貼り付けるのが不便。
単純なパスワードやパスフレーズを暗号化するときは、base64に掛けたほうが扱いやすいですね。
echo Bitlockerキーとか | openssl enc -e -k "pw" -pbkdf2 -aes256 - base64
base64にパイプしなくても、openssl だけで完結する。
もちろん、base64コマンドに流しても同じ。
echo Bitlockerキーとか | openssl enc -e -k "pw" -pbkdf2 -aes256 | base64
本当に同じか確認しておく。こういうとき前述のnosalt が便利。
takuya@:~$ echo ひみつ |openssl enc -e -k "パスワード" -pbkdf2 -aes256 -nosalt -base64 dlY8Bty/1d/l/ezvcsx4/A== takuya@:~$ echo ひみつ |openssl enc -e -k "パスワード" -pbkdf2 -aes256 -nosalt | base64 dlY8Bty/1d/l/ezvcsx4/A==
復号化
復号化は、 コマンドのオプションが変わる。
openssl enc -e #暗号化 openssl enc -d #復号化
暗号化で使ったオプションを同じものを与えれば、復号化され平文に戻る。
echo ひみつ | \ openssl enc -e -k "パスワード" -pbkdf2 -aes256 -base64 | \ openssl enc -d -k "パスワード" -pbkdf2 -aes256 -base64
暗号文の保管時の注意
オプションが、わからないと、戻せません。
パディングをいい感じしてもらい、ストレッチングを掛けるために、 pbkdf2 を指定する。
pbkdf2 を省略すると、時間を掛けた攻撃に弱くなる。総当たり攻撃とかCPUパワーの暴力により漏洩する可能性が残る。
aes256について
-aes256
は-aes-256-cbc
の略である。
aes-256-ebc
もあるが、AESで文字列やファイルを暗号化するときにEBCモードは通常使わない。
CBC/EBCについては、暗号技術入門 第3版 秘密の国のアリスを読むと図解を眺めるだけでわかるのでおすすめ。
その他のアルゴリズムについては
$openssl list -cipher-commands
で参照できる。
実験に使用した opensslとLinux
takuya@:~$ openssl version OpenSSL 1.1.1d 10 Sep 2019 takuya@:~$ cat /etc/debian_version 10.11