OpenSSL を使用したファイルの暗号化

LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、サイバーセキュリティにおいて極めて重要なスキルである、OpenSSL を使用したファイルの暗号化と復号の手法を習得します。ハンズオン形式の演習を通じて、共通鍵(対称鍵)の生成と、機密データを保護するための AES 暗号の適用を実践します。

この実験では、OpenSSL のインストールから始まり、テスト用のファイル作成、そして暗号化と復号の一連のサイクルを順を追って進めていきます。この実務的な経験は、実際のアプリケーションで使用されている基本的なデータ保護技術を理解するのに役立ちます。

OpenSSL のインストールと確認

このステップでは、安全な通信を実装するための強力なツールキットである OpenSSL をインストールします。OpenSSL は多くの Linux ディストリビューションに標準で含まれていますが、ここでは正しくインストールされ、使用可能な状態であることを確認します。

まず、インストールされているバージョンを確認して、OpenSSL が利用可能かチェックします。

openssl version

システム上の OpenSSL のバージョンを示す、以下のような出力が表示されるはずです。

OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

最後に、ヘルプメニューを表示して、利用可能なコマンドの一覧を確認し、OpenSSL が正常に動作していることを確かめます。

openssl help

このコマンドを実行すると、OpenSSL で実行できるさまざまな暗号化操作がリストアップされます。これらについては、次のステップ以降で詳しく見ていきます。

暗号化用のサンプルファイルの作成

このステップでは、暗号化と復号の演習に使用するシンプルなテキストファイルを作成します。内容がわかっているファイルを使用することで、元の内容と復号後の内容を比較し、プロセスが正しく機能したかどうかを簡単に検証できます。

ターミナルはすでに /home/labex/project ディレクトリに移動しているはずです。ここでファイルを作成します。

まず、nano テキストエディタを使用して、sample.txt という名前の新しいファイルを作成します。

nano sample.txt

nano が開いたら、エディタに以下のテキストを入力してください。

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

次に、ファイルを保存して nano を終了します。

  1. Ctrl + O を押して、変更をファイルに書き込みます。
  2. Enter を押して、ファイル名(sample.txt)を確定します。
  3. Ctrl + X を押して、エディタを終了します。

ファイルが正しく作成されたことを確認するために、cat コマンドを使用して内容を表示します。

cat sample.txt

入力した通りのテキストが表示されるはずです。

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

これで、次のステップで暗号化を行うためのサンプルファイルの準備が整いました。

共通鍵の生成

このステップでは、データの暗号化と復号の両方に使用される秘密鍵である「共通鍵(対称鍵)」を生成します。OpenSSL を使用して、非常に安全で広く採用されている標準規格である AES-256 暗号に適した、強力でランダムな鍵を作成します。

プロジェクトディレクトリ /home/labex/project にいることを確認してください。

cd ~/project

openssl rand コマンドを使用して 32 バイト(256 ビット)のランダムデータを生成し、それを 16 進数形式で symmetric_key.hex という名前のファイルに保存します。

openssl rand -hex 32 > symmetric_key.hex

生成された鍵がどのようなものか確認してみましょう。

cat symmetric_key.hex

出力は 64 文字の 16 進文字列になります。これが 256 ビットの鍵を表します。以下のような形式で表示されます(実際の鍵の内容は実行ごとに異なります)。

2f8b5e9a1c3d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f

この鍵はデータを解読できる重要なものなので、厳重に保護する必要があります。chmod コマンドを使用して、ファイルの所有者(あなた)だけが読み書きできるようにファイル権限を設定します。

chmod 600 symmetric_key.hex

最後に、ls -l でファイルの権限を確認します。

ls -l symmetric_key.hex

出力の権限部分が -rw------- と表示されていれば、ファイルが保護されていることが確認できます。

-rw------- 1 labex labex 65 Nov 15 10:30 symmetric_key.hex

鍵の生成と保護が完了しました。これでサンプルファイルを暗号化する準備が整いました。

AES によるファイルの暗号化

生成した共通鍵を使用して sample.txt を暗号化します。ここでは AES-256-CBC 暗号を使用します。AES(Advanced Encryption Standard)の 256 ビット鍵は非常に強力な暗号化アルゴリズムであり、CBC(Cipher Block Chaining)は各暗号化ブロックを前のブロックに依存させることでセキュリティを高める動作モードです。

暗号化には openssl enc コマンドを使用します。暗号方式、入力ファイル、出力ファイル、および鍵ファイルを指定します。

以下のコマンドを実行して sample.txt を暗号化し、結果を sample.enc に保存します。

openssl enc -aes-256-cbc -in sample.txt -out sample.enc -pass file:symmetric_key.hex
  • -aes-256-cbc: 使用する暗号方式を指定します。
  • -in sample.txt: 暗号化する入力ファイルを指定します。
  • -out sample.enc: 出力される(暗号化された)ファイル名を指定します。
  • -pass file:symmetric_key.hex: symmetric_key.hex の内容をパスワード(鍵)として使用するよう OpenSSL に指示します。

コマンド実行後、ファイルリストを確認して、新しく暗号化されたファイル sample.enc が作成されているか見てみましょう。

ls -l

パディングやメタデータなどの暗号化オーバーヘッドにより、sample.encsample.txt よりもわずかにサイズが大きくなっていることがわかります。

total 12
-rw-r--r-- 1 labex labex   96 Nov 15 10:35 sample.enc
-rw-r--r-- 1 labex labex   89 Nov 15 10:20 sample.txt
-rw------- 1 labex labex   65 Nov 15 10:30 symmetric_key.hex

暗号化されたファイルの内容を表示しようとすると、判読不能なバイナリデータが表示されます。

cat sample.enc

文字化けした出力が表示されれば、ファイルが正常に暗号化されている証拠です。

ファイルの復号と整合性の確認

最後のステップとして、sample.enc を復号して元のテキストを取り出します。これにより、鍵が正しく機能していること、および暗号化・復号のサイクル全体が成功したことを確認します。

ファイルを復号するには、再び openssl enc コマンドを使用しますが、今回は復号を指定する -d フラグを追加します。

以下のコマンドを実行して sample.enc を復号し、結果を新しいファイル sample.dec に保存します。

openssl enc -d -aes-256-cbc -in sample.enc -out sample.dec -pass file:symmetric_key.hex

では、復号が正しく行われたか検証しましょう。最も確実な方法は、復号されたファイル(sample.dec)と元のファイル(sample.txt)を比較することです。これには diff コマンドが最適です。

diff sample.txt sample.dec

ファイルが完全に同一であれば、このコマンドは何も出力しません。これは復号が成功したことを意味します。

最後に目視で確認するために、復号されたファイルの内容を表示します。

cat sample.dec

出力は、元の sample.txt ファイルと全く同じ内容になるはずです。

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

これで、OpenSSL を使用してファイルを暗号化し、それを元の形式に復号することに成功しました。

まとめ

この実験では、OpenSSL を使用したファイルの暗号化と復号の実践的な経験を積みました。強力な共通鍵を生成する方法、AES-256 アルゴリズムを使用してファイルを暗号化する方法、そしてファイルを復号して元のデータを復元する方法を学びました。このプロセスは、サイバーセキュリティにおいて機密情報を保護するための基本的なスキルです。