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

Guarantees for clients #400

Closed
domwoe opened this issue Feb 12, 2020 · 5 comments
Closed

Guarantees for clients #400

domwoe opened this issue Feb 12, 2020 · 5 comments

Comments

@domwoe
Copy link

domwoe commented Feb 12, 2020

I like the independence of Sidetree nodes a lot, but I'd be interested to read something about the guarantees a Sidetree node can provide to its clients.

As far as I understand the protocol it seems to me that if a client asks a Sidetree node to resolve a DID, the node is able to withhold deltas. Thus, I have to trust the node that it gives me all the information, i.e. the complete and current state of the DIDdoc or I need to ask a sample of nodes.

Is this view correct or are there any additional mechanisms that can provide better guarantees to clients?

Thanks a lot!

@csuwildcat
Copy link
Member

You are correct in noting that without running a node yourself, the best you can get by asking one node what the state of a DID is would be to receive the latest state, deltas it is made up of, and proofs you could check against the underlying chain to verify presence of the deltas. However, an external node could always do things like exclude the last N number of deltas in a DID's history and you wouldn't know more existed beyond that false tip unless you ran a node yourself.

One way to make node-less clients calling in for resolution to external nodes a more trust process would be to do as you say: create a process where you query a random set of external nodes and use the protocol rules to validate and filter the returned results to ensure they are telling the truth. I have been thinking about ways to do this, but we are a ways off from starting work on it.

@domwoe
Copy link
Author

domwoe commented Feb 14, 2020

Thanks Daniel for clarifying!
This is where a L1 Ledger based DID (can) have an advantage. For example with the Indy network, a read request to a node is replied with a state proof with a BLS multi-signature of the validators. Hence, the client needs only to keep track of the validator set.

However, in principle, some sidetree node operators could come together and provide such a service to clients.

Another approach could be something like https://slock.it/incubed/

From my perspective this issue can be closed.

@csuwildcat
Copy link
Member

csuwildcat commented Feb 14, 2020 via email

@kdenhartog
Copy link
Contributor

For what it's worth, I believe things like satoshi audit trail and SPV could be used in sidetree to make it easier for a trustless lite client to be built. My thinking in #336 is a naive approach to achieve this.

@csuwildcat
Copy link
Member

Copying over from #336:

@kdenhartog without at least running a light Sidetree node that stores all the anchor files, the only assurance you'd gain in a chain inclusion proof for op deltas is that whatever delta trail a node responded with was indeed present in the target chain, but there are many attacks possible - for example:

Say Alice has performed 5 ops against her DID. The last op was to remove a key she believed could have fallen into someone else's hands. A node could simply resolve the first 4 of her ops and omit the last one, and if all you had was proof of chain inclusion, you'd never realize it was a 'fake tip' of her total state. You must run a light node to avoid such attacks, or, for a lesser security assurance, query a larger randomized subset of nodes to probabilistically increase the chances you receive the correct current state.

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

No branches or pull requests

3 participants