跳转到主要内容

蓝牙配对第二篇:密钥生成方法

editor Chen 提交于

<font color="#FF8000">作者:蓝牙亚太区技术项目经理任凯</font>

《蓝牙配对第一篇:配对特性交换》谈到了低功耗(Low Energy,简称LE)的蓝牙配对特性交换。配对特性交换让连接的发起设备和响应设备双方都能够获悉彼此的配对特性。

可启用的配对特性有:
• OOB(Out-of-Band)数据标志位
• MITM(Man-in-the-Middle)标志位
• SC—低功耗安全连接(LE Secure Connection)标志位
• IO Cap—IO功能

*请阅读7月8日文章<em><a href="http://mp.weixin.qq.com/s?__biz=MzA4MTg3MTg2Mg==&amp;mid=2651236611&amp…;《蓝牙配对第一篇:配对特性交换》</a></em>,了解以上特性。

完成特性交换之后,双方设备就可以选择下一阶段所用的密钥生成方法了。下方列表中是低功耗传统配对(Legacy Pairing)和低功耗安全连接 (LE Secure Connection)的密钥生成方法。

低功耗传统配对:
• 直接连接(Just Works)
• 万能钥匙(Passkey Entry)
• 带外数据(Out-of-Band,简称OOB)

低功耗安全连接,除了以上三种方法以外,还增添了一种新方法:
• 数值比较(Numeric Comparison)

操作流程(Workflow)
下面介绍一下选用设备的密钥生成操作流程:

第1步:查看配对特性交换框架中的安全连接位。如果双方的安全连接位都等于1,则采用低功耗安全连接,并进入第2步。否则采用低功耗传统配对,并进入第3步。

第2步:当选用低功耗安全连接时,发起设备和响应设备应遵循如下矩阵选择配对方法:
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="80" valign="top"><p>&nbsp;</p></td>
<td width="106"><p>&nbsp;</p></td>
<td width="399" colspan="4"><p align="center"><strong>发起设备</strong><strong> </strong></p></td>
</tr>
<tr>
<td width="80" valign="top"><p>&nbsp;</p></td>
<td width="106"><p>&nbsp;</p></td>
<td width="97"><p><strong>OOB</strong><strong>已设置</strong><strong> </strong></p></td>
<td width="95"><p><strong>OOB</strong><strong>未设置</strong><strong> </strong></p></td>
<td width="104"><p><strong>MITM</strong><strong>已设置</strong><strong> </strong></p></td>
<td width="104"><p><strong>MITM</strong><strong>未设置</strong><strong> </strong></p></td>
</tr>
<tr>
<td width="80" rowspan="4"><p align="center"><strong>响应设备</strong><strong> </strong></p></td>
<td width="106"><p><strong>OOB</strong><strong>已设置</strong><strong> </strong></p></td>
<td width="97"><p>使用OOB</p></td>
<td width="95"><p>使用OOB</p></td>
<td width="104"><p>&nbsp;</p></td>
<td width="104"><p>&nbsp;</p></td>
</tr>
<tr>
<td width="106"><p><strong>OOB</strong><strong>未设置</strong><strong> </strong></p></td>
<td width="97"><p>使用OOB</p></td>
<td width="95"><p>查看MITM</p></td>
<td width="104"><p>&nbsp;</p></td>
<td width="104"><p>&nbsp;</p></td>
</tr>
<tr>
<td width="106"><p><strong>MITM</strong><strong>已设置</strong><strong> </strong></p></td>
<td width="97"><p>&nbsp;</p></td>
<td width="95"><p>&nbsp;</p></td>
<td width="104"><p>使用IO功能 </p></td>
<td width="104"><p>使用IO功能 </p></td>
</tr>
<tr>
<td width="106"><p><strong>MITM</strong><strong>未设置</strong><strong> </strong></p></td>
<td width="97"><p>&nbsp;</p></td>
<td width="95"><p>&nbsp;</p></td>
<td width="104"><p>使用IO功能 </p></td>
<td width="104"><p>采用直接连接 </p></td>
</tr>
</table>

• “使用OOB”意为选择Out-of-Band
• “查看MITM”意为忽略“OOB”,查看MITM标识
• “使用IO功能”,进入第4步,根据双方设备的IO功能选择密钥生成方法

第3步:当选用低功耗传统配对(Legacy Pairing)时,发起设备和响应设备应遵循如下矩阵选择配对方法:
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="80" valign="top"><p>&nbsp;</p></td>
<td width="106"><p>&nbsp;</p></td>
<td width="399" colspan="4"><p align="center"><strong>发起设备</strong><strong> </strong></p></td>
</tr>
<tr>
<td width="80" valign="top"><p>&nbsp;</p></td>
<td width="106"><p>&nbsp;</p></td>
<td width="97"><p><strong>OOB</strong><strong>已设置</strong><strong> </strong></p></td>
<td width="95"><p><strong>OOB</strong><strong>未设置</strong><strong> </strong></p></td>
<td width="104"><p><strong>MITM</strong><strong>已设置</strong><strong> </strong></p></td>
<td width="104"><p><strong>MITM</strong><strong>未设置</strong><strong> </strong></p></td>
</tr>
<tr>
<td width="80" rowspan="4"><p align="center">响应设备 </p></td>
<td width="106"><p><strong>OOB</strong><strong>已设置</strong><strong> </strong></p></td>
<td width="97"><p>使用OOB</p></td>
<td width="95"><p>查看MITM</p></td>
<td width="104"><p>&nbsp;</p></td>
<td width="104"><p>&nbsp;</p></td>
</tr>
<tr>
<td width="106"><p><strong>OOB</strong><strong>未设置</strong><strong> </strong></p></td>
<td width="97" valign="top"><p>查看MITM</p></td>
<td width="95" valign="top"><p>查看MITM</p></td>
<td width="104"><p>&nbsp;</p></td>
<td width="104"><p>&nbsp;</p></td>
</tr>
<tr>
<td width="106"><p><strong>MITM</strong><strong>已设置</strong><strong> </strong></p></td>
<td width="97"><p>&nbsp;</p></td>
<td width="95"><p>&nbsp;</p></td>
<td width="104"><p>使用IO功能 </p></td>
<td width="104"><p>使用IO功能 </p></td>
</tr>
<tr>
<td width="106"><p><strong>MITM</strong><strong>未设置</strong><strong> </strong></p></td>
<td width="97"><p>&nbsp;</p></td>
<td width="95"><p>&nbsp;</p></td>
<td width="104"><p>使用IO功能 </p></td>
<td width="104"><p>采用直接连接 </p></td>
</tr>
</table>

• “使用OOB”意为选择Out-of-Band
• “查看MITM”意为忽略“OOB”,查看MITM标识
• “使用IO功能”,进入第4步,根据双方设备的IO功能选择密钥生成方法

第4步:以下是IO功能和密钥生成方法的映射。根据下面这张图表,发起设备和响应设备双方就能根据他们的配对特性找到适合的连接方法。
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="75"><p>&nbsp;</p></td>
<td width="548" colspan="5"><p align="center"><strong>发起设备</strong><strong> </strong></p></td>
</tr>
<tr>
<td width="75"><p><strong>响应设备</strong><strong> </strong></p></td>
<td width="116"><p><strong>仅有显示屏</strong><strong> </strong></p></td>
<td width="120"><p><strong>显示是或否</strong><strong> </strong></p></td>
<td width="111"><p><strong>仅有键盘</strong><strong> </strong></p></td>
<td width="83"><p><strong>无输入</strong><strong> </strong><br />
<strong>无输出</strong><strong> </strong></p></td>
<td width="118"><p><strong>键盘和显示屏</strong><strong> </strong></p></td>
</tr>
<tr>
<td width="75"><p><strong>仅有显示屏</strong><strong> </strong></p></td>
<td width="116"><p>直接连接 <br />
未经验证 </p></td>
<td width="120"><p>直接连接 <br />
未经验证 </p></td>
<td width="111"><p>密钥输入:响应设备显示,发起设备输入 <br />
通过验证 </p></td>
<td width="83"><p>直接连接 <br />
未经验证 </p></td>
<td width="118"><p>密钥输入:响应设备显示,发起设备输入 <br />
通过验证 </p></td>
</tr>
<tr>
<td width="75" rowspan="2"><p><strong>显示是或否</strong><strong> </strong></p></td>
<td width="116" rowspan="2"><p>直接连接 <br />
未经验证 </p></td>
<td width="120"><p>直接连接(低功耗传统配对) <br />
未经验证 </p></td>
<td width="111" rowspan="2"><p>密钥输入:响应设备显示,发起设备输入 <br />
通过验证 </p></td>
<td width="83" rowspan="2"><p>直接连接 <br />
未经验证 </p></td>
<td width="118"><p>密钥输入(低功耗传统配对):响应设备显示,发起设备输入 <br />
通过验证 </p></td>
</tr>
<tr>
<td width="120"><p>数值比较(低功耗安全连接) <br />
通过验证 </p></td>
<td width="118"><p>数值比较(低功耗安全连接) <br />
通过验证 </p></td>
</tr>
<tr>
<td width="75"><p><strong>仅有键盘</strong><strong> </strong></p></td>
<td width="116"><p>密钥输入:发起设备显示,响应设备输入 <br />
通过验证 </p></td>
<td width="120"><p>密钥输入:发起设备显示,响应设备输入 <br />
通过验证 </p></td>
<td width="111"><p>密钥输入:发起设备和响应设备输入 <br />
通过验证 </p></td>
<td width="83"><p>直接连接 <br />
未经验证 </p></td>
<td width="118"><p>密钥输入:发起设备显示,响应设备输入 <br />
通过验证 </p></td>
</tr>
<tr>
<td width="75"><p><strong>无输入</strong><strong> </strong><br />
<strong>无输出</strong><strong> </strong></p></td>
<td width="116"><p>直接连接 <br />
未经验证 </p></td>
<td width="120"><p>直接连接 <br />
未经验证 </p></td>
<td width="111"><p>直接连接 <br />
未经验证 </p></td>
<td width="83"><p>直接连接 <br />
未经验证 </p></td>
<td width="118"><p>直接连接 <br />
未经验证 </p></td>
</tr>
<tr>
<td width="75" rowspan="2"><p><strong>键盘和显示屏</strong><strong> </strong></p></td>
<td width="116" rowspan="2"><p>密钥输入:发起设备显示,响应设备输入 <br />
通过验证 </p></td>
<td width="120"><p>密钥输入(低功耗传统配对):发起设备显示,响应设备输入 <br />
通过验证 </p></td>
<td width="111" rowspan="2"><p>密钥输入:响应设备显示,发起设备输入 <br />
通过验证 </p></td>
<td width="83" rowspan="2"><p>直接连接 <br />
未经验证 </p></td>
<td width="118"><p>密钥输入(低功耗传统配对):发起设备显示,响应设备输入 <br />
通过验证 </p></td>
</tr>
<tr>
<td width="120"><p>数值比较(低功耗安全连接) <br />
通过验证 </p></td>
<td width="118"><p>数值比较(低功耗安全连接) <br />
通过验证 </p></td>
</tr>
</table>

随后,发起设备和响应设备就能获悉密钥生成阶段将要应用的方法了。后续的第三篇文章将继续介绍如何通过使用密钥输入(Passkey Entry),在低功耗传统配对中生成匹配密钥。

<strong>关于Bluetooth®蓝牙无线技术</strong>
蓝牙是一项全球通用的无线标准,它为我们带来了简便、安全的连接。蓝牙技术联盟携手30,000家成员公司,构建了覆盖全球的蓝牙社区。蓝牙技术在我们身边广泛的互连设备之间建立了统一与和谐的无线连接,并有力地驱动了创新。借助集体的智慧和共享的技术标准,蓝牙为全球用户带来了更加简便、安全、充实的技术体验。更多详情,请访问 www.bluetooth.com

欲了解更多蓝牙技术联盟开发人员相关资讯,请访问 www.developer.bluetooth.cn

<iframe scrolling="no" marginHeight="0" marginWidth="0" frameBorder="0" height="250" width="100%" src="http://www.eetrend.com/mouser-ad-2"></iframe&gt;