肇始于1994爱立信公司的技术方案,当发明者希望为设备间通讯创造一组同一规则(标准化协议),以此进行低功耗、低成本无线通信连接。当1998年5月,爱立信、诺基亚、东芝、IBM和英特尔公司等五家著名厂商,在联合开展短程无线通信技术的标准化活动时提出了蓝牙技术。1999年5月20日,这五家厂商成立了蓝牙“特别兴趣组”(Special Interest Group,SIG),即蓝牙技术联盟的前身,以使蓝牙技术能够成为未来的无线通信标准。芯片霸主Intel公司负责半导体芯片和传输软件的开发,爱立信负责无线射频和移动电话软件的开发,IBM和东芝负责笔记本电脑接口规格的开发。1999年下半年,微软、摩托罗拉、三星、朗讯与蓝牙SIG共同成立蓝牙技术推广组织,从而使得蓝牙在21世纪初迎来了全球无线通信浪潮。到2000年4月,SIG的成员超过1500,并不断快速增长。蓝牙1.0标准也在1999年7月发布,其包含如下:
2006年10月13日,联想取代IBM成为蓝牙SIG组织中的创始成员位置。如下大致罗列蓝牙版本演进过程:
以蓝牙4.0架构为介绍,如下图:
或者,我们也可以近似用下图:
其中:
1.HW层:本质蓝牙芯片层,包含
(1)RF(radio):射频层,本地蓝牙数据通过射频发送给远端设备,并且通过射频接收来自远端蓝牙设备的数据
(2) BB(BASEBAND):基带层,进行射频信号与数字或语音信号的相互转化
(3) LMP(LINK MANAGER PROTOCOL):链路管理层,负责管理蓝牙设备之间的通信,实现链路的建立、验证、链路配置等操作
(4) HCI(HOST CONTROLLER INTERFACE):主机控制器接口层,HCI层在芯片以及协议栈都有,芯片层面的HCI负责把协议栈的数据做处理,转换为芯片内部动作,并且接收到远端的数据
(5) BLE PHY:BLE的物理层
(6) BLE LL:BLE的链路层
2.传输层:此部分在硬件接口UART/USB/SDIO实现HOST和控制器的交互,同时有几个子协议:
(1)H2:针对USB类型
(2)H4:针对UART类型
(3)H5:针对UART类型
(5)BCSP:针对UART类型
3.HOST层,此层是协议栈
(1)HCI是HOST controller interface, 主机控制层接口,主要负责透过transport把协议栈的数据发送给蓝牙芯片,并且接受来自蓝牙芯片的数据。
(2) L2CAP(Logical Link Control and Adaptation Protocol):逻辑链路控制与适配协议,将ACL数据分组交换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。
(3)SDP(SERVICE DISCOVERY PROTOCOL):服务发现协议
(4)RFCOMM(Serial Port Emulation):串口仿真协议,上层协议蓝牙电话,蓝牙透传SPP
等等功能模块
说到蓝牙安全特性,首先如下图示:
如上,蓝牙安全措施可以保护手机和笔记本电脑之间通讯,而IEEE802.11提供了从路由器到笔记本电脑的WLAN连接安全问题。除此之外的,不在上述保护范围内。蓝牙标准主要规定了三项基本的安全服务:
认证:基于蓝牙设备地址,验证正在通信的设备的身份。蓝牙不提供原生的用户认证机制。
机密性:确保只有被授权的设备能够访问和查看传输的数据,以防止窃听导致的信息泄露。
授权:通过确保设备在被允许使用一项服务之前是已经被授权的,来允许其对资源的控制。
蓝牙设备可以实现四种不同的安全模式
1.不安全:蓝牙设备不启动任何安全措施。
2.服务级别强制实施的安全模式:两个蓝牙设备可以建立不安全的ACL链接。当发出逻辑链接控制和适应协议(L2CAP)面向连接(CO)或L2CAP少连接(CL)通道请求时,将启动安全性过程,即身份验证,授权和可选加密。
3.链路级强制安全模式:建立ACL链路后,将启动安全性过程。
4.服务级别强制实施的安全模式:此模式类似于模式2,不同的是只有使用SSP的蓝牙设备可以使用它,即,只有蓝牙2.1 + EDR或更高版本的设备才能使用此安全模式。蓝牙使用具有128位密钥的安全和快速加密例程+(SAFER +)作为认证和密钥生成算法,在最高3.0 + HS(高速)的蓝牙版本中,而蓝牙4.0(即低功耗蓝牙)用更安全的128位高级加密标准(AES)代替SAFER +SAFER +由Massey等人开发。1998年,它被提交为AES竞赛的候选人,但未被选为决赛入围者。
SAFER +是具有以下主要功能的分组密码。它具有128位的块大小和三个不同的密钥长度(128、192和256位)。SAFER +由九个阶段(八个相同的回合和输出转换)和一个密钥调度算法(KSA)组成,其方式如下。KSA产生17个不同的128位子密钥。每个回合使用两个子项和上一个回合中的一个128位输入字来计算一个128位字,该字是下一回合的新输入字。最后一个子关键字用于输出转换,它是最后一轮输出与最后一个子关键字的简单按位XOR。在AES竞赛的评估过程之后,AES由美国国家标准技术研究院(NIST)于2001年发布。Rijndael是比赛的获胜者,NIST选择它作为AES的算法。AES是一种对称的分组密码,旨在代替数据加密标准(DES)作为广泛应用的认可标准,但是此过程 将需要很多年。NIST预计,在可预见的将来,至少在美国政府使用的情况下,三重数据加密标准(3DES)仍将是批准的算法。AES加密由10-14轮组成,其中数据块按以下方式逐步处理(最后一轮除外;值得注意的是,AES解密与AES加密对称)1.字节替换:字节替换使用S-box来执行块的逐字节替换。2.行移位:行移位是一个简单的排列。3.柱混合:柱混合是对GF(28)的一种算术替代。Galois字段GF(28)是256个元素的有限字段,可以用八位字符串或十六进制表示法表示。4.圆键添加:圆键添加是当前块与一部分扩展键的简单按位XOR。最后一轮AES加密(和AES解密)略有不同
AES被认为是安全的,它非常快速且紧凑(大约1 kB代码),其块大小是32的倍数(通常为128位),其密钥长度也是32的倍数(通常为128、192或256位) ),并且它有非常整齐的代数描述。
48位BD_ADDR分为三个部分:16位非有效地址部分(NAP),8位高地址部分(UAP)和24位低地址部分(LAP)。BD_ADDR的前三个字节(NAP和UAP)是蓝牙芯片的制造商,代表company_id。BD_ADDR(LAP)的后三个字节(称为company_assigned)在不同的蓝牙设备型号中或多或少地随机使用。
蓝牙设备首次连接时会生成一个初始化密钥(Kini t),该初始化密钥用于保护其他更安全的128位密钥的生成,这些密钥是在事件安全性链的下一个阶段生成的。
K_init是从伪随机数IN_RAND、L-byte PIN code、BD_ADDR中生成的128bit位的秘钥,此处的IN_RAND生成须放在高保密环境中。
某个密钥生成函数的输出可以用函数本身及其输入来表示。此处K_init的生成采用K_init=Encrypt(PIN',L',IN_RAND)。
在将PIN码及其长度L发送到Encrypt功能之前,将其修改为称为PIN'和L'的两个不同数量。如果PIN小于16字节,则通过从设备的BD_ADDR附加字节来增加PIN,直到PIN的总长度达到16字节或整个BD_ADDR被附加,以先到者为准。
K_ini t用于加密128位伪随机数(RAND或LK_ RAND),如图K_A=Encrypt2(BD_ADDR_A,RAND_A);如图,设备A可以用K_init加密K_A,例如K_A xor K_init,然后发给设备B;设备B用Kinit得到K_A;此处设备A,B都拿到A的秘钥。
使用单元密钥的蓝牙设备只有一个密钥可用于其所有连接。这意味着同一密钥与所有其他受信任的蓝牙设备共享。此外,任何使用相同单元密钥的受信任蓝牙设备都可以窃听共享同一单元密钥的两个其他蓝牙设备之间的任何流量。此外,任何使用相同单元密钥的受信任蓝牙设备都可以仅通过复制其BD_ADDR来模拟目标设备。
此处,上述的方式提供的加密方式只在比较低的层级机型使用。
一种更常见的组合秘钥K_AB会更普遍使用K_AB=Encrypt2(BD_ADDR_A,RAND_A) xor Encrypt2(BD_ADDR_B,RAND_B)。或者K_AB=K_A xor K_B
接下来我们来介绍质询-响应认证机制。
上述认证过程初步互换秘钥过程是:最开始A设备用K来加密LK_RAND_A,之后将其释放到B(不管K是K_A,还是K_B, K_AB);B中采用同样的秘钥K可以得到随机数LK_RAND_A,过程是(LK_RANDA ⊕K)⊕K;而B中可以用K加密LK_RAND_B,用K加密后传输至A处,A在采用K解密,此处可以达到(LK_RANDB ⊕K)⊕K = LK_RANDB,这样生成K_B.
二者采用不同方式,可以生成K_AB等复合型秘钥。
质询-响应身份验证的过程是,其中将检查申请人对秘密链接密钥的了解,如上图所描述。每次身份验证期间,系统都会使用一个新的128位伪随机数 AU_RAND以未加密形式通过空中交换。通过E1(AU_RANDA,BD_ADDRB,链接秘钥)功能在两个设备中生成32位结果(SRES,签名响应)和96位结果(ACO,身份验证密码偏移),其中链接秘钥为KA或KAB 。A生成的SRES值,通过未加密形式向验证设备B传播。验证者将生成的SRES值与接收到的SRES值进行比较,如果这些值匹配(0),则验证成功完成。当生成加密密钥时,将在事件安全性链的下一个阶段中使用ACO。
ACO,当前链接密钥(KA或KAB)和128位伪随机数EN_RAND是用于生成加密密钥(KC)的加密密钥生成函数E3的输入。主设备A生成EN_RAND并通过空中以未加密形式将其发送到设备B,而K_C采用如下函数生成:KC = E3(EN_RANDA, ACO, K_A或K_AB)。此处,密钥流生成器功能E0通过在两个设备中生成相同的密码比特流或密钥流(也称为运行密钥),使对称加密成为可能。
E0功能的输入是KC,主机的BD_ADDR(BD_ADDRA)和主机的实时时钟的26位(CLK26-1)。密钥流由E0(KC,CLK26-1,BD_ADDRA)函数生成,该函数针对每个新发送或接收的基带数据包重新初始化。这意味着E0功能的输入永远不会比一个基带数据包的寿命更长,因此每个新的基带数据包都会生成一个新的密钥流。
发送者通过将其与密钥流(即Plaintext⊕Keystream= Ciphertext)进行异或来对明文进行加密,然后将生成的密文发送给接收者。接收者通过与相同的密钥流进行异或来解密密文
值得注意的是,只有蓝牙基带数据包的有效载荷被加密(而不是访问代码或报头),因此攻击者无法使用访问代码和访问者的规则重复信息(攻击者容易猜到),以便于对密码进行密码分析 。
MITM称为Man In The Middle Attack, 感兴趣的同事可考虑如下故事:
1.爱丽丝将她的公钥发送给鲍勃,但Mallory能够截获它。Mallory向Bob发送自己的公共密钥,并为其具有匹配的私有密钥。现在鲍勃错误地认为自己拥有爱丽丝的公钥。
2.Bob将他的公钥发送给Alice,但是Mallory能够截取它。Mallory向爱丽丝发送自己的公共密钥,并为其提供匹配的私有密钥。现在爱丽丝错误地认为她拥有鲍勃的公钥。
3.爱丽丝向鲍勃发送了一封用马洛里公钥加密的消息,但Mallory是能够拦截它。Mallory用他的私钥解密邮件,并保留一个邮件的副本,使用Bob的公钥对邮件重新加密,然后发送给鲍勃的消息。现在鲍勃错误地认为消息是直接传来的来自爱丽丝。
4. Bob向Alice发送了一条用Mallory的公共密钥加密的消息,但是Mallory是能够拦截它。
Mallory用他的私钥解密消息,并保留一个邮件副本,使用爱丽丝的公钥重新加密邮件,然后发送给爱丽丝的消息。现在,爱丽丝错误地认为消息是直接传来的来自鲍勃。
或可查看如下图片:
蓝牙版本2.1 + EDR,3.0 + HS和4.0添加了用于配对过程的新规范,即SSP。其主要目标是通过提供针对被动监听和MITM攻击的保护来提高配对的安全性
SSP使用椭圆曲线Diffie-Hellman(ECDH)公钥加密技术,而不是使用(通常为短密钥)作为构建链接密钥的唯一熵源。为了构造链接密钥,设备使用公共-专用密钥对,多个随机数和设备的蓝牙地址。SSP可以有效地阻止了被动窃听。
为了提供针对MITM攻击的保护,SSP使用OOB通道(例如,Near Field Communication,NFC),或寻求用户的帮助:例如,当两个设备都具有显示器和键盘时,要求用户比较两个六位数的数字。也可以将这种比较视为不受MITM控制的OOB通道。如果配对过程中使用的值已被MITM篡改,则六位数完整性校验和将以0.999999的概率不同
SSP使用四个关联模型。除了两个关联模型 前面提到过,OOB和数值比较模型名为PasskeyEntry 和Just Works也被使用。
如果一台设备具有输入功能,但没有可显示六位数字的屏幕,则使用“密钥输入关联”模型。在具有输出功能的设备上向用户显示六位数的校验和,并要求用户在具有输入功能的设备上输入该校验和。如果两个设备都具有输入功能但没有输出功能,则也可以使用“密钥输入”关联模型。在这种情况下,用户选择一个6位数的校验和并将其输入两个设备中。最后,如果至少一个设备既没有输入也没有输出能力,并且不能使用OOB。
最后,关于SSP,其主要是六个阶段:
1.能力交换:由于某种原因从未想过进行配对的设备,首先要交换其输入/输出(IO)能力,以确定要使用的正确关联模型。
2.公用密钥交换:设备生成其公用-专用密钥对,并将公用密钥相互发送。他们还计算Diffie-Hellman密钥。
3.身份验证阶段1:在此阶段运行的协议取决于关联模型。此阶段的目标之一是确保设备之间的通信中没有MITM。这是通过使用一系列随机数,对随机数的承诺以及对完整性的最终检查来实现的通过OOB通道或在用户帮助下执行的校验和。
4.认证阶段2:设备完成值(公共密钥和随机数)的交换并验证其完整性。
5.链接密钥计算:双方使用其蓝牙地址,先前交换的值以及阶段2中构造的Diffie-Hellman密钥来计算链接密钥。
6. LMP身份验证和加密:在此阶段生成加密密钥,这与在2.0 + EDR以下的蓝牙版本中进行配对的最终步骤相同。
2020年12月青骥发布的信息安全法规中,适用于蓝牙的有如下标准:
《汽车信息安全通用技术要求》
《智能网联汽车信息安全评价测试技术规范》
《车载信息交互系统信息安全技术要求与实验方法》
《信息安全技术车载网络设备信息安全技术要求》
《TCSAE101-2018智能网联汽车车载端信息安全技术要求》
《ISO 24089 道路车辆软件更新管理标准》
《GB/T 386480-2020信息安全技术蓝牙安全指南》