邮件身份验证码

消息流用于配置音频切换,请参阅 音频切换消息。对于这些重要的配置,提供程序需要 以确保消息由 GMSCore(快速配对模块)发送,而不是由任何 Seeker 中的其他应用。

生成 MAC(消息身份验证代码)

FP 搜寻器为设备配置消息添加消息身份验证码 并使用 HMAC-SHA256 编码。消息的 MAC 由以下部分的前 8 个字节组成:

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))

其中

  1. K 由 concat(账号密钥,48 字节 0)生成。
  2. message 是消息流的附加数据。
  3. nonce 由 concat(session_nonce, message_nonce);会话 下一部分中定义了 Nonce 和消息 Nonce。
  4. opad 是 64 个字节的外部填充,由输入的重复字节组成 0x5C
  5. ipad 是 64 个字节的内部填充,由输入的重复字节组成 0x36

会话 Nonce 和消息 Nonce

为防止重放攻击,提供商需要确保 Nonce 未 重复。由于在两个提供程序上保持时钟或计数器同步 且 Seeker 并不简单,因此提供程序会生成会话 Nonce (根据连接),在连接期间与所有消息共享, 而搜寻器则会生成消息 Nonce(每条消息),该 Nonce 由 为每条消息生成的内容。为每条消息生成 MAC 的 Nonce 为 会话 Nonce 和消息 Nonce 的组合,即 concat(session_nonce, message_nonce)。

我们将会话 Nonce 添加到设备信息事件组:

邮件群组名称
设备信息事件 0x03
消息代码名称
会话 Nonce 0x0A

当 RFCOMM 时,应生成会话 Nonce 并将其发送给 Seeker 连接:

八位字节 数据类型 说明
0 uint8 设备信息事件 0x03
1 uint8 会话 Nonce 0x0A
2 - 3 人 uint16 其他数据长度 0x0008
4-11 人 会话 Nonce 因人而异

为了在需要 MAC 时发送消息,搜寻者将发送一个消息 Nonce 和 MAC 地址一起发送。

八位字节 数据类型 说明
0 uint8 邮件群组 因人而异
1 uint8 邮件内容代码 因人而异
2 - 3 人 uint16 其他数据长度(其他数据长度 + 16) 因人而异
4 - 北 附加数据 因人而异
n + 1 - n + 8 消息 Nonce 因人而异
n + 9 - n + 16 邮件身份验证码 因人而异

验证 MAC(消息身份验证代码)

收到包含消息身份验证码的消息后,提供程序 应使用与生成函数相同的函数进行验证。也就是说, 则接收的 MAC 应等于

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))

其中:

  1. Kconcat(account key, 48-byte ZEROs) 生成,提供程序 应遍历所有存储的账号密钥以验证 MAC。
  2. message 是消息的附加数据(不包括消息 Nonce 和 MAC) 消息流

如果 MAC 正确,则提供者应遵循 消息。否则,提供程序应发送 NAK 和错误原因 0x3 - 不允许,因为信息验证代码不正确。