ble cs技术(二):DRBG和hr1
Deterministic Random Bit Generator (DRBG)
介绍
DRBG,是个很重要的东西。需要先作为基础进行分析研究,不然后面对CS其他内容进行具体研究时会有影响。DRBG翻译过来叫做确定性随机比特生成器。
这个随机数生成怎么会有确定性呢,简单来说DRBG需要通过输入一些入参才能生成随机数结果,如果每次生成的入参都是一样的,那么这个输出的随机数结果也是一样的。那本质上他其实就是个加密算法,难以根据结果反推入参罢了。那么基于这个基础我们来对这个DRBG来进一步分析。
SIG规范原文对其的说明在:
BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 6, Part H 4.8 Channel Sounding random bit generation
和BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 6, Part E 3 DETERMINISTIC RANDOM BIT GENERATOR
算法基本说明
- 三个种子,在 CS Security Start procedure生成,使用随机数生成器(BR中定义的,[Vol 2] Part H, Section 2)生成。
- CS_IV(128bit)
- CS_IN(64bit)
- CS_PV(128bits)
- instantiation function h9()
实例化函数h9,用于生成key \(K_{DRGB}\)和 nonce \(V_{DRGB}\)
h9中种子派生(seed derivation)函数f8和key and nonce vector更新函数f9将会被调用。
其中通过f8把cs_iv、cs_in、cs_pv变成SM(256 bit)。
而再通过sm,把K和V(都是128bit),(第一次都为0)更新得到\(K_{DRGB}\)和 nonce \(V_{DRGB}\)
- f8():DRBG 派生函数,用到了f7和aes算法,把三个CS入参变成SM
- f9():DRBG更新函数,用到了aes算法。用SM把V和K(第一次为0)更新为kout和vout,用于给DRBD随机数生成器和下一次的KV更新使用
- f7():DRBG链式函数,用到了XOR和aes算法。属于f8,把三个CS入参变成SM的一部分
- DRBG nonce increment function
在key \(K_{DRGB}\)和 nonce \(V_{DRGB}\)真正用于随机数生成前, \(V_{DRGB}\)会进行一定处理,具体做法为
- Random bit generation function CS_DRBG。最后生成随机数的公式,使用AES算法以及入参key \(K_{DRGB}\)和 经过第五步更新过的nonce \(V_{DRGB}\),得到最后的随机数。
- 计数器和事务id
在算法中,会引入三个变量来保证生成的随机数会随着事务和通信交互次数的不同来使得不同事务的不同次数使用的随机数是不一样的。
- Transaction_Counter:事务计数器,每个事务id都会单独维护一个counter
- Transaction_Identifier:事务id,与CS相关应用相关
- Step_Counter:每次procedure 进行一次step 该值都会递增;
8.随机数更新规则:
-
有些事务一次不一定会都用完随机数所有位置,一个128bit的随机数可能一次只用了8bit,那么下一次使用将继续沿用剩下的120bit,直到用完再生成新的。
-
如果一个某个事务ID一次用了多个128bit随机数,那么事务counter也要增加
算法总结
-
DRBG随机数本质是加密,入参不变,回参不变。
-
主从双方会在开始时进行入参交换,保证后续使用的随机数都是双方已知。
-
由于counter会更新,所以每次生成的随机数也会不一样,只有通信双方的count都同步,才能保证双方的随机数一样。
hr1
hr1算法是对DRBG的一个补充,对于需要使用2的幂次长度随机数的场景,规定使用DRBG来生成。但CS技术有些场景需要用到的随机数不是2的幂次长度,这时候规范给出一个补充随机数生成方程hr1来使用。
hr1的内容如下:
其中N_CS_RANGE_GEN_RANDOMIZED_BITS是一个8bit的随机数。CS_DRBG即DRBG中使用的随机数生成公式。