When I wrote the "Revocation" section of the capability-URI RFC, I described a design principle, where you avoid having code make a decision to enforce a policy, and instead have the graph of capabilities enforce the policy by construction.
The example is with a caretaker that removes its capability when revoked. After revocation, the caretaker couldn't decide wrongly to proxy an invocation, because its internal variable points to NULL or something similar.
I realize that it's not how the caretaker is described in many documents, including Robust Composition, where the caretaker has a boolean flag inside. I wonder if it is how Redel implemented it, though, because its thesis says "Whenever A's level of trust in B decreases, a weaker capability can be given to C."
Has this principle been formally described somewhere? Does it have a name?
It reminded me a lot of "make invalid states unrepresentable", which is now pretty widely known. I wondered about calling it "make wrong decisions unreachable" but it doesn't fit exactly…
Curiously,
Pierre Thierry
--
pie...@nothos.net 0xD9D50D8A
--
You received this message because you are subscribed to the Google Groups "friam" group.
To unsubscribe from this group and stop receiving emails from it, send an email to friam+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/friam/8849f876-63df-4823-9dc7-9e1a273982c6%40nothos.net.

--
You received this message because you are subscribed to the Google Groups "friam" group.
To unsubscribe from this group and stop receiving emails from it, send an email to friam+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/friam/8849f876-63df-4823-9dc7-9e1a273982c6%40nothos.net.
I usually use the set-to-null pattern. In Robust Composition, I did not, to give Alice the option to re-enable it
It reminded me a lot of "make invalid states unrepresentable", which is now pretty widely known. I wondered about calling it "make wrong decisions unreachable" but it doesn't fit exactly…There is also a long history of the pattern of "correct by construction" where program states are constructed as a part of its proof of correctness.
But "correct by construction" mandates a program construction method, while "make invalid states unrepresentable" and the one I'm trying to name are design principles you can incorporate in any method.
Sure, I should probably have stated that that appears to me to be the history of "correct by construction", these days I hear it mostly in a looser sense of "only valid states are representable"But "correct by construction" mandates a program construction method, while "make invalid states unrepresentable" and the one I'm trying to name are design principles you can incorporate in any method.There is also a long history of the pattern of "correct by construction" where program states are constructed as a part of its proof of correctness.It reminded me a lot of "make invalid states unrepresentable", which is now pretty widely known. I wondered about calling it "make wrong decisions unreachable" but it doesn't fit exactly…
Well, on second read, I don't agree with my earlier comment. It so happens that I just saw Dijkstra's description of "correct by construction" again, and both "make invalid states unrepresentable" and making the graph of authority such that wrong choices cannot be made both completely fit into his method: in each step, you identify an invariant, and you modify the code to enforce that invariant.
Thanks for pointing it out. Referring to Dijkstra's more general principle makes it less pressing to me to find a name for the graph case.
Gratefully,
Pierre Thierry
--
pie...@nothos.net 0xD9D50D8A
To view this discussion visit https://groups.google.com/d/msgid/friam/CAK5yZYjUvy15YcLLr1tG%2BfZZ6aP_iOT_DDYcPz0ykPTib5SzTw%40mail.gmail.com.
Interestingly you can do it all with a single non-null pointer by storing a gate disable bit in the unused extraspace of the pointer alignment. This allows for the "enabled" version of the pointer to just be the pointer itself.You can pretty easily make a rust typed version of this using the `enum-ptr` crate,
But then the authority is still there, dormant, just a flip away. It doesn't give you the guarantee that the caretaker won't give access to the target capability in the future, does it?
But then the authority is still there, dormant, just a flip away. It doesn't give you the guarantee that the caretaker won't give access to the target capability in the future, does it?
--
You received this message because you are subscribed to the Google Groups "friam" group.
To unsubscribe from this group and stop receiving emails from it, send an email to friam+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/friam/c7b9fc29-f165-4582-858c-01c847337863%40nothos.net.
# E sample
def revocableCapabilityMaker(baseCapableObject) {
var capableObject := baseCapableObject
def forwarder {
to revoke() {capableObject := null}
match [verb, args] {E.call(capableObject, verb, args)}
}
return forwarder
}
--
You received this message because you are subscribed to the Google Groups "friam" group.
To unsubscribe from this group and stop receiving emails from it, send an email to friam+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/friam/CACTLOFrJHFruBGkVp5TVMpxoa7LxBUSCLfHJOxScX_oJMfeFow%40mail.gmail.com.
To view this discussion visit https://groups.google.com/d/msgid/friam/CANpA1Z3pxGKhr5-8NViS7Mf%2BkoKupr1G%3DxDwqAynsO6Tt0S9sw%40mail.gmail.com.