中國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 智能交通 數字證書應用接口規範文檔。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章