公开密钥基础建设(PKI)与数字签名


公开密钥基础建设(英语:Public Key Infrastructure,缩写:PKI),又称公开密钥基础架构、公钥基础建设、公钥基础设施、公开密码匙基础建设或公钥基础架构,是一组由硬件、软件、参与者、管理政策与流程组成的基础架构,其目的在于创造、管理、分配、使用、存储以及撤销数字证书。
密码学上,公开密钥基础建设借着数字证书认证机构(CA)将用户的个人身份跟公开密钥链接在一起,对每个证书中心用户的身份必须是唯一的。链接关系通过注册和发布过程创建,取决于担保级别,链接关系可能由CA的各种软件或在人为监督下完成。PKI的确定链接关系的这一角色称为注册管理中心(Registration Authority,RA)。RA确保公开密钥和个人身份链接,可以防抵赖。
可信赖的第三者(Trusted third party,TTP)也常被用来指证书中心,PKI有时被错误地拿来代表公开密钥密码学或公开密钥算法。
1976年Whitfield Diffie、Martin Hellman|Hellman、Ron Rivest、Adi Shamir和Leonard Adleman等人相继公布了安全密钥交换与非对称密钥算法后,整个通信方式为之改变。随着高速电子数字通信的发展,用户对安全通信的需求越来越强。
密码协议在这种诉求下逐渐发展,造就新的密码原型。全球互联网出现之后,认证与安全通信的需求也更加严苛,商务理由便足以解释一切。时在网景工作的Taher ElGamal等人发展出传输安全层协议,包含了密钥创建、服务器认证等。公开密钥基础建设的架构因此浮现。
厂商和企业家察觉了其后的广大市场,开始设立新公司并引导法律认知与保护。美国律师协会项目发行了一份对公开密钥基础建设操作的可预见法律观点的详尽分析,随后多个美国州政府与其他国家的司法单位开始制定相关法规。消费者团体等则提出对隐私、访问、可靠性的质疑,也被列入司法的考虑中。
被制定的法规实有不同,将公开密钥基础建设的机制转换成商务操作有实际上的问题,远比许多先驱者所想的缓慢。21世纪的前几年才慢慢发觉,密码工程没那么容易被设计与实践,某些存在的标准某方面甚至是不合宜的。
公开密钥基础建设的厂商发现了一个市场,但并非九十年代中期所预想的那个市场,这个市场发展得缓慢而且以不同的方式前进。公开密钥基础建设并未解决所期待的问题,某些厂商甚至退出市场。
公开密钥基础建设的设置使得未联系的电脑用户可以提出认证,并使用公钥证书内的公钥信息加密给对方。解密时,每个用户使用自己的私密密钥解密,该密钥通常被通行码保护。大致而言,公开密钥基础建设由客户端软件、服务端软件、硬件、法律合约与保证、操作程序等组成。签署者的公钥证书也可能被第三者使用,用来验证由该签署者签署的数字签名。通常,公开密钥基础建设协助参与者对话以达成机密性、消息完整性、以及用户认证,而不用预先交换任何秘密信息。然而互通连成员间的公开密钥基础建设受制于许多现实问题,例如不确定的证书撤销、证书中心发行证书的条件、司法单位规范与法律的变化、还有信任。
组成要素
PKI的组成要素主要有:用户(使用PKI的人或机构);认证机构(Certification Authority,CA)(颁发证书的人或机构);仓库(保存证书的数据库)。用户和认证机构称之为实体。
用户是使用PKI的人,使用PKI的人又分为两种:一种是向认证机构(CA)注册自己公钥的人,另一种是希望使用已注册公钥的人。
认证机构是对证书进行管理的人或机构。认证机构进行这几种操作:代用户生成密钥对(当然可以由用户自己生成);对注册公钥的用户进行身份验证;生成并颁发证书;作废证书。另外,对公钥注册和用户身份验证可以由注册机构(Registration Authority,RA)来完成。
仓库(repository)是存放证书的数据库。仓库也叫证书目录。
大部分企业级的公钥基础建设系统,依赖由更高端级的证书中心发行给低端证书中心的证书,而层层构筑而成的证书链,来创建某个参与者的身份识别证书的合法性。这产生了不只一个电脑且通常涵盖多个组织的证书层次结构,涉及到多个来源软件间的合作。因此公开的标准对公钥基础建设相当重要,这个领域的标准化多由互联网工程工作小组的PKIX工作群完成。
企业公钥基础建设通常和企业的数据库目录紧密结合,每个员工的公钥内嵌在证书中,和人事资料一起存储,可辅以最先进的目录技术是轻量目录访问协议(Lightweight Directory Access Protocol,LDAP)。事实上,最常见的证书格式X.509的前身X.500是用于LDAP的前置处理器的目录。
PKI 应用
安全性
网络服务面临的安全性议题有二:一是网络与设备上的安全议题,另一是信息的安全议题。网络服务可以穿过传统的网络保护机制,同时网络服务也可以携带筹载物(payload),还可以与企业内部应用程序沟通,如此等于大开安全之门。因此在网络安全问题上,可能会面临假身份问题,以及利用无效的SQL语法、LDAP或是XPath作攻击,另外,攻击者也可以使用XML的拒绝服务攻击(DoS)来瘫痪网络连线。另外,在内容安全议题上,由于传递的是XML明码,因此极易被有心人给窥视,因此网络服务也需对其传递内容进行保护,以免泄漏重要信息。
证书应用风险规划
电子证书主要目的为让网络交易双方创建信赖关系,其法律效力在于内含之数字签名,而非证书本身;证书只在确认此数字签名的正确性与用户身份真实性。电子证书内含密码学技术,且由具公信力的CA所核发,其安全性不置可否。然而,若将证书与其他应用一起使用,例如同时作为企业内部管理的功能,则必须考虑可能造成的风险。企业在应用电子证书时,应有完整的风险规划,例如证书的选择、CA的选择、了解证书应用范围的限制、了解证书服务契约之赔偿责任、利用各项功能或机制(如黑名单机制、在线证书状态查询等)控制交易风险等。如此,才能在不逾越证书使用范围的法律效力下,适度做好交易风险控管,达到证书最终目的。
工商证书应用服务
继自然人证书后,中华民国经济部刻正推动公司行号之工商证书,亦即签发公司行号证书IC卡,作为企业与政府之间的网络身份证,提供各项安全的网络申办服务。现阶段应用包括工商登记、领投标、公司报税、劳保加退保等等,后续将朝向文件(如誊本)申请之电子化目标迈进,一方面减少各项文书使用量,一方面提供公司及政府单位便利的在线作业,简化整体申办流程,为另一项电子化政府服务。
一般电脑用户服务
PKI对我们日常生活有何影响呢?最主要看用户对信息安全的需求程度而定;换句话说,只要对“资料身份识别”、“交易资料完整”、“交易不可否认”或“保密”等其中之一有所需求,就可以使用PKI。以社区管理为例,管理委员会挨家挨户向住户发送通知单或收取管理费,相当耗费时间与人力;如果以e-mail或在线缴费就方便多了。住户透过网络运用电子证书缴费,就是使用 PKI 当中的“身份识别”与“交易不可否认”等功能–在整个过程中,管理委员会就能够依证书识别用户的身份,而用户也不能否认其缴费动作。
PKI的应用范围不仅于此,例如目前流行的网络银行或网络下单等服务,都必须仰赖PKI机制并配合使用电子签名所给予之法律地位,以确保交易双方交易记录的存在(“交易资料完整”与“交易不可否认”)与身份确认,使业者与消费者的权益都受到保障、以及利用网络达到安全传递信息的目的。
日常生活中会接触到的PKI应用还包括网络报税、高速公路收费自动化智能卡、电子邮件加密签名、上网购物、与大楼门禁系统等。
PKI 要点
采验证服务器架构
可否离线作业,加快验证速度
是否提供重要之审核纪录
运算性能
支持操作系统
支持多证书及智能卡
支持各种证书内容解解析
存证功能
集成繁琐度
是否一体适用
黑名单的机制
AP支持弹性
支持应用程序语言
签名功能
对称式加解密之功能
非对称式加密算法
数字签名
数字签名(英语:Digital Signature,又称公钥数字签名)是一种功能类似写在纸上的普通签名、但是使用了公钥加密领域的技术,以用于鉴别数字信息的方法。一套数字签名通常会定义两种互补的运算,一个用于签名,另一个用于验证。法律用语中的电子签章与数字签名代表之意义并不相同。电子签章指的是依附于电子文件并与其相关连,用以辨识及确认电子文件签署人身份、资格及电子文件真伪者;数字签名则是以数学算法或其他方式运算对其加密而形成的电子签章。意即并非所有的电子签章都是数字签名。
数字签名不是指将签名扫描成数字图像,或者用触摸板获取的签名,更不是落款。数字签名了的文件的完整性是很容易验证的(不需要骑缝章、骑缝签名,也不需要笔迹鉴定),而且数字签名具有不可抵赖性(即不可否认性),不需要笔迹专家来验证。
在中国数字签名是具法律效力的,正在被普遍使用。2000年,中华人民共和国的新《合同法》首次确认了电子合同、电子签名的法律效力。2005年4月1日起,中华人民共和国首部《电子签名法》正式实施。
每个人都有一对“钥匙”(数字身份),其中一个只有本人知道(私钥),另一个公开的(公钥)。签名的时候用私钥,验证签名的时候用公钥。又因为任何人都可以落款申称他就是使用者本人,因此公钥必须向接受者信任的人(身份认证机构)来注册。注册后身份认证机构给使用者发一数字证书。对文件签名后,使用者把此数字证书连同文件及签名一起发给接受者,接受者向身份认证机构求证是否真地是用使用者的密钥签发的文件。
信息发布者可以使用数字签名:信息发布的目的是让人们知道信息,虽然没必要对消息进行加密,但是必须排除有人伪装信息发布者发布假消息的风险,这时信息发布者就可以使用数字签名。而对明文消息施加的签名,称为明文签名(clearsign)。
软件的作者可以加上数字签名,以便用户下载后对签名进行验证。
认证机构(CA)也可以为用户的公钥加上数字签名生成证书,以便人们确认用户公钥的合法性。
SSL/TLS使用服务器证书(加上了数字签名的服务器公钥)认证服务器身份是否合法。
原理
通常我们使用公钥加密,用私钥解密。而在数字签名中,我们使用私钥加密(相当于生成签名),公钥解密(相当于验证签名)。可以直接对消息进行签名(即使用私钥加密,此时加密的目的是为了签名,而不是保密),验证者用公钥正确解密消息,如果和原消息一致,则验证签名成功。但通常我们会对消息的散列值签名,因为通常散列值的长度远小于消息原文,使得签名(非对称加密)的效率大大提高。注意,计算消息的散列值不是数字签名的必要步骤。

简单的数字签名原理
在实际使用中,我们既想加密消息,又想签名,所以要对加密和签名组合使用,比如TLS就组合了加密和签名。
数字签名应用了公钥密码领域使用的单向函数原理。单向函数指的是正向操作非常简单,而逆向操作非常困难的函数,比如大整数乘法。这种函数往往提供一种难解或怀疑难解的数学问题。目前,公钥密码领域具备实用性的三个怀疑难解问题为:质数分解,离散对数和椭圆曲线问题。
数字签名就是将公钥密码反过来使用。签名者将讯息用私钥加密,然后公布公钥;验证者使用公钥将加密讯息解密并比对消息(一般签名对象为消息的散列值。这里为了讲解方便,假设数字签名直接将消息而非散列值签名)。

生成数字签名并加密以及解密并验证数字签名
因此,可靠的公钥密码算法均能构建出可靠的数字签名。下面讲解为何反用公钥密码算法能够构建出安全的数字签名。
Alice是签名者,假设她要对消息A进行签名。现在Alice生成了其公私钥密码对,公布该公钥,然后将消息用私钥加密后发布。现在我们希望Alice的签名算法具有如下特性:
1,确认消息在传输过程中没有丢位,没被篡改(完整性)
2,确认消息的发送者是发布公钥的Alice(认证)
3,确认Alice的确发布过该消息(不可否认性)
实现
数字签名算法是依靠公钥加密技术来实现的。在公钥加密技术里,每一个使用者有一对密钥:一把公钥和一把私钥。公钥可以自由发布,但私钥则秘密保存;还有一个要求就是要让通过公钥推算出私钥的做法不可能实现。
普通的数字签名算法包括三种算法:
一种密码生成算法
标记算法
验证算法
RSA、ECDSA等算法可以实现数字签名。常用的密码杂凑函数有SHA家族。
数字证书认证机构
数字证书认证机构(英语:Certificate Authority,缩写为CA),也称为电子商务认证中心、电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。在SET交易中,CA不仅对持卡人、商户发放证书,还要对获款的银行、网关发放证书。
CA是证书的签发机构,它是公钥基础设施的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。CA也拥有用户的证书(内含公钥)和私钥。网上的公众用户通过验证CA的签名从而信任CA,任何人都可以得到CA的证书(含公钥),用以验证CA所签发的证书。
用户若欲获取证书,应先向CA提出申请,CA判明申请者的身份后,为之分配一个公钥,并将该公钥与其身份信息绑定,为该整体签名,签名后的整体即为证书,发还给申请者。如果一个用户想鉴别另一个证书的真伪,他就用CA的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。
为保证用户之间在网上传递信息的安全性、真实性、可靠性、完整性和不可抵赖性,不仅需要对用户的身份真实性进行验证,也需要有一个具有权威性、公正性、唯一性的机构,负责向电子商务的各个主体颁发并管理符合国际安全电子交易协议标准的电子商务安全证,并负责管理所有参与网上交易的个体所需的数字证书,因此CA是安全电子交易的核心环节。
证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普遍遵循X.509国际标准。
加密:CA认证将文字转换成不能直接阅读的形式(即密文)的过程称为加密。
解密:将密文转换成能够直接阅读的文字(即明文)的过程称为解密。
如打算在电子文档上实现签名的目的,可使用数字签名。RSA公钥体制可实现对数字信息的数字签名,方法如下:
信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在传递过程中未被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。
在数字签名中有重要作用的数字指纹是通过一类特殊的散列函数(HASH函数)生成的。对这些HASH函数的特殊要求是:
接受的输入报文数据没有长度限制;
对任何输入报文数据生成固定长度的摘要(数字指纹)输出;
从报文能方便地算出摘要;
难以对指定的摘要生成一个报文,而由该报文可以算出该指定的摘要;
两个不同的报文难以生成具有相同的摘要。
数字证书为实现双方安全通信提供电子认证。在因特网、公司内、外部网中,使用数字证书实现身份识别和电子信息加密。数字证书中含有密钥对(公钥和私钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。身份认证机构是人们注册公钥的机构。注册之后,身份认证机构就向注册者发一数字证书,也就是说在注册者的数字身份证上加签。服务有免费也有收费。身份认证机构也可以是一个自然人,就如PGP和GPG系统所倡导的。
数字签名算法介绍和区别
数字签名是一个带有密钥的消息摘要算法,这个密钥包括了公钥和私钥,用于验证数据完整性、认证数据来源和抗否认,遵循OSI参考模型、私钥签名和公钥验证。也是非对称加密算法和消息摘要算法的结合体,常见的数字签名算法主要有RSA、DSA、ECDSA三种,本节对数字签名算法进行介绍。
Hash又译散列、摘要等名,下面统一称为哈希。
1. RSA数字签名算法
RSA是目前计算机密码学中最经典算法,也是目前为止使用最广泛的数字签名算法,RSA数字签名算法的密钥实现与RSA的加密算法是一样的,算法的名称都叫RSA。密钥的产生和转换都是一样的,包括在售的所有SSL数字证书、代码签名证书、文档签名以及邮件签名大多都采用RSA算法进行加密。
RSA数字签名算法主要包括MD和SHA家族的两种算法,例如熟知的MD5和SHA-256即是这两种算法中的一类,具体如下。
1.1. MD2、MD4、MD5算法
最常见的是我们熟知的MD5加密算法,MD5全称Message-Digest Algorithm 5(信息-摘要算法 5),目前比较普遍的Hash算法,是散列算法的基础原理,MD5的前身有MD2、MD3和MD4。MD5算法法是输入任意长度字符,输出固定长度128位的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128位Hash值,主要方式是通过求余、取余、调整长度、与链接变量进行循环运算进而得出结果。
1.2. SHA-1算法
SHA-1是由NIST NSA设计为同DSA一起使用的,SHA-1设计时基于和MD4相同原理,并且模仿了该算法,SHA-1抗穷举(brute-force)性更好,它产出160位的Hash值,对于非线性运算、移位和加法运算也与MD5类似。SHA-1也应用于包括TLS和SSL、PGP、SSH、S/MIME和IPsec等多种协议中,曾被视为是MD5的后继者。SHA-1的如今已经明确不具备安全性了。
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
在2016年1月1日后基于SHA-1签发的SSL和代码签名的X.509证书已不具备安全性可言,多个操作系统、浏览器都建议将基于SHA-1而签发的证书、代码签名替换至SHA-2的产品,已官方停止更新的Windows XP上只兼容基于SHA-1算法的SSL和代码签名产品。在2017年2月23日Google宣布实现了对SHA-1算法的碰撞破解,所以SHA-1算法已经正式被宣布为不安全的算法,主流厂商对自身产品及安全要求都提升至了SHA-2算法。
1.3. SHA-2算法
SHA-224、SHA-256、SHA-384和SHA-512并称为SHA-2,发布于2001年,目前比较广泛应用的SSL数字证书和代码签名证书签名算法均采用SHA-256算法,相较于SHA-1算法而言,至今SHA-2算法还未被破解,从某种意义上SHA-2延用了SHA-1算法,所以至少发文时间起是安全的。目前顶级CA和Google、苹果等公司都采用基于SHA-256算法作为SSL证书和代码签名证书的主流签名算法。SHA256算法使用的哈希值长度是256位。
1.4. SHA-3算法
SHA-3算法正式发布于2015年,SHA-3并不是要取代SHA-2,因为SHA-2目前并没有出现明显的弱点。由于对MD5、SHA-0和SHA-1出现成功的破解,NIST感觉需要一个与之前算法不同的,可替换的加密Hash算法,也就是现在的 SHA-3。
2. DSA数字签名算法
DSA全称Digital Signature Algorithm,DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,所以它比RSA要快很多,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。

数字签名原理图
DSA的整个签名算法流程如下:
a. 发送方使用SHA-1和SHA-2编码将发送内容加密产生的数字摘要;
b. 发送方用自己的专用密钥对摘要进行再次加密得到数字签名;
c. 发送方将原文和加密后的摘要传给接收方;
d. 接收方使用发送方提供的密钥对进行解密 ,同时对收到的内容用SHA-1/SHA-2编码加密产生同样的摘要;
e. 接收方再将解密后的摘要和d步骤中加密产生的摘要进行比对,如果两者一至,则说明传输过程的信息没有被破坏和篡改,否则传输信息则不安全。
3. ECDSA椭圆曲线数字签名算法
ECDSA是用于数字签名,是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC,最后签名出来的值也是分为r,s。而ECC(全称Elliptic Curves Cryptography)是一种椭圆曲线密码编码学。
ECDH每次用一个固定的DH key,导致不能向前保密(forward secrecy),所以一般都是用ECDHE(ephemeral)或其他版本的ECDH算法。ECDH则是基于ECC的DH( Diffie-Hellman)密钥交换算法。
ECC与RSA 相比,有以下的优点:
a. 相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度。
b. 计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。
c. 存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。
d. 带宽要求低使得ECC具有广泛得应用前景。
下表是ECC和RSA安全性比较
攻破时间(MIPS年)RSA/DSA(密钥长度)ECC密钥长度RSA/ECC密钥长度比
1045121065:11087681326:1101110241607:11020204821010:110782100060035:1
在 ECDHE 密钥交换中,服务端使用证书私钥对相关信息进行签名,如果浏览器能用证书公钥验证签名,就说明服务端确实拥有对应私钥,从而完成了服务端认证。密钥交换和服务端认证是完全分开的。
可用于 ECDHE 数字签名的算法主要有 RSA 和 ECDSA,也就是目前密钥交换 + 签名有三种主流选择:
RSA 密钥交换(无需签名);
ECDHE 密钥交换、RSA 签名;
ECDHE 密钥交换、ECDSA 签名;
4. 小结
对于SSL数字证书和代码签名证书以及其它非对称加密产品来说,RSA目前普及度最高,以SHA-256签名算法最广,对于更高级基于ECC签名算法是需要对证书请求文件CSR和根证书都有相应的使用环境要求。
密码学上,公开密钥基础建设借着数字证书认证机构(CA)将用户的个人身份跟公开密钥链接在一起,对每个证书中心用户的身份必须是唯一的。链接关系通过注册和发布过程创建,取决于担保级别,链接关系可能由CA的各种软件或在人为监督下完成。PKI的确定链接关系的这一角色称为注册管理中心(Registration Authority,RA)。RA确保公开密钥和个人身份链接,可以防抵赖。
可信赖的第三者(Trusted third party,TTP)也常被用来指证书中心,PKI有时被错误地拿来代表公开密钥密码学或公开密钥算法。
1976年Whitfield Diffie、Martin Hellman|Hellman、Ron Rivest、Adi Shamir和Leonard Adleman等人相继公布了安全密钥交换与非对称密钥算法后,整个通信方式为之改变。随着高速电子数字通信的发展,用户对安全通信的需求越来越强。
密码协议在这种诉求下逐渐发展,造就新的密码原型。全球互联网出现之后,认证与安全通信的需求也更加严苛,商务理由便足以解释一切。时在网景工作的Taher ElGamal等人发展出传输安全层协议,包含了密钥创建、服务器认证等。公开密钥基础建设的架构因此浮现。
厂商和企业家察觉了其后的广大市场,开始设立新公司并引导法律认知与保护。美国律师协会项目发行了一份对公开密钥基础建设操作的可预见法律观点的详尽分析,随后多个美国州政府与其他国家的司法单位开始制定相关法规。消费者团体等则提出对隐私、访问、可靠性的质疑,也被列入司法的考虑中。
被制定的法规实有不同,将公开密钥基础建设的机制转换成商务操作有实际上的问题,远比许多先驱者所想的缓慢。21世纪的前几年才慢慢发觉,密码工程没那么容易被设计与实践,某些存在的标准某方面甚至是不合宜的。
公开密钥基础建设的厂商发现了一个市场,但并非九十年代中期所预想的那个市场,这个市场发展得缓慢而且以不同的方式前进。公开密钥基础建设并未解决所期待的问题,某些厂商甚至退出市场。
公开密钥基础建设的设置使得未联系的电脑用户可以提出认证,并使用公钥证书内的公钥信息加密给对方。解密时,每个用户使用自己的私密密钥解密,该密钥通常被通行码保护。大致而言,公开密钥基础建设由客户端软件、服务端软件、硬件、法律合约与保证、操作程序等组成。签署者的公钥证书也可能被第三者使用,用来验证由该签署者签署的数字签名。通常,公开密钥基础建设协助参与者对话以达成机密性、消息完整性、以及用户认证,而不用预先交换任何秘密信息。然而互通连成员间的公开密钥基础建设受制于许多现实问题,例如不确定的证书撤销、证书中心发行证书的条件、司法单位规范与法律的变化、还有信任。
组成要素
PKI的组成要素主要有:用户(使用PKI的人或机构);认证机构(Certification Authority,CA)(颁发证书的人或机构);仓库(保存证书的数据库)。用户和认证机构称之为实体。
用户是使用PKI的人,使用PKI的人又分为两种:一种是向认证机构(CA)注册自己公钥的人,另一种是希望使用已注册公钥的人。
认证机构是对证书进行管理的人或机构。认证机构进行这几种操作:代用户生成密钥对(当然可以由用户自己生成);对注册公钥的用户进行身份验证;生成并颁发证书;作废证书。另外,对公钥注册和用户身份验证可以由注册机构(Registration Authority,RA)来完成。
仓库(repository)是存放证书的数据库。仓库也叫证书目录。
大部分企业级的公钥基础建设系统,依赖由更高端级的证书中心发行给低端证书中心的证书,而层层构筑而成的证书链,来创建某个参与者的身份识别证书的合法性。这产生了不只一个电脑且通常涵盖多个组织的证书层次结构,涉及到多个来源软件间的合作。因此公开的标准对公钥基础建设相当重要,这个领域的标准化多由互联网工程工作小组的PKIX工作群完成。
企业公钥基础建设通常和企业的数据库目录紧密结合,每个员工的公钥内嵌在证书中,和人事资料一起存储,可辅以最先进的目录技术是轻量目录访问协议(Lightweight Directory Access Protocol,LDAP)。事实上,最常见的证书格式X.509的前身X.500是用于LDAP的前置处理器的目录。
PKI 应用
安全性
网络服务面临的安全性议题有二:一是网络与设备上的安全议题,另一是信息的安全议题。网络服务可以穿过传统的网络保护机制,同时网络服务也可以携带筹载物(payload),还可以与企业内部应用程序沟通,如此等于大开安全之门。因此在网络安全问题上,可能会面临假身份问题,以及利用无效的SQL语法、LDAP或是XPath作攻击,另外,攻击者也可以使用XML的拒绝服务攻击(DoS)来瘫痪网络连线。另外,在内容安全议题上,由于传递的是XML明码,因此极易被有心人给窥视,因此网络服务也需对其传递内容进行保护,以免泄漏重要信息。
证书应用风险规划
电子证书主要目的为让网络交易双方创建信赖关系,其法律效力在于内含之数字签名,而非证书本身;证书只在确认此数字签名的正确性与用户身份真实性。电子证书内含密码学技术,且由具公信力的CA所核发,其安全性不置可否。然而,若将证书与其他应用一起使用,例如同时作为企业内部管理的功能,则必须考虑可能造成的风险。企业在应用电子证书时,应有完整的风险规划,例如证书的选择、CA的选择、了解证书应用范围的限制、了解证书服务契约之赔偿责任、利用各项功能或机制(如黑名单机制、在线证书状态查询等)控制交易风险等。如此,才能在不逾越证书使用范围的法律效力下,适度做好交易风险控管,达到证书最终目的。
工商证书应用服务
继自然人证书后,中华民国经济部刻正推动公司行号之工商证书,亦即签发公司行号证书IC卡,作为企业与政府之间的网络身份证,提供各项安全的网络申办服务。现阶段应用包括工商登记、领投标、公司报税、劳保加退保等等,后续将朝向文件(如誊本)申请之电子化目标迈进,一方面减少各项文书使用量,一方面提供公司及政府单位便利的在线作业,简化整体申办流程,为另一项电子化政府服务。
一般电脑用户服务
PKI对我们日常生活有何影响呢?最主要看用户对信息安全的需求程度而定;换句话说,只要对“资料身份识别”、“交易资料完整”、“交易不可否认”或“保密”等其中之一有所需求,就可以使用PKI。以社区管理为例,管理委员会挨家挨户向住户发送通知单或收取管理费,相当耗费时间与人力;如果以e-mail或在线缴费就方便多了。住户透过网络运用电子证书缴费,就是使用 PKI 当中的“身份识别”与“交易不可否认”等功能–在整个过程中,管理委员会就能够依证书识别用户的身份,而用户也不能否认其缴费动作。
PKI的应用范围不仅于此,例如目前流行的网络银行或网络下单等服务,都必须仰赖PKI机制并配合使用电子签名所给予之法律地位,以确保交易双方交易记录的存在(“交易资料完整”与“交易不可否认”)与身份确认,使业者与消费者的权益都受到保障、以及利用网络达到安全传递信息的目的。
日常生活中会接触到的PKI应用还包括网络报税、高速公路收费自动化智能卡、电子邮件加密签名、上网购物、与大楼门禁系统等。
PKI 要点
采验证服务器架构
可否离线作业,加快验证速度
是否提供重要之审核纪录
运算性能
支持操作系统
支持多证书及智能卡
支持各种证书内容解解析
存证功能
集成繁琐度
是否一体适用
黑名单的机制
AP支持弹性
支持应用程序语言
签名功能
对称式加解密之功能
非对称式加密算法
数字签名
数字签名(英语:Digital Signature,又称公钥数字签名)是一种功能类似写在纸上的普通签名、但是使用了公钥加密领域的技术,以用于鉴别数字信息的方法。一套数字签名通常会定义两种互补的运算,一个用于签名,另一个用于验证。法律用语中的电子签章与数字签名代表之意义并不相同。电子签章指的是依附于电子文件并与其相关连,用以辨识及确认电子文件签署人身份、资格及电子文件真伪者;数字签名则是以数学算法或其他方式运算对其加密而形成的电子签章。意即并非所有的电子签章都是数字签名。
数字签名不是指将签名扫描成数字图像,或者用触摸板获取的签名,更不是落款。数字签名了的文件的完整性是很容易验证的(不需要骑缝章、骑缝签名,也不需要笔迹鉴定),而且数字签名具有不可抵赖性(即不可否认性),不需要笔迹专家来验证。
在中国数字签名是具法律效力的,正在被普遍使用。2000年,中华人民共和国的新《合同法》首次确认了电子合同、电子签名的法律效力。2005年4月1日起,中华人民共和国首部《电子签名法》正式实施。
每个人都有一对“钥匙”(数字身份),其中一个只有本人知道(私钥),另一个公开的(公钥)。签名的时候用私钥,验证签名的时候用公钥。又因为任何人都可以落款申称他就是使用者本人,因此公钥必须向接受者信任的人(身份认证机构)来注册。注册后身份认证机构给使用者发一数字证书。对文件签名后,使用者把此数字证书连同文件及签名一起发给接受者,接受者向身份认证机构求证是否真地是用使用者的密钥签发的文件。
信息发布者可以使用数字签名:信息发布的目的是让人们知道信息,虽然没必要对消息进行加密,但是必须排除有人伪装信息发布者发布假消息的风险,这时信息发布者就可以使用数字签名。而对明文消息施加的签名,称为明文签名(clearsign)。
软件的作者可以加上数字签名,以便用户下载后对签名进行验证。
认证机构(CA)也可以为用户的公钥加上数字签名生成证书,以便人们确认用户公钥的合法性。
SSL/TLS使用服务器证书(加上了数字签名的服务器公钥)认证服务器身份是否合法。
原理
通常我们使用公钥加密,用私钥解密。而在数字签名中,我们使用私钥加密(相当于生成签名),公钥解密(相当于验证签名)。可以直接对消息进行签名(即使用私钥加密,此时加密的目的是为了签名,而不是保密),验证者用公钥正确解密消息,如果和原消息一致,则验证签名成功。但通常我们会对消息的散列值签名,因为通常散列值的长度远小于消息原文,使得签名(非对称加密)的效率大大提高。注意,计算消息的散列值不是数字签名的必要步骤。

简单的数字签名原理
在实际使用中,我们既想加密消息,又想签名,所以要对加密和签名组合使用,比如TLS就组合了加密和签名。
数字签名应用了公钥密码领域使用的单向函数原理。单向函数指的是正向操作非常简单,而逆向操作非常困难的函数,比如大整数乘法。这种函数往往提供一种难解或怀疑难解的数学问题。目前,公钥密码领域具备实用性的三个怀疑难解问题为:质数分解,离散对数和椭圆曲线问题。
数字签名就是将公钥密码反过来使用。签名者将讯息用私钥加密,然后公布公钥;验证者使用公钥将加密讯息解密并比对消息(一般签名对象为消息的散列值。这里为了讲解方便,假设数字签名直接将消息而非散列值签名)。

生成数字签名并加密以及解密并验证数字签名
因此,可靠的公钥密码算法均能构建出可靠的数字签名。下面讲解为何反用公钥密码算法能够构建出安全的数字签名。
Alice是签名者,假设她要对消息A进行签名。现在Alice生成了其公私钥密码对,公布该公钥,然后将消息用私钥加密后发布。现在我们希望Alice的签名算法具有如下特性:
1,确认消息在传输过程中没有丢位,没被篡改(完整性)
2,确认消息的发送者是发布公钥的Alice(认证)
3,确认Alice的确发布过该消息(不可否认性)
实现
数字签名算法是依靠公钥加密技术来实现的。在公钥加密技术里,每一个使用者有一对密钥:一把公钥和一把私钥。公钥可以自由发布,但私钥则秘密保存;还有一个要求就是要让通过公钥推算出私钥的做法不可能实现。
普通的数字签名算法包括三种算法:
一种密码生成算法
标记算法
验证算法
RSA、ECDSA等算法可以实现数字签名。常用的密码杂凑函数有SHA家族。
数字证书认证机构
数字证书认证机构(英语:Certificate Authority,缩写为CA),也称为电子商务认证中心、电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。在SET交易中,CA不仅对持卡人、商户发放证书,还要对获款的银行、网关发放证书。
CA是证书的签发机构,它是公钥基础设施的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。CA也拥有用户的证书(内含公钥)和私钥。网上的公众用户通过验证CA的签名从而信任CA,任何人都可以得到CA的证书(含公钥),用以验证CA所签发的证书。
用户若欲获取证书,应先向CA提出申请,CA判明申请者的身份后,为之分配一个公钥,并将该公钥与其身份信息绑定,为该整体签名,签名后的整体即为证书,发还给申请者。如果一个用户想鉴别另一个证书的真伪,他就用CA的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。
为保证用户之间在网上传递信息的安全性、真实性、可靠性、完整性和不可抵赖性,不仅需要对用户的身份真实性进行验证,也需要有一个具有权威性、公正性、唯一性的机构,负责向电子商务的各个主体颁发并管理符合国际安全电子交易协议标准的电子商务安全证,并负责管理所有参与网上交易的个体所需的数字证书,因此CA是安全电子交易的核心环节。
证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普遍遵循X.509国际标准。
加密:CA认证将文字转换成不能直接阅读的形式(即密文)的过程称为加密。
解密:将密文转换成能够直接阅读的文字(即明文)的过程称为解密。
如打算在电子文档上实现签名的目的,可使用数字签名。RSA公钥体制可实现对数字信息的数字签名,方法如下:
信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在传递过程中未被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。
在数字签名中有重要作用的数字指纹是通过一类特殊的散列函数(HASH函数)生成的。对这些HASH函数的特殊要求是:
接受的输入报文数据没有长度限制;
对任何输入报文数据生成固定长度的摘要(数字指纹)输出;
从报文能方便地算出摘要;
难以对指定的摘要生成一个报文,而由该报文可以算出该指定的摘要;
两个不同的报文难以生成具有相同的摘要。
数字证书为实现双方安全通信提供电子认证。在因特网、公司内、外部网中,使用数字证书实现身份识别和电子信息加密。数字证书中含有密钥对(公钥和私钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。身份认证机构是人们注册公钥的机构。注册之后,身份认证机构就向注册者发一数字证书,也就是说在注册者的数字身份证上加签。服务有免费也有收费。身份认证机构也可以是一个自然人,就如PGP和GPG系统所倡导的。
数字签名算法介绍和区别
数字签名是一个带有密钥的消息摘要算法,这个密钥包括了公钥和私钥,用于验证数据完整性、认证数据来源和抗否认,遵循OSI参考模型、私钥签名和公钥验证。也是非对称加密算法和消息摘要算法的结合体,常见的数字签名算法主要有RSA、DSA、ECDSA三种,本节对数字签名算法进行介绍。
Hash又译散列、摘要等名,下面统一称为哈希。
1. RSA数字签名算法
RSA是目前计算机密码学中最经典算法,也是目前为止使用最广泛的数字签名算法,RSA数字签名算法的密钥实现与RSA的加密算法是一样的,算法的名称都叫RSA。密钥的产生和转换都是一样的,包括在售的所有SSL数字证书、代码签名证书、文档签名以及邮件签名大多都采用RSA算法进行加密。
RSA数字签名算法主要包括MD和SHA家族的两种算法,例如熟知的MD5和SHA-256即是这两种算法中的一类,具体如下。
1.1. MD2、MD4、MD5算法
最常见的是我们熟知的MD5加密算法,MD5全称Message-Digest Algorithm 5(信息-摘要算法 5),目前比较普遍的Hash算法,是散列算法的基础原理,MD5的前身有MD2、MD3和MD4。MD5算法法是输入任意长度字符,输出固定长度128位的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128位Hash值,主要方式是通过求余、取余、调整长度、与链接变量进行循环运算进而得出结果。
1.2. SHA-1算法
SHA-1是由NIST NSA设计为同DSA一起使用的,SHA-1设计时基于和MD4相同原理,并且模仿了该算法,SHA-1抗穷举(brute-force)性更好,它产出160位的Hash值,对于非线性运算、移位和加法运算也与MD5类似。SHA-1也应用于包括TLS和SSL、PGP、SSH、S/MIME和IPsec等多种协议中,曾被视为是MD5的后继者。SHA-1的如今已经明确不具备安全性了。
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
在2016年1月1日后基于SHA-1签发的SSL和代码签名的X.509证书已不具备安全性可言,多个操作系统、浏览器都建议将基于SHA-1而签发的证书、代码签名替换至SHA-2的产品,已官方停止更新的Windows XP上只兼容基于SHA-1算法的SSL和代码签名产品。在2017年2月23日Google宣布实现了对SHA-1算法的碰撞破解,所以SHA-1算法已经正式被宣布为不安全的算法,主流厂商对自身产品及安全要求都提升至了SHA-2算法。
1.3. SHA-2算法
SHA-224、SHA-256、SHA-384和SHA-512并称为SHA-2,发布于2001年,目前比较广泛应用的SSL数字证书和代码签名证书签名算法均采用SHA-256算法,相较于SHA-1算法而言,至今SHA-2算法还未被破解,从某种意义上SHA-2延用了SHA-1算法,所以至少发文时间起是安全的。目前顶级CA和Google、苹果等公司都采用基于SHA-256算法作为SSL证书和代码签名证书的主流签名算法。SHA256算法使用的哈希值长度是256位。
1.4. SHA-3算法
SHA-3算法正式发布于2015年,SHA-3并不是要取代SHA-2,因为SHA-2目前并没有出现明显的弱点。由于对MD5、SHA-0和SHA-1出现成功的破解,NIST感觉需要一个与之前算法不同的,可替换的加密Hash算法,也就是现在的 SHA-3。
2. DSA数字签名算法
DSA全称Digital Signature Algorithm,DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,所以它比RSA要快很多,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。

数字签名原理图
DSA的整个签名算法流程如下:
a. 发送方使用SHA-1和SHA-2编码将发送内容加密产生的数字摘要;
b. 发送方用自己的专用密钥对摘要进行再次加密得到数字签名;
c. 发送方将原文和加密后的摘要传给接收方;
d. 接收方使用发送方提供的密钥对进行解密 ,同时对收到的内容用SHA-1/SHA-2编码加密产生同样的摘要;
e. 接收方再将解密后的摘要和d步骤中加密产生的摘要进行比对,如果两者一至,则说明传输过程的信息没有被破坏和篡改,否则传输信息则不安全。
3. ECDSA椭圆曲线数字签名算法
ECDSA是用于数字签名,是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC,最后签名出来的值也是分为r,s。而ECC(全称Elliptic Curves Cryptography)是一种椭圆曲线密码编码学。
ECDH每次用一个固定的DH key,导致不能向前保密(forward secrecy),所以一般都是用ECDHE(ephemeral)或其他版本的ECDH算法。ECDH则是基于ECC的DH( Diffie-Hellman)密钥交换算法。
ECC与RSA 相比,有以下的优点:
a. 相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度。
b. 计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。
c. 存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。
d. 带宽要求低使得ECC具有广泛得应用前景。
下表是ECC和RSA安全性比较
攻破时间(MIPS年)RSA/DSA(密钥长度)ECC密钥长度RSA/ECC密钥长度比
1045121065:11087681326:1101110241607:11020204821010:110782100060035:1
在 ECDHE 密钥交换中,服务端使用证书私钥对相关信息进行签名,如果浏览器能用证书公钥验证签名,就说明服务端确实拥有对应私钥,从而完成了服务端认证。密钥交换和服务端认证是完全分开的。
可用于 ECDHE 数字签名的算法主要有 RSA 和 ECDSA,也就是目前密钥交换 + 签名有三种主流选择:
RSA 密钥交换(无需签名);
ECDHE 密钥交换、RSA 签名;
ECDHE 密钥交换、ECDSA 签名;
4. 小结
对于SSL数字证书和代码签名证书以及其它非对称加密产品来说,RSA目前普及度最高,以SHA-256签名算法最广,对于更高级基于ECC签名算法是需要对证书请求文件CSR和根证书都有相应的使用环境要求。