Keywords: Linux; mutt; gpg;

序言

上个世纪, 上帝已死!

这个世纪,隐私已死!

我相信会有越来越多像我一样的屁民开始意识到隐私的重要性。

掌握的技术越多,越意识到我们已经赤裸裸。生活也变的越来越谨慎,对于那些所谓的新科技越来越怀有一颗“敬畏”的心。

也许绝大数人会说,我只是屁民一个,为什么要这么关心隐私呢?那是你还没有读懂人性的丑陋。 如果你们家隔壁老王知道你所有的事情(我的意思是所有,没有一个角落遗漏), 你每次见到老王的时候,是什么感觉?你觉得他每次看到你的时候,在想什么?

内容

今天讲怎么给邮件内容加密,不让隔壁老王看到你发的内容。

以下内容是基于 *nix 平台下, mutt 软件的。 如果你使用的是 Windows, 那么我爱莫能助。

关于 mutt 的介绍, 我已经在很早一篇博客中涉及, 关于怎么给 mutt 登陆密码加密,我也已经在另一篇博客中介绍, 如果你有兴趣,欢迎批评

1. 首先, 生成加密所需要的 private key 和 public key。 private key 是你(也只有你私有的,别人永远不会知道), public key 是你以后需要上传到网上服务器 (别人看到你上传后就可以给你发加密邮件了)

 gpg --gen-key 

备注: 如果你使用的是 Ubuntu, 请注意 gpg 的版本是 version 2+, 也就是调用的程序是 gpg2 而不是 gpg, 你可以通过

 gpg --version 

来查看。 同时, gpg (version 2.1+) 默认的加密方式是 RSA 2028, 如果你需要更长的加密或者不同的加密方式,那么请 invoke

 gpg --full-gen-key 

在这个过程中会遇上一些提问,比如你的姓名和邮箱之类从而来创建一个 user ID,如果你不清楚提问内容是什么,请直接选择默认。 同时,你还需要给这个 user ID 指定一个密码。

2. 查看是否已正确生成 RSA key

 gpg --list-keys 

输出内容大致如下图所示 (具体内容跟系统和软件版本有关)gpg-list-keys

图中, 7407B92B 就是你的 user_key_id, 以下内容中出现这串数值的时候,请相应替换为你自己的 user key id。

3. 导出 public key 或者上传到 key server, 从而使其他用户能使用 public key 给你发送加密邮件。 简单介绍一下, private key 和 public key 就像是锁和钥匙, 别人如果需要给你发送加密邮件, 首先需要知道你的 public key (也就是你的锁),然后用你的 public key 加密 (用你给的锁把箱子锁上),但是他没有 private key (也就是钥匙, 只有你有), 你只要在在收到东西的时候, 用钥匙打开锁就好。 分享 public key (锁) 的方式主要有两种, 直接拷贝给其他用户 (这种方式的覆盖面比较窄); 还有一种就是直接上传到 public key server, 大家都可以去那里下载

 gpg --output your_name_public.key --armor --export 407B92B7 

或者上传到服务器,服务器有好几个,但是因为他们是相互映射的,所以你不用管上传到哪一个, 这里以 pgp.mit.edu 服务器为例

 gpg --keyserver pgp.mit.edu --send-keys 407B92B7 

4. 最后在你的 muttrc 配置文件中,添加以下内容


# gpg setup
set pgp_replysign
set pgp_replysignencrypted
set pgp_verify_sig
set pgp_auto_decode

set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 7407B92B -- -r %r -- %f"
set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 7407B92B -- -r %r -- %f"
set pgp_import_command="gpg --no-verbose --import -v %f"
set pgp_export_command="gpg --no-verbose --export --armor %r"
set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
set pgp_autosign=yes
set pgp_sign_as=7407B92B
set pgp_replyencrypt=yes
set pgp_timeout=1800
set pgp_good_sign="^gpg: Good signature from" 

注意: 要记得把上面内容中的 user key id (也就是7407B92B) 换成你自己的 ID。 千万记得!

5. 测试是否可以成功发送邮件 (因为现在你暂时还没有别人的 public key, 所以你可以自己给自己发送邮件)。 跟往常一样, 你打开 mutt, 输入好内容后mutt_gpg

会看到如上的界面。 跟往常不同的是, 会有 Security 这一项, 在这个时候你按下 “p” 键, 然后选择 (e)ncrypt 选项后,界面会变成

mutt_gpg_2

注意其中变化, Security 变成了 encrypt。 最后点击 “y” 发送邮件。 如果这时候提示错误, 比如, pgpewrap not found, 不要慌张,那是因为你的 mutt 找不到 pgpewrap 的路径。 你只要把上面代码相应处改成:


set pgp_encrypt_only_command="/usr/lib/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 7407B92B -- -r %r -- %f"
set pgp_encrypt_sign_command="/usr/lib/mutt/pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 7407B92B -- -r %r -- %f"

6. 查收邮件, 在不输入密码的情况下, 你的邮件显示内容是一对数字。 输入你的 gpg 密码(你的钥匙)后, 邮件内容会被打开。 这样就保证了, 邮件不会在传输过程中被隔壁老王偷看。 也不用担心邮件内容被审查。

7. 给自己发送邮件成功以后,就需要实践怎么给别人发送邮件。 我相信每个使用 mutt+gpg 都会把自己的 public key (自己的锁) 上传到网上服务器。 比如,现在你需要给我发送邮件,你想知道我的 public key 是什么, 通过以下命令进行搜索

 gpg --keyserver pgp.mit.edu --search-keys Qiao-Le 

其中 Qiao-Le 是我的名字, 然后你就会看到我的 public key, 并且导入。 我的 user key id 是 B912CDE3, 欢迎大家给我发加密邮件。

注意: 跟“给自己发邮件”不同的是, 在给我发送邮件的时候, 你需要手动选择 我的 public key 进行加密, 这样我在收到邮件之后才可以 解密打开 并且查看。 如果你不小心使用了你自己的 public key 进行加密, 那么收件人是永远没有办法打开的, 因为他不可能有你的 private key (钥匙)。

如果, 你的收件人没有把他的 public key 上传到网上服务器, 而是 U 盘拷贝给你的, 你则需要手动导入这个 public key

 gpg --import ~/PATH/your_name_public.key 

 

 

 

 

 

 

 

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s