准备知识:
对称加密:
发送方: 010111 XOR 101100 = 111011 (101100为加密密钥)
接收方: 111011 XOR 101100 = 010111
公钥加密:
发送方产生两把密钥:公钥(Public Key)&私钥(Private Key),也就是密钥对(Key Pair)
明文->公钥加密->密文->私钥解密->明文
数字签名:
....
-----------------------------发送方的操作-------------------------------------
sh# mkdir ~/.gnupg //默认是把密钥对存在此目录
sh# gpg --gen-key //生成公钥pubring.gpg,私钥secring.gpg,邮箱是很重要的
sh# gpg --list-keys //查看所有密钥,如果生成了多个密钥对的话就有多个了
sh# gpg --list-public-key //查看所有公钥,注意pub后面的*号字符串,pub xxxxx/******** 2007-07-10,它就是以下可能用到的KEYID
sh# gpg --list-secret-key //查看所有密钥
sh# gpg --list-sig //查看所有签名
sh# gpg --export-secret-keys -a -o secring.asc //导出私钥,作为备份
sh# gpg -a --export zjstandup@126.com >test.gpg //导出公钥,邮箱名是第一步填的,对应于zjstandup@126.com的公匙信息就保存到了test.gpg文件中,此文件可以由邮箱发送或上传至公钥服务器供别人下载(如subkeys.pgp.net),有点像BT种子,哈哈
/**此处将演示怎么把公钥上传至公钥服务器上,可以直接去网站上传,也可以像以下这样用命令上传
sh# gpg --send-keys KEYID //KEYID用以上那个代替,默认好像是传到了subkeys.pgp.net,文件名就不是test.gpg了,这些公钥服务器好像是全球同步更新!厉害阿!
**/
sh# gedit test.txt //生成一个文本,里面输入点东西,用于以下测试
将演示两种验证方式和一个数字签名
一种是公钥验证,大概是用于验证文件完整性,相当于:sh#md5sum ***;
另一种是私钥验证,控制只让那些知道密码的人能打开看
sh# gpg --clearsign test.txt //使用私匙对数据进行签名,生成test.txt.asc,打开此文件还是可以看到内容的,只是多了一些东西,把这个发给其他人,这个演示公钥验证
sh# gpg --output test.txt.gpg -r zjstandup@126.com -as --encrypt test.txt //导入私钥,数据被加密成了test.txt.gpg,打开此文件看不到原信息的,把这个发给对方,这个演示私钥验证
sh# gpg --output test.sig --sign test.txt //这个演示数字签名
---------------------------接收方的操作------------------------------------------
/**下载公钥,由邮件接收或者从服务器上下载,此处演示从服务器下载
sh# gpg --search-keys zjstandup@126.com //搜索公钥,启动了全球搜索?!然后填入1就下载!
**/
sh# gpg --import test.gpg //导入公钥至本机,test.gpg由发送方邮件传输过来或从公钥服务器下载过来的
/**以下一段不太清楚,好像是防止公钥被篡改,验证公钥的完整性
sh# gpg --fingerprint zjstandup@126.com //指纹取样,防伪造的公钥,执行后可以看到密钥指纹,可以通过其他通讯方式咨询对方,是否是这个公钥(应该是上方让大家注意的pub后面的字符串)
sh# gpg --sign-key zjstandup@126.com
sh# gpg --check-sigs zjstandup@126.com
sh# gpg --edit-key zjstandup@126.com
sh# trust
sh# quit
**/
1:公钥验证
sh# gpg --verify test.txt.asc //将有信息表明是完整的签字,假如改变了这个文件里面的信息再执行此命令,将出现不同的结果哦!
2:私钥验证
sh# gpg --decrypt test.txt.gpg > zjstandup.txt //执行,要输入正确的密码(在发送端生成密钥对时的那个)才能生成txt
3;数字签名
sh# gpg --output sig.txt --decrypt test.sig //将显示完整的签字并还原内容生成sig.txt
sh# gpg --help >> manule.txt
sh# gedit manule.txt
//将看到以下说明
gpg (GnuPG) 1.4.1
Copyright (C) 2005 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.
Home: ~/.gnupg
支持的算法:
公钥:RSA, RSA-E, RSA-S, ELG-E, DSA
对称加密:3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
散列:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512
压缩:不压缩, ZIP, ZLIB, BZIP2
语法:gpg [选项] [文件名]
签字、检查、加密或解密
默认的操作依输入数据而定
指令:
-s, --sign [文件名] 生成一份签字
--clearsign [文件名] 生成一份明文签字
-b, --detach-sign 生成一份分离的签字
-e, --encrypt 加密数据
-c, --symmetric 仅使用对称加密
-d, --decrypt 解密数据(默认)
--verify 验证签字
--list-keys 列出密钥
--list-sigs 列出密钥和签字
--check-sigs 列出并检查密钥签字
--fingerprint 列出密钥和指纹
-K, --list-secret-keys 列出私钥
--gen-key 生成一副新的密钥对
--delete-keys 从公钥钥匙环里删除密钥
--delete-secret-keys 从私钥钥匙环里删除密钥
--sign-key 为某把密钥添加签字
--lsign-key 为某把密钥添加本地签字
--edit-key 编辑某把密钥或为其添加签字
--gen-revoke 生成一份吊销证书
--export 导出密钥
--send-keys 把密钥导出到某个公钥服务器上
--recv-keys 从公钥服务器上导入密钥
--search-keys 在公钥服务器上搜寻密钥
--refresh-keys 从公钥服务器更新所有的本地密钥
--import 导入/合并密钥
--card-status 打印卡状态
--card-edit 更改卡上的数据
--change-pin 更改卡的 PIN
--update-trustdb 更新信任度数据库
--print-md 算法 [文件] 使用指定的散列算法打印报文散列值
选项:
-a, --armor 输出经 ASCII 封装
-r, --recipient 某甲 为收件者“某甲”加密
-u, --local-user 使用这个用户标识来签字或解密
-z N 设定压缩等级为 N (0 表示不压缩)
--textmode 使用标准的文本模式
-o, --output 指定输出文件
-v, --verbose 详细模式
-n, --dry-run 不做任何改变
-i, --interactive 覆盖前先询问
--openpgp 行为严格遵循 OpenPGP 定义
--pgp2 生成与 PGP 2.x 兼容的报文
(请参考在线说明以获得所有命令和选项的完整清单)
范例:
-se -r Bob [文件名] 为 Bob 这个收件人签字及加密
--clearsign [文件名] 做出明文签字
--detach-sign [文件名] 做出分离式签字
--list-keys [某甲] 显示密钥
--fingerprint [某甲] 显示指纹
请向 报告程序缺陷。
请向 反映简体中文翻译的问题。