-
Notifications
You must be signed in to change notification settings - Fork 30
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
Protocol for verifying a key from a previous epoch #70
Comments
Totally makes sense to me. A key lookup is probably the right request in this case. Just to clarify, in this case, Bob would request a lookup with the start epoch that is the latest epoch he saved, right?
Agree,
Is this
Yup, I wasn't thinking about this. Thanks! Update: I just gave it a try in 3bbc298b71ffea0ed518c471b56dc517bc0cee66. |
Sorry for joining in late.
Yes, that's right.
I'm not sure. I think that
This is a good point. On a related note, I've been wondering if would be more secure to verify that a newly registered name is absent in all epochs before the registration epoch? If we had auditors, I don't think this would be as big of an issue. |
What do you think about:
I think the user can just verify the latest epoch before registering and she can trust the auditors which are what we will have in the future. |
Sounds good to me.
Do you mean the response? I totally agree that we want to prevent message overhead (and I think I even mention this in my previous comment). I was trying to make a distinction between |
Yes.
Yeah, I get it. It makes a lot of sense to me now. Thanks! |
Since the CONIKS protocol also includes the auditors involvements, and per paper, CONIKS auditors store only the current STRs of key servers, I was thinking that is there any way to make use of these auditors for the key lookup in epoch operation? I think instead of storing only the current STR, the auditor could story entire hash chain (i.e., For our discussion in #72 (comment), assume that the server splits a large response into chunks, I imagined that the responses could be
There're 2 questions come to my mind:
|
At first glance, I think that it definitely makes sense for the auditors to store the entire hash chain, and to be part of the lookup in epoch. At the same time, I'm not sure it's enough for the client to compare the single STR for the lookup epoch with the auditor's STR. I need to think more about this.
The format you suggested for chunked responses looks good to me. I don't think we need to if the chunked responses assuming that the client can order them.
I don't think so either, since the epochs in the STRs (either the first or the last in the list) can be used as sequence numbers. E.g. if the client saved epoch |
I think the saved STRs in the auditors are actually valid STRs, since they all have been verified. Yup, I'm not sure if this's right, though.
Yup, I don't disagree. |
@arlolra : I think this is the reason why we have separate requests type for key lookup in epoch and monitoring: #70 (comment) (my first quote of @masomel's comments ) |
This is true, the auditors shouldn't be saving any STRs they can't verify. But the client should still be checking the whole hash chain range for itself, otherwise it wouldn't detect if a fork happened somewhere in the middle of the range. E.g. The client wants to lookup at epoch |
I think the |
I understand that this scenario is the use case for
You're right about this.
This, I'm a little more worried about. Let me think this through: If Alice is going to use the looked up key to verify Bob's signature on an old message (I believe this is the only scenario in which she would have to look up an old key), she definitely wants to make sure that the STR is part of a valid hash chain for range |
I suppose Alice could make sure about that since she has compared the received STR (STR at epoch |
I think the relevant word here is "should". The STR should be part of the valid hash chain, but there's no guarantee just because she sees it and some other auditors see it, and she also checked the hash chain for a different STR. The point I'm trying to make is that the server could be presenting Alice a malicious STR for |
I think this sound like the Update: Can we think this as follows? In addition, to make sure that the hash chain of the auditor is the same as her hash chain, Alice can compare the STR at epoch
But I think this additional check is unnecessary. What do you think? |
Sorry, I'm not really sure what you're referring to.
I see two issues with this approach. The auditors aren't really trusted entities in the system, and by design Alice shouldn't always query the same auditors, so having Alice rely on some auditors to store the STRs leaves her open for being equivocated later by the server.
If Alice trusts the auditor, then it does. But I don't think trusting auditors alone is a reliable way of ensuring that the server's hash chain is valid.
So here you're suggesting that Alice compare both the STR for I'm not sure I understand, at this point, what we would achieve by avoiding some of the checks that seem necessary to prove non-equivocation. |
I think if the auditors also see a malicious STR for
Using "trust" here is probably wrong. "Trust" here meant Alice could believe in the auditors that they would store the STR at each epoch. What I meant here is all the auditors would store the STR, and Alice queries the auditors at random. I'm still using assumptions per paper.
Yes, you're right. This check is necessary if all the auditors Alice queried see the same invalid history.
I'm trying to simplify the |
This is true. And it's true that is a check for non-equivocation, but as we state in the paper in 4.1.4, a non-equivocation check is supposed to happen every time the client gets an STR from the server: "Identity providers perform the history verification whenever they observe a new STR from any other provider, while clients do so whenever they request the most recent STR from a specific identity provider directly." Since every lookup returns (at least) one STR, clients should also be checking for non-equivocation in the
I agree that auditors should store the STR at each epoch, and I agree that Alice can assume this. Maybe I was misunderstanding something, but it sounded to me like you were making an assumption that Alice can believe that the auditors she queries will see the same thing (even with random queries), because you had said
and this isn't an assumption we should make. This is why I was saying that the auditors' STRs alone aren't enough to ensure non-equivocation. But then you said
which makes more sense to me because this allows Alice to gain confidence that there hasn't been an equivocation.
We didn't cover the case for a lookup earlier in the history in our original design for CONIKS, so you're right that we should try to optimize the non-equivocation check for |
To recap, the protocol for verifying a key from a previous epoch is the following?
|
@masomel said:
How can the auditors help us solve the TOFU issue? Does the client still need to verify all the STRs and the proof of absences from beginning? |
I'm thinking that auditors could help with this by allowing clients to verify that the STR they receive as part of the But I still need to think more about whether this is enough, i.e. I don't know if we can treat registration like any other auditing case. Or maybe we say it's not the client's responsibility to detect whether the the name "alice" existed before, but rather alice's responsibility for detecting (and reporting) that there are now two versions of its name in the tree? My main issue with this problem is that it's retroactive, not proactive, meaning that a lot of damage could have been done by the time alice detects the problem. |
Continue the discussion at #64 (comment)
The text was updated successfully, but these errors were encountered: