-
Notifications
You must be signed in to change notification settings - Fork 98
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
How to mitigate the single source of failure wrt/ "Trust into the Universal Resolver"? #249
Comments
The BTC capability of the Incubed clients is in development, it is not yet released. |
@cstoecker thanks for your thoughts on this! Some comments:
Perhaps you have time to join today's DID Resolution meeting? |
In KERI an interaction or rotation event payload may include a list of seals (anchors in KERI terminology) that are digests (hashes) of data stored off-log (off chain). A digest may be for the data item itself or the hash tree root hash. No information about the data is leaked other than its hash. All a client (end user) needs to do is find the hash in a KERI interaction event payload to establish control authority at the time the hash was sealed (anchored) to the keri log. The set of events up to that location in the log then become a verifiable proof. A resolver merely needs to provide the identifier prefix and some reference to where a log may be found along with the hash. For uniqueness the validator confirms consistency (non-duplicity) of the log within its watcher network. Because only the controller of the identifier may create a verifiable (signatures) log the only guarantee that the watcher network need provide is consistency or the absence of duplicity on the behalf of the controller. This approach generalizes to any storage medium for the logs. These may include a blockchain ledger. This generalizes the incubed approach and makes proving blockchain/ledger agnostic. |
This is imo not a WG / Spec issue... its a trust in software systems issue... I would support some minor informative language about encouraging implementers to run all infrastructure needed to perform resolution themselves. |
On today's DID WG call @talltree suggested that we can cover this topic in the "Security Considerations" section of DID Core, and then point to DID Resolution for additional considerations. |
@OR13 The issue is that its a security problem if its merely a “trust in software systems issue”. If we embue the spec with the property of what I call “end-verifiably” then it stops being a “trust in software systems issue”. If you think about it a verifiable credential is not truly verifiable if its trust basis includes “trust in software systems issues”. Is a somewhat verifiable credential. On the other hand if DID:docs are end verifiable via a veritable proof to their root-of-trust then a VC becomes verifiable all the way down. |
I'm not sure that any data model or protocol are verifiable in absence of a formal systems like coq, agda, TLA+, or proverif... every abstract cryptographic protocol, when made concrete suffers from the same issue... see also ken thompson's reflections on trusting trust... but i think this is mostly philosophical at this point, there should informative statements somewhere that can help address this... i'm not attached to where they are. @SmithSamuelM if there is language you would like to propose to address this issue, please open a PR, I'm happy to review. |
@OR13 I am not talking about verifying "what" was conveyed by the VC but verifying that the correct "who" conveyed it. So it does not require a formal data verification system per-se. We are just talking about verifying the establishment of control over an identifier. The concept is straight forward. In the simple case, a given signature on some some statement created with a private key is verifiable with a given public key. The who in this case is the controller of the private key purported as authoritative for the identifier purported to be the signer. The data model consideration is merely answering the question, who are the signers (key-pairs/identifers) and how do we verify them? Not any other data. Verifying that a given key-pair is indeed the authoritative key pair for the identifier to which the statement is attributing as the signer is the task nothing more. Not sure why this is not crystal clear. So in the context of this issue:
A- The resolver provides an end-verifiable proof of the authoritative nature of that key-pair
To elaborate if we require DID resolution to provide an end-verifiable proof of the authoritative key-pair then we do not have to trust the DID resolver software systems at all. In this latter case, the only attack against a DID resolver is a deletion attack that removes any knowledge of the DID or DID method from the resolver and that is simply mitigated by redundancy of DID resolvers. IMHO it would be most unfortunate if instead of fixing the security problems of the existing DNS/CA system we instead multiplied them. As it currently stands absent proofs of control authority, every method via its method code becomes the method authority which is reliant on vulnerable software systems (e.g. DID resolver executed method code) as its root-of-trust instead of a cryptographically end-verifiable root-of-trust. The KERI white paper explains this in some detail. IMHO there are two primary roots-of-trust that may provide such an end-verifiable proof.
In the former case a proof could be of in the form of ledger state proof of the current authoritative key pair. In the latter case a key event receipt log (hash chained data structure) of key events (KERI KERL) that establish the current authoritative key pair starting from the originating self-certifying inception event. As soon as you move outside either of these two mechanisms, it gets really complicated. As a final note KERI makes a ledger unnecessary via ambient duplicity detection or a ledger provides at most a secondary (replaceable) root-of-trust. This enables portability at the cost of ambient duplicity detection. In either case the KERI proof is a KERL. All that changes is where the KERL is stored. |
@cstoecker @OR13 With respect to this specific proposal, the proposed mechanism is a mechanism for a concrete verification against a block chain. As such it is not appropriate as a normative part of the specification. My comments are addressing what I do consider normative, that is, each DID method specifies an end-verifiable proof mechanism for the authoritative key-pairs that sign the given resolved DID:Doc. This proposal could be used to implement one of those proof mechanisms. |
The DID Resolution spec already has some content about local vs. remote bindings, verifiable vs. unverifiable reads operations, proofs that can be added to metadata, etc. I think these topics should be further expanded in the DID Resolution spec. |
@cstoecker Since you raised this issue, would you agree that this could go into a different document, i.e. either the DID Resolution spec in the CCG, or the Implementation Guide in the WG. If so, can we close the issue here and follow up in the other repos? Or do you have a suggestion what we could add to DID Core to address this? |
There seems to be agreement that this issue shouldn't be addressed in the DID Core spec and should instead be addressed in the implementation guide or the DID Resolution specification. Marking this as pending close. This issue will be closed in 7 days unless there are objections. |
No comments since marked pending close, closing |
Note: The following proposal is inspired by the lightweight slock.it incubed concept for verifying read transactions from a remote blockchain node.
Problem Statement
As as user of DIDs I need to have an instrument to resolve a DID and retrieve the respective DID document. In many cases people do not run their own resolvers and they therefore need to trust a third party operating a so called universal resolver. As a user I am exposed to the threat that the universal resolver is not responding the correct DID document that is stored on the respective blockchain.
Key Question
How do I, as a verifies, mitigate the risk of interacting with a malicious universal resolver implementation?
Assumptions & pre-conditions
Proposed solution scenario
The verifier client sends a request to a randomly chosen access resolver implementation of the cross-validation network along with a list of validators.
The access resolver implementation executes the request, creates the DID document response and assembles the proof data needed so that the verifier client can to verify the DID document result. Prior to assembling the proof data the access resolver is requesting the signed block hash from the validators.
The proof data assembled by the access resolver consists of the following components:
With these proofs in place a verifier client can check the DID document payload data by verifying the Merkle proof and the signed block hashes. This means that the verifier can proof that the other random chosen validators would have returned the same DID document response.
Potential further advancements of the solution
Reference
slock.it incubed lightweight IoT client for reading from remote ETH or BTC nodes.
The text was updated successfully, but these errors were encountered: