背景
为了以最小的空间开销实现PC证书的撤销,SCMS采用了链接值算法来生成PC证书中的CN字段:
用一个种子 l s ( 0 ) ls(0) ls(0)扩展生成某设备指定周期 i i i的链接值种子 l s ( i ) ls(i) ls(i),在使用该种子生成周期 i i i内 J J J个链接值,这 J J J个链接值作为设备在第 i i i周期内的 J J J张假名证书的CN字段。
当要吊销该设备的第 i i i周期及之后的所有PC时,只需要在CRL中添加该设备的 l v ( i ) lv(i) lv(i)即可。
本文简述链接值算法。
具体过程
记
l
a
_
i
d
la\_id
la_id为LA的32bit标识字符串。
为每一组假名证书生成一个128bit的随机数,作为该组假名证书第i=0周期的初始链接种子
l
v
(
0
)
lv(0)
lv(0)。
文字描述
- LA选取32bit的随机字符串: L a _ i d {La\_id} La_id
- 对于一套假名证书,LA生成128bit的随机字符串,称为
i=0周期时的初始化链接种子
: l s ( 0 ) ls(0) ls(0)
i i i表示时间周期(比如一周)
j j j表示一个时间周期内的证书(比如一周20张证书) - 之后对于每一个时间周期
i
>
0
i>0
i>0, 计算链接值种子**
l
s
(
i
)
ls(i)
ls(i)**:
l s ( i ) = H u ( l a _ i d ( 16 b i t ) ∣ ∣ l s ( i − 1 ) ( 128 b i t ) ∣ ∣ 0 ( 112 b i t ) ) ls(i) = H_u\Bigl(la\_id(16bit) || ls(i-1)(128bit) || 0(112bit)\Bigr) ls(i)=Hu(la_id(16bit)∣∣ls(i−1)(128bit)∣∣0(112bit))
H u ( m ) H_u(m) Hu(m):表示m的SM3运算后的结果的u字节的最高有效位。CCSA中取u=16
a ∣ ∣ b a || b a∣∣b:表示a和b字符串的拼接
l s ( 0 ) , l s ( 1 ) , . . . , l s ( i ) ls(0), ls(1), ..., ls(i) ls(0),ls(1),...,ls(i) 构成了一个链接值种子的伪随机序列,称为linkage chain
,LC
性质: l s ( i − 1 ) ls(i-1) ls(i−1)可以很容易推导出 l s ( i ) ls(i) ls(i),反过来却不行 - 计算链接值
linkage value
:
l v ( i , j ) = [ S M 4 l s ( i ) ( l a _ i d ( 16 b i t ) ∣ ∣ j ( 32 b i t ) ∣ ∣ 0 ( 80 b i t ) ) ⊕ ( l a _ i d ( 16 b i t ) ∣ ∣ j ( 32 b i t ) ∣ ∣ 0 ( 80 b i t ) ) ] v lv(i,j) = \Bigl[SM4_{ls(i)}\Bigl(la\_id(16bit) || j(32bit) || 0(80bit)\Bigr) \oplus\Bigl(la\_id(16bit) || j(32bit) || 0(80bit)\Bigr) \Bigr]_v lv(i,j)=[SM4ls(i)(la_id(16bit)∣∣j(32bit)∣∣0(80bit))⊕(la_id(16bit)∣∣j(32bit)∣∣0(80bit))]v
S M 4 k ( m ) SM4_k(m) SM4k(m):使用密钥k对输入m进行SM4加密。
a ⊕ b a\oplus b a⊕b:a和b的异或
[ a ] v [a]_v [a]v:a的v字节的最高有效位。CCSA中取72
在PCA生成PC证书,以及设备处理CRL时,都要执行该操作 - 上述步骤中,LA会用PCA的公钥证书加密lv后提供给RA。RA将其与PC的证书请求关联后发送给PCA。PCA解密后,将lv写入PC证书。PCA在生成PC时,使用蝴蝶密钥扩展算法来为每个证书生成签名密钥和加密密钥,并对证书进行加密,RA拿到的是加密后的PC证书。
- 整个过程中,RA洗牌,LA生成lv,PCA对PC加密,没有任何一个组件可以获取假名证书、lv、设备标识的映射关系,保护了设备(主要是OBU)的隐私
- 撤销时,只需要在CRL中公示** L a _ i d , l v ( i ) 以 及 i 值 {La\_id},lv(i)以及i值 La_id,lv(i)以及i值**,设备端即可计算出所有i及i之后周期的链接值
PS:在美国的SCMS中,链接值权威机构(LA)有两个,称为LA1和LA2,国内的CCSA标准中,LA只有一个。对于两个LA的情况,每个LA的计算过程与上述描述类似,只不过其生成的结果不是链接值,而是成为预链接值,由PCA使用两个预链接值异或得到最终的链接值。