1. はじめに
スクリプト内でパスワードを扱う機会があったので備忘録です。
2. 目次
- はじめに
- 要件
- 手法
- 暗号化手順
- スクリプト内での復号化
- 使用したコマンドの補足
- 留意する点
3. 要件
- 実行時にパスワードを対話形式で入力することは避ける。
- スクリプト内にパスワードを平文で記載はNG。
4. 手法
OpenSSLを使用して、パスワードを暗号化する。
スクリプト実行時に復号化して利用する。
5. 暗号化/復号化手順
用意するもの
- 暗号化対象ファイル(例:平文のパスワード)
- keyファイル(暗号化・復号化に使用)
手順
-
ファイルの配置
暗号化対象ファイルとkeyファイルをサーバ上に配置する。 -
暗号化コマンドの実行
以下のコマンドで暗号化を行う:openssl enc -aes-256-cbc -pbkdf2 -salt -in <暗号化対象ファイル> -out <暗号化後のファイル名>.bin -pass file:<keyファイル>使用した平文ファイルの削除を忘れずに
生成した暗号化ファイルの権限設定は適切に行いましょう。 -
スクリプト内での復号化の例
PASSWORD=$(openssl enc -d -aes-256-cbc -pbkdf2 -in <暗号化ファイル> -pass file:<keyファイル>) CHK=$? if [ "${CHK}" -ne 0 ]; then #エラーハンドリング fi
6. 使用したコマンドの補足
以下は暗号化・復号化に使用しているオプションの解説です。
enc
OpenSSLの暗号化・復号化機能を使用するためのサブコマンド。
-aes-256-cbc
暗号化方式の指定。AES(Advanced Encryption Standard)256ビット鍵長、CBC(Cipher Block Chaining)モードを使用。
-pbkdf2
鍵導出関数(Password-Based Key Derivation Function 2)を使用する。これにより、ブルートフォース攻撃への耐性が向上する。
-salt
暗号化時にランダムなsalt(付加データ)を追加することで、同じ入力でも異なる暗号化結果になる。辞書攻撃への耐性を高める。
-in <ファイル名>
暗号化または復号化の対象となる入力ファイルを指定する。
-out <ファイル名>
暗号化後の出力ファイル名を指定する。
-pass file:<keyファイル>
パスワード(鍵)をファイルから読み込む。file:プレフィックスを付けることで、ファイルの内容をパスワードとして使用する。
-d
復号化モードを指定する。暗号化されたファイルを元の平文に戻す。
7. 留意する点
- スクリプト内で復号化したパスワードは、認証処理のみに使用し、ログ出力や他のファイルへの書き出しは避ける。
- 以下の情報が揃ってしまうと、第三者による復号化が可能になるため、取り扱いには十分注意する。:
- 暗号化されたファイル
- 暗号化時に使用した key ファイル(パスワード)
- 暗号化時に使用した OpenSSL オプション(例:
-aes-256-cbc -pbkdf2 -salt)
8. 所感
OpenSSLは便利。
今回のやり方に限らずですが、パスワードをスクリプト内に組み込むと変更があったときの対応が重たいですね..
何か上手いやり方があるか模索してみます。