zoukankan      html  css  js  c++  java
  • 安全工程之公钥基础设施体系

    一.基础概念
    公钥基础设施顾名思义是面向非对称算法的。这个到底有啥作用呢?接下来通过以下几个问题来解答下其中的用途:
    1)怎么证明公钥未被冒用,或者是已经替换成攻击者的?
    最好的办法是谁都不信,找一个中立机构。类似于生活中的公正人、公证机构。
    2)那么怎么证明你是你呢?
    由公立机构来标明你的身份信息,以证明身份,生活中类似我们的身份证。
    这些信息提供给大家怎么才安全呢,中间不被截获呢?由于大家都相信这个公立机构,大家同时也能获得这个公立机构的信息(公钥),为了标识大家的可信性,公立机构在给大家发信息的时候就会盖个章(私钥),大家看到有这个章(用公立机构的公钥读取)就认为是合法的用户了。
    这个其中的公立机构就是我们常说的CA,这个整个体系就是PKI。
    以上啰嗦了这么多,开始步入正题。
    公钥基础设施(Public Key Infrastructure,简称PKI)是目前网络安全建设的基础与核心,使用非对称密钥,实现数据加密(数字信封)、抗抵赖和完整性(数字签名)。它的基础是加密技术,核心是证书服务,支持集中自动的密钥管理和密钥分配,包括身份证书和密钥管理、机密性、完整性、身份认证和数字签名等。

    1.PKI技术原理与组成架构

    1.1.PKI技术要解决哪些问题

    1.2.PKI标准

    PKI的标准可分为两个部分:一类用于定义PKI,而另一类用于PKI的应用。

    1) 定义PKI的标准

    在PKI技术框架中,许多方面都经过严格的定义,如用户的注册流程、数字证书的格式、CRL的格式、证书的申请格式以及数字签名格式等。

    国际电信联盟ITU X.509协议,是PKI技术体系中应用最为广泛、也是最为基础的一个国际标准。它的主要目的在于定义一个规范的数字证书的格式,以便为基于X.500协议的目录服务提供一种强认证手段。但该标准并非要定义一个完整的、可互操作的PKI认证体系。

    PKCS是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。到1999年底,PKCS已经公布了以下标准:

    • PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封。 
    • PKCS#3:定义Diffie-Hellman密钥交换协议。 
    • PKCS#5:描述一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD2或MD5 从口令中派生密钥,并采用DES-CBC模式加密。主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息。 
    • PKCS#6:描述了公钥证书的标准语法,主要描述X.509证书的扩展格式。 
    • PKCS#7:定义一种通用的消息语法,包括数字签名和加密等用于增强的加密机制,PKCS#7与PEM兼容,所以不需其他密码操作,就可以将加密的消息转换成PEM消息。 
    • PKCS#8:描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等。 
    • PKCS#9:定义一些用于PKCS#6证书扩展、PKCS#7数字签名和PKCS#8私钥加密信息的属性类型。 
    • PKCS#10:描述证书请求语法。 
    • PKCS#11:称为Cyptoki,定义了一套独立于技术的程序设计接口,用于智能卡和PCMCIA卡之类的加密设备。 
    • PKCS#12:描述个人信息交换语法标准。描述了将用户公钥、私钥、证书和其他相关信息打包的语法。 
    • PKCS#13:椭圆曲线密码体制标准。 
    • PKCS#14:伪随机数生成标准。 
    • PKCS#15:密码令牌信息格式标准。 

    另外,PKCS#2和PKCS#4已经合并到PKCS#1之中。PKIX是由IETF组织中的PKI工作小组制定的系列国际标准。此类标准主要定义基于X.509和PKCS的PKI模型框架。PKIX中定义的四个主要模型为用户、认证中心CA、注册中心RA和证书存取库。

    实际上,从上文开始,PKI所有事情都是围绕数字证书/证书展开的,包括PKI的标准大部分都是围绕证书的格式、内容、交换方式等定义的。在这里证书到底是一个什么技术呢,怎么体现了。为了方便理解,在这里先把数字证书的进行下简单介绍。

    数字证书是一种数字标识,可以说是Internet上的安全护照或身份证明。当人们到其他国家旅行时,用户护照可以证实其身份,并被获准进入这个国家。数字证书提供的是网络上的身份证明。证书的通俗理解:要开车得先考驾照,驾照上面记有本人的照片、姓名、出生日期等个人信息,以及有效期、准驾车辆的类型等信息,并由公安局在上面盖章。我们只要看到驾照,就可以知道公安局认定此人具有驾驶车辆的资格。

    数字证书由公开密钥拥有者信息和公开密钥的文件最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有效时间,发证机关(证书授权中心)的名称,该证书的序列号等信息,证书的格式遵循ITUT X.509国际标准。数字签由认证机构( Certification Authority. Certifying Authority, CA )施加数字签名(对数字证书用CA的私钥进行签名,公钥大家都有,这个时候大家只要看到是CA签名就可行了,类似我们生活中各机构的章)。只要看到公钥证书,我们就可以知道认证机构认定该公钥的确属于此人。公钥证书也简称为证书( certificate)。

    数字证书还有一个重要的特征就是只在特定的时间段内有效。

    具体的证书要求,详见1.4.数字证书

    那么在这里笔者也产生一个疑问(当然是笔者的思维),这个证书的格式具体是啥?存储在哪?

    a)证书的格式

    • 证书(Certificate):.cer(windows)、crt
        • CRT = 扩展名CRT用于证书。证书可以是DER编码,也可以是PEM编码。扩展名CER和CRT几乎是同义词。
        • CER = CRT证书的微软型式。可以用微软的工具把CRT文件转换为CER文件(CRT和CER必须是相同编码的,DER或者PEM)。扩展名为CER的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.exe cryptext.dll, CyrptExtOpenCER),进而弹出一个对话框来导入并/或查看证书内容。
    • 私钥(Private Key):.key
        • 扩展名KEY用于PCSK#8的公钥和私钥。这些公钥和私钥可以是DER编码或者PEM编码。
    • 证书签名请求(Certificate sign request):.csr

    至于pem和der,是编码方式,以上三类均可以使用这两种编码方式

    • pem - base64编码
    • der - 二进制编码
    Windows IIS下的数字证书格式一般为.pfx
    Java tomcat 下的数字证书格式一般为.jks或.store
    Apache和nginx一般是.pem

    p7b一般是证书链,里面包括1到多个证书 
    pfx是指以pkcs#12格式存储的证书和相应私钥。
    pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式

    b)存储存储位置

    在回答这个问题的时候,先看这样一种情况:一些厂商提供的产品,采取数字证书进行登录时,会给你多张证书,你需要下一步、下一步的安装多个,这些证书怎么导出来的、导入哪了?

    在windows提供了两种方式:

    (1)证书管理工具
    打开电脑的“运行”工具弹窗之后,我们在“运行”中直接输入一下字母字符:certmgr.msc
    进入证书的管理界面:
    打开一个看看,会发现很多证书,都是日常我们应用载入的。
     

     右击打开一张证书看看,发现有常规、详细信息、证书路径组成。

    点击“详细信息”页签,可以看到有很多列信息,这些信息的规则要求就是前面提到的PKI标准要求的。
    点击上图中的“复制到文件”按钮就可以将这个证书导出了。具体会跳出如下界面。
    此处就会让你选择导出证书的格式。若大家很记得前面说的PKI的标准,就会里面这里哪个对应的是那种标准了。
    定义证书的名称和存储位置。这里大家会发现文件的后缀为cer。
    至此,就完成了证书的导出。
    导出的证书
    打开一个证书看看。
    信息和前面导入证书的页签是一样的,但这个时候会在常规页签会出现一个“安装证书”按钮。
    选择存储位置。
    出现如下界面就导入成功了。
    (2)使用浏览器打开
    打开浏览器,点击[工具]-[Internet选项]
     
    进入[Internet选项]点击“内容”页签,会出现“证书”相关栏目。
    点击“证书”,打开证书查看页面。
     
    从客户端侧一般可存储在用户端本地、网页、智能开,对于服务端会存储在CA数据库、KM、密码机、LDAP.
    在linux下的证书查看方式
    使用certutil命令。
     2)PKI应用标准
    目前世界上已经出现了许多依赖于PKI的安全标准,即PKI的应用标准,如安全的套接层协议SSL、传输层安全协议TLS、安全的多用途互连网邮件扩展协议S/MIME和IP安全协议IPSEC等。
    • S/MIME 是一个用于发送安全报文的IETF标准。它采用了PKI数字签名技术并支持消息和附件的加密,无须收发双方共享相同密钥。S/MIME委员会采用PKI技 术标准来实现S/MIME,并适当扩展了PKI的功能。目前该标准包括密码报文语法、报文规范、证书处理以及证书申请语法等方面的内容。 
    • SSL/TLS是互连网中访问WEB服务器最重要的安全协议。当然,他们也可以应用于基于客户机/服务器模型的非WEB类型的应用系统。SSL/TLS都利用PKI的数字证书来认证客户和服务器的身份。 
    • IPSEC是IETF制定的IP层加密协议,PKI技术为其提供了加密和认证过程的密钥管理功能。IPSEC主要用于开发新一代的VPN。 

     目前市面上大部分PKI同时支持X.509和PKCS

     1.3.PKI的组成

    一个典型的PKI系统包括PKI策略、软硬件系统、证书机构CA、注册机构RA、证书发布系统等。

    1)PKI安全策略建立和定义了一个组织信息安全方面的指导方针,同时也定义了密码系统使用的处理方法和原则。

    它包括一个组织怎样处理密钥和有价值的信息,根据风险的级别定义安全控制的级别。一般情况下,在PKI中有两种类型的策略:一是证书策略,用于管理证书的使用,比如,可以确认某一CA是在Internet上的公有CA,还是某一企业内部的私有CA;另外一个就是CPS(Certificate Practice Statement)。一些由商业证书发放机构(CCA)或者可信的第三方操作的PKI系统需要CPS。这是一个包含如何在实践中增强和支持安全策略的一些操作过程的详细文档。它包括CA是如何建立和运作的,证书是如何发行、接收和废除的,密钥是如何产生、注册的,以及密钥是如何存储的,用户是如何得到它的等等。

    2)证书机构CA是PKI的信任基础,管理公钥的整个生命周期,其作用包括:发放证书、规定证书的有效期和通过发布证书废除列表(CRL)确保必要时可以废除证书。

    证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

    创建证书的时候,CA系统首先获取用户的请求信息,其中包括用户公钥(如果用户端是个人使用或者测试用,则公钥一般由用户端产生,如电子邮件程序或浏览器等或者使用第三方开发的具有独立CSP的智能终端如USBkey),CA将根据用户的请求信息产生证书,并用自己的私钥对证书进行签名。其他用户、应用程序或实体将使用CA的公钥对证书进行验证。如果一个CA系统是可信的,则验证证书的用户可以确信,他所验证的证书中的公钥属于证书所代表的那个实体。

    CA还负责维护和发布证书废除列表CRL(certificate revocation lists,又称为证书黑名单)。当一个证书,特别是其中的公钥因为其他原因无效时(不是因为到期),CRL提供了一种通知用户和其他应用的中心管理方式。CA系统生成CRL以后,要么是放到LDAP服务器中供用户查询或下载,要么是放置在Web服务器的合适位置,以页面超级连接的方式供用户直接查询或下载。

    在实际生产中,一般由根CA以及下级CA组成,其中根CA主要维护下级CA的授权和可信,而下级CA可根据需要继续生成可信的下级CA。最后一级负责证书的管理。根CA及上一级CA,原则上关机、离线,主要是为了提高安全性。

    为了提高CA系统的安全性和可信性,围绕CA会把密钥管理单独独立出来,也就是常说的KMS,而密钥的生成为了提高机密性和速度,一般采取硬件的密码机。

    3)注册机构RA提供用户和CA之间的一个接口,它获取并认证用户的身份,向CA提出证书请求

    它主要完成收集用户信息和确认用户身份的功能。这里指的用户,是指将要向认证中心(即CA)申请数字证书的客户,可以是个人,也可以是集团或团体、某政府机构等。注册管理一般由一个独立的注册机构(即RA)来承担。它接受用户的注册申请,审查用户的申请资格,并决定是否同意CA给其签发数字证书。注册机构并不给用户签发证书,而只是对用户进行资格审查。因此,RA可以设置在直接面对客户的业务部门,如银行的营业部、机构认识部门等。当然,对于一个规模较小的PKI应用系统来说,可把注册管理的职能由认证中心CA来完成,而不设立独立运行的RA。但这并不是取消了PKI的注册功能,而只是将其作为CA的一项功能而已。PKI国际标准推荐由一个独立的RA来完成注册管理的任务,可以增强应用系统的安全。

    4)证书发布系统负责证书的发放,如可以通过用户自己,或是通过目录服务。目录服务器可以是一个组织中现存的,也可以是PKI方案中提供的。

    一个简单的PKI系统包括证书机构CA、注册机构RA和相应的PKI存储库。CA用于签发并管理证书;RA可作为CA的一部分,也可以独立,其功能包括个人身份审核、CRL管理、密钥产生和密钥对备份等;PKI存储库包括LDAP目录服务器和普通数据库,用于对用户申请、证书、密钥、CRL和日志等信息进行存储和管理,并提供一定的查询功能。

    1.4.数字证书

    数字证书是一个经证书授权中心(CA)数字签名的包含公开密钥拥有者信息和公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有效时间,发证机关(证书授权中心)的名称,该证书的序列号等信息,证书的格式遵循ITUT X.509国际标准。

    1)证书格式 
    在Internet网络中,应用程序使用的证书都来自不同的厂商或组织,为了实现可交互性,要求证书能够被不同的系统识别,符合一定的格式,并实现标准化。X.509为证书及其CRL格式提供了一个标准。但X.509本身不是Internet标准,而是国际电联ITU标准,它定义了一个 开放的框架,并在一定的范围内可以进行扩展。 

    为了适应PKI技术的发展,IETF也必须制定在Internet上使用X.509和CRL的标准。PKIX工作组就提供了一个Internet草案"Part I: X.509 Certificate and CRL Profile"(详细内容可见:ftp://ftp.ietf.org /internet-drafts/draft-ietf-pkix-ipki-part1-11.txt),用于定义在Internet PKI中使用 X.509和CRL的方法和规范。该草案把X.509作为标准,并对各标准项和扩展做了说明,基本接收了X.509作为Internet中的证书标准,但也定义了被PKI应用的X.509 V3和CRL V2标准格式的设置,这些设置包含了PKIX工作组对X.509所做的一些新的扩展。

    X.509 目前有三个版本:V1、V2和V3,其中V3是在V2的基础上加上扩展项后的版本,这些扩展包括由ISO文档(X.509-AM)定义的标准扩展,也包括 由其他组织或团体定义或注册的扩展项。X.509由ITU-T X.509(前身为CCITT X.509)或ISO/IEC 9594-8定义,最早以 X.500目录建议的一部分发表于1988年,并作为V1版本的证书格式。X.500于1993年进行了修改,并在V1基础上增加了两个额外的域,用于支 持目录存取控制,从而产生了V2版本。

    为了适应新的需求ISO/IEC和ANSI X9发展了X.509 V3版本证书格式,该版本证书通过增加标准扩展项对V1和V2证书进行了扩展。另外,根据实际需要,各个组织或团体也可以增加自己的私有扩展。

    X.509 V1和V2证书所包含的主要内容如下: 

    • 证书版本号(Version):版本号指明X.509证书的格式版本,现在的值可以为0、1、2,也为将来的版本进行了预定义。 
    • 证书序列号(SerialNumber):序列号指定由CA分配给证书的唯一的数字型标识符。当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中,这也是序列号唯一的原因。 
    • 签名算法标识符(Signature):签名算法标识用来指定由CA签发证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和hash算法,须向国际知名标准组织(如ISO)注册。 
    • 签发机构名(Issuer):此域用来标识签发证书的CA的X.500 DN名字。包括国家、省市、地区、组织机构、单位部门和通用名。 
    • 有效期(Validity):指定证书的有效期,包括证书开始生效的日期和时间以及失效的日期和时间。每次使用证书时,需要检查证书是否在有效期内。 
    •  证书用户名(Subject):指定证书持有者的X.500唯一名字。包括国家、省市、地区、组织机构、单位部门和通用名,还可包含email地址等个人信息等 
    • 证书持有者公开密钥信息(subjectPublicKeyInfo):证书持有者公开密钥信息域包含两个重要信息:证书持有者的公开密钥的值;公开密钥使用的算法标识符。此标识符包含公开密钥算法和hash算法。 
    • 签发者唯一标识符(Issuer Unique Identifier):签发者唯一标识符在第2版加入证书定义中。此域用在当同一个X.500名字用于多个认证机构时,用一比特字符串来唯一标识签发者的X.500名字。可选。 
    • 证书持有者唯一标识符(Subject Unique Identifier):持有证书者唯一标识符在第2版的标准中加入X.509证书定义。此域用在当同一个X.500名字用于多个证书持有者时,用一比特字符串来唯一标识证书持有者的X.500名字。可选。 
    • 签名值(Issuer's Signature):证书签发机构对证书上述内容的签名值。  

     

    X.509 V3 证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。标准扩展是指由X.509 V3版本定义的对V2版本增加的具有广泛 应用前景的扩展项,任何人都可以向一些权威机构,如ISO,来注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。

    2)CRL格式 

    证书废除列表CRL(Certificate revocation lists,又称证书黑名单)为应用程序和其它系统提供了一种检 验证书有效性的方式。任何一个证书废除以后,证书机构CA会通过发布CRL的方式来通知各个相关方。目前,同X.509 V3证书对对应的CRL为 X.509 v2 CRL,其所包含的内容格式如下: 

    CRL的版本号:0表示X.509 V1 标准;1表示X.509 V2 标准;目前常用的是同X.509 V3证书对应的CRL V2版本。 

    签名算法:包含算法标识和算法参数,用于指定证书签发机构用来对CRL内容进行签名的算法。 

    证书签发机构名:签发机构的DN名,由国家、省市、地区、组织机构、单位部门和通用名等组成。 

    此次签发时间:此次CRL签发时间,遵循ITU-T X.509 V2标准的CA在2049年之前把这个域编码为UTCTime类型,在2050或2050年之后年之前把这个域编码为GeneralizedTime类型。 

    下次签发时间:下次CRL签发时间,遵循ITU-T X.509 V2标准的CA在2049年之前把这个域编码为UTCTime类型,在2050或2050年之后年之前把这个域编码为GeneralizedTime类型。 

    用户公钥信息,其中包括废除的证书序列号和证书废除时间。废除的证书序列号是指要废除的由同一个CA签发的证书的一个唯一标识号,同一机构签发的证书不会有相同的序列号。 

    签名算法:对CRL内容进行签名的签名算法。 

    签名值:证书签发机构对CRL内容的签名值。 

    另 外,CRL中还包含扩展域和条目扩展域。CRL扩展域用于提供与CRL有关的额外信息部份,允许团体和组织定义私有的CRL扩展域来传送他们独有的信 息;CRL条目扩展域则提供与CRL条目有关的额外信息部份,允许团体和组织定义私有的CRL条目扩展域来传送他们独有的信息。

     1.5.密钥管理

    密钥管理也是PKI(主要指CA)中的一个核心功能,主要是指密钥对的安全管理,包括密钥产生、密钥备份、密钥恢复和密钥更新等。

    1)密钥产生

    密钥对的产生是证书申请过程中重要的一步,其中产生的私钥由用户保留,公钥和其他信息则交于CA中心进行签名,从而产生证书。根据证书类型和应用的不同,密钥对的产生也有不同的形式和方法。对普通证书和测试证书,一般由浏览器或固定的终端应用来产生,这样产生的密钥强度较小,不适合应用于比较重要的安全网络交易。而对于比较重要的证书,如商家证书和服务器证书等,密钥对一般由专用应用程序(由硬件专用密码机产生,由密钥管理中心管理)或CA中心直接产生,这样产生的密钥强度大,适合于重要的应用场合。 另外,根据密钥的应用不同,也可能会有不同的产生方式。比如签名密钥可能在客户端或RA中心产生,而加密密钥则需要在CA中心直接产生。

    那么新生成的密钥对一般怎么才能安全的写到用户的KEY里面或者发送给用户呢?

    a)用户或RA管理员通过证书存储设备构造密钥对,该密钥对将用于生成签名证书。客户端使用该密钥对构造基本证书请求并发送给RA服务器(发起证书的时候,一个是提交基本信息,一个是使用硬件KEY产生一个临时密钥对);
    b)RA服务器验证用户合法性和用户证书请求是否已获批准,然后根据用户信息、证书基本请求和证书策略构造证书申请请求,并通过安全连接发送给CA服务器;
    c)CA服务器验证该请求的合法性,然后通过安全连接向密钥管理中心请求生成用户加密证书;
    4)密钥管理中心接到请求后,从备用库中获取得到加密过的加密密钥对和加密的加密密钥,使用加密机进行解密,生成一会话密钥,使用会话密钥对私钥进行加密,并使用用户签名公钥对会话密钥进行加密。同时将加密的密钥对储存到在用库中;
    d)将加密好的私钥及加密好的加密密钥和公钥一起送还给CA,CA服务器根据证书策略签发用户签名证书及加密证书,将签发好的证书加密好的私钥及加密好的加密密钥一起送还到RA;
    e)RA服务器给客户端返回加密证书、签名证书、加密好的私钥及加密好的加密密钥。
    以上啰嗦了这么多,可以简化成几部,申请人/RA管理员使用硬件KEY生产一个临时密钥对,这个时候由RA传给了CA(传的是临时的密钥对的公钥、注册信息);CA通过密钥管理中心联系密码机;密码机从库汇中取出一个加密过的加密密钥和加密密钥的秘钥(这个密钥是密码机的管理随机的?),解密获得加密密钥对,生产一个会话密钥,使用会话密钥对私钥进行加密,使用CA传过来的申请人的公钥加密会话密钥;CA获取了使用会话密钥加密的私钥、使用申请人公钥加密的会话密钥、申请的公钥,CA签发证书(公钥+用户信息),将以上信息返回给RA,RA最后返回给用户,写入硬件设备。

    2)密钥备份和恢复

    在一个PKI系统中,维护密钥对的备份至关重要,如果没有这种措施,当密钥丢失后,将意味着加密数据的完全丢失,对于一些重要数据,这将是灾难性的。所以,密钥的备份和恢复也是PKI密钥管理中的重要一环。 使用PKI的企业和组织必须恩能够得到确认:即使密钥丢失,密要加密保护的重要信息也必须能够恢复,并且不能让一个独立的个人完全控制最重要的主密钥,否则将引起严重后果。 企业级的PKI产品至少应该支持用于加密的安全密钥的存储、备份和恢复。密钥一般用口令进行保护,而口令丢失则是管理员最常见的安全疏漏之一。所以,PKI产品应该能够备份密钥,即使口令丢失,它也能够让用户在一定条件下恢复该密钥,并设置新的口令。 例如,在某些情况下用户可能有多对密钥,至少应该有两个密钥:一个用于加密,一个用于签名。签名密要不需要备份,因为用于验证签名的公钥(或公钥证书)广泛发布,即使签名私钥丢失,任何用于相应公要的人都可以对已签名的文档进行验证。但PKI系统必须备份用于加密的密钥对,并允许用户进行恢复,否则,用于解密的私钥丢失将意味着加密数据的完全不可恢复。 另外,使用PKI的企业也应该考虑所使用密钥的生命周期,它包括密钥和证书的有效时间,以及已撤销密钥和证书的维护时间等。

    3)密钥更新

    对每一个由CA颁发的证书都会有有效期,密钥对生命周期的长短由签发证书的CA中心来确定,各CA系统的证书有效期限有所不同,一般大约为2-3年。 当用户的私钥被泄漏或证书的有效期快到时,用户应该更新私钥。这时用户可以废除证书,产生新的密钥对,申请新的证书。

    4)证书历史档案 
    从以上密钥更新的过程,我们不难看出,经过一段时间后,每一个用户都会形成多个旧证书和至少一个当前新证书。这一系列旧证书和相应的私钥就组成了用户密钥和证书的历史档案。 
    记录整个密钥历史是非常重要的。例如,某用户几年前用自己的公钥加密的数据或者其他人用自己的公钥加密的数据无法用现在的私钥解密,那么该用户就必须从他的密钥历史档案中,查找到几年前的私钥来解密数据。

     1.6.PKI服务

    能为不同的用户按不同安全需求提供多种安全服务。这些服务主要包括认证、数据完整性、数据保密性、不可否认性、公正及时间戳服务。 
    1)认证 
    认证服务即身份识别与鉴别,就是确认实体即为自己所声明的实体,鉴别身份的真伪。我们以甲乙双方的认证为例:甲首先要验证乙的证书的真伪,当乙在网上将证书传送给甲时,甲首先要用ca的公钥解开证书上ca的数字签名,如果签名通过验证,则证明乙持有的证书是真的;接着甲还要验证乙身份的真伪,乙可以将自己的口令用自己的私钥进行数字签名传送给甲,甲已经从乙的证书中或从证书库中查得了乙的公钥,甲就可以用乙的公钥来验证乙的数字签名。如果该签名通过验证,乙在网上的身份就确凿无疑 
    2)数据完整性服务 
    数据完整性服务就是确认数据没有被修改。实现数据完整性服务的主要方法是数字签名,它既可以提供实体认证,又可以保障被签名数据的完整性,这是由密码哈希算法和签名算法提供的保证。哈希算法的特点是输入数据的任何变化都会引起输出数据不可预测的极大变化,而签名是用自己的私钥将该哈希值进行加密,然后与数据一道传送给接受方。如果敏感数据在传输和处理过程中被篡改,接受方就不会收到完整的数据签名,验证就会失败。反之,如果签名通过了验证,就证明接收方收到的是未经修改的完整数据。 
    3)数据保密性服务 
    保密性服务采用了“数字信封”机制,即发送方先产生一个对称密钥,并用该对称密钥加密敏感数据。同时,发送方还用接收方的公钥加密对称密钥,就像把它装入一个“数字信封”。然后,把被加密的对称密钥(“数字信封”)和被加密的敏感数据一起传送给接收方。接收方用自己的私钥拆开“数字信封”,并得到对称密钥,再用对称密钥解开被加密的敏感数据。 
    4)不可否认性服务 
    不可否认性服务是指从技术上保证实体对其行为的认可。在这中间,人们更关注的是数据来源的不可否认性、接收的不可否认性以及接收后的不可否认性。此外还有传输的不可否认性、创建的不可否认性和同意的不可否认性。 
    5)公证服务 
    公证服务与一般社会公证人提供的服务有所不同,pki中支持的公证服务是指“数据认证”,也就是说,公证人要证明的是数据的有效性和正确性,这种公证取决于数据验证的方式。例如,在pki 中被验证的数据是基于哈希值的数字签名、公钥在数学上的正确性和签名私钥的合法性。 

    1.7.其他

    1)客户端软件 

    为方便客户操作,解决pki的应用问题,在客户装有客户端软件,以实现数字签名、加密传输数据等功能。此外,客户端软件还负责在认证过程中,查询证书和相关证书的撤消信息以及进行证书路径处理、对特定文档提供时间戳请求等。

    2)交叉认证 
    交叉认证就是多个pki域之间实现互操作。交叉认证实现的方法有多种:一种方法是桥接ca,即用一个第三方ca作为桥,将多个ca连接起来,成为一个可信任的统一体;另一种方法是多个ca的根ca(rca)互相签发根证书,这样当不同pki域中的终端用户沿着不同的认证链检验认证到根时,就能达到互相信任的目的。

     

    以下以案例分析PKI的价值。

    案例描述如下:甲想将一份合同文件通过Internet发给远在国外的乙,此合同文件对双方非常重要,不能有丝毫差错,而且此文件绝对不能被其他人得知其内容。如何才能实现这个合同的安全发送?

    问题1:最自然的想法是,甲必须对文件加密才能保证不被其他人查看其内容,那么,到底应该用什么加密技术,才能使合同传送既安全又快速呢?

    可以采用一些成熟的对称加密算法,如DES、3DES、RC5等对文件加密。对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法。

    问题2:如果黑客截获此文件,是否用同一算法就可以解密此文件呢?

    不可以,因为加密和解密均需要两个组件:加密算法和对称密钥,加密算法需要一个对称密钥来解密,黑客并不知道此密钥。

    问题3:既然黑客不知密钥,那么乙怎样才能安全地得到其密钥呢?

    用电话通知,若电话被窃听,通过Internet发送此密钥给乙,可能被黑客截获,怎么办?

    方法是用非对称密钥算法加密对称密钥后进行传送。与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(Public Key)和私有密钥(Private Key)。公开密钥与私有密钥是一对,如果公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫做非对称加解密算法(公/私钥可由专门软件生成)。甲乙双方各有一对公/私钥,公钥可在Internet上传送,私钥自己保存。这样甲就可以用乙的公钥加密问题1中提到的对称加密算法中的对称密钥。即使黑客截获到此密钥,也会因为黑客不知乙的私钥,而解不开对称密钥,因此解不开密文,只有乙才能解开密文。

    问题4:既然甲可以用乙的公钥加密其对称密文,为什么不直接用乙的公钥加密其文件呢?这样不仅简单,而且省去了用对称加密算法加密文件的步骤?

    不可以这么做。因为非对称密码算法有两个缺点:加密速度慢,比对称加密算法慢10~100倍,因此只可用其加密小数据(如对称密钥),另外加密后会导致得到的密文变长。因此一般采用对称加密算法加密文件,然后用非对称算法加密对称算法所用到的对称密钥。

    问题5:如果黑客截获到密文,同样也截获到用公钥加密的对称密钥,由于黑客无乙的私钥,因此它解不开对称密钥,但如果他用对称加密算法加密一份假文件,并用乙的公钥加密一份假文件的对称密钥,并发给乙,乙会以为收到的是甲发送的文件,会用其私钥解密假文件,并高兴地阅读其内容,但不知已经被替换,换句话说,乙并不知道这不是甲发给他的,怎么办?

    答案是用数字签名证明其身份。数字签名是通过散列算法,如MD5、SHA-1等算法从大块的数据中提取一个摘要。而从这个摘要中不能通过散列算法恢复出任何一点原文,即得到的摘要不会透露出任何最初明文的消息,但如果原信息受到任何改动,得到的摘要却肯定会有所不同。因此甲可以对文件进行散列算法得到摘要,并用自己的私钥加密,这样即使黑客截获也无用,黑客不会从摘要内获得任何信息,但乙不一样,他可用甲的公钥解密,得到其摘要(如果公钥能够解开此摘要,说明此摘要肯定是甲发的,因为只有甲的公钥才能解开用甲的私钥加密的信息,而甲的私钥只有甲自己知道),并对收到的文件(解密后的合同文件)也进行同样的散列算法,通过比较其摘要是否一致,就可得知此文件是否被篡改过(因为若摘要相同,则肯定信息未被改动,这是散列算法的特点)。这样不仅解决了证明发送人身份的问题,同时还解决了文件是否被篡改的问题。

    问题6:通过对称加密算法加密其文件,再通过非对称算法加密其对称密钥,又通过散列算法证明发送者身份和其信息的正确性,这样是否就万无一失了?

    回答是否定的。问题在于乙并不能肯定他所用的所谓的甲的公钥一定是甲的,解决办法是用数字证书来绑定公钥与公钥所属人。

    数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件,是网络通信中标识通信各方身份信息的一系列数据,它提供了一种在Internet上验证身份的方式,其作用类似于司机的驾驶执照或日常中的身份证,人们可以在交往中用它来识别对方的身份。

    最简单的证书包含一个公开密钥,名称以及证书授权中心的数字签名。一般情况下证书还包含有密钥的有效时间、发证机关(证书授权中心)名称、该证书的序列号等信息。它是由一个权威机构—CA机构,又称为证书授权(Certificate Authority)中心发放的。CA机构作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书,CA是PKI的核心,负责管理PKI结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份。

    因为数字证书是公开的,就像公开的电话簿一样,在实践中,发送者(即甲)会将一份自己的数字证书的拷贝连同密文、摘要等放在一起发送给接收者(即乙),而乙则通过验证证书上权威机构的签名来检查此证书的有效性(只需用那个可信的权威机构的公钥来验证该证书上的签名就可以了),如果证书检查一切正常,那么就可以相信包含在该证书中的公钥的确属于列在证书中的那个人(即甲)。

    问题7:至此似乎很安全了。但仍存在安全漏洞,例如:甲虽将合同文件发给乙,但甲拒不承认在签名所显示的那一刻签署过此文件(数字签名就相当于书面合同的文字签名),并将此过错归咎于电脑,进而不履行合同,怎么办?

    解决办法是采用可信的时钟服务(由权威机构提供),即由可信的时间源和文件的签名者对文件进行联合签名。在书面合同中,文件签署的日期和签名一样均是十分重要的防止文件被伪造和篡改的关键性内容(例如合同中一般规定在文件签署之日起生效)。在电子文件中,由于用户桌面时间很容易改变(不准确或可人为改变),由该时间产生的时间戳不可信赖,因此需要一个第三方来提供时间戳服务(数字时间戳服务(DTS)是网上安全服务项目,由专门的机构提供)。此服务能提供电子文件发表时间的安全保护。

    时间戳产生的过程为:用户首先将需要加时间戳的文件用哈希编码加密形成摘要。然后将该摘要发送到DTS,DTS在加入了收到文件摘要的日期和时间信息后再对该文件加密(数字签名),然后送回用户。因此时间戳(time-stamp)是一个经加密后形成的凭证文档,它包含三个部分:需加时间戳的文件的摘要,DTS收到文件的日期和时间,DTS的数字签名。由于可信的时间源和文件的签名者对文件进行了联合签名,进而阻止了文档签名的那一方(即甲方)在时间上欺诈的可能,因此具有不可否认性。

    问题8:有了数字证书将公/私钥和身份绑定,又有权威机构提供时钟服务使其具有不可否认性,是不是就万无一失了?不,仍然有问题。乙还是不能证明对方就是甲,因为完全有可能是别人盗用了甲的私钥(如别人趁甲不在使用甲的电脑),然后以甲的身份来和乙传送信息,这怎么解决呢?

    解决办法是使用强口令、认证令牌、智能卡和生物特征等技术对使用私钥的用户进行认证,以确定其是私钥的合法使用者。

    解决这个问题之前我们先来看看目前实现的基于PKI的认证通常是如何工作的。以浏览器或者其他登记申请证书的应用程序为例说明,在第一次生成密钥的时候会创建一个密钥存储,浏览器用户会被提示输入一个口令,该口令将被用于构造保护该密钥存储所需的加密密钥。如过密钥存储只有脆弱的口令保护或根本没有口令保护,那么任何一个能够访问该电脑浏览器的用户都可以访问那些私钥和证书。在这种场景下,又怎么可能信任用PKI创建的身份呢?正因为如此,一个强有力的PKI系统必须建立在对私钥拥有者进行强认证的基础之上,现在主要的认证技术有:强口令、认证令牌、智能卡和生物特征(如指纹和眼膜等认证)。

    以认证令牌举例:假设用户的私钥被保存在后台服务器的加密容器里,要访问私钥,用户必须先使用认证令牌认证(如用户输入账户名、令牌上显示的通行码和PIN等),如果认证成功,该用户的加密容器就下载到用户系统并解密。

    通过以上问题的解决,就基本满足了安全发送文件的需求。下面总结一下这个过程,对甲而言整个发送过程如下:

    1. 创建对称密钥(相应软件生成,并且是一次性的),用其加密合同,并用乙的公钥打包对称密钥。

    2. 创建数字签名,对合同进行散列算法(如MD5算法)并产生原始摘要,甲用自己的私钥加密该摘要(公/私钥既可以自己创建也可由CA提供)。

    3. 最后甲将加密后的合同、打包后的密钥、加密后的摘要,以及甲的数字证书(由权威机构CA签发)一起发给乙。

    而乙接收加密文件后,需完成以下动作:

    1. 接收后,用乙的私钥解密得到的对称密钥,并用对称密钥解开加密的合同,得到合同明文。

    2. 通过甲的数字证书获得甲的公钥,并用其解开摘要(称作摘要1)。

    3. 对解密后的合同使用和发送者同样的散列算法来创建摘要(称作摘要2)。

    4. 比较摘要1和摘要2,若相同,则表示信息未被篡改,且来自于甲。

    甲乙传送信息过程看似并不复杂,但实际上它由许多基本成分组成,如:对称/非对称密钥密码技术、数字证书、数字签名、证书发放机构(CA)、公开密钥的安全策略等,这其中最重要、最复杂的是证书发放机构(CA)的构建。

    三、 PKI的主要应用场景

    PKI提供的安全服务恰好可以满足电子商务、电子政务、网上银行、网上证券等金融业交易的安全需求,是确保这些活动顺利进行必备的安全措施,没有这些安全服务,电子商务、电子政务、网上银行、网上证券等都无法正常运作。

     

    以上来源于 https://www.cnblogs.com/ops-song/p/11351955.html,再次特别感谢,若有侵权,请及时告知。

      

    二、应用组成

    国内外有很多专业厂商从事商用CA的研制,国外最为著名的为RSA,国内包括北京CA、吉大正元、卫士通、格尔等等,笔者结合单位的情况提出一套参考的PKI体系框架。
    具体如下所示

     
    • 双中心、双证书、双密钥”机制

    双中心则是指证书认证中心与密钥管理中心,双证书是指签名证书和加密证书,双密钥是指签名密钥和加密密钥。

    证书认证中心CA与密钥管理中心(简称“KM”),以支持双密钥对、双系统机制。密钥管理中心负责向CA中心提供密钥管理服务,CA中心则具体的向用户提供证书业务服务和证书认证服务。

    密钥管理中心负责对数字认证基础设施系统的CA机构提供密钥管理服务;CA中心负责在统一的证书管理和认证服务。

    双证书中的加密证书对应加密密钥,签名密钥用于数字签名,加密密钥用于信息加密。签名密钥归用户独自拥有。签名证书和加密证书一起保存在用户的证书载体中,这样既解决了密钥恢复问题,又保证了行为的不可抵赖性。

     

    • “集中式生产、分布式服务”模式

     即证书的生产(签发、发布、管理、撤销等)集中在证书认证系统(CA)执行,而证书的申请、注册、审核等则由分布的证书审核注册系统(RA)执行,以提高系统服务效率。这种服务模式的实现需要与证书业务服务系统建设策略紧密结合。

     

    • 采用“自上而下”模式

    建立根CA,然后由根CA负责对下级CA的认证,下级CA扩展RA系统

     

    一般一套PKI由CA、RA、KM、LDAP、密码机、ldap、ocsp等主要基础软件和客户端、安全网关、签名验签等基础平台组成。

    1.根CA认证中心

     CA认证中心由于它的功能简单,只用于签发二级CA而不需要参与签发用户证书的流程,因此根CA通常部署在一台硬件服务器上,要求连接硬件加密机,并且加密机的密钥长度比二级CA的高,通常需要密钥长度为2048位。为了保证根CA认证中心的绝对安全,通常都是处于离线状态(关机或者拔掉网线即可),有新二级CA产生时才连入网络。

     CA也会进行证书发布到LDAP目录服务器上,主要发布的是证书公钥和二级CA的黑名单(ARL),因为二级CA一般不会废除,因此根CA的发布周期设置的比较长。

    2.数字证书认证中心

     数字证书认证中心即为二级CA系统用来制作和签发数字证书,二级CA系统与KM系统通讯,在客户端有签发证书的请求时,二级CA会从KM系统取到加密密钥对,然后在二级CA中心制作成满足X.509 V3标准的数字证书,并且对用户证书进行签名以便说明此用户证书是由二级CA机构签发出来的。

    二级CA中心进行证书发布到LDAP目录服务器上,它可以证书定义发布的周期和模式,发布的内容主要包括:用户证书信息和用户证书的黑名单(CRL),同时二级CA的数据库备份了用户证书的注册信息。当与KM通讯时启用了私有协议,需要签发证书进行链路加密。

    二级CA中心是KMRA之间的纽带,除了与KM系统通讯以外,还需要与RA系统进行通讯,它定义了采用什么样的模板来制作用户证书,二级CA中心可以签发多个RA机构。

     3.密钥管理系统

     密钥管理系统(KM专门用于对加密机生成的密钥进行管理的系统,包括对密钥的分发和备份,KM连接的加密机产生的密钥是加密密钥对,用于生成用户证书(双证书)中的加密证书,同时KM只备份用户证书的加密密钥,签名密钥由硬件存储设备生成不进行备份处理。

    KM系统与二级CA通讯,以便提供密钥资源,KM可以同时为多个二级CA中心提供密钥。

    密钥管理系统中密钥的产生采用国家密码管理局规定的主机加密服务器来完成。

    密钥管理系统要为CA签发系统备份CA的密钥,同时还将产生的密钥提供给各个CA签发系统,满足签发数字密钥的需要。通过在线的方式满足在KM备份CA密钥的CA系统对密钥密钥的需求,实时响应CA签发系统的提取密钥对的请求。

    4.数字证书注册中心

     数字证书注册中心(RA主要用来对用户证书进行注册、审核、冻结、解冻、废除、注销、签发等操作。RA系统只与二级CA中心进行通讯,并且是进行实时通讯。

    RA系统除了签发用户证书以外,根据二级CA中心定义的模板,还可以签发设备证书和计算机证书。数据库可以保存用户注册信息,但是不能保存证书信息。

    5.LDAP目录服务

     LDAP 目录用于接收从二级CA和根CA签发出来证书信息和黑名单信息(CRLARL),以便对外提供服务,LDAP服务器也是PKI/CA系统唯一的对外服务出口,它可以为其他应用系统提供黑名单、证书公钥信息和证书链。

     6.OCSP服务

     OCSP(Online Certificate Status Protocol)在线证书状态查询服务,为应用系统提供证书实时状态在线查询服务,为查询的应用系统提供实时的证书状态信息。

    OCSP服务属于 CA系统扩展组成部分,OCSP协议支持OCSPv1OCSPv2。系统遵循RFC2560标准实现,任何符合RFC2560的系统都可以方便的连接OCSP系统进行证书状态查询。

     7.加密机

     密码机针对安全性要求高、高速、高性能应用环境而研制开发的,其功能完善、算法运算速率高、并发工作容量大。作为高端的商用基础密码产品,它既可以为信息安全传输系统提供高性能的数据加/解密服务,又可以作为主机数据安全存储系统、身份认证系统以及对称、非对称密钥管理系统的主要密码设备和核心构件。

      

    三、数字签名工作原理

    数字签名是指发送方用自己的私钥对数字指纹进行加密后所得的数据,其中包括非对称密钥加密和数字签名两个过程,在可以给数据加密的同时,也可用于接收方验证发送方身份的合法性。采用数字签名时,接收方需要使用发送方的公钥才能解开数字签名得到数字指纹。
    数字指纹又称为信息摘要,是指发送方通过HASH算法对明文信息计算后得出的数据。采用数字指纹时,发送方会将本端对明文进哈希运算后生成的数字指纹(还要经过数字签名),以及采用对端公钥对明文进行加密后生成的密文一起发送给接收方,接收方用同样的HASH算法对明文计算生成的数据指纹,与收到的数字指纹进行匹配,如果一致,便可确定明文信息没有被篡改。
    数字签名的加解密过程如图所示。甲也要事先获得乙的公钥,具体说明如下(对应图中的数字序号):
     
    (1)甲使用乙的公钥对明文进行加密,生成密文信息。
    (2)甲使用HASH算法对明文进行HASH运算,生成数字指纹。
    (3)甲使用自己的私钥对数字指纹进行加密,生成数字签名。
    (4)甲将密文信息和数字签名一起发送给乙。
    (5)乙使用甲的公钥对数字签名进行解密,得到数字指纹。
    (6)乙接收到甲的加密信息后,使用自己的私钥对密文信息进行解密,得到最初的明文。
    (7)乙使用HASH算法对还原出的明文用与甲所使用的相同HASH算法进行HASH运算,生成数字指纹。然后乙将生成的数字指纹与从甲得到的数字指纹进行比较,如果一致,乙接受明文;如果不一致,乙丢弃明文。
     从以上数字签名的加/解密过程中可以看出,数字签名技术不但证明了信息未被篡改,还证明了发送方的身份。数字签名和数字信封技术也可以组合使用。但是,数字签名技术也还有一个问题,获取到对方的公钥可能被篡改,并且无法发现。
     
     
     
     
    特别声明:
    1.以上所有描述内容部分参考链接/文献未逐一列出,若有侵权,请及时告知,有则改之无则加勉。
    2.以上仅是学习过程的总结,相信有很多理解偏差的地方,特别希望指出,给予帮助,更新知识体系,共同进步。
     
    参考文献:
    https://www.cnblogs.com/sddai/p/5667472.html
    https://www.jianshu.com/p/38c726320893
    https://www.cnblogs.com/xray2005/archive/2008/03/04/1089444.html
    https://blog.csdn.net/lycb_gz/article/details/78081536
    https://my.oschina.net/linxb/blog/1142906
     
     


     

     

     

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





  • 相关阅读:
    Python父类调用子类
    Python中for else注意事项
    JS Number类型数字位数及IEEE754标准
    cocos打包到ios与android上音频推荐
    JS学习之预解析(执行上下文)
    JS学习之函数的作用域
    JS学习之函数二
    JS学习之函数
    如何在subline中高亮显示.vue文件
    JS之正则
  • 原文地址:https://www.cnblogs.com/worter991/p/13163748.html
Copyright © 2011-2022 走看看