您的位置:首页 > 理论基础 > 计算机网络

私钥、公钥、数字签名、数字证书、HTTPS

2016-10-10 19:47 211 查看
     加密:公钥加密,私钥解密
     认证:私钥加密,公钥解密

     如果A给B发送一个加密的有数字签名的文件,会怎么样呢?
     首先A有自己的公钥和私钥:A_public_key, A_private_key
     B也有自己的公钥和私钥:   B_public_key, B_private_key
     (1)A和B互换公钥
     (2)A将文件用hash算法生成摘要,用A_private_key对摘要加密,得到的就叫数字签名
     (3)A用B_public_key对文件加密
     (4)将加密的文件和数字签名一起发给B
       ------B收到内容后
     (5)用B_private_key解密文件,得到明文
     (6)用A_public_key解密数字签名,得到内容摘要
     (7)将明文的文件内容用同样hash算法得到摘要,与第六步的摘要对比。相同则证明内容和来源都正确。

     解密数字签名时,需要事先知道发送方A的公钥,那怎么才知道自己得到的公钥是发送方A的呢?
     例如:C知道B的公钥,然后偷偷把B手里A的公钥A_public_key换成自己的公钥C_public_key,那么以后C给B发送的东西,B还一直以为是A发送的。因为B不知道自己手里公钥就是A的。
     怎么办呢?使用数字证书

     A找证书中心(CA)申请自己的证书,CA把A的公钥和一些信息作为证书内容写入,然后用CA自己的私钥生成数字签名一并写入证书。A给B发数据时把用B的公钥加密的数据、A的数字签名、A的数字证书一起发过去。B的电脑安装有根证书(操作系统带的,知道CA的公钥),用CA的公钥验证A的数字证书里面签名的合法性,合法后从证书内容里读出A的公钥。再用A的公钥解密A的数字签名验证数据完成性。最后用B的私钥解密数据。
     
     数字证书可以伪造吗?
     不能。数字证书里有CA的数字签名,签名是由证书内容的哈希摘要用CA的私钥加密的。用CA的公钥验证签名的合法性就可以验证证书的真假。
     
     https传输,访问google网站:
     握手时用非对称加密传输对称加密的密码
     数据传输时用对称加密的密码加密数据(对称加密解密速度比非对称加密快)
     
     过程:
     (1)浏览器发送自己支持的加密规则给google
     (2)google选择一组加密算法和HASH算法,并将自己的数字证书发给浏览器
     (3)浏览器验证数字证书的合法性(验证证书的数字签名),然后生成一个随机数,从google的数字证书里面获取google的公钥,用这个公钥加密随机数。用约定的hash算法生成握手消息的摘要,并用生成的随机数加密摘要。把握手消息、加密的摘要、加密的随机数发给google
     (4)google用自己的私钥解密随机数,然后用随机数解密摘要,再用hash生成收到的握手消息的摘要与解密的摘要对比,验证正确性。
     (5)google一样用hash算法生成握手消息的摘要,并用解密的随机数加密摘要。然后把握手消息、加密的摘要发给浏览器
     (6)浏览器验证摘要成功后,握手完成。之后通信的数据用之前浏览器生成的随机密码加密后传输。

     不能授信的https访问?
     比如自己搭建的https服务器,证书没有得到CA的认证。浏览器收到服务器的证书后,会查看证书内容,根据证书里的颁发机构在本地电脑的根证书里查找颁发机构对应的公钥。当然查找不到或者解密证书的签名失败,会提示正在访问不授信的网站,但是你是可以继续安全浏览这个网站的。因为浏览器依然可以从不授信的证书里取出服务器的公钥然后加密生成的随机密码,进行后续的握手和数据传输过程。
     对于不授信的https访问,只需要注意它是不是钓鱼网站就可以了。例如有可能自己的dns遭到劫持,访问支付宝网站时,被重定向到高度模仿支付宝网页的https网站。这时google浏览器肯定就会弹窗提示你正在访问不授信的https网站,如果你没有提高警惕,就会被蒙蔽,泄露了自己输入的账户和密码。

     还有哪种情况会出现访问https网站而不安全呢?
     电脑的根证书是假的。操作系统里有很多自带的根证书,存储了各个数字证书中心的公钥。如果根证书是假的,那么就有面临访问欺诈网站而不自察的问题。
      当然一般而言根证书不会是假的,如果是假的,那么这家数字证书中心颁发的所有证书都会被提示为不授信,容易被看出来。如若根证书是真的,但证书中心的私钥被黑客获取到了,那么他就可以给自己颁发假证书而瞒过大家了。操作系统厂商知道这个情况后会更新补丁宣布该根证书失效,或者通过更新证书吊销列表CRL来宣布证书失效。此时你就会得到这句提示“该站点安全证书的吊销信息不可用,是否继续”。
      还有一种情况就是你自己安装的根证书被窃取了。例如12306购票网站要求下载安装根证书,这个根证书说白了就是12306自己给自己颁发的,没有在CA获得认证,所以浏览器会提示你在访问不授信的网站之类的消息,12306首页就给个公告让大家安装他提供的根证书来消除大家购票的后顾之忧。12306这么挫,那么它的根证书被窃取到私钥就成为可能了,非法分子就可以通过12306的私钥来颁发假证书欺骗中国的广大网民。即便12306知道了自己证书被窃,也没有好的补救措施(操作系统厂商不会给你打补丁,不会把你的证书更新到CRL),只能发个公告让大家手动删除安装的证书。

参考:     
数字签名是什么 http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
https那些事 http://www.guokr.com/post/114121/


公钥私钥加密解密数字证书数字签名详解 http://codefine.co/1455.html
为什么12306买火车票要安装根证书
https://techyan.me/2013/05/07/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A812306%E4%B9%B0%E7%81%AB%E8%BD%A6%E7%A5%A8%E8%A6%81%E8%A3%85%E6%A0%B9%E8%AF%81%E4%B9%A6%EF%BC%9F/?variant=zh-cn

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: