安全にラブレターを受け取る方法

クリスマスも近くなり、ラブレターを送りたい!受け取りたい!と思っている方も多いのではないでしょうか。
今回は openssl を使って安全に送り、受け取ることをしたいと思います。

下準備 

$ openssl version
OpenSSL 0.9.8za 5 Jun 2014
$  which openssl
/usr/bin/openssl

標準で入ってる openssl はバージョンが低いので、Homebrew でいれます。
今年は、セキュリティ的に当たりの年でしたね。
「OpenSSL」における Change Cipher Spec メッセージ処理の脆弱性対策について(JVN#61247051):IPA 独立行政法人 情報処理推進機構 : https://www.ipa.go.jp/security/ciadr/vul/20140606-jvn.html

$ brew update && brew upgrade
$ brew intall openssl
$ brew link openssl --force

確認

$ which openssl
/usr/local/bin/openssl
$ openssl version
OpenSSL 1.0.1j 15 Oct 2014
$ /usr/bin/openssl version
OpenSSL 0.9.8za 5 Jun 2014o
$ uname -s -r
Darwin 14.0.0

鍵生成

秘密鍵を生成

$ openssl genrsa -out private-key.pem
Generating RSA private key, 1024 bit long modulus
..++++++
.....................................++++++
e is 65537 (0x10001)

秘密鍵から公開鍵を生成

$ openssl rsa -in private-key.pem -pubout -out public-key.pem
writing RSA key

2つの鍵ができていることを確認

$ ls
private-key.pem public-key.pem

公開鍵を公開

$ cat public-key.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaLbfQAI3asQRy4bgm5O5gLky+
YB5hEOsLF2/CFCWCCD8cgPnEVvane2HEaCXAg2PefwWszx+lBjDRMTawjhPU5Rf0
1jhu2XTSygIkroGtHws11LU9R4oz9ZRnSG/CdqMA3q9gWostAhGHnDm12E24DjFo
87T3Wo08ENVGlJUY6wIDAQAB
-----END PUBLIC KEY-----

これが、僕の公開鍵です。

送ってくれる人がすること

  1. 適当なファイル(love.txt)にメッセージを綴る。
  2. 公開鍵を保存(public-key.pem)。
  3. 公開鍵を使って、ファイル(love.txt)を暗号化(encrypted.dat)。
$ openssl rsautl -pubin -inkey public-key.pem -in love.txt -encrypt -out encrypted.dat
$ cat encrypted.dat
&"a�v�ʯ���Λ����<҃O��Dɪ�C��.{&<h�0���KfS��N5��W��F�H)U`������qquG�
_�ʑV%
  1. なんらかの方法で送る(encrypted.dat)をメールやなにかしらの方法で送る。※暗号化された中身のテキストでもおk)

受け取る人(自分)がすること

秘密鍵を使って、ファイルを復号化。

$ openssl rsautl -inkey private-key.pem -in encrypted.dat -decrypt -out love2.txt

これで、love2.txt で複合されたメッセージを確認ことができます。

さいごに

メッセージ待ってます!