それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

opensslコマンドでファイル・文字列の暗号化と復号化。

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

参考資料

https://memo.open-code.club/OpenSSL/%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB/%E5%85%B1%E9%80%9A%E9%8D%B5%E6%9A%97%E5%8F%B7.html