OpenSSLを使ったデジタル署名

OpenSSLを使った(今回はRSAw)デジタル署名方式

ういっす、前回インストールしたOpenSSLを活用したデジタル署名というものについてやっていこうと思う

 では、まずデジタル署名とは何か?

 

デジタル署名

ここでは簡単に説明します
例えば、あるメッセージを送る人(Aさん)と、そのメッセージを受け取る人(Bさん)がいたとします
ここで、AさんとBさんが互いに通信を行うとき、BさんはAさんが送ったメッセージが確かなものであるかどうかを確認する必要があります

そこで、必要になってくるのがこのデジタル署名です
Aさんは自身のメッセージを信頼してもらうために、信頼のできる第三者(Cさん)に署名をしてもらい、その署名されたメッセージをBさんへ送り、BさんはCさんの情報とAさんのメッセージから信頼のできるものであると理解し通信が成り立ちます

 

詳しくは、また今度ブログで載せると思う(多分w)

 

RSA方式を用いたディジタル署名方式

とにかく、このデジタル署名をOpenSSLで行う方法について説明していこうと思う
申し訳ありませんが、少し専門的な知識が必要になると思います

 

秘密鍵の生成

まず、メッセージを暗号化(署名するためのメッセージ)
するための鍵が必要になります

 

f:id:T3CN0:20160903215222p:plain

f:id:T3CN0:20160903215230p:plain

上の図が、OpenSSL上で打つコマンドを表しています

「genrsa -out 出力先ファイル名 -passout pass:パスワード -des3 1024」

1024ビットのRSA秘密鍵を生成し、3DESという方式を使って「trousers」というパスワードで暗号化した後rsaprivatekey.pemというファイルに出力します

下の図が出力されたファイルになります
ご覧のように、暗号化されているので中身が読めません

 

公開鍵の作成

次に、生成した秘密鍵を元に公開鍵(暗号化されたメッセージを元に戻すための鍵)
を生成します

 

f:id:T3CN0:20160903220306p:plain

f:id:T3CN0:20160903220313p:plain

前の図同様、上がコマンド、下が出力ファイルになっている

rsa -in 生成済みの秘密鍵 -passin pass:パスワード -pubout -out 公開鍵出力先」

rsaprivatekey.pemのファイルからRSA秘密鍵を読み込み、「trousers」というパスワードを使って復号し、秘密鍵に対応する公開鍵をrsapublickey.pemファイルに出力します

これで、署名されたメッセージの確認ができます

 

メッセージの署名

メモ帳などで作った適当なメッセージ(今回はplain.txt)を秘密鍵
を使うことで署名します

 

f:id:T3CN0:20160903221356p:plain

f:id:T3CN0:20160903221403p:plain

「rsautl -sign -inkey 署名用の秘密鍵 -in 適当なメッセージ -out 署名済みのメッセージ」

rsaprivatekey.pemにあるRSA秘密鍵を使用してplain.txtのファイルの内容に署名し、電子署名ディジタル署名)をsignature.binファイルに出力します。

これで、署名されたメッセージの出来上がりですw

 

署名済みのメッセージ確認

最後に行う手順として、署名されたメッセージを公開鍵
を使用して元のメッセージに戻します

 

f:id:T3CN0:20160903221418p:plain

f:id:T3CN0:20160903221426p:plain

「rsautl -verify -pubin -inkey 公開鍵 -in 署名済のメッセージ -out 出力先のファイル名」

rsapublickey.pemのファイルにあるRSA公開鍵を使用してsignature.binファイル内の電子署名を検証して、元の電子署名されていないデータを新しいplain.txtファイルに出力します

以上で、デジタル署名方式を使ったメッセージの署名とその確認が検証できます

 

今回の内容は少々難しいと思いますが、是非セキュリティ分野に活かせればと思い書いてみましたw