AliGenie BLE Mesh Provisioning 整个过程

AliGenie BLE Mesh Provisioning 整个过程

结合 Mesh Spec 1.0.1 和 AliGenie 5.0 版本,可知天猫精灵在和设备进行 Provisioning 过程中,最终的路线图如下:

image

Beacon

在 Provisioning 的开始阶段,需要由 Device 发送 Unprovisioned Beacon 广播包,Mesh Beacon 的广播包格式如下:

image

其中 Type 字段是 «Mesh Beacon» ,而 Beacon Type 则有两个值可以选,

image

这里为 0x00 代表 Unprovisioned Device Beacon 。

而对于 Unprovisioned Beacon 类型的 Beacon Data,Spec 规定了其格式为:

image

第 0 个字节的 0x00 代表上述的 Unprovisioned Beacon ,Device UUID 的 16 个字节由厂家定义,AliGenie 将其定义为:

Field Size(Octets) Notes
CID 2 公司ID,设置为0x01A8:Taobao
PID 1 Bit0-3 蓝牙广播包版本号,目前是0x01<br />bit4为1:一机一密<br />bit5为1:支持OTA<br />bit6~7: 00:BLE4.0<br /> 01:BLE4.2<br /> 10:BLE5.0<br /> 11:BLE5.0以上
ProductID 4 阿里巴巴平台颁发,一型一号
MAC地址 6 阿里巴巴平台颁发,一机一号
FeatureFlag 1 bit7-1:uuid版本号,目前版本为1<br />bit0 0:处于未配网广播状态<br /> 1:处于静默广播状态
RFU 2 0x00 Reserved for future use

OOB Infomation 为全 0,代表不使用任何 OOB 手段传输公钥(Public Key),而是直接通过 BLE 广播包传输公钥(之后会有介绍)。

image

最后,Beacon 里不包含 URI Hash

对于 Unprovisioned Beacon,AliGenie 给出了两种状态

  • 未配网状态:Device UUID 里的 FeatureFlag 的 bit0 为 0,广播时长 40ms,广播间隔 100ms,广播持续时间默认 10 分钟。
  • 静默广播状态:Device UUID 里的 FeatureFlag 的 bit0 为 1,广播时长 120ms,广播间隔 60s,不响应 Provionser 的配网消息。

当 Device 处于未配网状态,超时后也未被配网时,自动进入静默广播状态。

Invitation

天猫精灵收到 Unprovisioned Beacon 时,会开始进行 1: Invitation & Capabilities 流程:

image

天猫精灵首先会向设备发送 Provisioning Invite PDU,其中包含参数 Attention Duration,该参数用于 Device 进行一些操作(例如灯闪烁,蜂鸣器响)来吸引人注意的持续时间。

image

之后 Device 返回 Provisioning Capabilities PDU,根据 AliGenie 5.0 规定,我们需要将 Static OOB Type 位置 1,而 Public Key TypeOutput OOBInput OOB 都不需要。

image

Exchange public keys

在本阶段 Provisioner 和 Device 通过椭圆曲线 diffie-hellman 密钥交换算法(ECDH)方式共同协商出了一个密钥(Session Key),用于后续信息的加密传输。

关于 ECDH 的详细介绍可以参考 BLE安全机制从入门到放弃,下面仅简单介绍一些。

ECDH 利用了椭圆曲线中的数学问题来解决密钥传输问题,公式可抽象为:
Y = x * G
该公式已知椭圆曲线上的点 Y、基点 G 的时候,很难求出 x 。其中算术符号 * 表示的不是普通的乘法,而是一种在椭圆曲线上的特殊算法。

以 Bob 和 Alice 为例,看其如何在有 Eve 监听的情况下协商出一个密钥。

image

参考上图,Bob 利用公式 pb = sb * G 生成了公钥 pb,根据上述信息可知,已知 pbG 很难求出 pa 。Alice 也利用相同的方式生成了公钥 pa 。之后他们俩相互交换公钥 pa, pb ,然后就可以计算出一个双方都拥有的密钥 DHey
$$
\begin{align}
DHkey &= sb * pa \
&= sb * sa * G \

DHkey &= sa * pb \
&= sa *pb * G

\end{align}
$$
上述运算符 * 具有交换律,因此 Alice 和 Bob 计算的 DHkey 值一致,可以用于后续加密计算。

而一直监听的 Eve 只拥有数据 G, pa, pb,根据上述公式特性,很难根据 G, pa, 或 pb 计算出一个私钥,因此无法得到上述的 DHkey,从而 Bob 和 Alice 成功在有窃听风险的环境中协商出了一个安全的密钥。

再来看看 Provisioning 过程中的 Exchange public keys 阶段,

image

天猫精灵向设备发送 Provisioning Start PDU,其携带的参数里 Authentication Method 表明选择 Static OOB 认证方式。之后双方随机生成一个私钥,再根据 ECDH 的公式计算出公钥,双方交换公钥,再次利用 ECDH 公式即可协商出一个密钥(ECDHKey)用于后续信息加密传输。当然,在这一过程中我们走的是 2a:Start without OOB Public Key 这条路径,如下图:

image

其实还有 2b:Start using OOB Public Key 这条路径,此时 Provisioner 通过 OOB 的方式获取 Device 的公钥,除此之外没有其他区别,流程如下图:

image

Authentication

在认证阶段,通信双方都需要验证对方的身份,整体流程如下:

image

首先通信双方通过 Provisioning Confirmation 交换一个 128-bit 的 Confirmation 值:

image

Provisioner 的 Confirmation 值的计算公式如下:
ConfirmationProvisioner = AES_-CMAC_{ConfirmationKey}(RandomProvisioner || AuthValue)
其中输入参数有一个 RandomProvisioner 和一个 AuthValue 值,Random 值是随机生成的,而 AuthValue 则是由厂商定义,AliGenie 将其定义为:
AuthValue = SHA256(Product ID,MAC,Secret)
将 ProductID,MAC,Secret 三元组通过字符串用英文逗号连接,然后进行 SHA256 摘要计算,取前16字节。注:这里用于计算 SHA256 的英文字母全部为小写。SHA256 类似一个 Hash 散列函数,输入是一个字符串,输出是一个 256-bit 的散列值,AliGenie 取前 16 个字节。

image

Device 端也是类似的操作。

当双方都计算得到 Confirmation 值后,通过 Provisioning Confirmation PDU 交换该值,之后 Provisioner 通过 Provisioning Random PDU 发送 RandomProvisioner 值,这样 Device 就可以利用自身的 AuthValue 和收到的 RandomProvisioenr 来验证收到的 Confirmation 是否正确,从而达到认证的目的。

Distribution of provisioning data

认证完成后,天猫精灵就准备下放数据了,利用之前的 ECDHKey 生成一个 session key,然后基于这个 session key 将数据(network key, NetKey Index, Key Refresh Flag, IV Update Flag, IV index, unicast value)加密,通过 Provisioning Data PDU 发送给 Device,若 Device 端成功接收,返回 Provisioning Complete,流程如下:

image

至此,Provisioning 过程结束,接下来就是 Configuration 过程了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容