![]() |
Scoll & Scollar
|
Last updated : 19 October 2008 by Fred Spiessens
Status: incomplete but up-to-date.
This document should have been completed by the end of October
2008. I'm sorry I still had no time to finish it.
The user has to indicate what restrictions can be imposed. Typically, the
imposable restrictions affect the behavior of the subjects the user can
program or control himself and/or some parts of the initial configuration (eg: some the initial
access rights).
Using Scollar in this way is useful when designing and programming
secure patterns of interaction between some trusted (relied upon)
and some untrusted (unknown) subjects.
What restrictions
can Scoll reason about ?
When searching for minimal sets of restrictions, the tool will -
at least in principle - try all combinations of these restrictions,
and only report the minimal sets that guarantee the safety and
liveness requirements the user has specified. The actual algorithm
is somewhat smarter of course, but will not be describe here.
There are two kinds of restrictions:
What is so special about Scoll?
The left hand side of the rule is called its body, the
right hand side is its head
The body can be empty, the head always consist of at least one
predicate.
For instance, this could be a simple system rule:
access(A,B) access(B,C) isActive(B) => access(A,C)
During the execution of a Scoll program, the rules will be
instantiated: all variables will be substituted for actual
subjects.
The body of every instantiated rule then represents a conjunction
(AND) of the facts . An instantiated rule is a simple
logical implication: all predicates in the head will become true as
soon as all facts in the body are true.
Scoll requires that the ability to identify entities is modeled explicitly when relevant. Therefor Scoll rules can have only variables in their predicates.
| Bad example : | |
| access(A,alice) => access(alice,A) | invalid syntax |
| Good example: | |
| isAlice(X) access(A,X) => access(X,A) |
In the future Scoll may relax this restriction. For instance Scoll could provide the special predicates ==(X Y) and \=(X Y) for this purpose, and allow the use of constants in these predicates only.