Current as of: https://github.com/freedomofpress/securedrop-protocol/commit/e12ad2b57810c3eb17235a3a1ac2b5c6f915c9be
- Compare with KEM variant
In contrast to (e.g.) Tamarin1, conduct a non-attack-oriented data-flow analysis, to trace how the intended participants in the protocol obtain and reconstruct protocol values. This is useful for multiple purposes:
-
Validate the specification: Does the graph look right? Is everything accounted for? Are all values used, derived, transmitted, received, and reconstructed as expected?
- For example, a value conceptualized with the wrong location or scope will show up all by itself in a separate subgraph.
-
Learn about the protocol: Test intuitions about how protocol values are related across locations and scopes within the protocol (see next section).
-
Check dependencies: As we consider moving to a key-encapsulation mechanism (KEM) for at least the message-level security of the protocol, it becomes important to understand how the derivation and use of specific protocol values may change.
We care about the scope or lifetime of values (long-term
, per-message
,
per-request
) for two reasons. First, this is where the three-party nature of
the protocol becomes visible temporally as well as spatially:
Party | Long-term | Per-message | Per-request |
---|---|---|---|
Source | ✓ | ✓ | |
Server | ✓ | ✓ | |
Journalist | ✓ | ✓ | ✓ |
Second, some values are reconstructed rather than transmitted, but always within the same scope.
See trace.yml
for the trace format.
In trace.md
, a Mermaid graph depicts:
- a subgraph for each location or participant in the protocol;
- a subgraph for each scope or lifetime at this location;
- nodes for each value used in the protocol;
- a list of all the values used to reconstruct this value locally; and
- nodes for each value used in the protocol;
- a subgraph for each scope or lifetime at this location;
- edges to show how values are connected, both
- locally, within locations and scopes; and
- remotely, transmitted and received on the network.
Footnotes
-
Can we do this with the Tamarin models in progres? Felix Linker: "Theoretically yes, but the tool was not built to do this and you might fight it a lot." ↩