-
Notifications
You must be signed in to change notification settings - Fork 411
MSC4353: Per-origin linear chain #4353
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
base: main
Are you sure you want to change the base?
MSC4353: Per-origin linear chain #4353
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.
Implementation requirements:
- Server
### Recovery from downtime/db failure | ||
|
||
Extra care must be taken to ensure that implementations maintain | ||
knowledge of their forward_extremity. Currently it doesn't matter if a | ||
server sends events with only partial knowledge of their prior | ||
history. Implementations may need to query other servers and ensure | ||
they have complete knowledge of their own forward extremity. |
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.
I believe that if servers persist events before sending them, then the risk is limited to db recovery. While querying other servers for the extremity may be necessary in that scenario, equally the server key could be rotated within the context of #4345 instead. Which removes the risk entirely.
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.
Unfortunatly it is entirely possible through a naive db restore that a server sends authorization events that conflict with its prior history that is now unknown to itself. So even if a definition of a traitor is liberalised it's still going to be possible to become one by accident. We don't actually propose that equivicators or inconsistent servers are noted or even acted upon in any way but it's still going to be important that we allow ways out (which key rotation seems to be the best of them).
### An example of erasure with linear origin chain | ||
|
||
 | ||
|
||
If Blue does attempt to retroactively erase Yellow, it must explicitly | ||
create an event that is concurrent with its own origin chain. And thus | ||
it is observable to everyone that Blue is an equivocator/byzantine | ||
traitor. As Blue's own events will have multiple causal successors | ||
sent by Blue. |
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's still possible to erase history, it's just that doing so without creating a concurrent event requires you to explicitly acknowledge yellow's history as a part of the ban. And if bans are mandated to be scoped to a target's origin predecessor, it is then actually impossible to abuse to erase history. Since a condition for authorising the ban would be not to contradict your own causal frontier in auth rules.
Green, and Yellow. Consider that Blue immediately bans Yellow after | ||
Yellow joins the room and the ban event directly references Yellow's | ||
join in `prev_events`. Consider that concurrent to Blue's ban, | ||
Yellow sends a message. So that Yellow's join event has to known |
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.
Yellow sends a message. So that Yellow's join event has to known | |
Yellow sends a message. So that Yellow's join event has two known |
events concurrent to their own causal predecessors without | ||
explicitly ignoring their maintained forward extremity. The proposal | ||
does not prevent this, but it does mean that such an equivocation is | ||
detectable and provable. And so the sender's repuatation can become |
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.
detectable and provable. And so the sender's repuatation can become | |
detectable and provable. And so the sender's reputation can become |
Rendered
Signed-off-by: Gnuxie [email protected]