用GNU Privacy Guard加密文件 ================================================================================ 加密技术可以保证你的文件使用加密形式存储,不管你是要把它公开到因特网,备份到服务器,用U盘携带,还是保存在笔记本里。加密你的数据,意味着除非是你认可的接收者,其他人都不可以读取,这样可以防止信息泄漏。 ### GPG (GNU Privacy Guard) ### GPG是GNU Privacy Guard的缩写。它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密,来保证消息的安全传输。一开始,用户通过数字证书认证软件生成一对公钥和私钥。任何其他想给该用户发送加密消息的用户,需要先从证书机构的公共目录获取接收者的公钥,然后用公钥加密信息,再发送给接收者。当接收者收到加密消息后,他可以用自己的私钥来解密,而私钥是不应该被其他人拿到的。 ### GPG 使用公钥和私钥 ### 公钥是你共享出来的一个公开密钥,它可以被发给任何你希望收到加密信息的人,他们可以使用你的公钥来加密信息。公钥本身不能用来解密自己加密过的信息,只有你自己——那个拥有对应私钥的人——能够解密。私钥是你自己的私人密码,可以用来解密用你的公钥加密过的信息。如果你把私钥泄漏给别人,那么他将可以解密并查看那些使用你的公钥加密过的信息。 ### 在终端里使用GPG ### 如今大多数的Linux发行版都默认包含了GPG。想检查一下的话,打开终端并输入: $ gpg --version 然后你应该看到版本。如果是这样的话,你不需要做其他事情了。否则,你需要从你的发行版软件仓库里安装GPG。 ### 生成密钥 ### 想使用GPG来加密你的通讯,你需要先创建一对密码。首先,打开终端并运行下面的命令: $ gpg --gen-key 然后会有如下提示: Please select what kind of key you want: (1) DSA and Elgamal (default) (2) DSA (sign only) (5) RSA (sign only) Your selection? 这里要选择数字1,因为它可以用来加密和解密,第二和第三个选项只能让你给信息签名。按下数字1,然后按回车。 然后会有如下提示: 1 DSA key-pair will have 1024 bits. 2 ELG-E keys may be between 1024 and 4096 bits long. 3 What key-size do you want? (2048) 这里最好输入“2048”,就像GPG推荐的那样。如果你不希望你的密钥过期的话(在后面的提示里,选择0)。如果有提示说信息是否正确的话,回答Yes,然后输入你的真实名字,email地址,以及一个说明(可选的)。如果一切顺利,按下“哦”(对应着OK)然后回车。 在这之后,会提示你输入一个密码,密码会要求重复输入一次。通常,请使用一个难于破解的加强密码,而不推荐用名字/地址/生日/单词等等来做密码。 在输好密码之后,请按照终端里的提示信息做:我们需要生成大量的随机数,建议您在生成素数的过程中做一下这些动作(敲击键盘,移动鼠标,读写硬盘),这样会让随机数生成器有机会获取更大的熵。 生成好密钥以后,你应该会看到一条类似的提示信息:gpg: key 083C39A4 marked as ultimately trusted. public and secret key created and signed. ### 密钥服务器 ### 密钥服务器是用来发布你的公钥,并将其分发到其他人的服务器,这样其他用户可以轻松的根据你数据库中的名字(或者e-mail地址)来获取你的公钥,并给你发送加密信息。这样可以避免把公钥直接拷贝给你的朋友的方式,而让其他人直接通过在线数据库来找到你。 上传你的公钥到密钥服务器: $ gpg --send-keys --keyserver [keyservers.address.com] [yourpublicid] 你需要把keyservers.address.com替换成你选择的服务器(或者用mit.edu,它会跟其他服务器做同步),还需要把命令行中的*yourpublicid*替换成你的。最终执行的命令看上去会大概是下面这样子: $ gpg --send-keys --keyserver hkp://pgp.mit.edu 083C39A4 ### 加密文件 ### 如果你想给你的朋友发送一个用他的公钥加密过的文件,可以用下面的命令: $ gpg -o encrypted_file.gpg --encrypt -r key-id original.file 命令解释: -o encrypted_file.gpg = 指定输出文件 --encrypt = 做加密 -r = 接收者的KEY-ID,比如这里就填你朋友的KEY-ID。 original.file = 指定要加密的文件 ### 解密文件 ### 如果有人给你发送了一个用你的公钥加密过的文件,你可以按下面的方式解密: $ gpg --decrypt filename.gpg ### 对称加密 ### 你还可以使用GPG做对称加密,来给文件加上一个密码。这种不同于公钥加密的方式,在对称加密中,同一个密钥用于加密和解密。这种方式在处理信息的时候会简单点,但是保密性没那么好,因为需要把密码告诉接收者。下面是用密码加密文件的命令: $ gpg -c filename.txt 解密这个文件,用下面的命令: $ gpg filename.txt 然后,会提示你输入密码,之后就开始解密文件。 ### 文档数字签名 ### 数字签名非常类似于你在信件或者重要文件的末尾签上自己的名字,它表示这份文件确实是由你发出来的。通过数字签名,它会计算整个文件内容的SHA1哈希值,然后把这个值附加到签名末尾。如果文件内容被篡改,签名的校验就会失败,可以用来鉴定伪造。如果用户自己在签名后编辑了这份文件,签名校验也会失败,因为此时文件的SHA1哈希值已经和之前签名时不同了。 对一份文件做数字签名,运行下面的命令: $ gpg --clearsign filename.txt ### 生成销毁密钥 ### 销毁密钥可以在你的私钥泄漏或者怀疑泄漏的时候,吊销你的公钥。使用下面的命令创建一个销毁密钥: $ gpg --output revoke.asc --gen-revoke keyid 把销毁密钥保存到一个安全的地方,任何人都可以用它让你的密钥失效。(你可以用对称加密方式来加密你的销毁密钥文件。) ### 在终端里使用GPG的一些技巧 ### 通过下面的命令可以查看你已经导入的GPG密钥: $ gpg --list-keys 之后应该会列出来用你e-mail注册的密钥列表(因为这里只有一个密钥,它只列出了你自己的密钥),然后,你可以看到自己的KEY-ID,就可以通过上文介绍的命令提交给密钥服务器。 显示你的密钥链中的私钥和公钥。 $ gpg --list-public-keys # 会列出来公钥 $ gpg --list-secret-keys # 会列出来私钥 ### 导入密钥 ### $ gpg --import KEYFILE 命令中的KEYFILE应该是需要导入的公钥文件名。(如果文件不在主目录中,使用cd命令切换到该文件的目录下,再执行上面的命令) ### 导出公钥到文件 ### 用下面的命令可以将你的公钥导出为ASCII格式: $ gpg --export -a > publickey.asc \* * * * * ### 关于Richard White ### Richard是一位技术爱好者,在不止一个场合他被称为极客。他还是三本书的作者,最近的一本《数字时代的隐私》即将在2014年5月份出版精装本。他还是数字时代网站的主编和驱动者,数字时代的目的是提供资源和工具来实现和维护匿名,安全和隐私。Ricard经常写一些和隐私相关的文章,最近忙着写《CLI艺术》,收集开源的命令行软件。关于GNU Privacy Guard的[更多信息][1]以及如何使用GPG软件的图形界面工具,你可以访问White的数字时代网站。 -------------------------------------------------------------------------------- via: http://distrowatch.com/weekly.php?issue=20140407 译者:[zpl1025](https://github.com/zpl1025) 校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 [1]:http://digital-era.net/gpa-gnu-privacy-assistant/