
1 はじめに
本記事は、Windowsで、無料で使える
OpenSSL
を使ってのファイルの暗号化について 整理したものです。
似たようなソフトウェアに、
PGP(Pretty Good Privacy)
があります。
OpenSSLとPGPは、どちらもファイルの暗号化に使用できるツールです。
ファイルの暗号化関する操作は、PGPの方が圧倒的に使いやすいと思います。
ですが、OpenSSLはファイルの暗号化の他にも便利な使い方がありそうで、
ファイルの暗号化をきっかけにOpenSSLを学ぶために敢えてこの記事を起こしてみました。
なお、PGPによる、ファイルの暗号化については、次のページをご覧いただければと思います。
【OpenPGP】メール暗号化のためのPGP導入が、とっても簡単になっていた!
(有料サービスにも負けない、無料の 脱PPAP最強解) | dotいがの快適インターネット
参考として、OpenSSLとPGPによるファイルの暗号化の違いを下に示します。
【暗号化方式】
- OpenSSL
-
主に対称鍵暗号と非対称鍵暗号の両方をサポートしています。
対称鍵暗号では同じ鍵を使って暗号化と復号を行い、
非対称鍵暗号では公開鍵で暗号化し、対応する秘密鍵で復号します。
- PGP
-
非対称鍵暗号を基本にしており、ユーザーは公開鍵と秘密鍵のペアを生成します。
ファイルは受信者の公開鍵で暗号化され、受信者のみが自分の秘密鍵で復号できます。
【用途】
- OpenSSL
-
一般的にはSSL/TLSプロトコルに関連した通信のセキュリティや、ファイルの暗号化、
証明書の管理など、幅広い用途に使用されます。
- PGP
-
主に電子メールやファイルの暗号化、デジタル署名に特化しています。
特にプライバシー保護を重視した用途で広く使われています。
【ユーザー管理】
- OpenSSL
- 鍵の管理はユーザーが手動で行う必要があり、証明書の発行や管理も自分で行います。
- PGP
-
公開鍵サーバーを利用して、他のユーザーと公開鍵を交換することが容易です。
また、信頼関係の管理ができる「ウェブオブトラスト」モデルが特徴です。
【使用の難易度】
- OpenSSL
- コマンドラインベースで操作するため、初心者には少し敷居が高い場合があります。
- PGP
- 専用のソフトウェア (例: Gpg4Win) を使うことで、比較的簡単に暗号化が行えます。
2 Windows 11へのOpenSSLインストール
2.1 Windows向けOpenSSLの入手とインストール
Windows向けOpenSSLは、本家の
OpenSSLから入手することができなく、
下に示すページから入手します。
https://slproweb.com/products/Win32OpenSSL.html
2025/04/01現在の最新のバージョンは“v3.4.1”ですが、
このページからは旧バージョンのものをダウンロードできるようになっています。
Win32、Win64、ARM、Experimental向けと、EXE形式、MSI形式と、
いくつかのパッケージの中から選べるようになっています。
特別な理由がなければ、Win64 / MSIのパッケージを選ぶと良いでしょう。
2.2 事前にC++再配布可能パッケージをインストール
「Win32/Win64 OpenSSL」を利用するには、「Microsoft Visual C++ 再配布可能パッケージ」が
インストールされていなければなりません。
他のアプリの要求で既にインストール済みであるケースが多いのですが、一応気に留めておいてください。
Microsoft Visual C++ 再配布可能パッケージは、次のページから取得することができます。
最新の Microsoft Visual C++ 再頒布可能パッケージ バージョン
ちなみに、Microsoft Visual C++ 再配布可能パッケージがインストールされていない場合、
以下に示すようなエラーが発生します。
- 1. アプリケーションの起動エラー
-
特定のアプリケーションを起動しようとすると、
「このアプリケーションを正しく起動できませんでした」や
「エラーが発生しました」
などのメッセージが表示されることがあります。
- 2. DLLエラー
-
特定のDLLファイル(例: MSVCR*.dllやMSVCP*.dllなど)が見つからない、
またはロードできないというエラーが表示されることがあります。
- 3. クラッシュ
-
アプリケーションが実行中に突然クラッシュし、
「プログラムが応答しません」というメッセージが表示されることがあります。
2.3 インストールに際して
本記事では、OpenSSLインストールの全ステップは示しませんが、
インストール途中いくつか注意すべき選択がありますので、それらについてだけ示します。
・ DLLの格納先
・ OpenSSL開発元への寄付
2.3.1 DLLの格納先
OpenSSLのDLLの格納先を、“The OpenSSL binaries (/bin) directory”に変更します。
アプリ固有のDLLをシステムフォルダに格納すると、トラブルの原因になる可能性があります。
2.4 Pathを通す
OpenSSLは、コマンドプロンプトで利用します。
コマンドプロンプトで直ちに利用ができるよう、
環境変数“Path”にOpenSSL実行ファイルのパスを追加します。
「環境変数名の編集」において、「システム環境変数」区画(pane)の“Path”に追加します。
自分のアカウントのみOpenSSLを利用したい場合は、
「ユーザー環境変数」区画の“Path”に追加します。
3 ファイルの暗号化
OpenSSLにはたくさんのサブコマンドがありますが、
ファイル暗号化に使えるサブコマンドとその特徴を表3-1に示します。
3.1 openssl-enc
共通鍵でファイルの暗号化・復号を行うコマンドです。
暗号化に使用する鍵はパスワードから導出されますが、
別途鍵ファイルやIV(初期化ベクトル)などを直接指定するような使い方も可能です。
3.1.1 よく使われるオプション
表3.1-1に“enc”の主要なオプションを示します。
その他のオプションについては、次のページでご確認ください。
openssl-enc | OpenSSL Documentation
3.1.2 暗号化アルゴリズム(Cipher Type)
暗号化アルゴリズムとしては、
DES、
DES3、
AES128、
AES256
などがあります。
最近では、AES256が使われる場合が多いようです。
OpenSSLで利用可能な暗号化アルゴリズムは、多数あります。
ここで全てを列挙できませんので、図3.1-1に示すよう“-ciphers”オプションで確認してください。
3.1.3 暗号化と復号化の例
【暗号化】
下に示すコマンドは、“foo.txt”というファイルをAES256アルゴリズムで暗号化し、
“encrypted_foo.dat”ファイルとして保存する例です。
【復号化】
下に示すコマンドは、encrypted_foo.dat”というファイルを復号化し、
“decrypted_foo.txt”ファイルとして保存する例です。
パスワードの指定については、表3.1-2に示す方法があります。
【コマンドライン・オプションで指定】
【ファイルから指定】
3.2 openssl cms
S/MIME 3.1に
準拠したメッセージの暗号化・復号化・署名・署名検証のためのコマンドです。
公開鍵で暗号化し、秘密鍵で復号化を行います。
ファイル暗号化というよりはメールの暗号化や署名のための機能ですが、
ファイルの暗号化機能として利用することも可能です。
“cms”でファイルを暗号化するには、
前もって秘密鍵(key.pem)と
X.509証明書(cert.pem)を作成しておく必要があります。
3.2.1 よく使われるオプション
表3.2-1、表3.2-2に “cms”の主要なオプションを示します。
その他のオプションについては、次のページでご確認ください。
openssl-cms | OpenSSL Documentation
3.2.2 前準備: 秘密鍵と証明書の作成
本項では、RSA秘密鍵(key.pem)と
X.509証明書(cert.pem)を作成する手順を
簡単に示します。
OpenSSLは、はたくさんの暗号化アルゴリズムをサポートしていますが、
本記事では
AES256
を採用した場合で示します。
下に示す例において、証明書生成の“/CN=hoge”の“hoge”の部分は、
証明書のCommon Nameです。
自分のアカウント名などにすればよいでしょう。
ちなみに、Webサーバー用の証明書の場合はドメイン名にします。
PS C:\> openssl genrsa -aes256 -out key.pem 4096
# 証明書の生成(自己署名証明書)
# "hoge"の部分は自分のアカウント名などにします
PS C:\> openssl req -new -x509 -key key.pem -out cert.pem -days 36500 -subj "/CN=hoge"
# 証明書の内容の確認
PS C:\> openssl x509 -in cert.pem -noout -subject -dates
RSA秘密鍵生成のための“openssl genrsa”コマンドの詳細については、
次のページをご覧ください。
genrsa | OpenSSL Documentation
証明書生成のための“openssl req”コマンドの詳細については、次のページをご覧ください。
openssl-req | OpenSSL Documentation
3.2.3 暗号化と復号化の例
【暗号化】
下に示すコマンドは、“cert.pem”という証明書を使って、“foo.txt”を暗号化し、
“encrypted_cms_foo.txt“として保存する例です。
【復号化】
次のコマンドは“key.pem”という秘密鍵を使用し、“encrypted_cms_foo.txt”を復号化し、
“decrypted_cms_foo.txt”として保存する例です。
-out decrypted_cms_foo.txt
【暗号化されたファイル】
openssl cmsで暗号化されたファイルの中身は、下に示すようなテキストファイルになります。
いくつかのヘッダとBase64エンコードされたペイロードで構成されています。
3.3 openssl smime
サブコマンドの“cms”が“smimeになっただけで、openssl cmsと使い方は同じです。
コマンド使用例は、割愛します。
以上
本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。
少しでも役に立てていただければ、うれしく思います。
このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元と著者名は明らかにしてください。
なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。