この記事では,OpenSSLを用いてファイルを暗号化および復号する手順を記載します.
コマンド
細かい説明は省いたコピペ用のコマンドを示します.
暗号化
openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:<password> -in <encrypt_target_filename> -out <encrypted_filename>
復号
openssl enc -d -aes-256-cbc -base64 -pbkdf2 -pass pass:<password> -in <encrypted_filename> -out <dencrypted_filename>
暗号化と復号のアルゴリズム(オプション)は同一である必要があります.
細かい使い方や説明はここから先で記載しています.
OpenSSLのインストール
まずは,OpenSSLがインストールされているかを確認します.
openssl version
OpenSSL 1.1.1n 15 Mar 2022
OpenSSLがインストールされていない場合,下記コマンドでインストールします.
apt install openssl
dnf install openssl
ファイルの暗号化と復号
コマンド
暗号化と復号のコマンドは以下の通りです.
・暗号化
openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:<password> -in <encrypt_target_filename> -out <encrypted filename>
・復号
openssl enc -d -aes-256-cbc -base64 -pbkdf2 -pass pass:≶password> -in <encrypted_filename> -out <dencrypted_filename>
オプションについて
-e
暗号化するためのオプションです.省略可能です.
-d
復号するためのオプションです.
-aes-256-cbc
このオプションはAES256-cbcを使用することを意味するオプションです.
これ以外にもサポートされているアルゴリズムは多数ありますが,それに関してはアルゴリズムは後述しています.
-pass
パスワードを指定するオプションです.省略した場合,標準入力から対話的に入力します.
以前は-k
オプションだったようですが,現在は-pass
となっています.
-pass
の引数として,下記の形式が使用できます.
pass:password
env:var
file:pathname
fd:number
stdin
-base64
Base64でエンコードするオプションです.暗号化の前にBase64でエンコードし,暗号化を行います.
復号時には,復号後にBase64でデコードします.
-pbkf2
PBKDF(Password-Based Key Derivation Function 2)アルゴリズムを使用します.
基本的にこのオプションをつけたほうが無難です.
暗号アルゴリズムについて
OpenSSLサポートされている暗号化のリストは下記コマンドで確認できます.
openssl enc -ciphers
Supported ciphers:
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ctr -aes-128-ecb
-aes-128-ofb -aes-192-cbc -aes-192-cfb
-aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr
-aes-192-ecb -aes-192-ofb -aes-256-cbc
-aes-256-cfb -aes-256-cfb1 -aes-256-cfb8
-aes-256-ctr -aes-256-ecb -aes-256-ofb
-aes128 -aes128-wrap -aes192
-aes192-wrap -aes256 -aes256-wrap
-aria-128-cbc -aria-128-cfb -aria-128-cfb1
-aria-128-cfb8 -aria-128-ctr -aria-128-ecb
-aria-128-ofb -aria-192-cbc -aria-192-cfb
-aria-192-cfb1 -aria-192-cfb8 -aria-192-ctr
-aria-192-ecb -aria-192-ofb -aria-256-cbc
-aria-256-cfb -aria-256-cfb1 -aria-256-cfb8
-aria-256-ctr -aria-256-ecb -aria-256-ofb
-aria128 -aria192 -aria256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1
-camellia-128-cfb8 -camellia-128-ctr -camellia-128-ecb
-camellia-128-ofb -camellia-192-cbc -camellia-192-cfb
-camellia-192-cfb1 -camellia-192-cfb8 -camellia-192-ctr
-camellia-192-ecb -camellia-192-ofb -camellia-256-cbc
-camellia-256-cfb -camellia-256-cfb1 -camellia-256-cfb8
-camellia-256-ctr -camellia-256-ecb -camellia-256-ofb
-camellia128 -camellia192 -camellia256
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-chacha20 -des -des-cbc
-des-cfb -des-cfb1 -des-cfb8
-des-ecb -des-ede -des-ede-cbc
-des-ede-cfb -des-ede-ecb -des-ede-ofb
-des-ede3 -des-ede3-cbc -des-ede3-cfb
-des-ede3-cfb1 -des-ede3-cfb8 -des-ede3-ecb
-des-ede3-ofb -des-ofb -des3
-des3-wrap -desx -desx-cbc
-id-aes128-wrap -id-aes128-wrap-pad -id-aes192-wrap
-id-aes192-wrap-pad -id-aes256-wrap -id-aes256-wrap-pad
-id-smime-alg-CMS3DESwrap -rc2 -rc2-128
-rc2-40 -rc2-40-cbc -rc2-64
-rc2-64-cbc -rc2-cbc -rc2-cfb
-rc2-ecb -rc2-ofb -rc4
-rc4-40 -seed -seed-cbc
-seed-cfb -seed-ecb -seed-ofb
-sm4 -sm4-cbc -sm4-cfb
-sm4-ctr -sm4-ecb -sm4-ofb
基本的には,AES256を使用するのが無難なところでしょう.
暗号化に関する良書
まとめ
この記事では,OpenSSLを用いたファイルの暗号化と復号について記載しました.
今回用いているAES256アルゴリズムは共通鍵暗号方式の一種であり,その他の暗号化方式として公開鍵暗号方式があります.
公開鍵暗号方式を用いたファイル暗号化と復号に関しては下記記事にまとめました.興味があればご覧ください.