SCMS中的链接值算法(CCSA版本)

背景

为了以最小的空间开销实现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)。
SCMS中的链接值算法(CCSA版本)

文字描述

  1. LA选取32bit的随机字符串: L a _ i d {La\_id} La_id
  2. 对于一套假名证书,LA生成128bit的随机字符串,称为i=0周期时的初始化链接种子 l s ( 0 ) ls(0) ls(0)
    i i i表示时间周期(比如一周)
    j j j表示一个时间周期内的证书(比如一周20张证书)
  3. 之后对于每一个时间周期 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),反过来却不行
  4. 计算链接值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时,都要执行该操作
  5. 上述步骤中,LA会用PCA的公钥证书加密lv后提供给RA。RA将其与PC的证书请求关联后发送给PCA。PCA解密后,将lv写入PC证书。PCA在生成PC时,使用蝴蝶密钥扩展算法来为每个证书生成签名密钥和加密密钥,并对证书进行加密,RA拿到的是加密后的PC证书。
  6. 整个过程中,RA洗牌,LA生成lv,PCA对PC加密,没有任何一个组件可以获取假名证书、lv、设备标识的映射关系,保护了设备(主要是OBU)的隐私
  7. 撤销时,只需要在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使用两个预链接值异或得到最终的链接值。

上一篇:案例:日期工具类


下一篇:string(的一些用法)