【Linux】 OpenSSLでファイルの暗号と復号する方法

この記事では,OpenSSLを用いてファイルを暗号化および復号する手順を記載します.

コマンド

細かい説明は省いたコピペ用のコマンドを示します.

暗号化

openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:<password> -in <encrypt_target_filename> -out <encrypted_filename>
Shell

復号

openssl enc -d -aes-256-cbc -base64 -pbkdf2 -pass pass:<password> -in <encrypted_filename> -out <dencrypted_filename>
Shell

暗号化と復号のアルゴリズム(オプション)は同一である必要があります.

細かい使い方や説明はここから先で記載しています.

OpenSSLのインストール

まずは,OpenSSLがインストールされているかを確認します.

openssl version
OpenSSL 1.1.1n  15 Mar 2022
Shell

OpenSSLがインストールされていない場合,下記コマンドでインストールします.

apt install openssl
Shell
dnf install openssl
Shell

ファイルの暗号化と復号

コマンド

暗号化と復号のコマンドは以下の通りです.

・暗号化

openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:<password> -in <encrypt_target_filename> -out <encrypted filename>
Shell

・復号

openssl enc -d -aes-256-cbc -base64 -pbkdf2 -pass pass:≶password> -in <encrypted_filename> -out <dencrypted_filename>
Shell

オプションについて

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

基本的には,AES256を使用するのが無難なところでしょう.

暗号化に関する良書

まとめ

この記事では,OpenSSLを用いたファイルの暗号化と復号について記載しました.

今回用いているAES256アルゴリズムは共通鍵暗号方式の一種であり,その他の暗号化方式として公開鍵暗号方式があります.

公開鍵暗号方式を用いたファイル暗号化と復号に関しては下記記事にまとめました.興味があればご覧ください.

よかったらシェアしてね!