-
Notifications
You must be signed in to change notification settings - Fork 0
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
ISO-DH Example #36
ISO-DH Example #36
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Congrats, this looks good!
I left many comments but most of them are minor ones.
The major concern I have is about revealing definitions of DY.Core.Bytes
, the lemmas we expose in this module are carefully crafted to vaguely correspond to standard cryptographic assumptions (although it is only best-effort, there is no computational soundness theorem).
I feel like we can probably do the proof without them (e.g. I don't think the original ISO-DH example rely on injectivity of dh_pub
?), but I might be mistaken on that.
In any way, it would be interesting to isolate the lemmas that you are missing in DY.Core.Bytes
.
Now that you successfully completed an example with DY*-extrinsic, do you have any complaints? Do you see any rough edges that could be polished, or places where you struggled to write the proof for no apparent good reason?
@TWal, I would like to answer your question about my impression of the extrinsic DY*: I like the approach much better than the intrinsic version because you don't have all the complexity at once. In the extrinsic version, I am able to focus first on the model and then think about the proofs. One thing I was wondering if it could be improved is the code that combines the invariants, because it seems to me that it is always the same (at least in the NSL and ISO-DH example):
Another thing I stumbled over is that |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few additional comments:
- I wonder why the proofs for
compute_message2
andcompute_message3
are so different? They do essentially the same thing (computing a signature) but one takesy
explicitly as an argument of the lemma, the other introducesx
with anexists
? - I noticed that the total code do not output the shared secret? I think functions that verify signatures should also output the shared secret.
- In fact, the total code is not aware of the secret keys (except in
compute_message1
)? Maybe the total code should take private keys as argument when possible?
@fabian-hk to answer your remarks:
|
I think this is soon ready to merge, before that the following changes would be great:
I can take care of cleaning the proofs in SecurityProperties (or at least, see how much of it can be cleaned, given that they are already quite good!) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks good, other than some minor comments!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me.
We may want to think about naming of the properties (as @TWal notes they aren't exactly forward secrecy), but I see no technical problems currently.
I finally finished porting the ISO-DH example to the extrinsic DY* code base, and I am happy to receive your feedback.
We should also discuss whether that example is part of the core DY* repository or if it should live in its own repo. Right now, there are a lot of comments and debugging statements. I would like to keep it like that to help others understand it better, but I can understand if that is not something we want in the main repo. In this case, I would create a separate repo with a version that has more details in the code. This separate repo could also serve as an example of how to set up a repository to analyze a protocol with DY*.