LemmyNet / lemmy

🐀 A link aggregator and forum for the fediverse
https://join-lemmy.org
GNU Affero General Public License v3.0
13.19k stars 872 forks source link

Censorship-Resistant Multi-Instance Identities #3416

Closed zyansheep closed 9 months ago

zyansheep commented 1 year ago

Requirements

Is your proposal related to a problem?

There are two main problems this proposal attempts to solve:

Describe the solution you'd like.

The solution I will describe here is heavily inspired by the scuttlebutt and polycentric protocols.

Instead of a user's history and identity being tied and stored primarily on a single server, any data a user generates (whether that be a post, comment, or profile update) is instead recorded in an append-only hash-linked indexed log (a "user history"), each entry signed locally with a private key controlled by the user, and distributed to a set of user-chosen instances. These signed and stored chunks of data can then be distributed by these hosting instances to other server's users in different contexts. Here's an overview of possible types of signed chunks.

This is just my general idea for a solution. There are lots of other details around aspects such as the specific crypographic primitives but I want to see what people think of this proposal first before addressing the more nuanced design or implementation details.

Describe alternatives you've considered.

What I'm proposing here is kind of an comprehensive version of what has been proposed in other issues:

506 (manually exporting/ importing account data from/to different instances)

3164 (auto syncing user data across instances)

1985 (moving an entire profile to a new instance)

This proposal would solve the root cause of all these issues: there is no need for migration or syncing users if there is only one user distributed across multiple servers! It would also solve issues like cross-instance bans (https://github.com/LemmyNet/lemmy/issues/3399 ?) and anything else that relies on associating data with an identity across instances, because you can just associate the data with a public key instead of a specific account on a specific server. Even if a user tries to ban-evade by changing the public key and username associated with the account (while keeping the same comment and post history), it would be easy to tell for the server that banned the user just by going through the history of keys in the account and checking them against the banlist.

Additional context

Related issue: LemmyNet/lemmy-ui#1571 (cross-instance syncing & linking feature request). I commented a shorter outline of idea there, but then I figured I should open a more comprehensive issue on the main repo because it is not a ui-specific issue.

Edits

7/7/23 - Updated proposal to include multiple key idea and username recognition idea + other small edits.