GnuPG(GNU Privacy Guard或GPG):Linux 下的基于PGP(Pretty Good Privacy)机制的加密及签名软件
PGP(Pretty Good Privacy)是一个基于RSA 公钥加密体系的邮件加密软件,不但可以对用户的数据保密,以防止非授权者阅读,还能给邮件加上数字签名,从而使收信人确信邮件是由您发出的。从而让人们可以安全地与从未见过的人们通信,而事先不需要任何保密的渠道用来传递密钥。
GnuPG 是实现安全通信和数据存储的一系列工具集,可以做数据加密、数字签名。
在功能上,它和PGP 是一样的,但PGP 使用了IDEA专利算法,使用PGP 会有许可证的问题;而GnuPG 并没有使用这个算法,所以对用户来说使用上没有任何限制。
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
 
  1. gpg 指令 [选项] [文件名] 
  2. 指令: 
  3. -s, --sign [文件名]        生成一份签字 
  4. --clearsign [文件名]       生成一份明文签字 
  5. -b, --detach-sign        生成一份分离的签字 
  6. -e, --encrypt            加密数据 
  7. -c, --symmetric          仅使用对称加密 
  8. -d, --decrypt            解密数据(默认) 
  9. --verify             验证签字 
  10. --list-keys          列出密钥 
  11. --list-sigs          列出密钥和签字 
  12. --check-sigs             列出并检查密钥签字 
  13. --fingerprint            列出密钥和指纹 
  14. -K, --list-secret-keys    列出私钥 
  15. --gen-key            生成一副新的密钥对 
  16. --delete-keys            从公钥钥匙环里删除密钥 
  17. --delete-secret-keys      从私钥钥匙环里删除密钥 
  18. --sign-key           为某把密钥添加签字 
  19. --lsign-key          为某把密钥添加本地签字 
  20. --edit-key           编辑某把密钥或为其添加签字 
  21. --gen-revoke             生成一份吊销证书 
  22. --export             导出密钥 
  23. --send-keys          把密钥导出到某个公钥服务器上 
  24. --recv-keys          从公钥服务器上导入密钥 
  25. --search-keys            在公钥服务器上搜寻密钥 
  26. --refresh-keys           从公钥服务器更新所有的本地密钥 
  27. --import             导入/合并密钥 
  28. --card-status            打印卡状态 
  29. --card-edit          更改卡上的数据 
  30. --change-pin             更改卡的 PIN 
  31. --update-trustdb         更新信任度数据库 
  32. --print-md 算法 [文件]     使用指定的散列算法打印报文散列值 
  33. 选项: 
  34. -a, --armor          输出经 ASCII 封装 
  35. -r, --recipient          为收件者“某甲”加密 
  36. -u, --local-user          使用这个用户标识来签字或解密 
  37. -z N                 设定压缩等级为 N (0 表示不压缩) 
  38. --textmode           使用标准的文本模式 
  39. -o, --output             指定输出文件 
  40. -v, --verbose            详细模式 
  41. -n, --dry-run            不做任何改变 
  42. -i, --interactive         覆盖前先询问 
  43. --openpgp            行为严格遵循 OpenPGP 定义 
  44. --pgp2           生成与 PGP 2.x 兼容的报文 
 
 
  1. 实现对称加密 
  2. [root@rhel6 ~]# echo "对称加密测试" > test 
  3. [root@rhel6 ~]# gpg -c test  
  4. [root@rhel6 ~]# rm -rf test 
  5. [root@rhel6 ~]# gpg test.gpg  
  6. [root@rhel6 ~]# cat test 
  7. 对称加密测试 
  8.  
  9. 实现不对称加密 
  10. 1.创建公私钥 
  11. [root@rhel6 ~]# gpg --list-key 
  12. [root@rhel6 ~]# gpg --gen-key 
  13. gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc. 
  14. This is free software: you are free to change and redistribute it. 
  15. There is NO WARRANTY, to the extent permitted by law. 
  16.  
  17. 请选择您要使用的密钥种类: 
  18.    (1) RSA and RSA (default) 
  19.    (2) DSA and Elgamal 
  20.    (3) DSA (仅用于签名) 
  21.    (4) RSA (仅用于签名) 
  22. 您的选择?  
  23. RSA 密钥长度应在 1024 位与 4096 位之间。 
  24. 您想要用多大的密钥尺寸?(2048) 
  25. 您所要求的密钥尺寸是 2048 位 
  26. 请设定这把密钥的有效期限。 
  27.          0 = 密钥永不过期 
  28.       <n>  = 密钥在 n 天后过期 
  29.       <n>w = 密钥在 n 周后过期 
  30.       <n>m = 密钥在 n 月后过期 
  31.       <n>y = 密钥在 n 年后过期 
  32. 密钥的有效期限是?(0)  
  33. 密钥永远不会过期 
  34. 以上正确吗?(y/n)y 
  35.  
  36. You need a user ID to identify your key; the software constructs the user ID 
  37. from the Real Name, Comment and Email Address in this form: 
  38.     "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>
  39.  
  40. 真实姓名:gnupg 
  41. 电子邮件地址:root@xfcy.org 
  42. 注释: 
  43. 您选定了这个用户标识: 
  44.     “gnupg <root@xfcy.org>” 
  45.  
  46. 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?o 
  47. 您需要一个密码来保护您的私钥。 
  48.  
  49. 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动 
  50. 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。 
  51. gpg: 密钥 D44CECE9 被标记为绝对信任 
  52. 公钥和私钥已经生成并经签名。 
  53.  
  54. gpg: 正在检查信任度数据库 
  55. gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型 
  56. gpg: 深度:0 有效性:  1 已签名:  0 信任度:0-,0q,0n,0m,0f,1u 
  57. pub   2048R/D44CECE9 2013-04-03 
  58. 密钥指纹 = 9F08 B39F 897F C1E8 2321  1766 5E11 0908 D44C ECE9 
  59. uid                  gnupg <root@xfcy.org> 
  60. sub   2048R/9EF29EB1 2013-04-03 
  61.  
  62. [root@rhel6 GPG]# gpg --list-keys 
  63. /root/.gnupg/pubring.gpg 
  64. ------------------------ 
  65. pub   2048R/D44CECE9 2013-04-03 
  66. uid                  gnupg <root@xfcy.org> 
  67. sub   2048R/9EF29EB1 2013-04-03 
  68.  
  69. 2.导出公(私)钥 
  70. [root@rhel6 GPG]# gpg --export --armor D44CECE9 > pub_file.key 
  71. [root@rhel6 GPG]# gpg --export-secret-keys --armor D44CECE9 > priv_file.key 
  72.  
  73. 3.发布公钥: 
  74. [root@rhel6 GPG]# cp pub_file.key /var/ftp/pub/ 
  75.  
  76. 4.导入公钥 
  77. [root@rhel6-2 ~]# scp rhel6:/root/pub_file.key ./ 
  78. pub_file.key                                                  100% 1703     1.7KB/s   00:00 
  79. [root@rhel6-2 ~]# gpg --list-keys 
  80. [root@rhel6-2 ~]# gpg --import pub_file.key  
  81. gpg: key D44CECE9: public key "gnupg <root@xfcy.org>" imported 
  82. gpg: Total number processed: 1 
  83. gpg:               imported: 1  (RSA: 1) 
  84. [root@rhel6-2 ~]# gpg --list-keys       
  85. /root/.gnupg/pubring.gpg 
  86. ------------------------ 
  87. pub   2048R/D44CECE9 2013-04-03 
  88. uid                  gnupg <root@xfcy.org> 
  89. sub   2048R/9EF29EB1 2013-04-03 
  90. [root@rhel6-2 ~]# echo "secret password" > gpg_test 
  91.  
  92. 5.远程用户通过公钥加密文件 
  93. [root@rhel6-2 ~]# gpg --encrypt --armor -r D44CECE9 gpg_test  
  94. gpg: 9EF29EB1: There is no assurance this key belongs to the named user 
  95.  
  96. pub  2048R/9EF29EB1 2013-04-03 gnupg <root@xfcy.org> 
  97.  Primary key fingerprint: 9F08 B39F 897F C1E8 2321  1766 5E11 0908 D44C ECE9 
  98.       Subkey fingerprint: F498 D9D1 4D32 361C 13D6  49FF E9EE 6FD8 9EF2 9EB1 
  99.  
  100. It is NOT certain that the key belongs to the person named 
  101. in the user ID.  If you *really* know what you are doing, 
  102. you may answer the next question with yes. 
  103.  
  104. Use this key anyway? (y/N) y 
  105.  
  106. 6.传送加密文件: 
  107. [root@rhel6-2 ~]# scp gpg_test.asc rhel6:/root/ 
  108. root@rhel6's password:  
  109. gpg_test.asc                                               100%  580     0.6KB/s   00:00 
  110.  
  111. 7.解密加密文件: 
  112. [root@rhel6 ~]# gpg -o gpg_test --decrypt gpg_test.asc     
  113. You need a passphrase to unlock the secret key for 
  114. user: "gnupg <root@xfcy.org>
  115. 2048-bit RSA key, ID 9EF29EB1, created 2013-04-03 (main key ID D44CECE9) 
  116. [root@rhel6 ~]# cat gpg_test 
  117. secret password 
  118.  
  119.  
  120. 8.密钥的回收: 
  121. 当密钥对生成之后,应该立即做一个公钥回收证书,如果忘记了私钥的口令或者私钥丢失/被盗窃,可以发布这个证书来声明以前的公钥不再有效。 
  122. 一旦回收证书被发放,以前的证书就不能再被其他用户访问,因此以前的公钥也就失效了。 
  123. [root@rhel6 ~]# gpg --output revoke.asc --gen-revoke D44CECE9 
  124. sec  2048R/D44CECE9 2013-04-03 gnupg <root@xfcy.org> 
  125.  
  126. 要为这把密钥建立一份吊销证书吗?(y/N)y 
  127. 请选择吊销的原因: 
  128.   0 = 未指定原因 
  129.   1 = 密钥已泄漏 
  130.   2 = 密钥被替换 
  131.   3 = 密钥不再使用 
  132.   Q = 取消 
  133. (也许您会想要在这里选择 1) 
  134. 您的决定是什么?1 
  135. 请输入描述(可选);以空白行结束: 
  136. >  
  137. 吊销原因:密钥已泄漏 
  138. (不给定描述) 
  139. 这样可以吗? (y/N)y 
  140.  
  141. 您需要输入密码,才能解开这个用户的私钥:“gnupg <root@xfcy.org>” 
  142. 2048 位的 RSA 密钥,钥匙号 D44CECE9,建立于 2013-04-03 
  143. 已强行使用 ASCII 封装过的输出。 
  144. 已建立吊销证书。 
  145.  
  146. 请把这个文件转移到一个可隐藏起来的介质(如软盘)上;如果坏人能够取得这 
  147. 份证书的话,那么他就能让您的密钥无法继续使用。把这份凭证打印出来再藏 
  148. 到安全的地方也是很好的方法,以免您的保存媒体损毁而无法读取。但是千万 
  149. 小心:您的机器上的打印系统可能会在打印过程中把这些数据临时在某个其他 
  150. 人也能够看得到的地方! 
  151.  
  152. [root@rhel6 GPG]# gpg --keyserver Server Address --send-keys mykeyID 
  153.  
  154. 9.密钥的删除: 
  155. 必须先删除私钥,然后才能删除公钥。 
  156. [root@rhel6 ~]# gpg --list-keys 
  157. /root/.gnupg/pubring.gpg 
  158. ------------------------ 
  159. pub   2048R/D44CECE9 2013-04-03 
  160. uid                  gnupg <root@xfcy.org> 
  161. sub   2048R/9EF29EB1 2013-04-03 
  162. [root@rhel6 ~]# gpg --delete-secret-keys D44CECE9 
  163. gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc. 
  164. This is free software: you are free to change and redistribute it. 
  165. There is NO WARRANTY, to the extent permitted by law. 
  166.  
  167. sec  2048R/D44CECE9 2013-04-03 gnupg <root@xfcy.org> 
  168.  
  169. 要从钥匙环里删除这把密钥吗?(y/N)y 
  170. 这是一把私钥!——真的要删除吗?(y/N)y 
  171.  
  172. [root@rhel6 ~]# gpg --delete-keys D44CECE9        
  173. gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc. 
  174. This is free software: you are free to change and redistribute it. 
  175. There is NO WARRANTY, to the extent permitted by law. 
  176. pub  2048R/D44CECE9 2013-04-03 gnupg <root@xfcy.org> 
  177. 要从钥匙环里删除这把密钥吗?(y/N)y 
  178. [root@rhel6 ~]# gpg --list-keys