DID Meme

DID Method Specification

did:meme is a deterministic transformation of did:key, that uses IPFS, image content and bech32.

DID Format

did-meme-format := did:meme:<bech32-value>
bech32-value    := [a-zA-HJ-NP-Z0-9]+

The bech32-value is an encoded multihash.

The multihash is a content identifier for an image.

The image contains a steganographically embedded did:key.

See did-key.

Another way of representing the did:meme identifier encoding:

        stego-embed(image, did:key)

DID Operations

See did-key.


  1. Generate a did:key
  2. Steganographically embed the public key multicodec representation in a meme.
  3. Upload the meme to ipfs.
  4. Transform the CID to a did:meme with bech32.
  5. Update the did document to use the did:meme identifier.


  1. Convert the bech32 id to an ipfs CID.
  2. Resolve the image.
  3. Extract the did:key multicodec.
  4. Construct the did:key document from the identifier.
  5. Update the did document to use the did:meme identifier.


Not supported.


Not supported.

Security and Privacy Considerations

See did-key


Because update and deactivate are not supported, did:meme should only be used for very short lived interactions, or just lulz.

Because did:meme identifiers are a super set of did:key, it is possible for multiple did:meme to map to the same did:key… This can be problematic when private key compromise has occured.

Generally speaking, did:meme has similar or weaker security properties compared with did:key.


Be careful to strip XIF data or other meta data from images before constructing did:meme.

Do not use images that identify physical locations or people.