加密那点事
谁都会有一些不想让其他人知道的东西,银行卡密码、网络登录帐号密码、邮件系统密码、写满了青涩回忆的日记等等,这些都是属于每一个人自己专有的信息。随着这两年关于“隐私泄露”话题为人们所关注,这些关乎个人经济、情感、安全的信息受到了越来越多的重视。而且网络密码越来越多的今天,密码存放的安全性也越来越重要。所以,”避免使用统一的密码“成为大家的共识。可是“人脑有极限啊,哪里能记得住那么多的密码?”,所以,把这些个人关键信息记录在一个安全的地方成为了很多人的选择。
打造一个”安全的地方“的方法有很多,我这里要做的是使用神器”EMACS“配合GnuPG来实现文件的加密存放。Emacs是一个”为装成了编辑器的操作系统“,估计大家都多少有一点概念。那么GnuPG呢?
GunPG
维基百科的词条记录说明如下:
GnuPG (英文:GNU Privacy Guard,简称:GPG)是一种加密软件,它是PGP加密软件的满足GPL协议的替代物。GnuPG依照由IETF订定的OpenPGP技术标准设计。GnuPG用于加密、数字签章及产生非对称匙对的软件。IETF正在为PGP协议进行标准化,标准化的PGP称为OpenPGP。当前版本的PGP及Veridis' Filecrypt与GnuPG或其他OpenPGP系统兼容。GnuPG是自由软件基金会的GNU计划的一部份,目前受德国政府资助。以GNU通用公共许可证第三版授权。
GnuPG使用用户自行生成的非对称密钥对来加密信息,由此产生的公钥可以同其他用户以各种方式交换,如密钥服务器。他们必须小心交换密钥,以防止得到伪造的密钥。GnuPG还可以向信息添加一个加密的数字签名,这样,收件人可以验证信息完整性和发件人。 GnuPG不利用专利或其他方式限制软件或算法,就像IDEA算法一开始出现在PGP中一样。(可以通过下载相关插件在GnuPG中使用IDEA算法,不过如果在一些IDEA算法为专利的国家中使用,可能需要一份许可)。GnuPG同样也使用各种其他非专利的算法:
- 分组密码:CAST5,Camellia,Triple DES,AES,Blowfish,Twofish
- 非对称加密密码:ElGamal,RSA
- 加密哈希:RIPEMD-160,MD5,SHA-1,SHA-2,Tiger
- 数字签名:DSA,RSA
GnuPG是一个混合加密软件程序,它使用常规对称密钥提高加密速度,使用公钥便于交换。通常使用一次性的收件人公钥用以加密会话。
从上述词条介绍中可以看出:
- GunPG是支持多种加密算法的加密工具
- 支持对称加密(词条中写的是”分组加密“)和非对称加密两种加密方式
- 具有较高的安全性(嗯,一个有1024~4096位长的密码(非对称加密方式下),确实不是轻易可以破解的,具体的,没有研究高大上的加密技术,哪位大侠深入的解释解释?)
这应该是足够安全了。但是作为一个”选择障碍症“晚期患者,应该如何选择加密方式?对称加密(symmetric encryption)还是非对称加密(asymmetric encryption)哪个是我的菜?
加密方法的选择
从阮一峰的网络日志上可以看到:
加密和解密使用同样规则(简称"密钥"),这被称为"对称加密算法"(Symmetric-key algorithm)。
加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。这种新的加密模式被称为"非对称加密算法"。
所以,结合不同的使用场合,可以选择合适的加密方式:
- 对于不需要进行交换的信息,例如我自己的银行卡密码、网络帐号信息,使用对称加密方法即可。关键是不能忘记了当初设定的密码(实在忘记了话,找个地方去哭吧)
- 对于有重度信息交换需求的,可以选择使用非对称的加密算法。当然,由于GPG会做好相关加解密密钥的管理,所以做好数据备份非常重要。(密钥丢失了的话,那么对于当初加密后的文档就当浮云吧,挥一挥手,潇洒的走开,姿势会比较优美)。
在Emacs中激活GPG的加密功能
在Emacs近期版本中(24.4)默认提供了EasyPG包。可以实现对GPG软件的调用,实现文件的加解密功能。具体方法如下:
-
安装gpg软件
Gnupg在Linux、Windows、Mac等主流操作系统上都有相关的发行版本。根据自己的操作系统类型进行自主选择吧。
-
在Emacs的配置文件中使用使用如下代码激活EasyPG包:
(require 'epa-file)
简单吧?配置了上面的代码后,将需要加密的文件扩展名改为 gpg
就可以自动调用gpg软件进行文件的加解密了。
使用对称加密的方法
保存文件的时候,Emacs会提示选择加密使用的密钥(Key),如果没有指定Key,那么就会使用“对称加密”的方法。问一次还好,如果次次都问,那就囧了。还好,我们可以吧它关掉。默认情况下,Emacs会使用对称加密的方法进行文件加密。
(setq epa-file-select-keys 0)
使用非对称加密的方法
如果打算使用非对称加密方法,可以在需要加密的文件头添加
-*- epa-file-encrypt-to: ("your@email.address") -*-
其中your@email.address是使用gpg创建的密钥。
使用非对称加密时密钥信息的备份<a id="sec-3" name="sec-3"></a>
非对称加密的情况下,密钥的保存非常重要。通常情况下,必须做好密钥的备份以备不时之需。备份密钥的命令如下:
gpg -o keyfile.pub --export "your@email.address"
gpg -o keyfile.prv --export-secret-keys "your@email.address"
恢复密钥时,执行如下指令即可:
gpg --import keyfile.pub
gpg --import keyfile.prv
其他时间,小心的存放你的密钥文件吧。放到一个U盘里,放到你房间的墙角的纸袋里的信封里会是一个比较好的主意。唯一要注意的时,打扫房间的时候别被妈妈扔掉了哈!
小结
本文介绍了在Emacs中使用gpg加密文件的方法。上述代码在Windows 7 操作系统中配合Emacs 24.4,gpg4win 2.2.3下调试通过。写下这篇文章以备未来查询使用。
参考文件:
- GnuPG在维基百科 : 介绍了GnuPG的背景情况
- EasyPG说明 :emacswiki 上的EasyPG说明
- GPG入门教程 : GPG基本使用方法的快速上手说明
- RSA算法原理(一) : 关于非对称算法的介绍
更新日志:
- 2015-03-10 : 初始版本,完成了Emacs配合gpg完成文件加密的基础使用方法