一、介绍
引用
GnuPG是一个用来进行非对称加密的免费软件。先说说什么是非对称加密。传统的加密手段往往是使用同一个密码进行加密和解密。例如你加密时用的密码是“abc”,则解密时也要使用“abc”才行。这样就存在一个问题,你不能够把一段加密信息发送给你的朋友。试想,如果采用这种加密方式把信息发送给你的朋友时,你的朋友必须要知道你的密码才能把你的信息解密出来。但你如何保证你的朋友是绝对可靠的呢?也就是说,如果你的朋友把你的密码告诉了别人,你的密码就不再安全了。
非对称加密采用的是另一种思想。它会给你产生两个密钥,一个称为“公钥”,另一个称为“私钥”。公钥是可以公开的,你尽管把它传给别人;私钥你一定要保管好不让其他任何人知道。当某人得到你的公钥后,他就可以给你发送加密信息了。具体来说,他把他要发给你的信息用你的公钥加密后发给你,加密的信息只能用你的私钥去解密。这样,因为世界上除了你以外没有别人知道你的私钥,所以即使别人看到发送给你的加密信息他也无法解密,甚至连发送者本人也不行。因为他不知道你的私钥。简单说来,就是用公钥去加密;用对应的私钥去解密。想给谁发送加密信息,首先要得到他的公钥。 支持非对称加密的软件有多种,最著名的可能是美国的PGP了,不过它是个商业软件,价格不便宜。对于加密软件,我反对使用破解软件,因为如果信息需要加密的话,肯定是非常重要的信息,破解软件无法保证加密的安全可靠。因此我建议使用免费开源的GnuPG软件进行信息的加密和解密。 二、使用 一般的Linux发行版都会使用GPG进行签名,所以,通常都会直接提供GnuPG软件包。 1、生成密钥对 要使用GnuPG加密,首先需要创建密钥对,执行:
引用
# gpg --gen-key
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. 请选择您要使用的密钥种类: (1) DSA 和 ElGamal (默认) (2) DSA (仅用于签名) (5) RSA (仅用于签名) 您的选择? 1 ←只有1可以用于加密,其他种类只能用于签名 DSA 密钥对会有 1024 位。 ELG-E 密钥长度应在 1024 位与 4096 位之间。 您想要用多大的密钥尺寸?(2048) ←选择密码的位数,位数越大,越安全,但速度越慢 您所要求的密钥尺寸是 2048 位 请设定这把密钥的有效期限。 0 = 密钥永不过期 <n> = 密钥在 n 天后过期 <n>w = 密钥在 n 周后过期 <n>m = 密钥在 n 月后过期 <n>y = 密钥在 n 年后过期 密钥的有效期限是?(0) 0 ←根据实际情况选择密钥期限 密钥永远不会过期 以上正确吗?(y/n)y ←确认 您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合 成用户标识,如下所示: “Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>” 真实姓名:Hyphen Wang ←请填入真实姓名,后面会用到 电子邮件地址:gpgencrypt@linuxfly.org ←邮件作为标记之一,不能重复 注释:Use for GPG Encrypt ←仅是注释而已 您选定了这个用户标识: “Hyphen Wang (Use for GPG Encrypt) <gpgencrypt@linuxfly.org>” 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O ←输入“O”确认 您需要一个密码来保护您的私钥。 ←输入两次用于访问私钥的密码,紧记,不能公开或丢失 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。 ++++++++++...++++++++++..++++++++++.+++++.++++++++++.+++++.++++++++++..++++++++++.++++++++++++++++++++.++++++++++++++++++++.++++++++++++++++++++>++++++++++...........................+++++ 随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵数! (还需要274字节) ←运行一些的程序,以便在内存中获得更多随机数 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。 +++++++++++++++++++++++++.+++++.+++++.++++++++++.++++++++++.+++++.+++++..+++++.+++++.+++++.++++++++++.+++++.+++++++++++++++++++++++++.+++++++++++++++.+++++.+++++>+++++.+++++>+++++........>+++++...............<+++++............................>.+++++...................................................................................................<+++++..+++++^^^ gpg: 密钥 A3942296 被标记为绝对信任 ←密钥ID 公钥和私钥已经生成并经签名。 gpg: 正在检查信任度数据库 gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型 gpg: 深度:0 有效性: 2 已签名: 0 信任度:0-,0q,0n,0m,0f,2u pub 1024D/A3942296 2008-12-19 密钥指纹 = E95E 1F77 6C4E 33BD 740C 19AB EEF9 A67E A394 2296 uid Hyphen Wang (Use for GPG Encrypt) <gpgencrypt@linuxfly.org> sub 2048g/911E677B 2008-12-19 2、加密信息 信息原文:
引用
# cat text.txt
Hello World! 加密:
引用
# gpg --encrypt --recipient "Hyphen Wang" text.txt
# ll 总计 8 -rw-r--r-- 1 root root 13 12-19 14:37 text.txt -rw-r--r-- 1 root root 611 12-19 14:37 text.txt.gpg 新生成的text.txt.gpg就是加密后的文件,若内容是一堆的乱码。可通过邮件等途径发送或直接保存下来。 3、导出公钥 若不是在同一台机器上解密的话,则需要导入公钥信息。所以,需要在本机先导出公钥:
# gpg --export --armor gpgencrypt@linuxfly.org -a > PGP-PUBLIC-KEY-linuxfly.org.txt
公钥可以存放在网络磁盘或通过邮件发送。没有密码,仅有公钥是不能解密的。 4、解密 在需要解密的机器上,导入公钥:
# gpg --import PGP-PUBLIC-KEY-linuxfly.org.txt
然后解密:
引用
# gpg --decrypt text.txt.gpg > text.txt.new
您需要输入密码,才能解开这个用户的私钥:“Hyphen Wang (Use for GPG Encrypt) <gpgencrypt@linuxfly.org>” 2048 位的 ELG-E 密钥,钥匙号 911E677B,建立于 2008-12-19 (主钥匙号 A3942296) gpg: 由 2048 位的 ELG-E 密钥加密,钥匙号为 911E677B、生成于 2008-12-19 “Hyphen Wang (Use for GPG Encrypt) <gpgencrypt@linuxfly.org>” # cat text.txt.new Hello World! GnuPG会提示输入密码,也就是在gpg --gen-key中设定的密码。密码输入完后,如果没有用管道导向,则GnuPG会在屏幕上立刻显示出解密以后的内容(明文)。如果被加密的不是文本内容,比如是一个图片,应将其输出重定向到一个文件中。 5、删除密钥 从私钥钥匙环里删除密钥:
引用
# gpg --delete-secret-keys hyphenwang@redflag-linux.com
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. sec 1024D/A3942296 2008-12-19 Hyphen Wang (Use for GPG Encrypt) <gpgencrypt@linuxfly.org> 要从钥匙环里删除这把密钥吗?(y/N)y 这是一把私钥!――真的要删除吗?(y/N)y 必须先删除私钥,然后才能删除公钥。 从公钥钥匙环里删除密钥:
引用
# gpg --delete-keys hyphenwang@redflag-linux.com
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. sec 1024D/A3942296 2008-12-19 Hyphen Wang (Use for GPG Encrypt) <gpgencrypt@linuxfly.org> 要从钥匙环里删除这把密钥吗?(y/N)y |