LoginSignup
11
10

More than 5 years have passed since last update.

S/MIMEで暗号化

Last updated at Posted at 2016-03-14

AさんからBさんへ暗号化メールを送る場合の流れを調べてみる。双方ともオレオレ証明書で運用する。

Aさんが以下を実行して、鍵と証明書を作成

openssl genrsa 1024 > private-key1.pem
openssl req -x509 -new -key private-key1.pem -out cert1.pem -days 356

Bさんが以下を実行して、鍵と証明書を作成

openssl genrsa 1024 > private-key2.pem
openssl req -x509 -new -key private-key2.pem -out cert2.pem -days 356

SMIME1.png

AさんがBさんへ自分の証明書cert1.pemを渡して、BさんがAさんに自分の証明書cert2.pemを渡す。

SMIME2.png

Aさんがmail.txtというメールを書いてBさんの証明書cert2.pemで暗号化。これによりcert2.pemの秘密鍵を持っているBさんしか開けなくなる。

openssl smime -encrypt -des3 -in mail.txt -out encrypt.txt cert2.pem

これだけでも暗号化はされるが、Aさんが送ったか確定できないので、Aさんが自分の秘密鍵と証明書で署名をおこなう。

openssl smime -sign -in encrypt.txt -signer cert1.pem -inkey privkey1.pem -out sign.txt

このsign.txtをBさんに送る。

Bさんはまず署名を確認する。

openssl smime -verify -in sign.txt -CAfile cert1.pem -out sign_verify.txt

署名が正しいので復号化する。

openssl smime -decrypt -recip cert2.pem -inkey private-key2.pem -in sign_verify.txt -out plain.txt

これでAさんから送られたmail.txtが暗号化されてBさんがplain.txtとして読める。

S/MIMEの普及しないのは下記のような理由によるのではないかと思う。

  • 証明書を正式に発行するのが面倒だったり費用がかかったりする
  • 署名と暗号化は別なのだが分かりにくい
  • 複数人に送る場合、全ての人の証明書が必要で煩雑になる
  • ヘッダーは暗号化されない

とはいえ、メール関係で新しい仕組みができて普及するるとも思えないのでS/MIMEをうまい具合に使っていくしかないのかもしれない。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10