>>> I agree that there is sense in allowing an enctype other than the two
>>> present in the provided tokens, but it's not imeediately/obviously clear
>>> that it must always be the stronger one.
>> 
>> Well, it needs to be the "most preferred" one.  That pretty much has to
>> mean one of three things:
>> 
>> 1) Whichever one the server picks from the client-provided list.
>> 2) Whichever one comes first(*) in the client-provided list.
>> 3) Whichever one comes first(*) on a standardized fixed list.
>> 
> 
> I'll accept that as a complete list.
> 
>> I certainly don't want (3), and I don't think anyone else does, either.
>> Both of (1) or (2) are in common use, and either would be acceptable to
>> me.  Note that in the case of (1), you can still say that the client
>> list is sorted by preference, without requiring the server to agree.
>> 
>> (*) without loss of generality
> 
> Okay.  I would pick (1) from that, and prefer that the client indicates its 
> preferences.

If we're doing this (and I have no objection to doing so, as it's necessary for 
AFSCombineTokens, in any case) then we need to change the signature of 
CombineTokens to something like:

struct RXGK_CombineOptions {
    RXGK_Enctypes enctypes;
    RXGK_Levels levels;
};

struct RXGK_TokenInfo {
    RXGK_Enctype enctype;
    RXGK_Level   level;
    uint32       lifetime;
    uint32       bytelife;
    rxgkTime     expirationtime;
};

CombineTokens(IN RXGK_Data *token0, IN RXGK_Data *token1, 
              IN RXGK_CombineOptions *options, 
              OUT RXGK_Data *new_token, 
              OUT RXGK_TokenInfo *info);

This is roughly similar to what is done with AFSCombineTokens in order to 
support departmental fileservers and solve the first packet problem. Strictly 
speaking, I don't think we need lifetime and bytelife in CombineTokens, as they 
can be programatically determined - but we do need them for AFSCombineTokens, 
so I'm leaving them here.

The question here is whether the TokenInfo structure needs to be protected in 
some way. If the enctype is wrong, then the PRF will fail, and we won't be able 
to use the token. If the level is faked, then we won't be able to use the token 
to establish a security context. If the lifetime and bytelife are false, then 
the server will still rekey the connection, although the client won't (or may 
rekey too frequently). If the expirationTime is faked, then the client won't 
realise that the token is going to expire ahead of time - but the server will 
still reject attempts to use expired tokens. So, I'm leaning towards the 
protection that's provided by performing this operation over an AUTH (or 
higher) connection being sufficient.

Cheers,

Simon.

_______________________________________________
AFS3-standardization mailing list
[email protected]
http://lists.openafs.org/mailman/listinfo/afs3-standardization

Reply via email to