I recently started looking into security mechanisms used for Car2Car communication according to DSRC/WAVE and ETSI.
What I found so far is that each packet is signed using ECDSA mechanism. Also each packet either contains the certificate that is used for signing or some hash value identifying that certificate. This certificate contains the public key that can be used to verify the signature.
What puzzles me is the way the signature is created. I am aware that not the whole message is used for signing, but only a hash value. But the way this hash is created, looks a bit strange to me:
Hash ( Hash ( Data ) || Hash ( SignerInfo ) )
Data is the message or part of the message to be signed and
SignerInfo refers to the certificate in use (or to an empty string in some cases).
Why is this second part required?
Hashing the message as well as hashing the certificate does not include any secret credential as both are transmitted within the message.
Given the public key from the certificate I can validate that the related private key was used for signing.
While the length of the 2 hash values isn't very large, it still means that I have to run a second round of hashing which is probably not done "just for fun".
Which benefit do we gain from this extra step?