docs/keystore.md now states what protects the store at rest: the two Unix modes set at creation where the platform has them, the operator's access control on the data directory everywhere, and nothing else. That closed #31, whose three conditions were about stating the position. It did not answer the sentence in #31's body that says encrypting the store with a key kept beside it "is still worth doing", and that sentence needs a home rather than a paragraph in a document.
The question
Whether this plugin wraps the key store's contents with a key of its own, and if so:
- where the wrapping key lives, given that it cannot live inside the file it wraps
- what a server does when the store is present and the wrapping key is not, which is the case that decides whether this fails closed or destroys a working pairing
- what happens on the reverse, a wrapping key present and a store from before the layer existed
What is already settled and should not be re-argued
What it would buy. Protection against somebody who takes one file and not the other, and nothing else. A process running as the server's user reads both. A filesystem backup that copied the data directory carries both. That is written in docs/keystore.md under what protects it at rest, with the residual risk section beside it naming what A5, A6 and A8 obtain today.
What the host offers. Nothing. Measured at both supported server lines rather than assumed:
git rev-parse v10.11.9 v12.0-rc3
e83a7e62f26443f7dd98f126d6955ac1af090125
fc43f151a2418cc112e116050a99dd6318917ab0
git grep -l 'IDataProtectionProvider\|AddDataProtection' v10.11.9 v12.0-rc3 -- '*.cs' ; echo "exit=$?"
exit=1
so whatever wraps this store, this plugin brings.
What the primitive may be. docs/crypto.md refuses any primitive implemented in this repository, so the answer is a call the base class library already ships or it is not this repository's answer:
git grep -n '^## What is deliberately absent' -- docs/crypto.md
Why this is not simply picked up next
Two issues decide how bytes on this path are read and neither has landed. The store carries no format version, which is #55, and it has no answer for a file that does not parse, which is #33. A wrapping layer landing before those is a layer the format work then has to migrate and the corruption work then has to tell apart from damage - a wrapped file and a corrupt one look identical to a reader that has neither.
So the ordering is part of the question rather than a detail of it: this either waits for #55 and #33, or it is taken first and those two are written against a wrapped file from the start.
Done when
- the decision is recorded, either as a wrapping layer that exists or as a written refusal to add one with the reason
- if it is added,
docs/keystore.md's at-rest section and its residual risk rows say what changed and what did not, and no row of that section becomes a positive assurance
- if it is refused,
docs/keystore.md says the question was taken and closed rather than leaving a reader to assume nobody looked
docs/keystore.mdnow states what protects the store at rest: the two Unix modes set at creation where the platform has them, the operator's access control on the data directory everywhere, and nothing else. That closed #31, whose three conditions were about stating the position. It did not answer the sentence in #31's body that says encrypting the store with a key kept beside it "is still worth doing", and that sentence needs a home rather than a paragraph in a document.The question
Whether this plugin wraps the key store's contents with a key of its own, and if so:
What is already settled and should not be re-argued
What it would buy. Protection against somebody who takes one file and not the other, and nothing else. A process running as the server's user reads both. A filesystem backup that copied the data directory carries both. That is written in
docs/keystore.mdunder what protects it at rest, with the residual risk section beside it naming whatA5,A6andA8obtain today.What the host offers. Nothing. Measured at both supported server lines rather than assumed:
so whatever wraps this store, this plugin brings.
What the primitive may be.
docs/crypto.mdrefuses any primitive implemented in this repository, so the answer is a call the base class library already ships or it is not this repository's answer:Why this is not simply picked up next
Two issues decide how bytes on this path are read and neither has landed. The store carries no format version, which is #55, and it has no answer for a file that does not parse, which is #33. A wrapping layer landing before those is a layer the format work then has to migrate and the corruption work then has to tell apart from damage - a wrapped file and a corrupt one look identical to a reader that has neither.
So the ordering is part of the question rather than a detail of it: this either waits for #55 and #33, or it is taken first and those two are written against a wrapped file from the start.
Done when
docs/keystore.md's at-rest section and its residual risk rows say what changed and what did not, and no row of that section becomes a positive assurancedocs/keystore.mdsays the question was taken and closed rather than leaving a reader to assume nobody looked