前言
文章开始之前,我们先来看几个图片
还记得最早期的手机,蓝牙配对需要输入四个数字的pincode了吧?

为啥后来配对的图片变成这种了呢?

这背后的技术或者说标准到底经历了什么?
这篇文章希望能这个问题说清楚,同时既然说到加密算法,我们也可以把蓝牙世界和HTTPS世界做一个对比,会发现两者之间有很多的共同点,毕竟,都是通信范畴的东西。
概念扫盲
密码学体系是近几十年已经成熟起来的体系,我们这里不去展开论述,但是一些关键的信息还是我们必须了解的。
在加密领域,我们首先要了解的概念是:
共享密钥加密(对称密钥加密):加密和解密同用一个密钥。加密时就必须将密钥传送给对方,那么如何安全的传输呢?这个是非对称加密算法所要解决的事情。
有同学要说,为什么要多此一举,直接用非对称加密来加密数据不香吗?很简单,非对称加密速度慢嘛。所以实战中一般都是需要对称加密和非对称加密这两个兄弟打一个配合。
对于搞蓝牙开发的来说,这个对称加密密钥至关重要,叫做linkkey,在点对点通信中,双方第一次建立连接之后就确定下来的,需要存储到flash,这样下次连接就很快了,如果手机端删除配对,那么就需要重新配对并协商这个linkkey。
我们通过sniffer抓包,数据的payload一般来说是加密的,看不懂的,需要知道这个linkkey,才能把所有的数据都解密出来。
我们经常听到蓝牙的“配对”一词,所谓配对,就是蓝牙主从设备通过协商得到彼此加密通信的唯一对称加密密码Linkkey的过程。
公开密钥加密(非对称密钥加密):公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。使用此加密方式,发送密文的一方使用公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听盗走。
但由于公开密钥比共享密钥要慢,所以我们就需要综合一下他们两者的优缺点,使他们共同使用,而这也是HTTPS采用的加密方式。在交换密钥阶段使用公开密钥加密方式,之后建立通信交换报文阶段则使用共享密钥加密方式。
这里就有一个问题,如何证明公开密钥本省是货真价实的公开密钥。如,正准备和某台服务器建立公开密钥加密方式下的通信时,如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥传输过程中,真正的公开密钥已经被攻击者替换掉了。
为了解决这个问题,在网路环境下,可以使用由数字证书认证机构(CA,Certificate Authority)和其他相关机关颁发的公开密钥证书。
接收到证书的客户端可以使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可以明确两件事:
一、认证服务器的公开密钥的是真实有效的数字证书认证机构。
二、服务器的公开密钥是值得信赖的。
而在蓝牙的场景中,因为不是网路环境,所以认证就是用户自己来做了,有几种实现的方式,在蓝牙里,认证这件事情叫做authentication,又叫鉴权。
随机数发生器:
蓝牙的随机数发生器一般是软件实现的伪随机数发生器,随机数的使用场景是很多的,初始化阶段的In_Randa,认证阶段的AU_Randa、linkkey生成阶段的随机数等等都需要。
HTTPS加密流程:
首先服务器端用非对称加密产生公钥和私钥。然后把公钥发给客 户端,路径或许有人会截取,但是没有用,因为用公钥加密的文件只有私钥可以解密,而私钥永远都不会离开服务器的。当公钥到达客户端之后,客户端会用对称加密产生一个秘钥并且用公钥来加密发送给服务器端,这个秘钥就是以后用来通信的钥匙。这样服务器端收到公钥加密的秘钥时就可以用私钥来解公钥

最低0.47元/天 解锁文章
1072

被折叠的 条评论
为什么被折叠?



