TranslateProject/published/File encryption with GNU Privacy Guard.md

8.1 KiB
Raw Blame History

用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的更多信息以及如何使用GPG软件的图形界面工具你可以访问White的数字时代网站。


via: http://distrowatch.com/weekly.php?issue=20140407

译者:zpl1025 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出