数字证书原理与应用概要介绍
目录基础知识-加密算法数字证书的简介数字证书的分类数字证书特点证书的存储数字证书的功能数字证书的应用
数字世界的信息安全要素?Claims未发出未收到Privacy(保密性)Integrity(完整性)Authentication&Authorization(鉴别与授权)Non-Repudiation(抗抵赖)拦截篡改伪造确认信息的保密,不被窃取确保你收到信息没有被篡改确认对方的身份并确保其不越权有证据保证交易或者其他操作不被否认
数字世界的信息安全要素信任类型现实世界数字世界身份认证(鉴别与授权)身份证、护照、信用卡、驾照数字证书、数字签名完整性签名、支票、第三方证明数字签名保密性保险箱、信封、警卫、密藏加密不可否认性签名、挂号信、公证、邮戳数字签名
加密和密钥简介用密钥加密数据,保证它在传输和保存过程中的完整性和真实性。加密算法是用来改变原始数据的方法。(字段移位,对称加密算法)。密钥是使加密过程中得出一个唯一结果的变量。
加密简介A=MN=ZB=NO=AC=OP=B输入=JITCAD=PQ=CE=QR=D加密算法=字母右移F=RS=EG=ST=F密钥=12H=TU=GI=UV=H输出=VUFOMJ=VW=IK=WX=JL=XY=KM=YZ=L
加密与密钥加密算法密钥数据加密对象#?r8=1krr#@……结果密钥是同加密算法匹配长度的随机数,如果算法是128位的加密算法,那么密钥的长度就是128位。密钥越长,加密数据需要的处理能力就越强,但是得到的加密结果的强度越高。
好的加密算法的必要属性无需保密安全性只依赖于密钥的长度
解决网络安全的基础__密码技术DigitalCertificate密码技术对称算法共享密钥非对称算法公共/私有密钥对组合密码技术摘要算法数字签名技术算法的结合使用
加密算法介绍根据密钥类型不同将现代密码技术分为两类:对称加密算法和非对称加密算法对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的秘密。非对称密钥加密系统采用的加密钥匙(公钥)和解密钥匙(私钥)是不同的。
对称加密算法明文密文Alice明文BobEncryptDecrypt对称密钥(A&B共享)HiBobAliceHiBobAliceC=E(M,K)M=D(C,K)C=密文M=明文K=密钥E=加密算法!!??乱码信息偷听者aN!3q*nB5+C=密文M=明文K=密钥D=解密算法在两个通讯者之间需要一把共享的密钥
对称加密算法性能:速度快密钥管理:共享密钥(密钥的保密传输)密钥数目多,不好管理(大约以参与者数目的平方的速度增长)常用于:快速的加密/解密加密算法:DES、3-DES、SSF33、IDEA、AES、RC2、RC4
对称加密算法DES(DataEncryptionStandard):数据加密标准,速度较快,适用于加密大量数据的场合。3DES(TripleDES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。AES(AdvancedEncryptionStandard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;
非对称加密算法_公开密钥算法用户甲拥有两个对应的密钥用其中一个加密,只有另一个能够解密,两者一一对应用户甲将其中一个私下保存(私钥),另一个公开发布(公钥)如果乙想送秘密信息给甲乙获得甲的公钥乙使用该公钥加密信息发送给甲甲使用自己的私钥解密信息
非对称加密算法明文明文HiBobAliceB的私钥B的公钥CiphertextAliceBob加密解密HiBobAliceHiBobAliceHiBobAliceA发送机密信息给B,知道只有B可以解密A用B的公钥加密(公开)B使用自己的私钥解密(保密)
非对称加密算法性能:效率较慢–不适用于大量的数据加密密钥管理:公钥可以公开、分布式存放常用于:加密数字签名密钥交换加密算法:RSA、ECC、Diffie-Hellman、DSA
非对称加密算法RSA:由RSA公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;DSA(DigitalSignatureAlgorithm):数字签名算法,是一种标准的DSS(数字签名标准);ECC(EllipticCurvesCryptography):椭圆曲线密码编码学。
非对称算法的问题速度慢、资源占用明显不适合做大数据量数据加密处理
散列算法(hash算法、摘要算法)Hashingalgorithm信息摘要D421F53D229ACCB73CAAE2DC121AA1CBData特性:不可逆对任何长度的信息进行哈希后,结果都是一个固定长度的数据摘要,摘要的长度通常为128bits或160bits原始信息中一个字节的改变会导致摘要后的结果发生变化常用算法:MD5,SHA-1
散列算法MD5(MessageDigestAlgorithm5):是RSA数据安全公司开发的一种单向散列算法。SHA(SecureHashAlgorithm):可以对任意长度的数据运算生成一个160位的数值;
散列算法
公钥密码体制(public-keycryptography)公钥密码体制分为三个部分,公钥、私钥、加密解密算法,它的加密解密过程如下:加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。加密过程需要用到公钥。解密:通过解密算法和私钥对密文进行解密,得到明文。解密过程需要用到解密算法和私钥。注意,由公钥加密的内容,只能由私钥进行解密,也就是说,由公钥加密的内容,如果不知道私钥,是无法解密的。公钥密码体制的公钥和算法都是公开的(这是为什么叫公钥密码体制的原因),私钥是保密的。大家都以使用公钥进行加密,但是只有私钥的持有者才能解密。在实际的使用中,有需要的人会生成一对公钥和私钥,把公钥发布出去给别人使用,自己保留私钥。
一个加密通信过程的演化第一回合:“客户”->“服务器”:你好“服务器”->“客户”:你好,我是服务器“客户”->“服务器”:????因为消息是在网络上传输的,有人可以冒充自己是“服务器”来向客户发送信息。例如上面的消息可以被黑客截获如下:“客户”->“服务器”:你好“服务器”->“客户”:你好,我是服务器“客户”->“黑客”:你好“黑客”->“客户”:你好,我是服务器黑客在“客户”和“服务器”之间的某个路由器上截获“客户”发给服务器的信息,然后自己冒充“服务器”因此“客户”在接到消息后,并不能肯定这个消息就是由“服务器”发出的,某些“黑客”也可以冒充“服务器”发出这个消息。如何确定信息是由“服务器”发过来的呢?有一个解决方法,因为只有服务器有私钥,所以如果只要能够确认对方有私钥,那么对方就是“服务器”。因此通信过程可以改进为如下:
一个加密通信过程的演化第二回合:“客户”->“服务器”:你好“服务器”->“客户”:你好,我是服务器“客户”->“服务器”:向我证明你就是服务器“服务器”->“客户”:你好,我是服务器{你好,我是服务器}[私钥|RSA]{}表示RSA加密后的内容,[|]表示用什么密钥和算法进行加密,后面的示例中都用这种表示方式,例如上面的{你好,我是服务器}[私钥|RSA]就表示用私钥对“你好,我是服务器”进行加密后的结果。“客户”收到信息后,她用自己持有的公钥解密密文,和明文进行对比,如果一致,说明信息的确是由服务器发过来的。也就是说“客户”把{你好,我是服务器}[私钥|RSA]这个内容用公钥进行解密,然后和“你好,我是服务器”对比。因为用“服务器”用私钥加密后的内容,由并且只能由公钥进行解密,私钥只有“服务器”持有,所以如果解密出来的内容是能够对得上的,那说明信息一定是从“服务器”发过来的。
一个加密通信过程的演化假设“黑客”想冒充“服务器”:“黑客”->“客户”:你好,我是服务器“客户”->“黑客”:向我证明你就是服务器“黑客”->“客户”:你好,我是服务器{你好,我是服务器}[???|RSA]//这里黑客无法冒充,因为他不知道私钥,无法用私钥加密某个字符串后发送给客户去验证。“客户”->“黑客”:????由于“黑客”没有“服务器”的私钥,因此它发送过去的内容,“客户”是无法通过服务器的公钥解密的,因此可以认定对方是个冒牌货!到这里为止,“客户”就可以确认“服务器”的身份了,可以放心和“服务器”进行通信,但是这里有一个问题,通信的内容在网络上还是无法保密。为什么无法保密呢?通信过程不是可以用公钥、私钥加密吗?其实用RSA的私钥和公钥是不行的,我们来具体分析下过程,看下面的演示:
一个加密通信过程的演化第三回合:“客户”->“服务器”:你好“服务器”->“客户”:你好,我是服务器“客户”->“服务器”:向我证明你就是服务器“服务器”->“客户”:你好,我是服务器{你好,我是服务器}[私钥|RSA]“客户”->“服务器”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}[公钥|RSA]“服务器”->“客户”:{你的余额是100元}[私钥|RSA]注意上面的的信息{你的余额是100元}[私钥],这个是“服务器”用私钥加密后的内容,但是我们之前说了,公钥是发布出去的,因此所有的人都知道公钥,所以除了“客户”,其它的人也可以用公钥对{你的余额是100元}[私钥]进行解密。所以如果“服务器”用私钥加密发给“客户”,这个信息是无法保密的,因为只要有公钥就可以解密这内容。然而“服务器”也不能用公钥对发送的内容进行加密,因为“客户”没有私钥,发送个“客户”也解密不了。这样问题就又来了,那又如何解决呢?在实际的应用过程,一般是通过引入对称加密来解决这个问题,看下面的演示:
一个加密通信过程的演化第四回合:“客户”->“服务器”:你好“服务器”->“客户”:你好,我是服务器“客户”->“服务器”:向我证明你就是服务器“服务器”->“客户”:你好,我是服务器{你好,我是服务器}[私钥|RSA]“客户”->“服务器”:{我们后面的通信过程,用对称加密来进行,这里是对称加密算法和密钥}[公钥|RSA]//蓝色字体的部分是对称加密的算法和密钥的具体内容,客户把它们发送给服务器。“服务器”->“客户”:{OK,收到!}[密钥|对称加密算法]“客户”->“服务器”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}[密钥|对称加密算法]“服务器”->“客户”:{你的余额是100元}[密钥|对称加密算法]
一个加密通信过程的演化总结一下,RSA加密算法在这个通信过程中所起到的作用主要有两个:因为私钥只有“服务器”拥有,因此“客户”可以通过判断对方是否有私钥来判断对方是否是“服务器”。客户端通过RSA的掩护,安全的和服务器商量好一个对称加密算法和密钥来保证后面通信过程内容的安全。但是这里还留有一个问题,在最开始我们就说过,“服务器”要对外发布公钥,那“服务器”如何把公钥发送给“客户”呢?我们第一反应可能会想到以下的两个方法:a)把公钥放到互联网的某个地方的一个下载地址,事先给“客户”去下载。b)每次和“客户”开始通信时,“服务器”把公钥发给“客户”。
一个加密通信过程的演化“客户”->“黑客”:你好//黑客截获“客户”发给“服务器”的消息“黑客”->“客户”:你好,我是服务器,这个是我的公钥//黑客自己生成一对公钥和私钥,把公钥发给“客户”,自己保留私钥“客户”->“黑客”:向我证明你就是服务器“黑客”->“客户”:你好,我是服务器{你好,我是服务器}[黑客自己的私钥|RSA]//客户收到“黑客”用私钥加密的信息后,是可以用“黑客”发给自己的公钥解密的,从而会误认为“黑客”是“服务器”这里问题的根源就在于,大家都可以生成公钥、私钥对,无法确认公钥对到底是谁的。
一个加密通信过程的演化为了解决这个问题,数字证书出现了,它可以解决我们上面的问题。先大概看下什么是数字证书,一个证书包含下面的具体内容:Issuer证书的发布机构Validfrom,Validto证书的有效期Publickey公钥Subject证书所有者(Subject)Signaturealgorithm签名所使用的算法Thumbprint,Thumbprintalgorithm指纹以及指纹算法数字证书可以保证数字证书里的公钥确实是这个证书的所有者(Subject)的,或者证书可以用来确认对方的身份。
一个加密通信过程的演化第五回合:“客户”->“服务器”:你好“服务器”->“客户”:你好,我是服务器,这里是我的数字证书//这里用证书代替了公钥“客户”->“服务器”:向我证明你就是服务器“服务器”->“客户”:你好,我是服务器{你好,我是服务器}[私钥|RSA]注意,上面第二次通信,“服务器”把自己的证书发给了“客户”,而不是发送公钥。“客户”可以根据证书校验这个证书到底是不是“服务器”的,也就是能校验这个证书的所有者是不是“服务器”,从而确认这个证书中的公钥的确是“服务器”的。后面的过程和以前是一样,“客户”让“服务器”证明自己的身份,“服务器”用私钥加密一段内容连同明文一起发给“客户”,“客户”把加密内容用数字证书中的公钥解密后和明文对比,如果一致,那么对方就确实是“服务器”,然后双方协商一个对称加密来保证通信过程的安全。
一个加密通信过程的演化证书的发布机构发布证书时,证书的指纹和指纹算法,会用证书发布机构的私钥加密后再和证书放到一起发布。也就是说证书发布机构也有自己的证书。证书发布机构的证书被安装到操作系统中。客户与服务器通信时,服务器会发送给客户一个证书,客户要验证证书的真伪,客户系统的应用程序会根据证书中的发布机构从操作系统中找受信任的发布机构,如果没有,则说明该证书不受信任,有问题,如果找到了,那么应用程序就会从发布机构的证书中取出公钥,对客户获得的证书的指纹和指纹算法用公钥进行解密,然后用指纹算法对证书计算指纹,如果计算的指纹与放在证书的指纹一致,说明证书没有被修改过,是由该发布机构发布的证书,而且该证书的公钥的确是服务器的。
一、数字证书简介数字证书就是网络通讯中标志通讯各方身份信息的一系列数据,其作用类似于现实生活中的身份证。它是由一个权威机构发行的,人们可以在交往中用它来识别对方的身份。数字证书又称为CA证书,好比一张网络用户的“身份证”,由权威的、可信赖的、公正的第三方信任机构即CA认证机构发行;数字证书的应用,确保了网上传递信息的机密性、完整性,以及网上交流双方身份的真实性,签名信息的不可否认性;数字证书的应用,能够解决随着我国社会信息化程度的提高带来的系列信息安全和可信任问题。
数字证书原理数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。
二、数字证书的分类基于数字证书的应用角度分类,数字证书可以分为以下几种:服务器证书:服务器证书被安装于服务器设备上,用来证明服务器的身份和进行通信加密。服务器证书可以用来防止假冒站点。电子邮件证书:电子邮件证书可以用来证明电子邮件发件人的真实性。它并不证明数字证书上面CN一项所标识的证书所有者姓名的真实性,它只证明邮件地址的真实性。客户端个人证书:客户端证书主要被用来进行身份验证和电子签名。
数字证书的生命周期CARAEndEntityDirectoryServices证书申请密钥备份与恢复证书过期证书吊销证书发布证书生成
三、数字证书特点“一人一证、一机一证”-实现全局一致的信任机制;双证书体制-数字证书采用双证书机制,将用户的签名密钥对与加密密钥对分离。为方便用户使用,双证书机制将两个证书封装在一起;有效授权-将特定的系统角色与数字证书的ID号绑定。
四、证书的存储存储设备硬盘软盘IC卡智能设备USBKey
数字证书的存储载体(Keynet)
五、数字证书的功能身份认证数据加密、解密数字签名、验签时间戳服务
功能:验证用户身份的合法性,解决系统的信任关系。5.1身份认证
5.2数据加密、解密功能:对客户端与服务器端之间传送敏感数据进行加解密,保证数据传输过程的安全性。
5.3数字签名、验签功能:对敏感操作进行数字签名,确保数据完整性和操作的不可抵赖性。
数字签名签名在信息的后面再加上一段内容,可以证明信息没有被修改过,怎么样可以达到这个效果呢?一般是对信息做一个hash计算得到一个hash值,注意,这个过程是不可逆的,也就是说无法通过hash值得出原来的信息内容。在把信息发送出去时,把这个hash值加密后做为一个签名和信息一起发出去。接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过,因为这里hash计算可以保证不同的内容一定会得到不同的hash值,所以只要内容一被修改,根据信息内容计算的hash值就会变化。
数字签名数字签名是用签名方的私钥对原始信息采取不可逆的单向散列算法提取出的一串唯一特征码(称为:信息摘要)进行加密的一个过程,这个过程所得到的密文即称为签名信息。
数字签名明文AliceBobA的私钥HiBobAliceA的公钥摘要哈希函数gJ39vzamp4xOurjj9rRr%9$数字签名HiBobAlice明文Ourjj9rRr%9$数字签名HiBobAlice明文gJ39vzamp4x新摘要哈希函数gJ39vzamp4x=?相同1、没有篡改2、是Alice发送的1234567
加密和数字签名结合
5.4时间戳服务功能:对某些特殊数据用权威的时间源进行签名,保证数据的可靠性和不可抵赖性。
六、数字证书的应用电子政务:包括公共事业、金融服务业、工商税务海关、政府行政办公、教育科研单位、保险、医疗等网上作业系统。电子商务:包括传统的商业、制造业、流通业的网上交易。
七、数字证书的应用办法构建数字证书审核注册服务中心RA。通过RA向用户发放证书。通过可信中间件的调度来实现认证与安全。与应用系统的结合起来,解决电子政务系统中的各种安全可信问题。
证书签发与应用流程KM中心CA中心RA中心应用支撑平台证书签发LDAP服务密钥生成存储、托管证书受理、发放安全中间件应用系统证书用户OCSP服务证书申请生成密钥证书发放
CertificationAuthority–CA证书签发系统发布本地CA策略对下级机构进行认证和鉴别产生和管理下属机构的证书接收和认证RA证书请求签发和管理证书、CRL发布证书CRL(CertificateRevocationList)证书吊销列表密钥安全生成及管理交叉认证RA受理点受理点RA受理点CA受理点KMC
RegistrationAuthority-RA证书注册系统进行用户身份信息的审核,确保其真实性;本区域用户身份信息管理和维护;数字证书的下载;数字证书的发放和管理登记黑名单RA受理点受理点RA受理点CA受理点KMC
密钥管理中心-KMC密钥的生成密钥的分发密钥的备份密钥的恢复密钥的更新密钥的归档密钥查询密钥销毁RA受理点受理点RA受理点CA受理点KMC
案例:网上银行业务应用