热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

加密、签名和SSL握手机制细节

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

本文目录:

1.1 背景知识

1.2 互联网数据加密的细节

1.3 互联网数据签名的细节

1.4 互联网数据安全传输的细节

1.5 CA、PKI及信任CA

1.6 数字证书类型和内容

1.7 SSL握手机制


 

1.1 背景知识

对称加密     :加密解密使用同一密钥,加解密速度快。随着人数增多,密钥数量急增n(n-1)/2。

非对称加密 :使用公私钥配对加解密,速度慢。公钥是从私钥中提取出来的,一般拿对方公钥加密来保证数据安全性,拿自己的私钥加密来证明数据来源的身份。

单向加密     :不算是加密,也常称为散列运算,用于生成独一无二的校验码(或称为指纹、特征码)来保证数据的完整性和一致性,如MD5、SHA。具有雪崩效应,任何一点数据的改变,生成的校验码值变化非常大。

互联网数据安全可靠的条件:

1.数据来源可信,即数据发送者身份可信。

2.数据具备完整性,即数据未被修改过。

3.数据安全性,即数据不会被泄漏,他人截获后无法解密。

 

1.2 互联网数据加密的细节

对数据加密的方法有三种:对称加密、私钥加密和公钥加密。三种方法只靠其中任意一种都有不可容忍的缺点,因此考虑将它们结合使用。

考虑这三种加密算法的特性,公私钥加密速度慢,对称加密快,所以可以首先对数据部分使用对称加密。再进一步考虑,公钥大家都可以获取,若使用自己私钥加密,数据被截获后直接就被破解,因此使用对方的公钥加密,又由于公钥加密速度慢,所以可以使用对方公钥对对称密钥部分进行加密。

数据的收取者解密时,将使用自己的私钥解密第一层,得到对称密钥后加密的数据,再使用对称密钥解密,这样就能获得最终数据。

如下图所示分别是加密和解密的全过程。

image

加密的方法很多,但是上述方法是综合考虑互联网安全后较为成熟的一种简单加密方法。

使用上述方法加密保证了数据的安全性,但是还未保证数据的完整性、一致性以及数据来源的可靠性。

 

1.3 互联网数据签名的细节

在保证了数据的安全性后,还需要保证数据的完整性、一致性以及数据来源的可靠性。

对于数据的完整性和一致性,使用单向加密算法,通过hash函数计算出数据独一无二的校验码,这个校验码称为“信息摘要(Message Digest)”

对于数据来源可靠性,使用自己的私钥加密即可验证身份,因为获得数据后使用公钥不能解密的就证明数据不是配对私钥加密的。但是私钥加密速度慢,所以只用私钥加密摘要信息,加密后的摘要信息称为“数字签名(Signature)”

用户获得数字签名后的数据,首先使用数据来源方的公钥解密,这样获得了数据和信息摘要部分,并确认了数据来源的可靠性。由于这时候数据部分是没有被加密的,所以用户也可以使用同种单向加密算法计算出摘要信息,然后对比来源方的摘要信息和自己计算出的摘要信息,如果相等则证明数据完全未被修改过,是完整一致的。

因此只要使用数字签名就能保证数据来源的可靠性、数据的完整性和一致性。

如图所示分别是数字签名和确认数据的全过程。

image

 

 

1.4 互联网数据安全传输的细节

要在互联网上安全传输数据,要保证数据来源可靠、数据原始未被修改过、数据丢失不泄密。

如果数据传输双方张三和李四不在意数据丢失的泄露性,那么可以不对数据进行加密,只要数字签名即可,即使被中间人王五截获了甚至截获后修改一番再发送给李四也无所谓,因为李四可以根据数字签名验证数据的来源及数据的完整性,若发现被修改后大不了不用了。现在互联网上很多时候下载软件时就提供了签名验证,使用的就是这种机制,不管软件是否被截取,只要安装者能验证即可,如下图。

但是如果在意数据泄漏呢?就需要将数字签名和加密结合起来使用。有两种方案:1.先对数据加密,再对加密后的整体进行数字签名;2.先对数据进行数字签名,再对签名后的整体进行加密。

在互联网上基本使用第二种方法,用户最终只对数据部分进行校验而不对加密后的数据进行校验。具体细节如下:首先进行数字签名,再使用对称加密加密签名后的整体,然后使用对方的公钥只加密对称密钥部分。这样即保证了加密速度,还保证了数据的安全性、可靠性和完整性。解密时反向进行即可。如图所示。

但是这时还有一个漏洞,问题出在数字签名过程中私钥加密以及后面公钥解密的不安全性。图中李四在拿公钥A解密的时候,这个公钥A真的是张三的公钥吗?也许张三传输公钥给李四的过程中被王五截断,王五声称自己是张三,并把自己的公钥给了李四,然后王五用自己的私钥对木马程序进行签名,进行对称加密后再使用李四的公钥加密,最后传输给李四,这样一来李四以为王五就是张三,导致的结果是李四对木马程序完全信任。

如何解决这个漏洞呢?只要保证李四获得的公钥A真的是来源于张三即可,如何保证呢?互联网之下,数据传输的两端可能谁都不认识谁,谁也不相信谁,所以最终还是依靠公益性的第三方组织——CA。

 

1.5 CA、PKI及信任CA

CA(Certificate Authority)是数字证书认证中心,常称为证书颁发机构,申请者提交自己的公钥和一些个人信息(如申请者国家,姓名,单位等)给CA,CA对申请者的这些信息单向加密生成摘要信息,然后使用自己的私钥加密整个摘要信息,这样就得到了CA对申请者的数字签名,在数字签名上再加上CA自己的一些信息(如CA的机构名称,CA层次路径等)以及该证书的信息(如证书有效期限),就得到了所谓的数字证书。

过程如下图。

如果某用户信任了该CA,就获取了该CA的公钥(实际上信任CA的其中一个作用就是获取CA公钥),使用该公钥解密数字证书就可以验证申请者的信息以及申请者公钥的可靠性(申请者的公钥只被CA的私钥加密,解密该私钥后只是需要验证可靠性)。

这里的关键是CA使用自己的私钥给申请者加密,那么如何保证CA是可信并且合法的呢?根CA是通过自签署数字证书的方式标榜自己的可信性和合法性,第一级子CA由根CA颁发合法数字证书,第二级直至所有的子CA都由上一级子CA颁发数字证书。对于多级子CA只需要信任根CA即可,因为获取了根CA的公钥,可以解密第一级子CA的证书并获取验证第一级子CA的公钥,层层递进,最终获取到为申请者颁发数字证书的机构并获取它的公钥。

正是这些根CA和子CA组成了PKI。

信任CA后,每次接收到需要解密的数字证书时,还要去该颁发机构指定网站的证书吊销列表(CRL)中查询该证书是否被吊销,对于吊销后的证书应该不予以信任,这是信任CA的第二个作用。导致证书被吊销的可能性不少,例如申请者的私钥被黑客获取,申请者申请吊销等。

也有公司使用自签的证书,例如某些银行、12306有时候就要求下载证书并安装。使用自签证书的好处当然是省钱、方便啦。

 

1.6 数字证书类型和内容

PKI的两种实现方式TLS和SSL使用的证书格式都是x509,TLSv1和SSLv3基本等价,只不过SSL实现在OSI 4层模型中的应用层和传输层的中间,TLS实现在传输层。

还有PKI的另一种实现方式GPG,它的证书使用的不是x509格式。

数字证书中包含的信息有:申请者的公钥,证书有效期,证书合法拥有人,证书如何被使用,CA的信息,CA对申请者信息的数字签名。

imageimageimage

 

1.7 SSL握手机制

有了CA颁发的数字证书后,通信机制就和下图的机制完全不同了。

上图中每一段数据都签名加密,有了数字证书后实际上已经验证了身份,不需要每一段数据都签名,这能提升效率。在上图中的漏洞是无法确认获取的公钥A是否可信,有了数字证书后已经能够确认公钥A是可信的。但问题是公钥A本来目的是用来解密数字签名的,有了数字证书后不需要数字签名了,那公钥A不是多余的吗,如果多余,那把公钥A交给CA是不是也是多余的呢?

不多余,因为SSL的握手机制和数字签名机制完全不同。以下是单向验证机制,只验证服务端。

image

第一步:Visitor给出协议版本号、一个客户端随机数(Client random),以及客户端支持的加密方法。

第二步:Server确认双方使用的加密方法,以及一个服务器生成的随机数(Server random)。

第三步:Server发送数字证书给Visitor。

第四步:Visitor确认数字证书有效(查看证书状态且查询证书吊销列表),并使用信任的CA的公钥解密数字证书获得Server的公钥,然后生成一个新的46字节随机数(称为预备主密钥Pre-master secret),并使用Server的公钥加密预备主密钥发给Server。

第五步:Server使用自己的私钥,解密Visitor发来的预备主密钥。

第六步:Visitor和Server双方都具有了(客户端随机数+服务端随机数+预备主密钥),它们两者都根据约定的加密方法,使用这三个随机数生成对称密钥——主密钥(也称为对话密钥session key),用来加密接下来的整个对话过程。

第七步:之后所有的数据只需要使用“对话密钥”加密即可,不再需要多余的加密机制。

注意:
1.在SSL握手机制中,需要三个随机数(客户端随机数+服务端随机数+预备主密钥);
2.至始至终客户端和服务端只有一次非对称加密动作——客户端使用证书中获得的服务端公钥加密预备主密钥。
3.上述SSL握手机制的前提单向验证,无需验证客户端,如果需要验证客户端则可能需要客户端的证书或客户端提供签名等。

Server和Visitor通信,Server把数字证书发给Visitor,最关键的一点是Visitor要保证证书的有效性,通过查看证书状态并去CA的吊销列表查看Server的证书是否被吊销。只有Server的证书可用了,才保证了第一环节的安全性。

可以看出,使用SSL比前文介绍的“数字签名+加密”简便多了,将身份验证和密钥生成在会话的开始就完成了,而不需要每次的数据传输过程中都进行,这就是https等使用ssl加密机制的握手通信过程


推荐阅读
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • Shodan简单用法Shodan简介Shodan是互联网上最可怕的搜索引擎,与谷歌不同的是,Shodan不是在网上搜索网址,而是直接进入互联网的背后通道。Shodan可以说是一款“ ... [详细]
  • 构建LNMP架构平台
    LNMP架构的组成:Linux、Nginx、MySQL、PHP关于NginxNginx与apache的作用一样,都是为了搭建网站服务器,由俄罗斯人lgorsysoev开发,其特点是 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • 1、etcnginxconf.ddefault.conf,添加如下信息:location{try_files$uri$urirouter;rootho ... [详细]
author-avatar
lmc的
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有