【问题标题】:iBeacon Data Encryption (Advertising Mode)iBeacon 数据加密(广告模式)
【发布时间】:2017-01-07 21:41:02
【问题描述】:

我的目标是加密 iBeacon 数据(UUID+MajorID+MinorID:20 字节),最好包含时间戳(加密和明文),因此总计约为 31/32 字节。 正如您已经发现的那样,这超出了允许的最大 iBeacon 数据(31 个字节,包括 iBeacon 前缀和 tx 功率)。 因此,加密只能通过创建自定义信标格式而不是 iBeacon 格式来工作? 谈论加密:我会考虑使用使用 CBC 操作模式的对称密码(以避免由于重复而导致解密,最重要的是避免密文调整导致 UUID 更改,Major-/MinorID)。将IV(初始化向量)公开(未加密)不是问题,对吧? 请记住,iBeacons 在广告模式下工作(仅传输),无需事先连接,因此我无法在发送任何数据之前交换初始化向量 (IV)。 使用最合适的密码算法应该考虑哪些因素? AES-128 可以吗?有或没有填充方案?我也考虑过 AES-GCM 星座,但由于使用的广告模式,我不认为它真的有必要/适用。我应该如何交换会话令牌?此外,在我的情况下没有真正的会话,iBeacons 24/7 全天候发送数据,开放式,没有真正的连接初始化。 假设一个系统包含 100 个 iBeacon、20 个设备和 1 个应用程序。每个 iBeacon 定期(即 500 毫秒)发送数据,由附近的设备通过 BLE 接收,然后通过 udp 将数据转发给应用程序。 所以系统总览关系为:

n 个 iBeacons -(ble)- k 个设备 -(udp)- 1 个应用程序

是否可以在每个 iBeacon 上使用相同的加密密钥?如果我要使用元组(iBeacon Id / 加密密钥),我还必须将 iBeacon Id 添加到每个数据包中,从而能够在字典中查找密钥。 数据应该在设备上解密还是只在应用程序的后期才解密?

【问题讨论】:

  • 你能说明你的最大数据长度吗?只允许 31 个字节,或者?
  • @Luke:iBeacon允许31字节的数据,而一般使用30字节(9(iBeacon前缀)/16(UUID)/2(MajorId)/2(MinorId)/1(TX Power ))。
  • 如果您想要完全的安全性,31 个字节的使用并不多。考虑 CTR 模式而不是 CBC。
  • 您没有说明接收信息的目标平台,但在 iOS 上必须提供您正在寻找的 iBeacons 的 UUID;您不能随意扫描 iBeacons。这意味着您只有 64 位来编码您的数据(主要和次要)。
  • @Luke:谢谢你的提示。

标签: encryption bluetooth-lowenergy ibeacon ads


【解决方案1】:

您可以查看Eddystone-EID spec,了解 Google 如何尝试解决类似问题。

我不是您提出的所有问题的专家,但我认为 Google 为您的第一个问题提供了一个很好的解决方案:您如何才能让您的加密有效负载适合可用的少量字节信标包?

他们的回答是:你不知道。他们通过截断加密的有效负载来生成哈希,然后使用在线服务“解析”这个哈希并查看它是否匹配来解决这个问题您的任何信标。在线服务只是对您注册的每个信标执行相同的哈希算法,并查看它是否在该时间段内得出相同的值。如果是这样,它可以将加密的哈希标识符转换为有用的。

在您使用这种方法走得太远之前,请务必考虑@Paulw11 的观点,即在 iOS 设备上,您必须预先知道 16 字节 iBeacon UUID,否则操作系统会阻止您读取数据包的其余部分。因此,如果使用 iBeacon,您可能必须坚持使用 Android 平台,或者切换到类似的 AltBeacon 格式,在 iOS 上没有此限制。

【讨论】:

    【解决方案2】:

    感谢您的精彩帖子,我之前没有听说过 Eddystone 规范,它确实值得研究,它的最大有效负载长度为 31 字节,就像 iBeacon 一样。在论文中写道,一般来说,它是时间戳值的加密(从预定义的纪元开始)。我的处理步骤是否正确?

    1. 为每个信标定义密钥 (EIK) 并与另一个解析器或服务器共享这些密钥(如果存在没有在线资源的星座);
    2. 使用 PRF(如 AES CTR)在服务器上创建查找表;
    3. 使用 PRF(即 AES CTR?)加密信标上的时间戳,并将 Eddystone 格式的数据发送到解析器/服务器;
    4. 服务器将收到的密文与查找表中的条目进行比较,从而知道信标 id,因为每个信标都有唯一的密钥,从而导致不同的密文
    5. 它与 AES-EAX 的工作方式是否相同?我必须在算法中输入一个 IV(nonce 值)以及密钥和消息?另一端会构建相同的元组来比较密文和标签'?

    问题:IRK(身份解析密钥)呢,它是什么?哪个随机数将用于 AES CTR?每个信标会使用相同的随机数吗?解析器/服务器也必须知道它。 时间同步呢?信标和解析器/服务器之间没有真正的连接,但是否假设两端都与同一时间服务器同步?或者如果2011年一端工作,而2017年解析器已经到来,信标和解析器/服务器应该如何获得相同的密文?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      相关资源
      最近更新 更多