来源:数字签名,数字证书,证书链原理(图文详解)_Ruby丶彬的博客-CSDN博客_证书链验证原理
数字签名,数字证书,加密简述
数字签名:谈及数字签名,就如小时候老师叫把卷子或者作业带回去给家长签字。只不过数字签名非物理用笔签名,是通过计算机电子签名,这过程就涉及身份认证和信息加密。
例如:卷子的成绩考个0分等信息是不希望被其他人知道的就需要加密(信息加密);家长对卷子签字,需要对卷子作实名认证,证实确实是自己孩子而非他人的卷子(身份认证)。
数字证书:数字证书是用来认证公钥持有者身份合法性的电子文档,以防止第三方冒充行为。由CA证书授权中心颁发。
加密:顾名思义,就是对数据通过一些算法进行数据加密
对称加密算法: 加密和解密的密钥使用的是同一个,如DES,3DES,AES
非对称加密算法: 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥和私有密钥。A对B通信,A对数据用A的私钥加密,B就可以用A的公钥进行解密得到原数据。如RSA,DSA,ECC
业务场景:签合同,以前签合同都是纸质的合同,然后用笔签。这种方式需要线下面对面签署,实在不方便,因此数字签名的优势就逐渐体现出来。
数字签名原理
A对B数字签名通信流程
1.A先用Hash函数,对通信data生成通信data的摘要(digest)
2.A使用A的私钥,对这个摘要加密,生成数字签名(signature)。
3.A把signature附在通信data上
4.A把signature附在通信data的数据发给B
5.B用A的公钥对signature解密,解密成功则证明data是由A发出的(身份验证)
6.B对通信data采用同样的hash算法,若生成的digest与原digest相同,则证明通信data未被篡改(信息加密防篡改)
数字证书原理
上述第五步:5.B用A的公钥对signature解密,解密成功则证明data是由A发出的(身份验证)。那么
如何证明B手上的A的公钥,是真的A的公钥呢?若是其他人匿名顶替的A的公钥,此时就有安全问题,那么解决这个问题就有了数字证书。A向CA证书中心对A的公钥进行认证。
1.A向CA申请证书,CA证书中心用CA的私钥给A的信息,A的公钥,证书信息加密生成数字证书
2.A将数字证书与signature同时附在Data上发送B
3.B用CA公钥解密数字证书拿到A的公钥(解密成功则此公钥为A的)
4.B用解密后的A的公钥解密签名signature,生成原digest信息摘要。(解密成功则此信息是A发出的)
5.B对通信data采用同样的hash算法,若生成的digest与原digest相同,则证明通信data未被篡改(信息加密防篡改)
证书链
证书链:顾名思义,就是一系列的证书信任链条。上述通过数字证书证实A的公钥确实是A的,那么如何证实这个数字证书是否可信呢?或者说颁发这个证书的权威机构是否可信呢?
证书有3类:
end-user :最下层的签发人。包含用来加密传输数据的公钥的证书,访问者通过此公钥加密传输数据
intermediates:次等级的签发人。CA用来认证公钥持有者身份的证书,确认end-user证书是属于某个权威机构的证书。
root:最高级别的签发人,负责认证intermediates证书是合法证书的证书。此类是无条件信任的。
证书链指的是通过层级结构最终保证end-user证书中的公钥未被篡改。root认证intermediates,intermediates认证end-user。