rxgk CombineTokens and security level (was Re: [AFS3-std] Re: afs3-rxgk-updates for 03)

Benjamin Kaduk kaduk@MIT.EDU
Wed, 31 Oct 2012 23:17:44 -0400 (EDT)


On Wed, 31 Oct 2012, Benjamin Kaduk wrote:

> On Mon, 29 Oct 2012, Jeffrey Hutzelman wrote:
>
>> On Mon, 2012-10-29 at 16:57 -0500, Andrew Deason wrote:
>> 
>
> (This is 0309471e70d "Clarify CombineTokens' least-permissiveness", not 
> 13a2d01b as might have appeared from the trimmed quoted text.)
>
>> 
>> 
>>> Also, should the combined token enctype really be set to the minimum of
>>> the input tokens? Does the order of enctypes based on integer value
>>> really mean anything? (should this maybe be "most preferable" enctype
>>> based on the input enctypes, or something?)
>> 
>
> A good question! :)
>
> The old text applied simple logic to "all numerical fields", and one of the 
> notes I dug up was to specify which fields those are.  Pulling from 
> RXGK_ClientInfo, enctype is represented as 'int', which ... is hard to claim 
> is non-numerical.  (RXGK_Level is an enum type, and I also listed it as 
> "numerical".  Separate mail on that forthcoming.)


Since we give explicit values for the enum RXGK_Level, it would seem to 
fall under a naive reading of "numerical type", and was included in the 
list in my commit 0309471e70db7a.  However, it seems like the "minimum of 
the values" may not be the right choice here, either. The right choice 
itself, however, is not immediately obvious to me.  A CM could certainly 
have one token per level and always combine with a user token using the 
same level ... but this requires knowing what level a particular token 
uses, and the token is supposed to be opaque.  Or, perhaps a user wishes 
to combine two tokens, not necessarily of the same level.

It seems that the key question here is whether the combined token 
represents access to the intersection or the union of the two identities. 
(Or whether ACLs should be configurable in either fashion, I suppose.)
That would lean towards a "most restrictive" or "least restrictive" 
policy, though is not a conclusive argument in either case.
I don't remember seeing much about this in the email archives; was it 
discussed in in-person meetups?

While "use the value from the first one of the two" seems reasonable for 
choosing an enctype, I can't convince myself that such a procedure would 
be reasonable for the security level.  It seems like the client may have 
reason to prefer a stronger or weaker security level, and the server may 
have policy reasons to disallow either type of request.  This would lean 
to a negotiation scenario, and my brainstorming is not coming up with 
other plausible options.

But, if we are negotiating security levels, we might as well negotiate 
enctypes at the same time.

I would love some more input here...

-Ben