![見出し画像](https://assets.st-note.com/production/uploads/images/141831061/rectangle_large_type_2_bb98523cd3ea1d4b70af47e9d37f4bb8.png?width=1200)
テスト環境を作り、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の中身を確認してみます。
![](https://assets.st-note.com/img/1716646370556-ScKaEeiOok.png?width=1200)
初期化ベクトル(IV)とは?
初期化ベクトル(IV: Initialization Vector)は、暗号化アルゴリズムにおいて重要な役割を果たします。特にCBC(Cipher Block Chaining)モードのようなブロック暗号モードで使用されます。IVの主な目的は、同じ平文データが同じ暗号文データに変換されないようにすることです。
• ランダム性の導入: IVはランダムなデータであるため、同じ平文でも異なるIVを使用することで異なる暗号文が生成されます。
• セキュリティの向上: IVは暗号化プロセスの最初のブロックにのみ使用され、後続のブロックは前のブロックの暗号文に依存します。これにより、平文のパターンが暗号文に現れるのを防ぎます。
IVは暗号化の際に生成され、復号化の際には同じIVが必要です。したがって、暗号化データと共にIVを安全に保存または伝送する必要があります。
2. openssl enc
openssl encコマンドは、データの暗号化および復号化を行います。以下に具体的な使い方を示します。
暗号化の例
処理手順
以下のテキストファイル(plaintext.txt)に対して暗号化を実行します。
![](https://assets.st-note.com/img/1716646618749-NPHLyF2hCv.png?width=1200)
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の中身をデコードして確認すると以下のようになっていました。
![](https://assets.st-note.com/img/1716646964294-0AYqDOcgGB.png?width=1200)
無事に暗号化できていましたので、このファイル等を相手型に渡すことになると思います。
復号化の例
暗号化されたファイルを受け取った側の処理になります。
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の中身を確認すると以下のようになっており、復号化できたことが確認されました。
![](https://assets.st-note.com/img/1716647048216-qC9NC6vvSi.png?width=1200)
まとめ
OpenSSLを使うことで、簡単にAES暗号化および復号化を行うことができます。openssl encコマンドを使ってデータの暗号化と復号化を行います。これらの手順を実際に試してみることで、暗号化の基本的なプロセスを理解することができます。
この記事が気に入ったらサポートをしてみませんか?