見出し画像

テスト環境を作り、opensslを使って文書を暗号化してみる

情報処理のテキストに出てくる暗号化についてですが、座学だけだとなかなか実感が持てないため、UbuntuのOpenSSL機能を使って、暗号化と復号化を体験してみました。この記事では、OpenSSLのコマンドの概要と、そのオプションも含めた具体的な使い方について説明します。

OpenSSLのコマンドの概要

OpenSSLは、SSLおよびTLSプロトコルの実装として広く使用されるオープンソースの暗号ライブラリです。このライブラリには、さまざまな暗号化、復号化、証明書管理機能が含まれています。

ここでは、主に以下の2つのコマンドを使用します:
• openssl rand: ランダムなデータ(暗号鍵や初期化ベクトルなど)を生成します。
• openssl enc: データの暗号化および復号化を行います。

OpenSSLコマンドの使い方

1. openssl rand

openssl randコマンドは、指定したバイト数のランダムデータを生成します。以下に使用例を示します。

# 32バイトのランダムデータをBase64エンコードして生成し、key.binに保存
openssl rand -base64 32 > key.bin

# 16バイトのランダムデータをBase64エンコードして生成し、iv.binに保存
openssl rand -base64 16 > iv.bin

-base64: 出力をBase64エンコードします。

base64デコードしてkey.binの中身を確認してみます。

初期化ベクトル(IV)とは?
初期化ベクトル(IV: Initialization Vector)は、暗号化アルゴリズムにおいて重要な役割を果たします。特にCBC(Cipher Block Chaining)モードのようなブロック暗号モードで使用されます。IVの主な目的は、同じ平文データが同じ暗号文データに変換されないようにすることです。

ランダム性の導入: IVはランダムなデータであるため、同じ平文でも異なるIVを使用することで異なる暗号文が生成されます。

セキュリティの向上: IVは暗号化プロセスの最初のブロックにのみ使用され、後続のブロックは前のブロックの暗号文に依存します。これにより、平文のパターンが暗号文に現れるのを防ぎます。

IVは暗号化の際に生成され、復号化の際には同じIVが必要です。したがって、暗号化データと共にIVを安全に保存または伝送する必要があります。

2. openssl enc

openssl encコマンドは、データの暗号化および復号化を行います。以下に具体的な使い方を示します。

暗号化の例

処理手順
以下のテキストファイル(plaintext.txt)に対して暗号化を実行します。

opensslコマンドの実行

openssl enc -aes-256-cbc -salt -in plaintext.txt -out encrypted.bin -base64 -K $(cat key.bin | base64 -d | xxd -p -c 32) -iv $(cat iv.bin | base64 -d | xxd -p -c 32)

-aes-256-cbc: AES-256アルゴリズムをCBCモードで使用します。
-salt: ソルトを追加して暗号化を行います。これにより、辞書攻撃に対する耐性が向上します。
-in plaintext.txt: 暗号化する入力ファイルを指定します。
-out encrypted.bin: 暗号化された出力ファイルを指定します。
-base64: 暗号化されたデータをBase64エンコードします。
-K $(cat key.bin | base64 -d | xxd -p -c 32): 暗号化に使用するキーを指定します。key.binファイルの内容をBase64デコードし、16進数形式に変換して指定します。
-iv $(cat iv.bin | base64 -d | xxd -p -c 32): 初期化ベクトル(IV)を指定します。iv.binファイルの内容をBase64デコードし、16進数形式に変換して指定します。

生成されたencrypted.binの中身をデコードして確認すると以下のようになっていました。

無事に暗号化できていましたので、このファイル等を相手型に渡すことになると思います。

復号化の例
暗号化されたファイルを受け取った側の処理になります。

openssl enc -d -aes-256-cbc -in encrypted.bin -out decrypted.txt -base64 -K $(cat key.bin | base64 -d | xxd -p -c 32) -iv $(cat iv.bin | base64 -d | xxd -p -c 32)

-d: 暗号化ではなく復号化を行います。
-in encrypted.bin: 復号化する入力ファイルを指定します。
-out decrypted.txt: 復号化された出力ファイルを指定します。

ここで生成されたdecrypted.txtの中身を確認すると以下のようになっており、復号化できたことが確認されました。

まとめ

OpenSSLを使うことで、簡単にAES暗号化および復号化を行うことができます。openssl encコマンドを使ってデータの暗号化と復号化を行います。これらの手順を実際に試してみることで、暗号化の基本的なプロセスを理解することができます。

この記事が気に入ったらサポートをしてみませんか?