热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用GPG加密使您的信息安全保障无忧一(图)

文章标题:用GPG加密使您的信息安全保障无忧一(图)。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  加密和数字签名作为保护信息机密性、完整性和不可抵赖性的重要手段在各种信息通信场合得到广泛的应用。目前,已有不少商业加密和数字签名产品,比如商业软件PGP(Pretty Good Privacy)。
  
  另外,在开放源代码库中也有一些免费的加密和数字签名软件,其中最被认可的是GPG(GNU Privacy Guard)。GPG是一个完全免费、源代码公开,并且与PGP完全兼容的软件产品。今天,GPG已经拥有众多的企业和个人用户。
  
  在我国,由于信息安全及隐私保护意识还比较薄弱,PGP或GPG在商业和个人用户中的使用并不普遍。随着信息安全及隐私带来的问题甚至诉讼的增加,更多企业和个人开始把眼光投向安全问题的解决。
  
  但是,由于非专业用户对签名和加密等概念的畏难情绪,GPG的应用还多局限于IT技术人员。本文将对Linux环境下如何应用GPG进行讲解,为企业和个人用户应用GPG提供帮助。
  
  建立GPG环境
  
  GPG软件作为用于加密和数字签名的开放源码工具,许多Linux发行版本都自带了该软件。在默认安装的情况下,gpg会作为一个基本命令事先安装好。
  
  如果选用的Linux发行版默认没有安装GPG,可以通过tar包或RPM包进行安装,可从http://www.gnupg.org/download/下载安装包。安装过程比较简单,这里省略了。
  
  判断是否安装有GPG的方法也很简单。直接在命令行下输入“gpg -h”命令,如果系统已经安装有GPG,就会显示关于GPG用法的信息。
  
  确定Linux系统中已经安装了GPG后,就可以开始下面加密和签名的工作了。
  
  生成密钥
  
  用户应用GPG,首先要有一对自己的密钥。所以,第一步就是产生一对密钥。gpg命令通过大量参数提供所需要的几乎所有操作。其中,参数“-gen-key”就是用来产生一对密钥的。在安装了GPG的Linux系统上可以运行以下命令:
  
  #gpg --gen-key
  
  如果想对产生密钥的操作进行一些个性化设置,还可以加上其它参数。比如,要指定生成密钥存放的位置,可以运行以下命令:
  
  #gpg --gen-key --homedir /mygnupg
  
  命令开始运行后,首先,会看到版本和路径信息如下:
  
  gpg (GnuPG) 1.2.1; Copyright (C) 2002 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.
  gpg: /home/terry/.gnupg: directory created
  gpg: new configuration file `/home/terry/.gnupg/gpg.conf' created
  gpg: keyblock resource `/home/terry/.gnupg/secring.gpg': file open error
  gpg: keyring `/home/terry/.gnupg/pubring.gpg' created
  
  随后需要回答一系列问题,以帮助产生一对密钥。首先遇到的问题是要求选择密钥使用的算法:
  
  Please select what kind of key you want:
  (1) DSA and ElGamal (default)
  (2) DSA (sign only)
  (5) RSA (sign only)
  Your selection? 1
  
  其中,DSA是数字签名算法,RSA和ElGamal是两种不同原理的非对称密钥算法。通常可以选择“1”,这样生成的密钥可以同时用作签名和加密两种用途。
  
  接着,会要求选择密钥的长度:
  
  DSA keypair will 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) 2048
  Requested keysize is 2048 bits
  
  这里的密钥长度有768、1024和2048位三种。显然,密钥越长越安全,但太长又会影响使用的速度。所以,可以根据不同的需要选择适合的长度。笔者的应用更重视安全性,所以选择了最长的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) 1y
  Key expires at Sat 10 Sep 2005 01:48:07 PM CST
  Is this correct (y/n)? y
  
  原则上,密钥使用的频率越高,密钥有效的时间越长,被攻击的可能性就越大。所以,要根据应用的实际情况综合考虑,确定一个适当的时间长度。需要注意的是,密钥要定期更换,建议绝对不要永远使用同一对密钥。
  
  最后,需要输入一些个人信息,包括真实姓名、电子邮件地址等,用来识别密钥,最好是如实填写。比如:
  
  Real name: Terry Yu
  Email address: terry@mykms.org
  Comment: for test
  You selected this USER-ID:
  "Terry Yu (for test) "
  Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
  
  然后,必须输入一个密码。密码用来保护密钥,没有这个密码,任何人都不能看到密钥本身的内容。密码是在密钥文件泄露后惟一的保密措施,它的最大敌人是暴力破解和字典攻击。所以,一定要选择一个强壮的密码,来有效地对抗这些攻击。
  
  密码确定以后,系统开始运算:
  
  We need to generate a lot of random bytes.
  It is a good idea to perform some other action
  (type on the keyboard, move the mouse, utilize the disks)
  during the prime generation;
  this gives the random number generator a better
  chance to gain enough entropy.
  ..+++++.+++++.+++++.+++++..++++++++++.++++++++++++++
  
  这时需要随便地敲击键盘或是移动鼠标,以产生一些随机数,协助密钥的顺利生成。注意,如果没有以上动作,很可能最终不能产生密钥。
  
  系统运算完成后,会出现类似以下的信息:
  
  gpg: /home/terry/.gnupg/trustdb.gpg: trustdb created
  public and secret key created and signed.
  key marked as ultimately trusted.
  pub 1024D/6AE573B5 2004-09-29 Terry Yu (for test)
   Key fingerprint = 0D58 408E 344F BB7B AB95 D000 82B7 8324 6AE5 73B5
  sub 2048g/94BF182C 2004-09-29 [expires: 2005-09-29]
  pub 1024D/7234E374 2004-09-10 Terry Yu (for test)
   Key fingerprint = A58F D71A 28BA 499D 805B 588E 82FB CD0F 7234 E374
  sub 2048g/4907EA0A 2004-09-10 [expires: 2005-09-10]
  
  以上信息表示已经成功地为“Terry Yu”生成并签名了一对密钥,密钥过期时间为“2005-09-10”。在生成密钥的同时,默认用户目录的.gnupg目录中也存放了与该用户相关的GPG配置及密钥存储文件。这些文件控制了用户的GPG环境,用户不能直接修改这些文件,所有改动都将通过“gpg”命令实现。
  
  查看密钥
  
  密匙生成后,可以随时用以下命令查看。
  
  查看所有密钥:
  
  #gpg -list-key
  
  查看所有公钥:
  
  gpg -list-public-key
  
  查看所有私钥:
  
  gpg -list-secret-key
  
  列出所有签名:
  
  gpg -list-sig
  
  导出公钥
  
  在非对称加密体系中,私钥是由用户保管,而公钥是对外公开的。用户在生成密钥对后,需要把其中的公钥导出到一个文件中,然后将其分发给其它用户。
  
  导出公钥的方法很简单,通过gpg命令的“-export”参数就可完成。为了使导出文件是ASCⅡ编码的,还需要加上参数“-a”。比如,导出Terry Yu ASCⅡ编码的公钥文件,可以使用以下命令:
  
  #gpg --export -a terry@mykms.org > terry.asc
  
  该命令最终生成ASCⅡ编码的公钥文件terry.asc如图1。
  

  
图1 公钥文件terry.asc

  
  分发公钥
  
  这个包含公钥信息的文件需要对外分发,可以通过各种方式将terry.acs文件分发给所有与用户有信息通信需求的人。
  
  最简单的分发方式是,将该文件放到互联网上供人下载。这种方式需要注意的问题是,所发布公钥文件的网站一定要是一个可以信赖的站点。实际应用中,类似的做法很普遍。
  
  比如,Red Hat的公钥就是在它的官方网站上发布的,任何人都可以下载获得,并用来验证Red Hat所发布软件的签名的正确性。
推荐阅读
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
author-avatar
手机用户2502910855
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有