S/MIMEによる電子メールの電子署名と暗号化

S/MIME(エスマイムと読む)ができて15年は裕に過ぎていると思うのだけど、一般での利用は皆無でセキュリティにうるさい人の間ですら利用は進むどころか廃れている気がするくらい。でも、せっかく簡単に使えるようになっているのだから、やっぱり使って欲しいなと思うこの頃。
今更ながら利用方法。

S/MIME 画像1
画像1: まずはS/MIMEの電子証明書が必要だが、オレオレ証明書はダメ。SSLの認証局をやっているようなところで無料/有料で発行して貰う。今回は無料で1年間有効な証明書を発行してくれるCOMODO (ドコモじゃなくてコモド)を使うことにする。
ブラウザでFree Secure Email Certificatesのページを開き、[GET NOW]を押す。(画像中の赤い四角で囲われたところ)

S/MIME 画像2
画像2: 氏名をローマ字で入力する。上が名前、下が性。メールアドレスを入力。このメールアドレス用の証明書が発行される。国は住んでいるところを選択。
Key Sizeは「高強度の暗号化」のままで変更しない。
Revocation Passwordは証明書取り消し用のパスワード。重要なので少なくとも12文字以上でアルファベット大文字小文字数字記号など混在させて入力。このパスワードは使わなくて済むならそれが最良だが、セキュリティ面で重大な事故が起きたときなど証明書を無効にしなければならなくなったときに困らないよう絶対に他人に見られない方法で記録しておく。
COMODOからのニュースレターは要らなければチェックを外す。
規約を読んで納得できたらI ACCEPT the term・・・にチェックして[Next]を押す。

S/MIME 画像3
画像3: 入力したメールアドレスに案内が通知される。ブラウザはこれで一旦閉じても可。

S/MIME 画像4
画像4: これは入力したメールアドレス宛てに届いたメールを開いたところ。HTMLメールを見ることができるなら[Click & Install Comodo Email Certificate]を押すか(画像6に進む)、その下のリンクをクリックする。(画像5に進む)
HTMLメールを見ることができないなら記載されているURLをブラウザで開く。URLの次の行あたりにパスワードが書いてあるのでそれも使う。(画像5に飛ぶ)

S/MIME 画像5
画像5: メールアドレスとメールに書かれていたパスワード(先に入力したRevocation Passwordではない)を入力して[Submit & Continue]を押す。(画像6に進む)

S/MIME 画像6
画像6: 発行された個人証明書がブラウザに保存され、確認の[OK]を求められる。

S/MIME 画像7
画像7: ブラウザの設定画面を開く。画像はFirefoxのものだが他のブラウザでも似たようなもの。
左のリストから「詳細」を選択。 タブから「証明書」を選択。[証明書を表示]を押す。

S/MIME 画像8
画像8: 証明書のリストの画面で「あなたの証明書」のタブを選択。これまで個人証明書を利用したことがなければリストには1つだけ登録されている筈。既に別の個人証明書を利用したことがあるならリストに複数の証明書が表示されているのでCOMODO発行の証明書を選択する。
証明書を選択するとリスト下の[バックアップ]が押せるようになるので押す。

S/MIME 画像9
画像9: 選択した証明書をエクスポートするために適当なファイル名を指定する。
例: comodo_foobar_example_com.p12
[Save]を押す。

S/MIME 画像10
画像10: バックアップ用パスワードを何か適当に指定する。5分程度だけ憶えてられる程度のもので構わないが、エクスポートした証明書のファイルを長期保存するなら強度の高いパスワードを指定する。パスワードの品質レベルはアルファベットの大文字・小文字、数字、記号がそれぞれ2文字ずつ以上使われて一定文字数あれば品質が高いと判断されるみたい。
[OK]を押す。

S/MIME 画像11
画像11: バックアップされた表示が出たら[OK]を押す。ブラウザ側はここまで。
ちなみに、(昔の)Windowsだとブラウザ(IE)とメールアプリ(Outlook等)で証明書を共有する仕組みだったので、ブラウザから証明書を取り出してメールアプリにそれを取り込む作業は要らないけどMicrosoft謹製に拘らない場合は多くの場合にこの作業が必要。

S/MIME 画像12
画像12: ここからはメールアプリ側の作業。画像はThunderbirdだが他のメールアプリも似たようなもの。
「設定」画面で上の「詳細」タブを選択。そのすぐ下のタブリストから「証明書」タブを選択。[証明書を表示]を押す。

S/MIME 画像13
画像13: 「あなたの証明書」タブを選択してリスト下の[インポート]を押す。

S/MIME 画像14
画像14: 先ほどの画像9で保存した証明書ファイルを選択する。[Open]を押す。

S/MIME 画像15
画像15: 先ほどの画像10で指定したパスワードを入力する。[OK]を押す。

S/MIME 画像16
画像16: 正常に証明書が取り込まれた表示が出たら[OK]を押す。もうエクスポートした証明書ファイルは不要なので削除しても構わない。

S/MIME 画像17
画像17: インポート前(画像13)ではリストに証明書が無かったが、インポートしたのでCOMODO発行の証明書がリストにある。それを選択して[表示]を押す。(画像18に進む)
または証明書を見る必要が無いと思えば[OK]を押す。(画像19に進む)

S/MIME 画像18
画像18: 証明書の情報はこんなの。詳細タブの画面で見ればもっと詳しいことがわかる。

S/MIME 画像19
画像19: アカウント設定画面を開く。
左のアカウントリストから発行した証明書と対応するメールアドレスを探しそのアドレスの「セキュリティ」を選択する。
右部分でデジタル署名の[選択]を押す。

S/MIME 画像20
画像20: 証明書のブルダウンメニューからCOMODO発行の証明書を探す。個人証明書を使うのが初めてなら1つしかないので最初から選択されている筈。COMODOの証明書を複数使っているなら有効期間を見るなどして正しい証明書を選ぶ。
[OK]を押す。

S/MIME 画像21
画像21: 上の画像20で選択した証明書を暗号化用にも使用するなら「はい」を押す。通常は「はい」で良い。

S/MIME 画像22
画像22: デジタル署名用と暗号用の両方にCOMODOの証明書が選ばれたことを確認し、「メッセージにデジタル署名する」にチェック(この記事的にはチェックするだが、特別な相手にしかデジタル署名付きでメールを送信しないのが現実かと思うのでその場合はチェックしない。)
「暗号化しない」にチェック。暗号化についてはメール相手(受信者側)も証明書を持っている必要があるので通常は「暗号化しない」で良い。証明書を持っている人としかメールをやりとりしないのであれば「暗号化する」を選択する。
(どちらにしても送信するメール毎に暗号化の有無は指定変更できる)
[OK]を押す。
ここまでが初回設定。

S/MIME 画像23
画像23: 普通にメールを作成してみる。宛先と題名と本文を入力したとする。

S/MIME 画像24
画像24: [セキュリティ]のプルダウンを開く。
先ほど、画像22で「デジタル署名する」「暗号化しない」で設定したのでそのようにチェックが付いている。メールの送り先の人が証明書を持っているなら「このメッセージを暗号化する」にチェックするのもアリ。チェックした状態でメール送信を行えば自動的に暗号化される。(メールの送信者・受信者共にそれぞれ証明書を持っていないと暗号化はできない。)
「このメッセージにデジタル署名する」はチェックを付けるのも外すのも自由。
メール送信についてはここまで。

S/MIME 画像25
画像25: 今度はメール受信。
個人証明書を持っている他の人からメールが届いたとする。
「デジタル署名する」「暗号化する」の条件で届いたメールならこのような表示。右上赤枠に注目。Thunderbirdだと控えめな表示。暗号化されたメールであってもメールアプリ上では暗号化が解除された状態で表示されるのでこの表示以外は普通のメールにしか見えない。ユーザーは暗号化解除を意識する必要はない。

S/MIME 画像26
画像26: 上の画像25の赤枠をクリックしたところ。このメールはデジタル署名されていること、暗号化されていることがわかる。

S/MIME 画像27
画像27: 同様に上の画像25の赤枠(ただし鍵マークが無い)をクリックしたところ。このメールはデジタル署名されていること、暗号化はされていないことがわかる。

S/MIME 画像28
画像28: メールのソースを見てみるとこんな感じ。S/MIMEで暗号化されているのがわかる。メールヘッダに見えているDKIM署名は送信ドメイン認証用なので関係ない。同じくメールヘッダに見えているTLSv1.2の表示もメール転送に使われる暗号化であって、この記事のメールの暗号化とは関係ない。

使用の注意とまとめ

  • そもそもS/MIMEのデジタル署名や暗号化について知らない人が殆ど。
  • 証明書を何処で発行してもらえるのか知っている人が皆無。
  • S/MIMEのデジタル署名付きメールや暗号化はPC用のメジャーなメールアプリ(メーラー,MUA)は対応している。
  • S/MIMEのデジタル署名付きメールや暗号化はスマートフォンのメールアプリでは対応していないのが多い。
  • GoogleはS/MIME好きじゃないみたい。Gmailでの対応もしないっぽい。
  • デジタル署名付きメールの受信者側は特に準備は不要。
  • 証明書をメールアプリで使える状態にするまでが面倒。
  • 証明書をメールアプリで使える状態にしておけば、メール送信時に使うのは簡単。
  • S/MIMEのデジタル署名に対応していないメールアプリでデジタル署名付きメールを受信するとsmime.p7sなどの謎な添付ファイルが付いているように見えて気持ち悪い。
  • S/MIMEを使ったメールの暗号化を利用したい場合は、送信者・受信者共に証明書を持っていなければならない。
  • S/MIMEのデジタル署名付きメールに対応したメールアプリによってはデジタル署名付きメールを受信すると派手にデジタル署名付きであることが表示されるものがあり、デジタル署名付きメールに慣れていない受信者によっては「変なメールが届いた。ウイルス?」になりかねない。
  • S/MIMEの暗号化って要るの?プライベートなメール、機密情報が含まれるメールを送るなら是非。特に企業で外国とのメール送受信など。支那では当然のようにメールが覗かれてると思った方が・・
  • S/MIMEのデジタル署名って要るの?PC乗っ取られて外部から操作されたらダメかもだけど、そうじゃなければあなたを騙った偽物ではないメールであることやメール(の本文)が途中経路のどこかで書き換えられていないことを証明してくれる。

なんらかの理由で発行された証明書を無効にしたい場合はcomodoならこちらでメールアドレスと発行時に入力したRevocation Passwordを入れる。
「Revocation Passwordを忘れた」はいくらなんでも流石にダメ。

くれぐれも赤の他人にメールを送るときはいきなりデジタル署名を付けないこと。事前にデジタル署名を使うことをしっかり知らせてからで。