小明加密访问
Ⅰ 加密、签名、证书的作用及运用场景
本文主要是简单介绍了常见的加密类型、各自的运用场景、为什么需要数字签名和数字证书、HTTPS涉及到的加密流程等。这里主要从使用者的角度出发,对算法本身不做过多介绍。
对称/非对称加密均属于 可逆加密,可以通过密钥将密文还原为明文 。
有时候,我们希望明文一旦加密后,任何人(包括自己)都无法通过密文逆推回明文,不可逆加密就是为了满足这种需求。
不可逆加密主要通过 hash算法实现:即对目标数据生成一段特定长度hash值 ;无论你的数据是1KB、1MB、1GB,都是生成特定长度的一个Hash值(比如128bit)。这里大家应该能感受到一点 不可逆 的味道,加密后128bit的hash值显然无法还原出1个G甚至更大的不规则数据的, hash可以看做是原来内容的一个摘要 。
常见算法:
小明给小红写信:
经过九转十八弯后,信的内容有可能:1. 被窥视 2. 被篡改(冒充小明发送假消息) :
小红先 生成对称加密的密钥key1 ,然后通过一个安全的渠道交予小明。
传输数据时,小明 使用key1加密 ,而小红收到后再 使用key1解密 。
这时候 中间者既看不到原来的内容,也没办法篡改 (因为没有密钥):
【对称加密】实现简单,性能优秀 ,算法本身安全级别高。然而对 密钥的管理 却是个很头疼的问题:一旦密钥交到对方手里,对方对密钥的保管能力 我方是没办法控制 的,一旦对方泄露的话,加密就形同虚设了。
相对而言,【非对称加密】的公钥就没有这个忧虑,因为 公钥 的设计就是为了 可以公开的 ,尽管对方泄露,我方也不会有任何损失。
小红生成一对公私钥,自己持有私钥(pri_key1),将公钥(pub_key1)交予小明。
传输数据时,小明使用 公钥加密 ,小红使用 私钥解密 。
因为 中间者没有私钥,公钥加密的内容是无法获取的 。此时达到了 防窥视 的效果:
然而因为 公钥是可以公开的 ,如果 中间者知晓公钥 的话,尽管没有办法看到原来的内容,却 可以冒充小明发送假消息 :
这时小红在想,如果小明发送消息时,能带上 只有他自己才能生成 的数据(字符串),我就能 验证是不是小明发的真实消息 了。
通常这个 能证实身份的数据(字符串) 被称之为 数字签名(Signature)
小明再生成一对公私钥 ,自己持有私钥(pri_key2),将公钥交予小红(pub_key2)。
当小明传输数据时(可能很大),除了公钥加密明文之外,还要带上签名:(1) 对明文做一个hash摘要 (2)对摘要进行私钥加密,加密结果即签名(传输内容=内容密文+签名)
小红收到后:(1) 解密签名获取hash (2)解密内容密文,对解密后的明文进行hash;如果两个hash一致,说明验签通过。
尽管中间者修改了传输内容,但因为签名无法冒认(没有私钥),小红验签失败,自然不会认可这份数据:
通常 非对称加密要做到防窥视和防篡改,需要有两对公私钥 :对方的公钥用于内容加密,自己的私钥用于签名(让对方验证身份)。
因为HTTP协议明文通信的安全问题,引入了HTTPS:通过建立一个安全通道(连接),来保证数据传输的安全。
服务器是 没办法直接将密钥传输到浏览器的 ,因为在 安全连接建立之前,所有通信内容都是明文的 ,中间者可窥视到密钥信息。
或许这时你想到了非对称加密,因为公钥是不怕公开的:
然而在第2步, 中间者可以截取服务器公钥,并替换成了自己的公钥 ,此时加密就没意义了:
为了 防止公钥被假冒,数字证书(digital certificate )便诞生了 。
当服务器需要告诉浏览器公钥时,并不是简单地返回公钥,而是响应 包含公钥信息在内的数字证书 。
证书主要包含以下内容:
浏览器通过 【颁发机构的公钥】进行解密验签 ,验签通过即说明证书的真实性,可以放心取 证书拥有者的公钥 了。( 常用CA机构的公钥都已经植入到浏览器里面 )
数字证书只做一件事: 保证 服务器响应的 公钥是真实的 。
以上保证了 [浏览器⇒服务器] 是加密的,然而 [服务器⇒浏览器] 却没有(上图第4步);另外一个是 性能问题 ,如果所有数据都使用非对称加密的话,会消耗较多的服务器资源,通信速度也会受到较大影响。
HTTPS巧妙地结合了非对称加密和对称加密,在保证双方通信安全的前提下,尽量提升性能。
HTTPS(SSL/TLS)期望 建立安全连接后,通信均使用【对称加密】 。
建立安全连接的任务就是让 浏览器-服务器协商出本次连接使用的【对称加密的算法和密钥】 ;协商过程中会使用到【非对称加密】和数字证书。
特别注意的是:协商的密钥必须是不容易猜到(足够随机的):
其中比较核心的是随机数r3(pre-master secret),因为之前的r1、r2都是明文传输的, 只有r3是加密传输 的。至于为什么需要三个随机数,可以参考:
以上是一个比较简单的HTTPS流程,详细的可以参考文末的引用。
参考资料:
[1] 数字证书应用综合揭秘
[2] SSL/TLS协议运行机制的概述
[3] 图解SSL/TLS协议
[4] 《图解HTTP》
Ⅱ 数字签名/数字证书/对称/非对称加密/CA 等概念明晰
此次不深入源码、不分析原理、只厘清一些易混淆概念及其关联。
本次将从通信演变历史的角度出发,一步步阐述概念及其作用。
通过本篇文章,你将了解到:
大部分时候,咱们交流都是靠嘴对嘴,信息完全暴露在他人的耳朵里。
拉拉家常无关紧要,但要是涉及重要、私密的信息就不能这样子了。
此时可能想到,那我们就说悄悄话吧。
悄悄话只能是俩人近距离才能实现,若是天各一方怎么才能将信息安全送给对方呢?
大家或多或少地看过谍战片,那会儿卧底如何将信息传给组织呢?答案是通过密码本。
双方约定好用一个密码本,密码本其实是个映射关系:
此时双方通信是经过加密的,我们称为密文通信。第三者想要破解信息,就需要拿到密码本或是破译出密码本映射关系,从而将密文转为明文。
随着科学技术的发展,人们的交流由书信逐渐过渡为电子通信。
当我们在键盘上敲击一段文字后,这段信息会通过网络发送给对方,怎么保证这段信息不被别人轻易知道呢?
我们想到了加密,双方在传输信息前商量好一个密钥,发送方用密钥将信息进行加密形成密文后再发送,接收方在收到密文后使用之前协商的密钥进行解密。
举个简单例子:
小明现在将信息进行对称加密:
那么将明文hello,每个字符+1,得出如下结果:
hello--->ifmmp
小红拿到密文ifmmp后,她知道密钥X=1,因此她将密文每个字符-1,得出如下结果:
ifmmp--->hello
至此,小明和小红成功进行了交流。
此时小刚想知道小明和小红聊了啥,于是截获了信息:
但是由于小刚拿到的是密文信息:ifmmp。因为不知道密钥,因此无法反推出明文:hello。因此小明和小红的信息交流安全得到了保证。
当然对称加密算法没那么简单,常见的对称加密算法有如下几种:
似乎使用对称加密就可以解决咱们通信安全问题,但引入了另一个问题:
是否有种方式可以光明正大地传递信息呢?
答案是:非对称加密。
接着来看看小明和小红如何使用非对称加密来实现安全通信。
小明和小红分别生成自己的公私钥:
由上可知,用小红的公钥加密的信息只能由小红的私钥解开,只要小红的私钥没有泄漏,那么小明和小红的通信是安全的。
当然了,真正非对称加密算法并没有那么简单,常见的几种非对称加密算法:
小明和小红的通信真是安全的吗?
此时小刚又来搞事情了:
以上信息表明:
小明和小红一合计,想出来了一个办法:
消息摘要(Message Digest)特点:
常见的消息摘要算法:MD5、SHA1。
虽然采用了消息摘要,但是小刚依然能够自己伪造信息,并生成对应的消息摘要,小红收到后验证摘要是正确的,便认为是小明发的,这种做法还是有漏洞。
在前边用到了小红的公钥、私钥,而没用到小明的公钥、私钥。
在消息摘要的基础上,想办法让小明的公私钥也参与到通信过程中来:
与消息摘要过程对比,此时多了一个步骤:
用私钥加密的信息的过程我们称之为:数字签名
数字签名具有不可抵赖性的特点。根据前面的描述,用私钥加密的信息,只有对应的公钥才能解开。
因此,若是小红使用了小明的公钥解开了密文,那么说明该消息肯定是小明发过来的。反之,小明使用私钥加密后发出去,代表这信息是确认是自己发的,这就是他的签名。
常见的数字签名算法:RSA、DSA、ECDSA。
老规矩,用图来看看小明与小红如何使用数字签名的。
小明发送信息过程:
小红处理信息过程:
由上可知:
数字签名有两个作用:
整个流程小明的公私钥、小红的公私钥都参与了。
因为小刚没有小明的私钥,所以他无法生成小明的数字签名,最终无法通过小红对数字签名的验证。
这么看来小刚是无能无能为力了?非也!
回顾一下之前说的对称加密的痛点:如何传递对称密钥?
实际上非对称加密也存在问题:如何传递公钥?
可见,无论是对称加密还是非对称加密都需要解决密钥传递问题。
若是小刚伪造了小红的公钥,情况如下:
因为公钥被伪造了,所以小刚可以为所欲为。
小明如何才能知道自己收到的公钥是小红的呢?
这时候就需要引入权威机构:CA(Certificate Authority) 证书授权中心
有了CA,小红发布公钥的流程变了:
用图表示如下:
图上5个步骤,有些同学对第4步不太理解:
似乎又回到了原点:如何安全传递公钥的问题。
其实,信任是有起点的。
CA 不仅为他人生成证书,也生成自己的证书,CA 为自己生成的证书里包含了CA的公钥。
CA 的证书在电脑、手机等设备出场的时候就会预置在系统里、浏览器里。
因此,当小明验证小红的证书时,会在系统里寻找能够解开小红证书的CA 公钥,若是找到则说明小明证书的颁发机构是可信任的,既然信任了该证书,那么从证书里取出的公钥,小明也认可是小红的。
至此,小红的公钥就安全地传给了小明,后面就可以愉快地通信了。
系统里找不到对应的证书会有什么影响?大家还记得12306网站刚开始运行的时候,用浏览器访问时浏览器会提醒说该网站不受信任,12306提示用户安装自己的根证书。
这也从侧面说明了,咱们不要轻易更改系统里的证书。
对称加密存在密钥传送被泄漏的风险,非对称加密虽然不需要传递私钥,但是需要传递公钥,也存在被中间人攻击的风险。
为此,引入了CA 生产证书解决了非对称加密公钥传递问题。
然后非对称加密速度慢,适合加密数据量少的信息,对称加密速度快,适合加密数据量大的信息。
如何将对称加密与非对称加密结合起来打造一个安全的通信链路,下篇我们将重点分析其中的典型:SSL/TLS 的原理与应用。