Surfaced by an external RAHP/DRARM assessment of the Cypress release
(sankarshanmukhopadhyay/rahp-toolkit#18, finding OVTC-RAHP-04). Confirmed as
reported.
Problem
Pairwise relationship identity is opt-in, and the fallback is the persona DID.
- TUI request form:
generate_r_did defaults to false
(openvtc/src/state_handler/relationship_actions.rs:1056); the user has to
find and toggle the checkbox on field 3 to get privacy.
- TUI inbox accept:
a accepts without an R-DID, A accepts with one
(openvtc/src/ui/pages/main/mod.rs:914-930). The convenient key is the
linkable one.
- CLI: requires
--generate-did (docs/relationships-vrcs.md:60-66), which
states plainly that without an R-DID, subsequent communication uses the P-DID.
So the safe path is the one the operator has to know to ask for, on a decision
whose consequences are invisible at the moment they make it.
Why this is worse here than the generic pattern
The assessment scores this as stable-identifier correlation. In our case the
stable identifier is a published, resolvable did:webvh that frequently
carries a verified agent name. Two counterparties do not need traffic analysis
to correlate the same persona across contexts — they compare a string, and can
then resolve it to a named identity. The linkage is not merely possible, it is
a lookup.
That argues for flipping the default rather than warning on the fallback.
Proposed change
- Default
generate_r_did to true on the request form and make the
R-DID-generating accept the primary key binding in the inbox. Keep the
P-DID path available, deliberately chosen, and labelled with what it costs.
- CLI: make R-DID generation the default and introduce an explicit opt-out
flag rather than an opt-in one. --generate-did becomes a no-op that warns,
for one release, so existing scripts do not silently change meaning in the
other direction.
- No silent revert. Once a relationship has an R-DID, subsequent messages
must not fall back to the P-DID — define the bootstrap-to-pairwise migration
point and assert it. A fallback that can re-expose the P-DID mid-relationship
defeats the default.
- Test: given two relationships established from the same persona, assert
that protocol-visible identifiers do not permit the two counterparties to
correlate them.
- Docs: update
docs/relationships-vrcs.md — the current text presents the
R-DID as an optional privacy extra rather than the norm.
Upstream question
Whether VTC should require pairwise identifiers for relationship
communication rather than leaving it to client defaults is a protocol question
for verifiable-trust-infrastructure. If it does, this issue reduces to
conformance. Raising it there separately; this change stands either way.
Acceptance
- A new relationship request and a new relationship acceptance both mint an
R-DID with no extra keystroke.
- Choosing the P-DID path is possible and states the linkability cost at the
point of choice.
- A relationship with an R-DID never emits the P-DID on a subsequent message.
Surfaced by an external RAHP/DRARM assessment of the Cypress release
(sankarshanmukhopadhyay/rahp-toolkit#18, finding
OVTC-RAHP-04). Confirmed asreported.
Problem
Pairwise relationship identity is opt-in, and the fallback is the persona DID.
generate_r_diddefaults tofalse(
openvtc/src/state_handler/relationship_actions.rs:1056); the user has tofind and toggle the checkbox on field 3 to get privacy.
aaccepts without an R-DID,Aaccepts with one(
openvtc/src/ui/pages/main/mod.rs:914-930). The convenient key is thelinkable one.
--generate-did(docs/relationships-vrcs.md:60-66), whichstates plainly that without an R-DID, subsequent communication uses the P-DID.
So the safe path is the one the operator has to know to ask for, on a decision
whose consequences are invisible at the moment they make it.
Why this is worse here than the generic pattern
The assessment scores this as stable-identifier correlation. In our case the
stable identifier is a published, resolvable
did:webvhthat frequentlycarries a verified agent name. Two counterparties do not need traffic analysis
to correlate the same persona across contexts — they compare a string, and can
then resolve it to a named identity. The linkage is not merely possible, it is
a lookup.
That argues for flipping the default rather than warning on the fallback.
Proposed change
generate_r_didtotrueon the request form and make theR-DID-generating accept the primary key binding in the inbox. Keep the
P-DID path available, deliberately chosen, and labelled with what it costs.
flag rather than an opt-in one.
--generate-didbecomes a no-op that warns,for one release, so existing scripts do not silently change meaning in the
other direction.
must not fall back to the P-DID — define the bootstrap-to-pairwise migration
point and assert it. A fallback that can re-expose the P-DID mid-relationship
defeats the default.
that protocol-visible identifiers do not permit the two counterparties to
correlate them.
docs/relationships-vrcs.md— the current text presents theR-DID as an optional privacy extra rather than the norm.
Upstream question
Whether VTC should require pairwise identifiers for relationship
communication rather than leaving it to client defaults is a protocol question
for
verifiable-trust-infrastructure. If it does, this issue reduces toconformance. Raising it there separately; this change stands either way.
Acceptance
R-DID with no extra keystroke.
point of choice.