Org Mode 作为主要 GTD 和笔记软件,需要使用网盘来同步信息,虽然 Dropbox 名声十分良好, 但是有一些敏感信息,还是认为谁都不值得信任。
所以需要使用 GPG 加密后再传到 Dropbox,而 Emacs 中, EasyPG Assistant
可以很方便地加解密。
GPG
GNU Privacy Guard(GnuPG或GPG)是一种加密软件,它是PGP加密软件的满足GPL的替代物。GnuPG依照由IETF订定的OpenPGP技术标准设计。 GnuPG用于加密、数字签名及产生非对称钥匙对的软件。
如果不了解 GPG,推荐看一下阮一峰老师的文章,快速入门 http://www.ruanyifeng.com/blog/2013/07/gpg.html
简单地说就是可以通过 GPG 使用两种方式加密文件:
- 对称加密,只使用密码对文件进行加密
- 非对称加密,使用 GPG 密钥对文件进行加密,只有使用私钥能进行解密,而且需要私钥密码才能使用私钥
配置
macOS
通过 brew 安装 gpg
brew install gpg
Emacs
通过 use-package
配置 Emacs
如果没用过
use-package
可以看一下: https://github.com/jwiegley/use-package
macOS 上的图形界面 Emacs 弹出密码窗口有问题,可以通过以下配置解决
(setq epa-pinentry-mode 'loopback)
最后,配置文件如下:
(use-package epa-file
:ensure nil
:config
(epa-file-enable)
(setq epa-pinentry-mode 'loopback))
使用
对称加密
默认情况下,Emacs会使用对称加密的方法进行文件加密,实际就是用一个密码,使用 AES 对文件进行加密
每次打开文件时,都要输入密码,保存时,甚至要输入两次,因为被当成新加密了。
可以把密码缓存起来:
(setq epa-file-cache-passphrase-for-symmetric-encryption t)
再打开和保存这个文件时,就不用输入密码,
但是!!
这个缓存是在 gpg agent
进程里的,如果能确保电脑没别人会用,倒还好,
否则别人也是可能通过 gpg agent
的缓存读到解密内容的!
或者说使用完,关了 Emacs 之后,其它人再重新打开,尝试读取,也是能载入缓存的!
可以通过加一个 Hook,在关 Emacs 的时候,把 gpg agent
也杀了,相对能安全点
(add-hook 'kill-emacs-hook (defun personal--kill-gpg-agent ()
(shell-command "pkill gpg-agent")))
这里我们用 defun 而不是 lambda,有兴趣可以看一下这篇文章: http://ergoemacs.org/emacs/emacs%5Favoid%5Flambda%5Fin%5Fhook.html
非对称加密
使用 gpg key 对文件进行加密,这个目前应该是无懈可击的加密方式了
在 Org Mode
里使用非对称加密需要在文件开头加上:
# -*- mode:org; epa-file-encrypt-to: ("[email protected]") -*-
在保存的时候,Emacs 会提示让选择一个 GPG Key 进行加密, 加密以后,再打开这个文件,需要提供 GPG Key 私钥密码进行解密,然后再保存就不需要输入密码了。
我在用的时候有个问题,就是第一次新建文件加密保存后,每次都需要选择 Key 进行加密, 把 Buffer Kill 了之后,再打开文件使用就没有问题了
GPG 相关
导出 Key
用了 GPG 加密,那私钥就非常的重要了,所以最好把私钥导出一份:
# 找到自己的 Key ID,一长串字符
gpg --list-keys
# 导出,armor 表示使用可打印字符
gpg --export-secret-keys --armor AAAABBBBBBBBBCCCCCCC0000000000 >> /tmp/private.key
最重要的就是把导出文件保存好了,推荐离线保存!
这个文件比较大,内容比较多。 可以把文件分割成几个小份,然后导出生成二维码,打印到纸上,离线保存。
导入 Key
有导出,自然也有导入:
gpg --import private.key
导入之后 Key 没被信任,需要修改一下:
gpg --edit-key AAAABBBBBBBBBCCCCCCC0000000000
# 看到提示符后输入 trust
# 再选择信任等级,我自己的 Key,我选 5