中国C-V2X SPDU格式解读

1.SPDU简介
SPDU即Secure Protocol Data Unit, 是在V2X设备之间进行传输的消息结构。结构如下:

SecuredMessage ::= SEQUENCE {
    version        Uint8,		// 版本号,当前为2
    payload        Payload		// 消息载荷 
}

消息载荷又分为3类消息:

Payload ::=CHOICE {
  unSecuredData         Opaque,          // 未签名、未加密的负载
  signedData            SignedData,      // 签名负载
  encData               EncryptedData    // 加密负载
}

以下主要对签名的SPDU进行解读。

2. Signed SPDU
下图为payload为签名负载的SPDU的主要结构:
在这里插入图片描述签名负载主要包括3部分

SignedData ::= SEQUENCE {
  signer        SignedInfo,  // 签名者的信息,证书、证书链或者证书的hash值,
  tbs           TBSData,	 // To Be Signed Data 被签名的数据
  sign          Signature    // 签名
}

signer包含证书,用于验证证书的合法性,其中的公钥用于验证签名的有效性。

SignedInfo ::= CHOICE {
  self                   NULL,                  // 自签为空,用于申请注册证书
  certificate            SequenceOfCertificate, // 证书或证书链
  certificateDigest      CertificateDigest,     // 证书的hash值, 
  ...
}

被签名的数据包括三部分,其结构如下:

TBSData ::= SEQUENCE {
  headerInfo    HeaderInfo,   	// 消息头
  data          OCTET STRING (SIZE(0..MAX)) Optional,   // BSM,RSM,MAP等消息
  extHash       OCTET STRING (SIZE(32)) Optional  // data已发送或较大,不在发送data,发送摘要
}

消息头结构如下:

HeaderInfo ::= SEQUENCE {
  itsAid		INTEGER,					// 智能交通应用标志
  hashAlg		HashAlgorithm Optional,		// digest和ext所使用的摘要算法,SM3 or sha-256等
  genTime		TIME64 Optional,			// 消息产生时间
  expiryTime	TIME64 Optional,			// 消息失效时间
  location	    ThreeDLocation,				// 消息产生地理坐标
  digest		HashedId3 Optional,			// 证书标识
  encKey		PublicEncryptionKey Optional	// 响应数据需要使用encKey指定的对称加密算法加密,并用指定的公钥对对称密钥加密
}

签名结构如下:

Signature ::= SEQUENCE {
  curve		EccCurve,
  r 	    ECCPoint,
  s			OCTET STRING (SIZE(32))
}

3.总结
本文对签名的SPDU消息进行了简单的解读,主要参考了GB/T 37374-2019 智能交通 数字证书应用接口规范文档。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值