[AFS3-std] rxgk application-specific behavior for rxgk-afs
Benjamin Kaduk
kaduk@MIT.EDU
Tue, 11 Feb 2014 18:33:27 -0500 (EST)
Hi all,
I went through draft-wilkinson-afs3-rxgk-10 and made a list of places
where behavior is left as "application-specific", "application defined",
or similar, with the goal of making sure that we don't leave anything out
of rxgk-afs that needs to be specified.
We have:
(1) The token format
We do currently specify a token format, to be shared between dbserver
tokens and fileserver tokens (though the current form is interpreted
differently for the two, and is still under discussion).
Our introductory text talks about "rxgk tokens for AFS take the form of
[...]", but later on we say only "the above structure is used for both
database server tokens and file server tokens". The document does admit
the existence of non-file, non-database server services related to AFS
(that might want to use rxgk), but disavows applicability to such other
services. In terms of token format and interoperability, this is probably
okay, because things like bos are only on a single server and will be the
only things producing tokens for their consumption, so the token format
remains ~arbitrary, as it is left in the core rxgk document. I don't
really think any changes to the document are needed for this issue, but I
also expect that the token format we define will likely be reused as
convenient.
(2) The location of the key-negotiation service
We specify that database server tokens are obtained from the rxgk key
negotiation service on the vlserver, on its port and the rxgk service ID.
File server tokens are obtained via AFSCombineTokens against the vlserver,
and we say nothing about running the RXGK_ package on file server
endpoints. It might be a little bit of a gray area in the core spec
whether the file server is obligated to provide an rx server that listens
on the rxgk key negotiation service ID; however, if such a service exists
it is forbidden from issuing file server tokens ("AFSCombineTokens is the
only way to obtain a valid file server token"), so the question seems
pretty irrelevant.
I am slightly concerned that we specify the database server package names
explicitly as PR and VL, omitting, e.g., BUDB_. While the latter is not a
core AFS-3 service, it is a database server shipped with OpenAFS, and I
would expect that it would use function as a database server for the
purposes of the token format and token-encrypting key in this document. I
don't know how to reword things to accomodate this (or similar) usage,
though.
(3) Potential application-specific knowledge of the key negotiation GSS
acceptor identity
We do specify afs-rxgk@_afs.<cellname> (GSS_NT_HOSTBASED_SERVICE) for the
vlserver endpoint. File server endpoints will not be functional, so the
default <service name>@<hostname> (GSS_NT_HOSTBASED_SERVICE) is perfectly
adequate.
(4) The constant RXGK_MAXDATA
We do not specify a value for this constant. Leaving it as
implementation-defined is (sort of) asking for interoperability problems,
so we should probably pick something.
(5) The contents of the opaque in/out parameters of GSSNegotiate()
These are given as "application-specific", but since all calls to
GSSNegotiate() in a given context negotiation loop MUST be on the same rx
connection, I think it is actually "implementation defined". That is, we
don't actually need to specify anything for them, though arguably to be
pedantically correct we should explicitly say that the
application-specific behavior is that the behavior is
implementation-defined.
(6) Token combination behavior of application-specific data fields
Application-specific fields are those other than 'enctype', 'level',
'expiration', lifetime', 'bytelife', and the identity list (and the master
key, of course). For our current token format, that means just
start_time.
We do not currently specify what is used to populate the start_time of a
combined token (BUG!). Off the top of my head, I would say that the
server should just insert the current time of when it performs the
combination.
(6) Token combination behavior of identity information
We specify that the lists are concatenated, in order.
If we do move to a separate "CM identities" field in the token format, we
will need to specify the behavior of CombineTokens and AFSCombineTokens
separately.
(7) The authenticator 'appdata' field
We specify this, as [what boils down to] the CM UUID.
This declaration appears to apply equally to the use of fileserver tokens
and database server tokens, which seems fine. I think that we only
propose using this UUID for extended callbacks (i.e., fileservers), but
(a) didn't look very hard and (b) don't see value in adding a difference
between client behavior talking to fileservers and dbservers, here.
I think that's it for behavior left up to the application by the core rxgk
spec.
-Ben