Secure Simple Pairing Explained原文
介绍
基于PIN码的蓝牙配对的第一个版本没有提供任何真正的安全防范嗅探。像Ellisys蓝牙浏览器400这样的嗅探器能够通过被动地嗅探配对过程来自动立即确定PIN码并推出链路密钥(Link Key)。
随着蓝牙越来越广泛,安全配对方法成为确保技术长期成功的难点。在蓝牙2.1规范中引入,安全简单配对(SSP)修复了以前配对方法的所有问题,并使蓝牙设备配对比以往任何时候都更简单。
更强大的安全性也意味着蓝牙工程师面临新的挑战。在现场调试现成的设备变得难以实现。
事情并没有像他们看起来那样糟糕。本文旨在介绍SSP的基础知识,并清除蓝牙社区中常见的一些误解。
配对过程
配对设备的过程旨在在两个蓝牙设备之间创建共享密钥:链路密钥(Link Key)。然后,该链路密钥(Link Key)用于彼此认证设备并加密交换的数据。数据实际上并没有使用链路密钥(Link Key)直接加密;临时加密密钥(Encryption Key)从链路密钥(Link Key)和在加密通信流开始之前不久交换的随机数导出。然后,该加密密钥(Encryption Key)用于在两个方向上加密数据。可以在连接处于活动状态的任何时候更改它,一旦连接关闭,或者如果加密停止,将被丢弃。
蓝牙规范定义了两种标准配对过程,LMP配对(也称为基于PIN码)和SSP。非标准配对方法也是可能的,但是要求两个设备来自同一制造商。任何配对方法的结果都是一样的:创建共享的链路密钥(Link Key)。
一旦两个设备拥有相同的链路密钥(Link Key),该共享密钥可以用于在稍后的时间将两个设备重新认证。当重新连接时,设备通过交换从其派生的数字来快速验证它们都具有相同的链路密钥(Link Key)。如果链路密钥(Link Key)匹配,则可以继续创建会话密钥(Session Key)。否则,配对过程(LMP配对或SSP)必须从一开始重新启动,从而创建一个全新的链路密钥(Link Key)。
LMP配对(又名PIN码)
用于创建LMP配对的链路密钥(Link Key)的算法的输入如下:
- 两台设备的BD_ADDR
- 由发起者创建的16字节随机数
- 用户在两台设备上输入的PIN码(用户无法更改PIN码的“固定PIN码”除外)
这些数字用于首先创建临时共享初始化密钥( temporary shared initialization key),然后使用LMP配对密钥生成过程将其转换为链路密钥(Link Key)。
由于唯一未公开的信息是PIN码,可能的秘密链路密钥(Link Key)的数量受可能的PIN码的数量的限制。如果设备使用4位PIN码,则攻击者只需要在能够解密通信流之前最多尝试10,000个不同的链路密钥(Link Key)。这是LMP配对的弱点所在。
LMP配对过程由以下图表描述:
PIN码不是通过空中传送的唯一信息。这是Ellisys嗅探器捕获的相同通信流:
基于此捕获的信息,Ellisys软件能够自动确定PIN码并计算链路密钥(Link Key),而无需任何用户交互。Ellisys软件的结果如下:
之后,Ellisys软件将自动解密任何后续安全连接的数据。此过程在下面的“已认证连接”一章中描述。
确保简单配对
SSP使用一种更加精细的机制,称为椭圆曲线密码术,避免使用PIN码作为链路密钥(Link Key)计算过程的一部分(PIN码或其他用户码仍然可以用作认证过程的一部分),而是使用极大的随机数来给Link Key计算做种子。因此,可能的链路密钥(Link Key)的数量不再限于小于2^128的可能性,这远远超出了任何现实的攻击者能力。
为了实现这一点,SSP过程开始于在两个设备之间建立不同种类的共享秘密。这个共享秘密被称为Diffie-Hellman密钥(DHKey),是一个192位随机数。作为先决条件,两个设备每个都具有私钥和公钥。公共密钥是通过空中传播的,任何人都可以知道,但私钥永远不会被披露。我们将这两个Key称为SSP公钥/私钥对,但这些也称为Diffie-Hellman公钥/私钥对(Diffie和Hellman是开发该算法的两个人)。
用于创建SSP密钥对的精心选择的数学空间和算法使得:
非常困难(即不可能使用当前最先进的计算机)使用公钥计算私钥(但是很容易根据私钥计算公钥)
给定两个SSP密钥对A和B,存在一个众所周知的函数F,使得F(PublicA,PrivateB)= F(PublicB,PrivateA)。这个函数的结果是DHKey。只有拥有A和B的两个设备能够计算出相同的DHKey。
这是SSP的神奇之处:两台设备将能够进行配对,而无需通过空中传输任何关键信息,且无需通过带外机制(例如键入它)在键盘上共享该信息)。DHKey将用作计算链路密钥(Link Key)的种子。配对过程的其余部分与LMP配对相似。
SSP配对过程由以下图表描述:
这是Ellisys嗅探器捕获的同一通信流:
嗅探器不知道的唯一信息(为了从通过空中传输的通信流计算链路密钥(Link Key))是SSP私钥。实际上,只需要两个SSP私钥中的一个来确定DHKey,因此需要链路密钥(Link Key)。如果用户将其设备的SSP私钥提供给Ellisys分析软件,则将自动推断从本设备与任何其他设备配对的链路密钥(Link Key)。
另一种方法是使用SSP调试模式。我们现在了解SSP的基础知识,了解SSP调试模式很简单。置于SSP调试模式的设备将不会使用其通常的SSP私钥/公钥对,而会使用SSP调试模式私钥/公钥对。如果两个设备中的任一个置于SSP调试模式下,Ellisys嗅探器将能够通过识别通过空中发送的调试模式公钥并使用相应的公钥来自动推导出配对产生的链路密钥(Link Key)。使用SSP调试模式或提供两个SSP私钥之一是完全相同的。
以下屏幕截图显示了当使用SSP调试模式时Ellisys软件发现的Link Key:
认证连接
配对后,两台设备共享相同的链路密钥(Link Key)。然后,这些设备可以使用链路密钥(Link Key)进行身份验证(以确保其他设备确实是其所说的),并导出加密密钥(Encryption Key)(以保护由两个设备交换的数据)。
数据在LMP_start_encryption请求之后被加密。完整的启动加密过程如下图所示:
Ellisys软件中显示的同一通信流:
有趣的是,数据包将在LMP_start_encryption请求之后被加密,所以即使LMP_accepted的握手也将被加密。以下屏幕截图显示哪些数据包已加密。当锁图标为蓝色时,这意味着数据包是纯文本(未加密的)。当锁图标为绿色时,表示数据包已成功解密。