docs: update specification from manuscript 243f384#126
docs: update specification from manuscript 243f384#126rocodes merged 18 commits intofreedomofpress:mainfrom
243f384#126Conversation
cf81f37
There was a problem hiding this comment.
Pull request overview
This PR updates the protocol specification documentation to synchronize with manuscript version cf81f37. The update refines cryptographic notation, corrects key nomenclature (introducing vk for verification keys), adds detailed building blocks documentation, and restructures the protocol flow descriptions with improved clarity and mathematical rigor.
Key changes:
- Updated key notation to distinguish verification keys (
vk) from public keys (pk) - Added comprehensive "Building blocks" section documenting cryptographic primitives (SIG, AEAD, PKE, APKE)
- Restructured protocol flow sections with "Given/Then" format and improved tables
- Updated manuscript reference comments throughout (from
7944378tocf81f37)
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review for a chance to win a $100 gift card. Take the survey.
498b364 to
ca2749c
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated 9 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review for a chance to win a $100 gift card. Take the survey.
5cb316d to
3f6579f
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated 6 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review for a chance to win a $100 gift card. Take the survey.
rocodes
left a comment
There was a problem hiding this comment.
@cfm this is a heroic amount of work, thank you. I have 2 comments about the overall protocol description, not about how faithfully you have represented the manuscript, but otherwise LVGTM:
- We need to specify how the
infoparameter is calculated (we havec2 + info, but maybe we clarify that as far as our last convo, it is a concatenation of c2 (encaps pq_psk_kem_ct) || receiver fetching pubkey (so sender commits to receiver fetch key). - The way it's specified now, I think the same fetching key is signed
$i$ times and included with every journalist one-time key bundle? But I think (and per prior discussion if I remember right) we would just sign it once, and it plus the journalist DH-AKEM reply key (two long-term keys) would be submitted to the server. Users would fetch a "welcome bundle" that includes all the long-term keys (newsroom key, newsroom sig over journalist signing keys, journalist sig over their own fetch+reply keys), and either at the same time or separately (depends if we're trying to add extra PoW?), the one-time journalist key bundles would be fetched, but those would just include the journalist signature over their (SD-APKE_E, SD-PKE_E) pubkeys.
Why don't I add a comment to make explicit that
Good point. I'll open a follow-up ticket. |
|
I was taking for granted that But if you object, then maybe we can at least leave in a comment what our working definition is, so that people can fact check all/as many as possible assumptions in one place :) |
|
Ah, I see! Let me tack that on. |
| m, ad, info): | ||
| (c2, K2) = KEM_PQ.Encap(pkR=pkR2) | ||
| (c1, cp) = pskAEnc(skS=skS1, pkR=pkR1, psk=K2, m=m, ad=ad, info=c2) # cp = c' | ||
| (c1, cp) = pskAEnc(skS=skS1, pkR=pkR1, psk=K2, m=m, ad=ad, info=c2 + info) # where cp = c' and "+" means concatenation |
There was a problem hiding this comment.
NB. This isn't circular: pskAEnc()'s keyword argument info takes the concatenation of the local variable c2 and the enclosing AuthEnc()'s positional argument info, which is where we pass
securedrop-protocol/docs/protocol.md
Line 436 in 98511c2
There was a problem hiding this comment.
Confirmed as of manuscript 243f384.
There was a problem hiding this comment.
My comment about circularity was that we could distinguish terms a bit, as in, we could call one
…3f384) Figure 5 now builds the values of r, x, z, and id on one line to show the parallelism between the k-subscripted case (real messages) and the j-subscripted case (decoys). Here I stick to one assignment per line for legibility.
cf81f37243f384
|
ab3ae02 brings us to manuscript securedrop-protocol/docs/protocol.md Line 471 in 4954b80 |
rocodes
left a comment
There was a problem hiding this comment.
Thanks for the extra commits! I think this is looking really good, the only thing still outstanding to me is the repeated fetching key signatures section. I saw you filed it as a separate issue, which is fine, but I still think we shouldn't merge it into main if it's not our desired behaviour, because it will be confusing for people trying to follow along.
I'd suggest we do any of: specify the behaviour as we understand it from our discussions; leave it as is but add a visible "under construction" comment/warning in that section of protocol.md explaining the discrepancy and/or that it's WIP so that people don't take it as canonical while we clarify; or move the PR to "blocked or waiting". I'd like to merge it so I'd kind of be in favour of the first or second options, but I leave it to your discretion.
Thank you again :)
Sure. How's c8dd13a, so that we can coordinate the changes both here in the spec and "upstream" in the manuscript around #127? |
Updates the v0.3 specification to match the definitions and figures in manuscript
243f384. Since there are no major functional or conceptual changes, just dotting of i's and crossing of t's, let's consider this an in-place refinement of version 0.3, not a new version 0.4. Specifically, these changes address from #121....From @felixlinker in #121 (comment):
From @ssveitch in #121 (comment):
Also:
KGen()#114