数字证书、数据签名、数据加密的关系
不讲太专业的术语,讲一下这几个关系,以及在通讯时数据加密的过程。
-
概念:
数据加密,就是用密钥通过一定的算法将信息数据进行转换,让窃取到的一方拿到也不知道是什么内容。加密分为单向加密(只可加密不可解密,用来做数据验证,验证是否被篡改)、对称加密和非对称加密。对称加密的加密密钥和解密密钥都是同一个密钥,非对称加密是利用密钥对(公钥和私钥,其实公钥是从私钥中提取出来的)加密解密数据,公钥可以解密私钥加密的信息,私钥也可以解密公钥加密的信息。生成密钥对后,都是把公钥公开给对方。非对称加密的方式比对称加密的方式安全性高,但是效率低,耗性能。数据加密的目的是为了保证数据的安全性。数据签名,也叫数据指纹(这就是单向加密的应用),通过一定的算法(如MD5),对数据进行计算提取特征码,得出的结果是独一无二的一段字符串(MD5值)。数据签名常被放在数据的后面一起被发送。这样数据的接收方接收到数据后,解密后先用同样的算法对数据计算签名,计算结果如果和附加在数据后面的签名一致,那么表明数据没有被串改过。如果数据传递的过程中受信号干扰或者被人恶意串改,那么接收方计算出的数据签名就会和附加在数据后面的原签名不一致,就会弃用数据。当然数据和数据签名同时被人串改的另当别论。数据签名的目的是保证数据的完整性。
数字证书,当服务器S生成一对密钥,并将公钥发送给对方客户端B时,对方B无法确认该公钥的真实性,到底是S的公钥还是黑客X发送的自己的公钥呢,所以需要第三方认证机构。
数字证书是由权威机构——CA证书授权(Certificate Authority)中心发行的,能提供在Internet上进行身份验证的一种权威性电子文档,人们可以在因特网交往中用它来证明自己的身份和识别对方的身份。
S将自己的公钥和相关的身份信息(比如网址域名之类的)提交给CA证书颁发机构,机构核实后将S的身份信息和公钥进行计算出数字签名,并对该签名用CA机构自己的私钥进行加密,然后将这些信息和加密后的数字签名放在一起,形成S的数字证书颁发给S(数字证书包含版本、序列号、签名算法标识符、签发人姓名、有效期、主体名和主体公钥信息等并附有CA的签名,用户获取网站的数字证书后通过验证CA的签名来确认数字证书的有效性,从而验证网站的真伪)。
客户机B在访问服务器S的时候,S在给客户机一开始发送的时候,不是直接发送自己的公钥给对方,而是发送自己的证书给对方。客户机B通过CA机构的自己的根证书(由CA机构提供给浏览器厂商,所以浏览器在安装后就已存入该证书,该证书中有CA机构自己的公钥)中的公钥解密该出证书的信息的数字签名,然后对信息进行数字签名的校验,无误后取出其中的S的公钥。所以数字证书的主要作用就是身份确认,确认客户机B能拿到的服务器公钥确实是S的,而没有被别人冒传。
信息加密传输过程
-
证书申请和验证过程
image.png
如图
1 、首先网站服务器S在自己电脑上生成密钥对,并将公钥和自己网站的信息发送给CA机构去做验证(申请证书)。CA机构在确认了该网站的真实性后,会对该网站信息的数据(包含S公钥等)以及其它信息(比如证书的有效期以及发证机构等)进行MD5指纹提取,并用自己的私钥对指纹进行加密(注意,只是对数据指纹进行了加密,其他信息并没有加密,因为像S公钥等一些信息本来就是要公开给别人使用的,所以没必要加密)。CA机构将S网站信息(含S公钥)连并加密的指纹一起做成S的ca证书发还给S网站服务器。2、安装好的浏览器中会内置CA发证机构的根证书(是由CA机构事先提供给浏览器厂商的,内含CA机构的公钥。或者有一些CA发证机构的根证书可以下载或者在u盾里面,这样我们可以在客户机中安装该CA机构的根证书到浏览器,安装的时候选择“中级证书颁发机构”或者“受信任的根证书颁发机构”)。这样客户端B的浏览器在接收到服务器S发送过来的CA证书时,先检查其中的CA发证机构,然后从(内置的或安装的)根证书列表中找到该机构的根证书,然后通过根证书中的公钥对S的证书的数据指纹进行解密,并再次用同样的算法对数据进行MD5指纹提取,如果两个结果一样,表明S证书确实是该CA证书机构签发,从而S服务器的身份得到确认,并从证书中提取出其公钥。
image.png
在浏览器的证书列表中,既有CA机构的(根)证书(CA机构的证书是用来验证其所颁发给网站服务器的证书的有效性的),也有各种网站服务器的证书。
证书是有标准的,不同标准的证书,保存的信息也不同(证书主要包括颁发者和被颁发者的信息,以及被颁发者的公钥,和CA机构对这些信息的认证,),目前比较通用的标准是x509,
x509:
版本
识别用于该证书的 X.509 标准的版本,这可以影响证书中所能指定的信息。迄今为止,已定义的版本有三个。
序列号
发放证书的实体有责任为证书指定序列号,以使其区别于该实体发放的其它证书。此信息用途很多。例如,如果某一证书被撤消,其序列号将放到证书撤消清单 (CRL) 中。
签名算法标识符
用于识别 CA 签写证书时所用的算法。
签发人姓名
签写证书的实体的 X.500 名称。它通常为一个 CA。 使用该证书意味着信任签写该证书的实体(注意:有些情况下(例如根或顶层 CA 证书),签发人会签写自己的证书)。
有效期
每个证书均只能在一个有限的时间段内有效。该有效期以起始日期和时间及终止日期和时间表示,可以短至几秒或长至一世纪。所选有效期取决于许多因素,例如用于签写证书的私钥的使用频率及愿为证书支付的金钱等。它是在没有危及相关私钥的条件下,实体可以依赖公钥值的预计时间。
主体名
证书可以识别其公钥的实体名。此名称使用 X.500 标准,因此在Internet中应是唯一的。它是实体的特征名 (DN),例如,
CN=Java Duke,OU=Java Software Division,O=Sun Microsystems Inc,C=US
(这些指主体的通用名、组织单位、组织和国家)。
主体公钥信息
这是被命名实体的公钥,同时包括指定该密钥所属公钥密码系统的算法标识符及所有相关的密钥参数。
参考文章 -
信息的加密和传送
image.png
1 、在实际工作中,信息的传递是对称加密和非对称加密结合使用的,非对称加密(公钥和私钥)因为比较消耗性能,主要用于身份验证(身份验证完成后,通过它来协商交换对称密钥),和常用来对数据指纹进行加密,而数据指纹是用来确保数据的完整性的(检测是否被串改)。而对数据实际是采用对称加密的,即双方约定好加密算法和同一个密钥(该密钥在约定协商的过程中会用公钥进行加密)加密解密数据。
2 、加密和传输:在 https 通讯之前,需要经历握手阶段,描述如下。
a 、客户机B访问网站服务器S,给出其协议版本号(SSLv2、SSLv3、TLSv1等)、一个客户端生成的随机数( Client random )cr1,以及客户端支持的加密方法。
b 、服务器S确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数( Server random )sr2。
c 、 客户机B确认数字证书有效,然后生成一个新的随机数( Premaster secret )sr3,并使用数字证书中的公钥,加密这个随机数,发给服务器S。
d 、服务器S使用自己的私钥,获取服务器B发来的随机数(即 Premaster secret )sr3。
e 、客户端B和服务器S根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"( session key ),用来加密接下来的整个对话过程。(因为非对称加密解密比较耗时耗性能)注:协商出的这个key只在一段时间内正在连接的客户端上生效,一段时间后就删了。动态的来看服务端存着的key数的数学期望就是正在连接的客户端数。而一台机器能接收的连接数是有限的存这么些个key还是没啥问题的。
CA认证+请求服务器公钥+生成对称加密key+最后用对称加密通信。
认证一般是单向认证,即服务端认证。客户机只要能确认服务器的真实性,不是钓鱼网站就行了。而服务器一般不需要认证客户机身份。