--linux下用gnupg实现加密

1.首先我们要看当前的Linux系统上是否已经了gnupg软件,对于Red Hat linux7.0 版本之后会自动地安装此软件;
   我们输入下列命令查看本机是否安装
  Linux$rpm-qa│grep gnupg
  gnupg-1.0.4-11
  从上面返回的情况可以看出软件包已经安装过了, 如果没有安装请按照教师的指导安装
2.在安装完gnupg软件包后,我们需要做的是生成一对密钥
  Linus$/usr/bin/gpg-gen-key
  gpg(GnuPG)1.0.4;Copyright(C)2000 Free Software Foundation,Inc.
  This program comes sith ABSOLUTELY NO WARRANTY.
  This is free software,and you are welcome to redistribute it
  under certain conditions.See the file COPYING for details.
  gpg:Warning:using insecure memory!
  gpg:/home/zhuxg/.gnupg/secring.gpg:keyring created
  gpg:/home/zhuxg/.gnupg/pubring.gpg:kdyring created
  Please select what kind of key you wang:
  (1)DSA and E1Gamal(default)
  (2)DSA(Sign only)
  (4)E1Gamal(sign and encrypt)
  Your selection?
3.我们输入1然后回车(选择采用DSA and ELGamal算法)
  DSA keypair sill have 1024 bits.
  About to generate a new ELG-E keypair.
  minimum keysize is 768 bits
  default keysize is 1024 bits
  highest suggested keysize is 2048 bits
  What Keysize do you want?(1024)
4.输入2048然后回车(选择密钥长度的位数)
  Please specify how long the key should be valid.
  0=key does not expire
  =key expires in n days
  w=key expires in n weeks
  m=key expires in n months
  y=key expires in n years
  Key is valid for?(0)
5.输入0回车(0代表密钥永不过期);然后输入y继续
6.接下来可能会要求输入rdal name,以及email地址和passphrase
7.可以把passphrase看作是保护私钥的密码,输入:ciwcertified;
   我们需要任意地敲打键盘,程序会随机生成一对密钥,在用户的宿主目录的.gnupg目录下
====================
8.我们可以下列命令
      查看自己刚才建立的私钥
  Linux$ gpg-list-secret-keys
  查看自己的公钥
  Linux$ gpg-list-keys
9.用同样的方法在另一台机器上安装gpg,并使用下列命令导出公钥
  Linus$ gpg-exportmachine2.asc
  公钥的名字一定要以asc为扩展名,把将这个文件传到你的机器上
10.在你的机器上使用下列命令将对方的公钥导入
  Linux$ gpg-import machine2.asc
  并再次用gpg-list-keys命令看是否成功导入了对方的公钥
11.接下来我们用做的就是对这把新导入的公钥签名
  Linux$ gpg-sign-key machine2
  注:这里machine2应是对方建立密钥的real name
  我们可以利用pgp-list-sigs来查看是否正确地对对方公钥签名了
  采用同样的方法将你的公钥导出传到对方的机器上
12.这样我们就可以用对方的公钥来加密文件了;首先建立一个文件
  Linux$ eacho this is a test .encryptfile
13.用对方的公钥来加密此文件
  Linux$ gpg-encypt-r receiver_public_keyname encryptfile
  receiver_public_keyname在这里应为接收者的公钥名字;执行完毕后,会生成
  加密后的文件encryptfile.gpg,我们cat encryptfile.gpg输出结果,看看怎样!
14.将此加密后的文件传到对方机器上,接收方用下命令解密
  gpg ?decrypt encryptfile.gpg
  输入正确的passphrase后,会生成解密后的encryptfile文件。
15.如果需要发送一封既加密又签名的邮件内容,使用下面命令。
  Gpg ?se ?r receiver_public_keyname filename
16.接收者收到这样的信件,只需输入:
  gpg ?d filename.gpg
==============GnuPG的简要介绍=========


这里简单介绍一种开源“公钥加密”软件(GnuPG)的基本使用情况。
GnuPG是RFC2440 OpenPGP标准的开源实现。他的商业实现则是大家比较熟悉的PGP。
1 基本知识
1.1 公钥加密
首先介绍“公钥加密”的原理。
加密的传统方法就是使用一个密钥(密码)加密。发出讯息者用这把钥匙对讯息加密。接收讯息者需要有完全相同的钥匙才能将加密了的讯息解密。这把钥匙必须以一种其他人没有机会得到它的方式给予接收讯息者。如果其他人得到了这把钥匙,这种加密方式就没用了。
这里举一个简单的例子:我们常用的zip文件,我们压缩时加个密码保护,但是解压缩的时候就必须用相同的密码才可以得到文件。
使用一种称为"公开钥匙"的方法可以解决这个问题。公开钥匙的概念涉及两把钥匙。一把钥匙称为"公开钥匙"(公钥),可以以所有方式传递,任何人都可以得到。另一把钥匙称为"隐密钥匙"(密钥)。这把钥匙是秘密的,不能传递出去。只有它的拥有者才能接触和使用它。如果正确实施了这种方法,从公钥不能得出密钥。发出讯息者以接收讯息者的公钥将讯息加密,接收者则以自己的密钥解密。
这个加密方式的关键之处在于密钥必须保持秘密,不能随便给出或让任何除了密钥拥有者之外的人得到。请千万不要将你的密钥通过Internet寄出!
1.2 数字签名
为证明一则讯息确实是宣称发出讯息的人所发,发明了数字签名的概念。正如其名称显示,发出讯息者数字化地在讯息上签名。别人可以通过这个签名检验这个讯息的真实性。使用这种方法,可以减少中"特洛伊木马计"的风险(即一则讯息宣称是对某个问题的补丁,实际却包含病毒或乱动你计算机上的数据),同时信息或数据可以被确认是来自正当合法的来源,而被认为属实。
一个数字签名是通过密钥和讯息本身而得来。讯息可以通过发出讯息者的公钥来验证。这样,不仅可以验证讯息是正确的发出讯息者所发,而且内容也得到验证。这样,得到讯息者可以确认:讯息来自该发出讯息者,而且在传递过程中其内容没有改变。
注意签名和加密使用的过程是不同的。
1.3 术语
公匙:public key
密匙:private key (secret key)
钥匙对:key-pair (both public and secret key)
简单的例子:
tips: 公钥是公开的,可以从internet上得到的。
case 1: A发消息给B,如果A对消息签名的话,使用的是A自己的密钥,B接收到签名后的消息后,用A的公钥验证是否是A发出的。
case 2: A发消息给B,如果A对消息加密的话,使用的是B的公钥,B接收到加密后的消息后,用B自己的密钥解密看到原来的内容。
2.1 GnuPG的安装和基本设置
2.1.1 下载
大家可以到GnuPG的官方网站(
[url=http://www.gnupg.org/]www.gnupg.org[/url]
)上下载。目前的最新版本是1.4.7。具体的下载地址是
[url=ftp://ftp.gnupg.org/gcrypt/binary/gnupg-w32cli-1.4.7.exe]ftp://ftp.gnupg.org/gcrypt/binary/gnupg-w32cli-1.4.7.exe[/url]
请大家一定要用最新版本。
2.1.2 安装
安装非常简单,一路next就可以了。
2.1.3 设置
想要在行命令中使用GnuPG,需要将GnuPG添加到path中去。
[我的电脑] 右击选择 [属性] ,再选择 [高级]-[环境变量] ,
在[系统变量]中编辑Path,将GnuPG的安装目录(一般为C:\Program Files\GNU\GnuPG)添加到其中,注意目录之间用 ;(分号)间隔。
设置GnuPG的钥匙保存路径:(其意义就是重装机的时候原来的钥匙库还在)
打开注册表编辑器(regedit)定位到[HKEY_LOCAL_MACHINE\SOFTWARE\GNU\GnuPG] 添加一个项目HomeDir,内容是你要指定的保存路径(建议不要放到系统盘)。如果不会使用注册表编辑器,将下面两条线之间的内容保存为 “gnupg.reg”文件,然后双击这个文件,将内容添加到注册表(HomeDir需要你自己指定)。
---------------------------------------------------------------------------------
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\GNU\GnuPG]
"Install Directory"="C:\\Program Files\\GNU\\GnuPG"
"HomeDir"="E:\\Soft\\Net\\GnuPG\\KEYS"
---------------------------------------------------------------------------------
3 GnuPG的基本使用
这里仅仅介绍常用的命令
3.1.1 行命令和图形界面
这里主要介绍GnuPG最常用的几个命令,主要用行命令来演示。如果不习惯的话还是有好的图形界面工具。在后文介绍。了解行命令对使用好图形工具有帮助。
[运行]-[cmd]可以看到行命令窗口。运行 gpg --version,如果看到gpg (GnuPG) 1.4.7 则安装成功,其中有一个home项就是所有钥匙的保存地方。应该就是注册表中指定的地方。 (用gpg --help 查看行命令的用法。)
tips: 输出重定向和 -o 参数, gpg有一个 “-o|--output”用来将内容输出到一个文件中,这个功能同样可以使用dos中的“输出重定向 >”来代替,本文中使用 > 。
3.1.2 生成自己的第一个密钥
命令:gpg --gen-key
首先是选择加密方式(select what kind of key you want:)请默认是第1项(DSA and Elgamal)
然后是选择密钥的长度(what keysize do you want),还是选择默认(2048),
再就是选择有效期(specify how long the key should be valid.)默认是0(永不过期)
下面就是输入个人的基本信息。
Real name(真实姓名)
Email address(邮件地址)
Comment(注释)
最后显示你的user-id的信息,你可以选择接受,如果不满意可以再修改。
下面是最重要的一个了,输入一个足够好的密码来保护你的密钥。(如何选择好的密码,看第4部分。)
然后就是生成钥匙的过程了,要求是随意移动鼠标,敲打键盘等等,以便于更好的随机事件。






[url=http://www.chinadforce.com/attachment.php?aid=463540&nothumb=yes][b]gen-key.jpg[/b][/url]
(97.62 KB)
2007-8-4 21:14
3.1.2 生成注销证书
命令:gpg --gen-revoke
为什么要要生成主要证书,我才开始用得时候也是对此不以为然。但是当我把密码忘了的时候,我上传到公匙服务器上的公匙确无法删除的时候,才想起来晚了。如果你有上传公匙的行为,那你一定要在生成密匙的时候同时生成注销证书。
注销证书的用法在这里讲一下,你把注销证书导入到密匙库,你的公匙就会处在注销状态,你再把它上传到服务器就可以了。
3.2.1 查看已有的钥匙
命令:gpg --list-keys
上面的命令列出所有的钥匙,想查看特定的话可以在后面加上用户标示。
tips:用户标示(User ID)指以下之一(姓名,邮件,注释)
3.2.2 只查看密匙
命令:gpg --list-secret-keys
3.3.1 导入公匙
命令:gpg --import [public.key]
3.3.2 导入密匙
命令:gpg --allow-secret-key-import --import [private.key]
3.3.3 导出公匙
命令:gpg --export -a "User ID" > public.key
-a 表示输出内容用ascii编码
输出内容就是普通的文本文件,你可以把公匙放在网上或者用邮件发给别人。
3.3.4 导出密匙
命令:gpg --export-secret-key -a "User ID" > private.key
3.3.5 删除公匙
命令:gpg --delete-key "User ID"
如果是钥匙对,要先删除密匙
3.3.6 删除密匙
命令:gpg --delete-secret-key "User ID"
3.4.1 签名数据
命令:gpg -s -u "User ID" 文件名
-u 用来指定使用哪个密匙来签名,如果你的密匙库中只有一个钥匙对,可以省略。
用 -s (sign)选项来签名,会生成一个后缀为gpg的新文件(文件较大),其中包括原来的数据和签名数据。
3.4.2 生成分离签名数据
命令:gpg -b -a "User ID" 文件名
-b 用来产生一个分离的签名文件。如果不用-a 选项,则产生一个后缀.sig的文件。加了-a则是.asc文件。这个就是我们在互联网上常见到的情况。下载文件的时候常常还有两个效验文件一个一般是md5或sha1,另外的是asc。
3.4.3 生成可见的签名信息
命令:gpg --clearsign "User ID" 文件名
这个命令常常用在我们发邮件的时候。用clearsign签名的信息,原始内容可见,只是在信息的前后各加了一小段标记。对方没有使用gpg等软件也可以查看邮件,只不过是不能效验。而用-s来签名则要先解密才可以看到。
3.5.1 验证签名数据
命令:gpg --verify 文件名.asc
这个很简单,唯一要注意的是后面跟的是效验文件而不是原来的文件。效验文件和原始文件要在同一目录下。
如果提示找不到公匙,则要先在相应的网站下载并导入的公匙。
3.6.1 加密数据
命令:gpg -e -u "发送者的User ID" -r "接受者User ID" 文件名
这个和 -s 一样产生一个新文件。需要注意的是 -r 用来指定接收者的公匙。
3.7.1 解密数据
命令:gpg -d 加密后的数据
-d (decrypt) 就是解密的意思,这个命令也是比较简单。
4 选择一个好的密码
什么是一个好的密码,大多数的观点是:大小写混合其中加上其他符号,而且最少8位。这样的密码足够复杂,的确非常好,但是随之而来的一个问题就是这样的密码太复杂,太容易忘记了。
这里介绍一种方法。就是选择足够长的密码。来源于
[url=http://www.diceware.com/]www.diceware.com[/url]
这个密码指导网站。简单介绍一下其基本思想。diceware提供了一个大约有7776个常用英文单词的列表(
[url=http://world.std.com/~reinhold/diceware.wordlist.asc]http://world.std.com/~reinhold/diceware.wordlist.asc[/url]
),每个单词都有一个编号,编号格式是[1-6]{5}(正则表达式)。
单词的平均长度是4.2,最大长度是6个字母。非常容易记。网站的建议是选择5个或6个以上的单词作为密码(如果记性好可以用更多的单词)。用暴力法破解的可能性几乎为零。
选择密码的方法也是非常简单的,具体就是找几个色子,随便掷(为什么要用色子:主要就是色子在不作弊的情况下随机性好。用电脑不能得到真正的随机数),把每次的数字记下来,5个为一组。然后查对应的单词。把这几单词背下来就可以了。
5 图形工具
也许很多dos命令看起来比较烦。现在有很多好的图形界面可以选择。
[url=http://www.gpg4win.org/]www.gpg4win.org[/url]
是一个提供方便工具的一个项目。大家也可以用看看。个人觉得现在大家主要是在发邮件的时候使用gpg,那很多邮件客户端也支持gpg或pgp。比如我自己用thunderbird来收发邮件,她的一个扩展enigmail就很好的支持gpg。大家如果耐心看过上面的东西,一般的使用是完全没有问题的。
6 总结
常用的几个就是
--import 导入 --verify 效验 --clearsign 文本签名 -b 产生分离效验数据
最后提一个问题,如果想在一个钥匙对中添加图片或者其他邮件地址,则要用--edit-key命令。具体的可以看帮助或者man文件。
想进一步了解,请一定要查阅gpg的手册,就是man文件。
7 参考
GnuPG Official Website:
[url=http://www.gnupg.org/]www.gnupg.org[/url]
DiceWare:
[url=http://www.diceware.com/]www.diceware.com[/url]
互联网上的密匙服务器:
主页
[url=http://www.sks-keyservers.net/]http://www.sks-keyservers.net/[/url]
密匙查询
[url=http://pool.sks-keyservers.net:11371/]http://pool.sks-keyservers.net:11371/[/url]

posted @ 2009-06-17 12:45  mop  阅读(2950)  评论(0)    收藏  举报