公開鍵、秘密鍵を利用してのファイルの暗号化&複号。OpenSSLを利用した方法

2020年6月5日テクノロジーOpenSSL,暗号化

今回はOpenSSLを利用したファイルの暗号化について解説します。

「ファイルを.zip形式で圧縮するときにパスワードを設定する」ぐらいはしていても、本格的な暗号化というとちょっと敷居が高いですよね。。今回はOpenSSLを使いながら、公開鍵、秘密鍵を利用したファイルの暗号化について解説します。

 

 

Step 1. OpenSSLをインストール。

OpenSSLとは、暗号通信プロトコルであるSSLおよびTLSの機能を実装した、オープンソースベースのライブラリとそれを実装したツールのことを指します。ほぼ全てのLinuxやWindowで利用することができますが、ここでは例としてCentOSでコマンドを実行しながら説明します。

パッケージのインストールはyum コマンドで実行します。

# yum -y install openssl

 

Step 2. 公開鍵(Public Key)と秘密鍵(Private Key)の作成。

# openssl req -x509 -nodes -newkey rsa:2048 -keyout private-key.pem -out public-key.pem

公開鍵(public-key.pem)※1はファイルを暗号化するときに使用するキーとなります。ファイルの復号に用いられるキーが秘密鍵(pricate-key.pem)です。

上のコマンド例では少し強めの暗号化をするため、Keyのサイズを2048 bitと長いものにしています。

※1ここで作成されたものは正確にはX.509のcertificate ですがここでは詳細は割愛します。全体の流れを理解することをメインに説明しています。

 

Step 3. 公開鍵を利用してファイルを暗号化。

# openssl smime -encrypt -binary -aes-256-cbc -in hello.txt -out hello.txt.enc -outform DER public-key.pem

このコマンドではStep 2で作成した公開鍵「public-key.pem」を利用してファイル「hello.txt」を暗号化して「hello.txt.enc」を作成しています。

公開鍵はファイルを暗号化させることはできても復号(化)することはできません。そのため誰に渡してもOKなキーだから「公開」鍵。

 

Step 4. 暗号化されたファイルを秘密鍵を利用して復号してみる。

#openssl smime -decrypt -binary -in hello.txt.enc -inform DER -out hello.txt -inkey private-key.pem

このコマンドではStep 2で作成した秘密鍵「private-key.pem」を利用してファイル「hello.txt.enc」を復号して「hello.txt」を作成しています。

 

 

いかがでしたでしょうか。この公開鍵ー秘密鍵方式は複数の人やノードを相手に暗号化したファイルをやり取りする場合に用いられます。

シンプルな例は以下です。

  • ファイルをもらいたい人(A)がまず自分の公開鍵をファイルを送付したい人(B)に渡します。
  • そしてBはその公開鍵で暗号化したファイルをAへ送付します。
  • Aは暗号化されたファイルを受け取ると自身の秘密鍵で復号し、ファイルを確認します。