$K=2^{P\times V}$, the set of all possible states of knowledge. For a given state of knowledge $k\in K$, we say that “$p$ knows $v$” if $(p,v)\in k$.

A tuple $(R,k_0)$ is a [*knowledge flow*]{} for $(P,V)$ directed by the [*communication rules*]{} $R\subseteq P\times V\times P\times K$ and originating from the state $k_0\in K$.

A communication rule describes the conditions under which one principal may gain knowledge from another. For example, the rule $(e, E_{PK(p_b)}(v), p_a, \{(p_a, PK(p_b)), (p_a, v)\})$ states that the encryptor $e$ will tell the cipher $E_{PK(b)}(v))$ to the principal $p_a$ if $p_a$ knows $p_b$’s public key and the plaintext $v$.

Note that our definition of a communication rule limits the class of protocols expressible in the knowledge flow framework. In particular, our rules cannot be used to specify conditions under which information is [*withheld*]{} from a principal, such as “$a$ will [*not*]{} tell $v$ to $b$ if $b$ knows $x$”. Although many practical protocols do not require this form of expressiveness, withholding of knowledge is an essential concept in systems that use certificates: revoking a certificate requires withholding of information. We are working on reformulating the certificate revocation problem using valid and invalid certificate sets, which should 