トップ «前の日記(2017-12-20 (Wed)) 最新 次の日記(2017-12-23 (Sat))» 編集   RSS 1.0 FEED  

Journal InTime


2017-12-21 (Thu) [長年日記]

_ PGP/MIME

MournmailにPGP/MIMEを実装した(表示は前から一部実装してあった)。

mail-gpgを使って

m = Mail.new
...
m.gpg(sign: true, encrypt: true)
m.deliver

とすると、PGP/MIMEで署名・暗号化されたメールが送信されるが、delivery_handlerとして実装されているのでdeliver!だと署名・暗号化されないので注意。*1

署名と暗号化の両方を行った場合は、multipart/encryptedの中にmultipart/signedを入れる形式*2ではなく、以下のようにOpenPGPで署名と暗号化を同時に行ったものをmultipart/encryptedにする形式*3になる。

Content-Type: multipart/encrypted;
 boundary="--==_mimepart_5a3b0cf4ac39a_8953ff49d912018280a";
 protocol="application/pgp-encrypted"
Content-Transfer-Encoding: 7bit

This is an OpenPGP/MIME encrypted message (RFC 2440 and 3156)
----==_mimepart_5a3b0cf4ac39a_8953ff49d912018280a
Content-Type: application/pgp-encrypted
Content-Transfer-Encoding: 7bit
Content-Description: PGP/MIME Versions Identification

Version: 1
----==_mimepart_5a3b0cf4ac39a_8953ff49d912018280a
Content-Type: application/octet-stream;
 name=encrypted.asc
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename=encrypted.asc
Content-Description: OpenPGP encrypted message
Content-ID: <5a3b0cfbd80bc_8953ff49d9120182843b@lexington.mail>

-----BEGIN PGP MESSAGE-----
Version: GnuPG v2

hQIMA/zS+2ljaqfNARAA2Zh9f6f5Y55AfzRhCzMSe13R5EXBD6uI+R/VtQomhsag
...
-----END PGP MESSAGE-----

----==_mimepart_5a3b0cf4ac39a_8953ff49d912018280a--

Mewでは署名を検証できたけど、SEMIだと署名の検証方法がわからなかった(UI的に署名されているかどうかもわからないような)。

*1  interceptorにしようというissueがある。

*2  RFC 3156の6.1 RFC 1847 Encapsulationで規定されている形式。the data is first signed as a multipart/signature bodyと書いてあるのはmultipart/signedのtypoのような気がする。

*3  RFC 3156の6.2 Combined methodで規定されている形式。