Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

propose HIPE: Revised did doc conventions #92

Closed
wants to merge 5 commits into from

Conversation

tplooker
Copy link

Initial update to the diddoc conventions for routing via verkey.

I have shrunk this document to be more about only the did doc conventions. This creates less context when reading it on its own, but my preference would be for downstream documentation to point to this for greater context.

Signed-off-by: Tobias Looker [email protected]

@tplooker tplooker changed the title Update to did doc conventions proposed HIPE: Revised did doc conventions Feb 13, 2019
@tplooker tplooker changed the title proposed HIPE: Revised did doc conventions propose HIPE: Revised did doc conventions Feb 13, 2019
Signed-off-by: Tobias Looker <[email protected]>

Within the [DID Specification](https://w3c-ccg.github.io/did-spec/#did-documents) lies a section called [Service Endpoints](https://w3c-ccg.github.io/did-spec/#service-endpoints), this section of the DIDDoc is reserved for `any type of service the entity wishes to advertise, including decentralized identity management services for further discovery, authentication, authorization, or interaction`.

This HIPE introduces the specification of a new DID service endpoint type called `IndyAgent`, which takes the following form.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd like to remove the Indy brand from the service endpoint type name. How about just "A2A"?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dhh1128 shall we park this until we have chatted with the community at the connectathon about how best to proceed, given the conversation we had to day around potentially elevating this protocol in general above agents?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dhh1128 I have changed this to DidMessaging for now as that is where I see the level of interop being distinguished.

text/0023-diddoc-conventions/README.md Outdated Show resolved Hide resolved
{"id": "6", "type": "RsaVerificationKey2018", "owner": "did:sov:1234abcd","publicKeyPem": "-----BEGIN PUBLIC A…"}
{"id": "3", "type": "RsaVerificationKey2018", "owner": "did:example:1234abcd","publicKeyPem": "-----BEGIN PUBLIC X…"},
{"id": "4", "type": "RsaVerificationKey2018", "owner": "did:example:1234abcd","publicKeyPem": "-----BEGIN PUBLIC 9…"},
{"id": "6", "type": "RsaVerificationKey2018", "owner": "did:example:1234abcd","publicKeyPem": "-----BEGIN PUBLIC A…"}
],
"authentication": [
Copy link
Contributor

@sklump sklump Feb 25, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does anyone know what the "authentication" key distinction means semantically? Is it still a useful abstraction for DIDDocs?

Copy link
Author

@tplooker tplooker Feb 25, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sklump my understanding is this section denoted the keys that could be used to authenticate ownership or control of the did. See here

"id": "did:example:xd45fr567794lrzti67;indy-agent",
"type": "IndyAgent",
"priority" : 0,
"recipientKeys" : [ "did:example:xd45fr567794lrzti67#1" ],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Worth noting whether recipientKeys, mediatorKeys could be embedded; e.g.,
[
"did:example:xd45fr567794lrzti67#1",
{
"id": "did:example:xd45fr567794lrzti67#99",
"type": "Ed25519VerificationKey2018",
"controller": "did:example:xd45fr567794lrzti67",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
},
...
}
? I'm inclined to think they could be?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sklump, I can see your point however I don't think we will want to allow this behavior as it limits the utility of the key if it is specified inline.

"priority" : 0,
"recipientKeys" : [ "did:example:1234abcd#4" ],
"mediatorKeys" : [ "did:example:1234abcd#3" ],
"serviceEndpoint" : "did:example:xd45fr567794lrzti67;indy-agent"
Copy link
Contributor

@sklump sklump Feb 25, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where has DID xd45fr5677941rzti67 come from? How does the serviceEndpoint value resolve to a usable address? Could something here have a typo?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sklump This is pointing at the mediator agents r us's did doc, defined just below this did doc. This allows separation in the definition of the endpoint from individual using the endpoint. The message preparation example below the did doc definitions should describe this case, let me know if it is still not clear.

Signed-off-by: Tobias Looker <[email protected]>
Signed-off-by: Tobias Looker <[email protected]>
Signed-off-by: Tobias Looker <[email protected]>

The HIPE requirement in those degenerate cases is that the DIDDoc still contain the same data (one endpoint, one `routing` key, one authentication key and at least one Receiver key). The domain implementation then handles the case of "Agents with multiple roles". The DIDDoc SHOULD have the Agents use different keys for different purposes to mask the simplified Agent structure.
1. Alices agent resolves the above DID doc Bobs agent has shared with her and resolves the `DidMessaging` service definition.
2. Alices agent then packs the desired message she wishes to trasmit with the keys noted in the `recipientKeys` array.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/trasmit/transmit

4. The resulting message from the previous step is then packed for the first and only key in the `routingKeys` array.
`pack(wallet,wrapped_message,[did-resolve(did:example:1234abcd#3)],sender_verkey)`
5. Resolution of the service endpoint leads to resolving another `DidMessaging` service definition, this time owned and controlled by `agents-r-us`.
6. Because in the `agents-r-us` service definition there is a recipient key. The newly packed message is then wrapped in another forward to key message where the subject is first and only key in the `routingKeys` array.
Copy link
Contributor

@sklump sklump Feb 26, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These textual references to keys should include their respective URIs? I don't understand the semantics here. The routingKeys array is empty in the agents-r-us service definition, and the Alice has already wrapped the message for the key in the other routingKeys array in step #4.

Also, a sentence fragment starts at 'Because'.

5. Resolution of the service endpoint leads to resolving another `DidMessaging` service definition, this time owned and controlled by `agents-r-us`.
6. Because in the `agents-r-us` service definition there is a recipient key. The newly packed message is then wrapped in another forward to key message where the subject is first and only key in the `routingKeys` array.
7. This wrapped message is then packed in a message for the keys noted in the `recipientKeys` array of the `agents-r-us` `DidMessaging` service defintion.
8. Finally as the endpoint listed in the serviceEndpoint field for the `agents-r-us` `DidMessaging` service definition is a valid endpoint URI, the message is tramitted in accordance with the URI's protocol.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/tramitted/transmitted

@@ -34,7 +25,7 @@ These are vital design goals for this HIPE:
1. **Sender Encapsulation**: We SHOULD minimize what the Receiver has to know about the domain (routing tree or agent infrastructure) of the Sender in order for them to communicate.
2. **Receiver Encapsulation**: We SHOULD minimize what the Sender has to know about the domain (routing tree or agent infrastructure) of the Receiver in order for them to communicate.
3. **Independent Keys**: Private signing keys SHOULD NOT be shared between agents; each agent SHOULD be separately identifiable for accounting and authorization/revocation purposes.
4. ***Prevent correlation based on DIDDoc Contents**: The information in the set of DIDDocs owned by an Identity SHOULD NOT be so precise as to represent a fingerprint for that Identity suitable for correlation.
4. **Prevent correlation based on DIDDoc Contents**: The information in the set of DIDDocs owned by an Identity SHOULD NOT be so precise as to represent a fingerprint for that Identity suitable for correlation.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be either dropped or revised to reference public vs. local DIDDocs?

If the set of DIDDocs are local, you are sharing each with a limited set of parties - not publishing them publicly. Since the other parties don't know each other, and each likely has some deeper knowledge of who you are, does this issue matter? Put another way, with the details we are adding to the local DIDDocs, are we adhering to this?

If it is a public DIDDoc, it's unlikely that the controlling party is not known, as you can send a message to it and ask "who are you?" (and you might get an answer). It's also likely to be a minimal DIDDoc. Maybe revise this to say "The information in Public DIDDocs (published on a ledger) SHOULD NOT..."

@tplooker
Copy link
Author

This PR has been deprecated in place of a new proposal here

@tplooker tplooker closed this Jun 12, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants