-
Notifications
You must be signed in to change notification settings - Fork 624
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
Right to Vanish #1256
base: master
Are you sure you want to change the base?
Right to Vanish #1256
Conversation
Co-authored-by: fiatjaf_ <fiatjaf@gmail.com>
Starting over from scratch from one point in time onwards is a good feature. Considering that an user could change their mind by using a @vitorpamplona have you considered merging the two kinds into a single parameterized replaceable event with the |
I am against the merge because the second event kind is much more dangerous than the first. Keeping things separate should avoid some mistakes but clients (like forgetting to set the relay or d tag) |
Add a switch so that if tags is empty - delete all if a tag list is included - delete only those tags associated with the pubkey. Note: I understrand that the additional granularity is outside the "Right to Vanish" scope. |
I also like @arthurfranca's idea but instead of |
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.
This is nice! Required, I think, for relays in the EU that want to be GDPR compliant. Also the Apple App Store has a rule that you must offer the user a way to delete their account, and this seems like a best-effort way to adhere to that rule, given that you can't force other people to delete your data.
CC @jb55 I think you publish some kind of account deletion event in Damus to comply with the Apple rules. Curious what you think of this. |
Ok, unified the two kinds in one with the ALL_RELAYS tag as requested. |
But it was supposed to be a A PRE fits nicely because the proposed event is unique per relay url. |
It can't. The event can have more than one target relay. |
If I'm relay "A", references to relays "B", "C", ..., "Z" are bytes I don't want to store. Contrary to what happens in most other use cases, this one benefits from splitting many references into individual events. |
If that is the case, you probably also don't want to maintain an entry in the replaceable address index for this event in case the user sends a new one. Deletion events should not be replaceable. |
An event replacing the older one would effectively extend the "until" period. Isn't it desired? |
Yes, but we don't need the infrastructure of replaceable events to do that. The regular 62 will delete past 62s as well. |
Replaceable events infra is already in place (NIP-01), no extra lines of code for the replacement logic. |
My point is that we don't need to do replacement + deletion logics. Deletion logic is already enough. Clients that don't implement replaceable events don't need to implement it. |
Though.. a newer You have a point, the replacement logic can't rely solely on PRE flow. |
Got it, if it replaces everything that came before, it replaces older 62. I was wrong. |
I don't really believe in a universal "right to vanish" for distributed protocols.
All that said, I suppose for those who do want to allow for deletion, or those that have to in order to comply with some laws, it's good to have a standard for this. Some feedback: I feel like "Delete Account" is a bad name for this. You're still going to have your pubkey, and all of your followers. And all of your content, on relays that aren't targeted. It's more like "Delete Content Before X From Server Y". And "Right To Vanish" is … just the same thing targeted at all relays. Maybe "Delete Content [From Relay]" and "Reset Account" are better terms for what these two cases accomplish? If you want a real Delete Your Account, it should be an irrevocable revocation of the pubkey. Something like:
Advantages:
Footnotes |
This NIP has been deployed in the latest version of Nos and relay.nos.social. Unfortunately we didn't make a PR directly to strfry. We instead went with a strfry plugin that pushes kind 62 events to a redis stream where they are processed by all our systems (NIP-05, push notification service, and a script that deletes events from strfry). But it's all open source and we have a docker compose file if anyone wants to copy it. @vitorpamplona have you added this to Amethyst yet? |
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 think this is needed and the framing of it is right.
Not yet, but will do soon. I usually wait for somebody else to code the NIPs I propose to confirm that my idea is not just complete trash. :) |
This has the same problem that allowing tagged users to delete events has, which is that it completely breaks all use of shared keys. In #875, all members of a group share a key. This allows anyone to post to the group, but with this PR it would allow all members of the group to delete all the other members' posts. While NIP 87 is likely going away, I also don't think it's the only valid use of a shared pubkey. We should see if the gift-wrap part of this PR can be handled some other way. |
This has been deployed to https://relay.netstr.io/ |
Never mind, shared keys are already broken. What we need to fix it is a mechanism to say events can't be deleted by the author, or the recipient. I rescind my objection. |
i think it can be replaced by #1509 since it would support deletion for all events as well. to specify relays we already have nip-70 and |
I support this, similar to #377 though it should probably allow users to specify all past data, or a complete burn of their key. |
@staab if you mean filter deletion, for relays who keep the filters, they can do the same thing as both nip 109 and 62. without adding 2 more nip and a lot of complexity. just send a nip-9 filter deletion with since and unitl set to minimum and maximum possible numbers. it would prevent future events to be written. we may support freezing an account for a while using same model. in relay side we would have different ways to support it. here is an article explaining it: ill update the article and add the freeze and delete account details (possible ways of implementation for both clients and relays) to it soon. also you can find example implementation of immortal: https://github.com/dezh-tech/immortal |
@kehiy I think the filter version is actually much more complex (it leaks metadata about deleted events, how is "search" interpreted, it's not easily indexable, it's going to be more computationally intensive for relays to implement), and isn't really justified by use case. The way I see it, we need the following types of deletes:
|
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.
There must be a "proof of freshness", to prevent dating events to in the future, and soft-bricking the npub.
A public key should not be able to be irreparably damaged due to a malicious or defective client (outside of full compromise of the nsec).
I think this is actually a desirable feature. I agree that it would suck to do this accidentally, but it's probably better to have it. |
i dont think if it's too complex. you can look at my implementation on immortal which currently performs the deletion of current events well. soon ill support keeping the deleted filter as well. i believe both of them at the same time won't be too complex. about performance, im using a mongo db with multiple database calls and it still performs well. soon ill refactor it to make on call and do the whole deletion which is much more efficient. and it would support all three cases you mentioned and more. this article explains this |
I find it hard to see how relays will honor a feature that can be abused to hold anyone's npub by ransom just because your web client was able to sign an event. Most people blindly allow apps to sign all kinds of events, and most extensions don't even offer a per-kind option. |
one of good approaches for this is @fiatjaf's idea which was using relay contact and asking them for a change. if someone accidentally freezed, deleted, limited their public-key.
|
Asking relay operators to undo it doesn't scale though. |
if you mean in case of filter deletion, relay can set a min pow for deletion request or ask for payments. to prevent huge checks and resources usage. |
i agree. |
I think you misunderstood, I was referring to a malicious web client signing a delete everything event on behalf on someone that is dated to in the future, and holding their identity for ransom. Most people allow apps to sign any event kind. |
I am not sure how proof of freshness solves this. If there is such a client, they can do the same with the past events. They can sign and wait to use in the future as well. The same client can start posting stuff the user didn't approve. If the issue is ransom from a malicious client and that client has the key, I don't think there is anything we can do to protect the user. They can literally do whatever they want with the account. |
@Semisol if your signer/client publishs unexpected deletions on your behalf, then it would do more as well. check the code, use a safe signer, restrict writing levels to be safe from this. we already have people who loose their follow lists. ive got my profile cleaned multiple time juts because some old web clients considered my old pubkey kind 0 as their base to create new one. |
Implemented in chorus. |
|
||
Clients SHOULD send this event to the target relays only. | ||
|
||
## Global Request to Vanish |
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.
to make sure that only specified relays would do this, isn't it better to use nip-70?
im planning to implement it on immortal this way. if you had any reason for not using nip-70, i think we need to add it to spec.
btw, filtered deletion was not accepted and im going to remove it from immortal.
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.
Clients may add that. Relays shouldn't require it.
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 mean something like this:
a relay receives a right to vanish. is it protected? so ask for auth. its not? so execute it.
then we don't need to have "relays"
tag.
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.
The relays tag exist to avoid client mistakes. Most clients auth automatically. So if they happen to re-broadcast the event to a different relay, they would also auth without even thinking that their actions are changing what the user wanted (deletion in just the previous relay).
The meaning of what the author wanted to do should not be dynamic (auth-based).
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.
makes sense. should a relay black list the user to prevent future incoming events from them as well?
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.
ok. is this defined in spec as well?
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.
Relays MUST ensure the deleted events cannot be re-broadcasted into the relay.
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.
the deleted events.
what about events created after kind 62 that have not been deleted? if we blacklist their pubkey we won't accept them as well.
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.
Do it in a similar way we delete replaceable events: everything up to the deletion event created_at gets blocked but the author can use the key after that date.
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.
thanks. its already done.
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.
implemented on dezh-tech/immortal#119
Adds a special event kinds for relays to allow for
Read here