DIF Security Contexts for Linked Data

DID Latest

View on Github

Terminology

usage

The use for which a public key is listed according to the sidetree protocol.

publicKeyJwk

A secp256k1 public key in JWK format. A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. Read RFC7517.

Example:

{
  "@context": "https://identity.foundation/context/did-latest.jsonld",
  "id": "did:elem:eURSFEEv6J7s3TJ-jhT_ZS4uGRyCDbwc347EWlqpNgw#key-JUvpllMEYUZ2joO59UNui_XYDqxVqiFLLAJ8klWuPBw",
  "type": "EcdsaSecp256k1VerificationKey2019",
  "publicKeyJwk": {
    "crv": "secp256k1",
    "kid": "JUvpllMEYUZ2joO59UNui_XYDqxVqiFLLAJ8klWuPBw",
    "kty": "EC",
    "x": "dWCvM4fTdeM0KmloF57zxtBPXTOythHPMm1HCLrdd3A",
    "y": "36uMVGM7hnw-N6GnjFcihWE3SkrhMLzzLCdPMXPEXlA"
  }
}

publicKeyHex

A hex encoded secp256k1 compressed public key.

Example:

{
  "@context": "https://identity.foundation/context/did-latest.jsonld",
  "id": "did:elem:eURSFEEv6J7s3TJ-jhT_ZS4uGRyCDbwc347EWlqpNgw#key-JUvpllMEYUZ2joO59UNui_XYDqxVqiFLLAJ8klWuPBw",
  "type": "EcdsaSecp256k1VerificationKey2019",
  "publicKeyHex": "027560af3387d375e3342a6968179ef3c6d04f5d33b2b611cf326d4708badd7770"
}

EcdsaSecp256k1VerificationKey2019

A secp256k1 public key. If the key is embedded in a controller with property name publicKeyJwk (preffered), the key must be a valid JWK. If the key is embeded as publicKeyHex, it must be a compressed public key, and must be converted to JWK before being used to verify signatures according to JWS.

Example:

[
  {
    "@context": "https://identity.foundation/context/did-latest.jsonld",
    "id": "did:elem:eURSFEEv6J7s3TJ-jhT_ZS4uGRyCDbwc347EWlqpNgw#key-JUvpllMEYUZ2joO59UNui_XYDqxVqiFLLAJ8klWuPBw",
    "type": "EcdsaSecp256k1VerificationKey2019",
    "publicKeyJwk": {
      "crv": "secp256k1",
      "kid": "JUvpllMEYUZ2joO59UNui_XYDqxVqiFLLAJ8klWuPBw",
      "kty": "EC",
      "x": "dWCvM4fTdeM0KmloF57zxtBPXTOythHPMm1HCLrdd3A",
      "y": "36uMVGM7hnw-N6GnjFcihWE3SkrhMLzzLCdPMXPEXlA"
    }
  },
  {
    "@context": "https://identity.foundation/context/did-latest.jsonld",
    "id": "did:elem:eURSFEEv6J7s3TJ-jhT_ZS4uGRyCDbwc347EWlqpNgw#key-JUvpllMEYUZ2joO59UNui_XYDqxVqiFLLAJ8klWuPBw",
    "type": "EcdsaSecp256k1VerificationKey2019",
    "publicKeyHex": "027560af3387d375e3342a6968179ef3c6d04f5d33b2b611cf326d4708badd7770"
  }
]

EcdsaSecp256k1Signature2019

A JSON-LD Document has been signed with EcdsaSecp256k1Signature2019, when it contains a proof field with type EcdsaSecp256k1Signature2019. The proof must contain a key jws with value defined by the signing algorithm described here.

Example:

{
  "@context": "https://w3id.org/security/v2",
  "http://schema.org/action": "AuthenticateMe",
  "proof": {
    "challenge": "abc",
    "created": "2019-01-16T20:13:10Z",
    "domain": "example.com",
    "proofPurpose": "authentication",
    "verificationMethod": "https://example.com/i/alice/keys/2",
    "type": "EcdsaSecp256k1Signature2019",
    "jws": "eyJhbGciOiJFUzI1NksiLCJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdfQ..QgbRWT8w1LJet_KFofNfz_TVs27z4pwdPwUHhXYUaFlKicBQp6U1H5Kx-mST6uFvIyOqrYTJifDijZbtAfi0MA"
  }
}

OpenPgpVerificationKey2019

The name of the public key type used by OpenPgpSignature2019. This value will be present in a controller.

Example:

{
  "type": "OpenPgpVerificationKey2019",
  "id": "did:btcr:xxcl-lzpq-q83a-0d5#yubikey",
  "controller": "did:btcr:xxcl-lzpq-q83a-0d5",
  "publicKeyPgp": "\n-----BEGIN PGP PUBLIC KEY BLOCK-----\nComment: GPGTools - https://gpgtools.org\n\nmQENBF1N1CwBCADaCb/PSbxcxNf8baK6J2h1sKIAOX+Yoq4yOx+bCvrzYXV5/Noz\nVCTaVvZUNQa745K6VSW/tQl9FtJ7zFi7D/5w8ZBAzdBeYkNWhWSZ6vTgUplAxtUp\nOnzijDIvEXDYk8Ab...\n-----END PGP PUBLIC KEY BLOCK-----"
}

OpenPgpSignature2019

A JSON-LD Document has been signed with OpenPgpSignature2019, when it contains a proof field with type OpenPgpSignature2019.

Example:

{
  "@context": "https://w3id.org/security/v2",
  "http://schema.org/action": "AuthenticateMe",
  "proof": {
    "type": "OpenPgpSignature2019",
    "verificationMethod": "did:btcr:xxcl-lzpq-q83a-0d5#yubikey",
    "proofPurpose": "assertionMethod",
    "created": "2019-08-11T03:54:13.310Z",
    "signatureValue": "-----BEGIN PGP SIGNATURE-----\nComment: GPGTools - https://gpgtools.org\n\niQEzBAABCgAdFiEE8b0S9xIG+...\n-----END PGP SIGNATURE-----\n"
  }
}

ethereumAddress

An ethereum address…

Example:

{
  "id": "did:ethr:0xE6Fe788d8ca214A080b0f6aC7F48480b2AEfa9a6#owner",
  "type": "Secp256k1VerificationKey2018",
  "ethereumAddress": "0xe6fe788d8ca214a080b0f6ac7f48480b2aefa9a6",
  "owner": "did:ethr:0xE6Fe788d8ca214A080b0f6aC7F48480b2AEfa9a6"
}