Proposal for Spanning Layer
Daniel Hardman — contributed to TSPTF — 15 Feb 2023 — http://bit.ly/3xdt22n
Assertion A.1
�Trust varies with context.
I assume everyone agrees with this — what trust we need and why we need it are both functions of context — so it's not argued here.
Assertion A.2
�Authenticity should decrease dependence on context.
I also assume everyone agrees with this.
Assertion A.3
�Overly weak authenticity → TSP isn't minimally sufficient.
This is controversial. It is only partially argued here.
Assertion A.4
�Some authentic context shouldn't be layered.
This is controversial, too.
Assertion A.5
�Predicting adoption is harder than
identifying who has the weakest mousetrap.
This is controversial, too.
Authenticity: foundation of trust, but not whole building - PAC theorem+
We don't have to put all of these into the spanning layer (and we shouldn't). But we should avoid describing as "trusted" or "trustable" mechanisms that offer only narrow authenticity. A routing behavior that just collects signatures from each intermediary isn't even close to "trustable", and we should discourage such reductionist thinking.
Proposal as a picture
control task
Layer 2
TSP Suite
fundamental authentic intentions
encryption
broadcast
Layer 1
pass confid custody
connections
stateless
discover features
Layer 3: Trust Tasks
manage co-tasks
ask trust registry
issue cred
present proof
DWN xfer
pay
bind biometric
consent
vote
ack
OIDC login
Layer 4
Sublayer verticalness → strict dependency. At each horizontal split, pick one option. Can exit stack at a given sublayer but may mean you don't participate in layers 3 and 4.
TSP suite detail
Layer 2
TSP Suite
Authentic Messages
make crucial sender intentions verifiable
Confidentiality
use encryption to constrain audience
Publication
release messages to strangers
Relationships
accumulate private context
Encounters
non-stateful interactions
Proposal in words
Referencing Sam's proposal as a base:
Re A.3 — "too weak authn → not min sufficient"
IP as a model for TSP
"IP provides just one thing: addressing/identifier — so that's what we should provide, too."
But does the dominant internet spanning layer actually provide only a source identifier?
Version
Hdr Len
Type Svc
Total Length
Identification
Flags
Frag Offset
Time to Live
Protocol
Hdr Checksum
Source Address
Destination Address
Options
Padding
TSP
IP
Context is a big deal
"Love makes the world go 'round."
— Lewis Carroll, 1865
Repeated in Gilbert & Sullivan's Iolanthe (1887). Sung with tenderness by Deon Jackson, the Everly Brothers, Jane Morgan, Anna Alberghetti, Ashlee Simpson…
Roughly authentic quote from Alice in Wonderland (see ch VI and IX). But uttered by the ugly and psychotic Duchess, to Alice, in sarcasm, after beating her miserable baby for sneezing and sharing joke poetry about how compassionate that was.
Should Bob trust that Alice asserts she loves him?
payload = ( A.id , "I love you." )
msg = payload + sign(payload, A.id.key)
What if Alice said it to Carl instead?
Without dest address, Alice's intentions are not fully verifiable, and a malicious intermediary could mis-deliver the message. It's often crucial to have an authentic dest.
Note: this trust issue is about the dest (intended audience), not the route (how it gets there). These should not be conflated.
Version
Hdr Len
Type Svc
Total Length
Identification
Flags
Frag Offset
Time to Live
Protocol
Hdr Checksum
Source Address
Destination Address
Options
Padding
Sam Smith pointed out that I am making/inviting two subtle logic errors in this slide and the next several. One is that my definition of "message" and his are not the same — and thus, I am comparing apples to oranges when I compare my modified message to his "Authenticated Message" diagram. The other is that I am inconsistent in how I'm using the term "authentic". Properly, this term simply means "having the asserted origin", but in some cases I am implying that it means something broader.��I agree with Sam's critique. It means that my logic chain here is not solid. However, I don't believe this changes the basic contention, which is that authentic sender is not enough to build our TSP on. See the following discussion thread:
https://github.com/trustoverip/trust-spanning-protocol/discussions/22
PROVENANT
Trust-destroying dest abuse from current events…
In this case, the mis-delivery was an accident (probably). But playing games with destination is a great way to do deliberate mischief, too. Either way, trust is undermined.
Without no notion of a recipient, is it accurate to frame this as a "message"?
With no notion of any other party or action, can it define a protocol?
Should Bob trust that Alice asserts she loves him?
payload = ( A.id , B.id , "I love you." )
msg = payload + sign(payload, A.id.key)
src | dest
src |
What if Alice said it 9 years ago, as a child?
Without reference to the sender's timing, Alice's intentions at time of receipt are not fully verifiable, and a malicious intermediary could manipulate assumptions. It's often crucial to have authentic timing.
Version
Hdr Len
Type Svc
Total Length
Identification
Flags
Frag Offset
Time to Live
Protocol
Hdr Checksum
Source Address
Destination Address
Options
Padding
PROVENANT
Trust-destroying time abuse from current* events…
"I actually did vote for the $87 billion, before I voted against it."
—US Secretary of State
…John Kerry
image credit: COP Paris (Flickr) - public domain.
Many more recent and more flagrant examples exist; I picked something a bit old to avoid controversy. Was I fair? This is an authentic picture of John Kerry at COP2015, and he was Secretary of State then. His time- and trust-abusing statement is also authentic, and truly illustrates the problem. But Kerry articulated his famous flip-flop during the 2004 US presidential campaign, so combining the 3 elements is also misleading WRT time…
Should Bob trust that Alice asserts she loves him?
payload = ( A.id , B.id , timing , "I love you." )
msg = payload + sign(payload, A.id.key)
src | dest | timing
What if Alice said it while rehearsing a romantic play?
Without reference to a goal, Alice's stance toward her authentic data may be misunderstood. Her intentions are not fully verifiable. It's often crucial to have authentic purpose.
Version
Hdr Len
Type Svc
Total Length
Identification
Flags
Frag Offset
Time to Live
Protocol
Hdr Checksum
Source Address
Destination Address
Options
Padding
PROVENANT
Trust-destroying purpose abuse from current events…
image credit: cnbc.com (fair use)
The jailbreak technique is to tell ChatGPT to pretend a different purpose (predict what an AI without safeguards against hate and sleaze would say). This changes meaning and accountability.
Stepping back to generalize
Guidelines Straw Man
It belongs in the base sublayer of the TSP suite IFF:
7+1 fundamental authentic intentions
Who am I, the speaker? | Changes what part of my identity context is known, and what reputation is at stake: "I'm V, your gamer buddy"vs. "I'm Volodymyr Zelenskyy, the president of Ukraine." |
Who do I think you are? | Changes accountability of senders, listeners, and eavesdroppers: "This is for Alice, who has previously proved her security clearance to me." |
Did I say anything before this that matters? | Clarifies what state the message is designed to modify: "This builds on the assumptions in our wargaming scenario. See my previous messages for caveats." |
What's my goal? | Guides behavior patterns and outcome. "I am trying to be a whistleblower, not testify under oath." |
Is my goal bounded in time? | Sets expectations about timeliness. "This offer to merge our companies is only good for the next 20 minutes. Act now before it's too late." |
Is there external state that matters? | Anchors accountability in something larger than the conversation. "I proposed this stock purchase AFTER I read version 2 of your prospectus, not before." |
What else do you need to know? | Tells how to interpret other pieces of data in the message. "Since this is an official application, you will notice my full name, mailing address, and 3 required attachments." |
What's goal, what's wrong? | Lets parties describe, recognize, and react to goals and errors in predictable ways. |
What's in a name?
Base sublayer of TSP Suite = Fundamental Authentic Intentions (FAI)?
This has the cute property that messages passing through this layer can be evaluated objectively for FAIthfulness to the sender's intentions. :-)
Faithful is a synonym for trustworthy.
FAIthful fields?
sr (source identifier) | Required. AID. Gives sender's intent WRT the reputational context for the message. |
sig (source identifier) | Required. Signature over header and payload. |
a (audience identifiers) | Optional (missing → audience is "any"). Array of AID. Identifies intended plaintext audience, NOT delivery targets for routing or encrypted envelopes. |
th (thread) | Optional non-negative 32-bit int. All participants use sr + th as the thread's lookup key; the sender of a thread's first message must pick a th value that makes this combination unique enough for all practical purposes. Groups messages by topic into logically related streams with different goals, states, and trust profiles. |
mo (message ordinal) | Required if th. Monotonically increasing, non-negative 32-bit int. Counts how many messages sender has previously contributed to this thread; makes gap detectable. |
pth (parent thread) | Optional, and only allowed when mo == 0 (starting a new thread). If omitted then, thread is standalone. Otherwise, connects this thread to previous verifiable data. |
ttl (time to live) | Optional. Non-negative 32-bit int. Epoch time in seconds when sender's goal for this message will lapse. Begin ignoring at this time to avoid useless processing ("offer good until time X"). |
ex (exists) | Optional. Hash with special CESR prefix to clarify PoE type (e.g., blockchain root; IPFS, github commit, build artifact). Proves message was created after the referenced data already existed. |
s (message schema) | Required. SAID. Defines structure of rest of payload, including extra headers and attachments. |
CESR support for extensible schema, binary and text transformations, compression, encodings, and arbitrary attachments is assumed.
We also need DIDComm's goal codes and problem codes.
Re A.4 — "some context shouldn't be layered"
Spanning layer: translate below, interop above
30
[A]t the narrow point in the hourglass, is … the key to the approach that [it] takes to interoperation. The bearer service provides a set of capabilities sufficient to support the range of applications illustrated above it. It implements these capabilities by building on the more basic capabilities…below. [It] would thus span the broad range of network technologies illustrated below it, hide the detailed differences among these various technologies, and present a uniform service interface to the applications above. The bearer service is thus an example of a spanning layer, with specific features and capabilities.
—Ibid
Why are common standards needed at one layer but not at another? Certain protocols are designed with the specific purpose of bridging differences at the lower layers, so that common agreements are not required there. Instead, the layer provides the definitions that permit translation to occur between a range of services or technologies used below... [A]t and above such a layer common standards contribute to interoperation, while below the layer translation is used. Such a layer is called a "spanning layer" in this paper.
—Clark, 1997, p. 133
span by translating
interop by common foundation
The Hourglass Theorem
weakness → span more "pre" beneath → more ways to implement → easier technical adoption
strength → fatter interface with more "post" above → harder to support→ richer applications
"If a specification S1 is weaker than another specification S2, then:
1) post(S1) ⊆ post(S2) , and
2) pre(S1) ⊇ pre(S2) ." —Beck, 2019, p. 52
The weaker spec's upper hourglass is a subset of the stronger. What weak supports <= strong.
The weaker spec's lower hourglass is a superset of the stronger. What weak spans >= strong.
NOTE: Beck does not use the ⊂ and ⊃ (proper sub/superset) operators, so > and < would be incorrect. This nuance matters, because it means weaker doesn't automatically increase span.
Weakness and spanning: fuzzy and clumpy, not precise and continuous
more weakness →
more span (impls, adoption) →
If one goal is maximizing possible supports, then the Hourglass Theorem tells us that the slope of the subspace of feasible solutions when considering this goal as a function of the logical weakness of the spanning layer is non-negative. We have no metrics for logical strength or for the size of the space of possible solutions, only for the notions of one service description being weaker than
another and one set of service descriptions being included in another. These definitions allow system architects to reason about the sign of the slope, but not its steepness nor
what value is necessary in order to achieve a particular design goal.
—Beck, 2019, p. 53-54
The discrete points are reality. Clumping reflects cohesion / coupling. Sometimes adding a feature has little effect; sometimes it has a lot. Only points — not every position on the x axis — are possible choices.
The line is just a convenient generalization — approximately true and good for rough reasoning. It is misleading in that it implies < and >.
Example of clumpiness
It's usually good to be weaker. But here, α is weaker than β, yet has the same Y value on our graph. That's because the set of spannable supports is identical.
Eliminating dest to get weakness trades away strength for no benefit.
Weakness is only valuable if it increases spanned supports.
src | dest
src |
more weakness →
more span →
β
α
(Un)constrained vs. Undefined
Q: What if Alice just signs for anybody to read?
A: She should say that (dest = any).
Sam rightly decried "Platform-Locked Trust"
Security is siloed because applications don't have a common layer of shared trust.
Neck only prevents if TSP is minimally sufficient (no green above neck)
A basis for trust that is defined above TSP can also create "Application-Locked Trust"...
Tunnels to the rescue!
If TSP carries opaque trust basis in payload, we can get around the wall.
Sam mentioned tunnels in the discussion threads for his proposal, and he is working on a proposal to tunnel encryption through the base layer of TSP Suite. Conceptually, I like this (cf DIDComm enc envelope).
Tunnels have limits
Applications aren't the layer above TSP
control task
Layer 1
pass confid custody
discover features
Layer 3: Trust Tasks
manage co-tasks
ask trust registry
issue cred
present proof
negotiate
pay
bind biometric
consent
vote
ack
introduce
Layer 4: Applications and Ecosystems
Layer 2: TSP
Trust tasks differ
from applications in
important ways: they are
multi-party, and they should
be composable. Trust implications…
What's above TSP isn't best
imagined as high-level network
protocols, either. It demands human-
quality comms on human timescales.
This also has trust implications…
Composability example: register for a MOOC
control task
Layer 1
pass confid custody
discover features
Layer 3: Trust Tasks
manage co-tasks
ask trust registry
issue cred
present proof
negotiate
pay
bind biometric
consent
vote
ack
introduce
Layer 4: Applications and Ecosystems
Layer 2: TSP
Not all tasks are initiated by the same actor (left- vs. right- aligned tells who). If original actor doesn't define intentions WRT confidentiality, timeouts, etc., then subsequent tasks lose context. Tunneling isn't automatically transitive.
register task
student
school
trust reg
self assert info task
verify task
present proof task
pay task
negotiate method task
ask trust reg task
ask trust reg task
biometric�svc provider
bind biometric task
← time
Reasoning about trust requires context hooks
guaranteed by foundation
How does the TSP help me reason about and manage the trust properties (confidentiality, privacy, transparency, consent, governance…) of this workflow if the only thing guaranteed to be common to all of them is the TSP, it cares only about authentic source, different entities manage different parts, and tunnels aren't transitive?
PROVENANT
Gluing things together requires context hooks guaranteed by foundation
How does the TSP help me enforce timeouts, propagate errors and cancellations, and pass inputs and outputs across trust task boundaries, if the only thing guaranteed to be common to all of them is the TSP, it cares only about authentic source, different entities manage different parts, and tunnels aren't transitive?
Understanding DIDComm
built from DIDComm primitives and casually called "DIDComm" by some.
DIDComm
Application-Level Protocols
control task
plaintext struct + hdrs, err and goal codes
signing
DID Methods, VDRs, crypto
"routing"
discover features
co-protocols
issue cred
present proof
negotiate
pay
bind biometric
err
introduce
encryption
ack
chat
Defined in DIDComm v2 spec, which may cause confusion. Always separate layer.
3 kinds of "routing" that are often confused
Bit Movement
Concerns network nodes. Many routes may be valid; best for now is chosen dynamically. Bits don't change in transit.
Confidential Chain of Custody
Who's accountable as confidential envelopes are opened? Parties are identifiers, not network nodes. Movement is slightly related.
N-wise Distribution
Sending a message a full audience > 1. , as opposed to anyone party? Movement and confidentiality are both incidental concerns.
Mapping DIDComm
control task
Layer 2
TSP Suite
fundamental authentic intentions
confidentiality
broadcast
Layer 1
pass crypto custody
connections
stateless
discover features
Layer 3: Trust Tasks
manage co-tasks
ask trust registry
issue cred
present proof
negotiate
pay
bind biometric
consent
vote
err
introduce
Layer 4
important DIDComm protocols to continue supporting (many not pictured here)
The thing called "routing"in DIDComm circles
new development
Synthesis of DIDComm DID exchange + QR support + KERI OOBIs and challenge / response to stop MITM
CESR-ized version of DIDComm onioned envelopes (no authcrypt). Sam is starting a discussion.
Give user input to an agent.
Postulated "DIDComm Streaming"?
KERI AIDs + a few headers and attachments in a CESR envelope, plus goal and problem codes
Re A.5 — "adoption is complicated"
Perhaps we should consider non-technical adoption issues?
Beck identifies openness and symmetry (power dynamics) as interesting and orthogonal to the weak/strong tradeoff:
A final aspect of interoperation is the issue of whether, when two (or more) entities interact, they do so as equals or peers, or instead in some asymmetric way, for example as client and server, or as provider and consumer. Protocols are sometimes designed in such a way that not all the participants in the protocol can play all the roles. For example, some of the early remote file access protocols were designed so that the functions that implemented the file server and the file user were separately specified. This made it easy to produce implementations that omitted the server code, so that the resulting software could only play the role of the user. It was then possible to sell the server code for additional money. In general, symmetry, like openness, tends to reflect business issues.
—Beck, 1997, p. 138
Considerations
SSI community isn't starting from scratch. Do we want to facilitate their adoption at all? Where are we willing and not willing to compromise?
The larger internet isn't starting from scratch, either. Where are we willing and not willing to compromise?
Possible Compromises
TSP suite detail
Layer 2
TSP Suite
Authentic Messages
make crucial sender intentions verifiable
Confidentiality
use encryption to constrain audience
Publication
release messages to strangers
Relationships
accumulate private context
Encounters
non-stateful interactions