ガチャつくブログ

IT系のお勉強のために、やってみたことをアウトプットしていきます。

MENU

暗号化で遊ぶ - 共通鍵暗号・公開鍵暗号・デジタル署名をOpenSSLコマンドで試す -

f:id:tmt-tty:20190716233654p:plain

はじめに

共通鍵暗号方式・公開鍵暗号方式・デジタル署名について、仕組みは知っているけど実際に暗号化、復号化、署名ってどうやるの?どうなるの?っていう疑問。

OpenSSLコマンドを使えば、実際の動きがわかりそうなので、やってみる。

 

やり方

OpenSSLコマンドが使える環境が必要です。

Macであれば標準搭載しているので、ターミナルから使えます。

Windowsの場合は、下記の手順でインストールできる様です。

www.atmarkit.co.jp

 

自分はMacなので、ターミナルで実行します。

 

共通鍵暗号方式

暗号化用のファイルを準備

$ echo "Hello World" > hello.txt

 

暗号化

$ openssl aes-256-cbc -e -in hello.txt -out hello.encrypted

enter aes-256-cbc encryption password:これが共通鍵
Verifying - enter aes-256-cbc encryption password:これが共通鍵

 

暗号化したファイルの確認

$ cat hello.encrypted 

 

復号化

$ openssl aes-256-cbc -d -in hello.encrypted -out original.txt

enter aes-256-cbc decryption password:共通鍵を入力

 

復号化したファイルの確認

$ cat original.txt 

 

公開鍵暗号方式

秘密鍵の作成

$ openssl genrsa 1024 > private-key.pem


秘密鍵の確認

$ openssl rsa -text  < private-key.pem

 

公開鍵の作成

$ openssl rsa -pubout < private-key.pem > public-key.pem


公開鍵の確認

$ openssl rsa -text -pubin < public-key.pem

 

公開鍵で暗号化

$ openssl rsautl -encrypt -pubin -inkey public-key.pem -in hello.txt -out hello.encrypted

 

暗号化したファイルの確認

$ cat hello.encrypted

 

秘密鍵で復号化

$ openssl rsautl -decrypt -inkey private-key.pem -in hello.encrypted

 

デジタル署名

ファイルのハッシュ値

$ openssl dgst -sha1 hello.txt


デジタル署名の生成

$ openssl dgst -sha1 -sign private-key.pem hello.txt > sign.sig

 

デジタル署名の検証

$ openssl dgst -sha1 -verify public-key.pem -signature sign.sig hello.txt

 

hello.txtを改ざんしてから検証すると、検証失敗する。

$ echo hello >> hello.txt
$ openssl dgst -sha1 -verify public-key.pem -signature sign.sig hello.txt