
はじめに
共通鍵暗号方式・公開鍵暗号方式・デジタル署名について、仕組みは知っているけど実際に暗号化、復号化、署名ってどうやるの?どうなるの?っていう疑問。
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
〆