creator-assertions / identity-assertion

Creator Assertions Working Group :: Identity Assertion
https://creator-assertions.github.io/identity/
Other
6 stars 7 forks source link

Create a CAWG Identity threat model #97

Closed puhley closed 3 months ago

puhley commented 5 months ago

Before the 1.0 release, a threat model should be created to ensure that the specification is robust against any potential attacks. While some of the issues can only be addressed at the implementation level, it is also possible for the specification to give flawed or incomplete guidance. In addition, a threat model will be a useful starting place for implementors to allow them to understand which threats are addressed by the specification and which threats are their responsibility to handle within the implementation.

Some expected attack vectors would include:

Replay attacks:

Name collisions (both intentional and coincidental). This is both a technical differentiation and UI differentiation.

Parsing and validation errors: The spec needs to be further along to really dig into these but it will need to be in the specification. However, here are a few common attack themes:

Homoglyph and typo-squatting attacks:

Response:



paulengland commented 5 months ago

Thanks for starting this -

There’s also a set of worries that originate from the fact that we have more than one signature. I’ve tried to mitigate (although not fix) these concerns in This issue documents security fixes to the identity map · Issue #95 · creator-assertions/identity-assertion (github.com) (and the related PR.)

Here's some explanatory text from the PR:

Identity Assertions primarily allow a credential holder to form a non-repudiable, tamper-evident binding between the credential subject and the list of referenced assertions. In some cases, the identity assertion provides an additional trust signal over the information provided by the C2PA Claim Signature, and in other cases, the Identity Assertion is of primary interest, and the Claim Signature provides supplemental information.

The Identity Assertion straightforwardly supports the former (trust-signal) case, because the Claim Signature integrity protects the identity assertion from stripping or replacement. This means that the identity assertion cannot be tampered without invalidating the Claim Signature.

However, the converse is not true. Without additional protections, the identity assertion does not guard against the Claim Signature being stripped and replaced. The mechanisms described in this section provide protections against this attack.

The Claim Signature protects against stripping or modification of an identity assertion because the hash of the identity assertion is included in the Claim Signature. Unfortunately, it is not possible for the identity assertion to include the hash of the Claim Signature because it is not known when the identity assertion is created. This specification provides a weaker binding that allows the identity assertion creator to specify the key/certificate that is authorized to sign the Claim. This does not prevent a Claim Signature being stripped and replaced by the same Claim Signer, but it does prevent the Claim Signature from being replaced by a different Claim Signer. To enable this protection, the identity assertion creator can optionally include the hash of the Claim Signer credential/certificate authorized to (subsequently) sign the Claim. If these protections are not needed (for example, if the identity assertion is expected to be a supplemental trust signal), then the claim_certificate_hash field can be omitted.

Similar security considerations apply in the case of multiple identity assertions. If more than one identity assertion is present, then earlier-created identity assertions that are referenced by hash by later-created identity assertions are protected from modification. However, later-created identity assertions are not protected from being stripped and replaced. This attack can be mitigated by each identity assertion stating the hash of the credentials/certificates that are authorized for use by other identity assertions, in a very similar way to how the claim_certificate_hash field is used.

Finally, note that referenced_assertions field MUST include the JUMBF URI of all of the assertions in this Claim, although the assertion hashes may be omitted (apart from for one hard-binding assertion). This guards against additional assertions being added that were not authorized by the identity assertion creator.

puhley commented 5 months ago

Adding notes for future reference: Replay attacks are, at least partially, being addressed by adding a hard binding reference in a to-be-signed map: https://github.com/creator-assertions/identity-assertion/pull/75

puhley commented 5 months ago

Note: The C2PA signer should not be considered to be trusted in this threat model. We have to consider the possibility that the the C2PA signing system gets compromised since we are dealing with nation state actors. The identity assertion and identity credential should not be able to be compromised by a malicious/compromised C2PA signing system. For instance, all signatures should be created within the signer's environment and the payload provided to the C2PA signing system must be what is to appear in the final image. In addition, the identity assertion should contain a hard binding within the signature provided to the C2PA signing system so that the C2PA signing system can not embed the identity assertion into other images.

christianpaquin commented 5 months ago

Note: The C2PA signer should not be considered to be trusted in this threat model.

Right. That's one of the motivations behind PR #96.

scouten-adobe commented 3 months ago

Closed by #99.