在IEEE 802.15.4z标准中,最关键的就是引入了STS(加扰时间戳序列),实现了安全测距,大大提高了测距应用的安全性能。在FiRa的实现中,其密钥派生功能是非常重要的一个部分,本文首先对FiRa MAC中加密以及信息相关的内容进行简单的介绍,为后续介绍相关源码的实现打好铺垫。关于FiRa标准中的角色、工作的基本原理,参考前一篇介绍MAC内容:FiRa标准——MAC实现(一)。
1. 关于FiRa MAC STS模式
对于FiRa MAC中加密相关内容的实现,首先需要了解FiRa中STS(Scrambled Timestamp Sequence)生成的两种类型:
- 静态STS(Static STS)
- 动态STS(Dynamic STS)
对于静态STS模式下,需要确保:
- 确保在一个测距轮的每个时隙都生成不同的STS来确保可靠的测距;
- 允许实现低成本和高性能;
- 保证立即重新同步。
对于动态STS模式,需要保证:
- 通过确保不以明文形式传输可识别信息来保护用户隐私;
- 保护通过UWB传输的数据(时间戳、应用有效载荷)的机密性、完整性和真实性;
- 确保每个时隙都可以生成不同的STS(初始STS,每个时隙增加1);
- 确保可以检测到重放攻击;
- 允许受控对象在单个控制消息上同步;
- 限制开销以优化链路预算;
- 限制旁路通道攻击的风险。
从两种模式的定义中,我们可以知道,在静态STS中,对于每个测距轮(Ranging Round)的对应时隙编号的STS是相同的,这就允许接收方能够更加快速的实现与控制器的同步;而对于动态STS而言,安全性更高,对于时隙索引一直递增,也就是说,每个测距时隙的STS都不同,这是与静态STS最大的区别。
由于实现的方式不一样,相应的其加密方式也有所不同。
1.1 动态STS密钥生成
从上图中可以看到,在实现中涉及到以下一些方法:
- KDF(Key derivation function),密钥派生函数,基于相应的输入、key生成计算需要的相关密钥内容,涉及生成的内容包括:
secDataProtectionKey
、secPrivacyKey
、secDerivedPayloadKey
、secDerivedAuthenticationKey
、phyStsIndecInit
、secDerivedAuthenticationIV
; - CSPRNG算法,用于生成STS;
- ECB算法,对于IEEE 802.15.4的Vendor IE需要使用ECB算法进行加密;
- CCM*(ccm start)算法,对于IEEE 802.15.4数据帧部分,需要使用CCM*算法进行加密处理。
对于STS模式下,我们可以看到,每个时隙phySTSindex、cryptoStsIndex都会增加,被用作每个时隙生成不同STS的种子、以及Vendor IE、Payload加密的参数。其初始值phyStsIndexInit由config digest通过KDF函数之后生成。
Vendor IE使用ECB算法进行加密,在ECB模式下,对密文位的任何修改都会对每个明文产生雪崩效应,因此,可以用于检测修改。
ECB加密使用特定秘钥secPrivacyKey
,对于一个完整的会话来说都是一样的,这样,受控对象可以随时用于同步。
IEEE Std 802.15.4z-2020中使用DRBG用于生成STS。cryptoStsIndex
被附加到一个32位计数器上,该计数器将在每个时隙的开始时重置,以确保无论之前时隙STS的大小如何,cryptoStsIndex
和当前配置的信息都足够生成STS。
对于数据载荷加密使用CCM*算法,无法对其内容进行假设,因此将使用Authenticated Encryption (身份验证加密,AE)。由于AE是基于计数器模式加密的,因此有必要向AE提供一个随机数(nonce)。这个随机数可以在每个加密数据包的前面传输,这将会增加传输开销。因此,cryptoStsIndex将被用作nonce更改的一部分。
1.2 静态STS密钥生成
与动态STS模式相比,整体进行了较大的简化:
1)Vendor IE部分不再进行加密;
2)生成STS的CSPRNG算法使用了初始化中配置的phyVUpper64;
3)cryptoStsIndex进行了简化,在每个测距轮的第一个时隙都会重置为0。
另外,在动态STS模式下还涉及到key rotation等方式来进一步提高加密的安全性。