More comments...

4.4.  Description of Authentication Process

   Authentications are classified by the action, authen_type and service
   fields in the START packet of the authentication Session.  The user,
   priv_lvl, service, port and rem_addr in the START packet are all
   provided to help identify the conditions on the client

  What is meant by "conditions on the client"?  It would be best to describe 
what those fields mean instead.

  ... The information necessary to transact the authentication is passed ...

  What is "information necessary to transact the authentication"?  This sounds 
unclear to me.

  ...  A set of standard authentication classifications is defined in this
   document.  

  What is meant by "authentication classifications" ?  It's not clear from the 
context or the rest of the document.  Perhaps it means "authentication 
protocols" ?  i.e. one exchange is done for PAP, another for MS-CHAP, another 
for OTP, etc.

  ... When the REPLY status equals TAC_PLUS_AUTHEN_STATUS_GETDATA,
   TAC_PLUS_AUTHEN_STATUS_GETUSER or TAC_PLUS_AUTHEN_STATUS_GETPASS,
   then authentication continues and the server_msg may be used by the
   client to prompt the user for more information.

  "may be used"?  What happens when the client doesn't use server_msg to prompt 
the user?

   ... All three cause the same action to be performed, but in the case of
   TAC_PLUS_AUTHEN_STATUS_GETUSER, the client can know that the
   information that the user responds with is a username, and for
   TAC_PLUS_AUTHEN_STATUS_GETPASS, that the user response represents a
   password.

  I'm wary of statements such as "the client can know..."   Is that a 
philosophical statement?

  It's generally best to describe actions instead of knowledge.  e..g. "for 
prompts using TAC_PLUS_AUTHEN_STATUS_GETUSER, the users response is interpreted 
by the client as a username, for use in subsequent exchanges".

  ... TAC_PLUS_AUTHEN_STATUS_GETPASS, that the user response represents a
   password.

  Similar comments apply here.

   ... TAC_PLUS_AUTHEN_STATUS_GETDATA is the generic request for
   more information.

  And what happens then with the data?  When is this message used?

4.4.1.  Version Behaviour

   ... in the table below:

          LOGIN    CHPASS   SENDAUTH
   ASCII      v0         v0       NA
   PAP        v1        NA       v1
   CHAP       v1        NA       v1
   MS-CHAP    v1        NA       v1


  What does "NA" mean?  I suspect I know, but it's good to be explicit instead 
of assuming that the reader knows the authors intent.

  ... The removal of SENDPASS
   was prompted by security concerns, and is no longer considered part
   of the TACACS+ protocol.

  It may be worth considering the removal of all documentation of SENDPASS.  If 
it's not just deprecated by removed entirely, then it should probably be just 
removed entirely.

  4.4.2.  Common Authentication Flows

   This section describes the authentication flows that should be
   supported.

  What is meant by "should be supported"?  Is this an RFC 2119 statement?  Or 
are these examples of authentication flows which are in common use, and that 
all clients && servers are expected to support?

   ... A PAP authentication only consists of a username and password 
   RFC 1334 [RFC1334] .

  I think referencing a later RFC is preferable.

  (chap)

  ...   The length of the challenge value can be determined from the length
   of the data field minus the length of the id (always 1 octet) and the
   length of the response field (always 16 octets).

  This would seem to impose limits on the "date len" field.  It would be good 
to state these explicitly.

  Also, to indicate that the challenges MUST have a minimal length, which 
should probably be no less than 8, though 16 is suggested.  The alternative is 
to allow zero-length challenges, which is not good.

  And how are the challenge, ID, and response fields packed into the data 
field?  i.e. in what order are they packed?  ASCII art would be *very* helpful 
here. 

  Similar comments apply for MS-CHAPv1 and MS-CHAPv2 authentication.

 4.4.3

  ... When the status equals TAC_PLUS_AUTHEN_STATUS_FOLLOW the packet
   indicates that the TACACS+ server requests that authentication should
   be performed with an alternate server.  The data field MUST contain
   ASCII text describing one or more servers.  A server description
   appears like this:

   [@<protocol>@]<host>>[@<key>]

  Examples would help here.  The above text isn't ABNF, or any other 
machine-readable definition of a text string.

  Perhaps the text could be updated to say that "@" is a delimiter. for text 
strings:

0 @ = host
1 @ = host@key
2 @ = @protocol@host
3 @ = @protocol@host@key

 ...  If a key is supplied, the client MAY use the key in order to
   authenticate to that host.  If more than one host is specified, they
   MUST be separated by an ASCII Carriage Return (0x0D).

  Some questions here.  What happens if the client doesn't want to use that 
key?  What happens if the client is pre-provisioned with a different key than 
what is supplied here?  If there are multiple hosts, does the client use the 
supplied key for all of them?  What if the client has a disparate set of keys 
for the list of hosts?

 ...  This packet is
   only currently intended for PPP authentication when multiple
   authentication mechanisms are available and can be negotiated between
   the client and the remote peer.  This also requires future PPP
   authentication extensions which have not yet been passed through the
   IETF.

  Are users performing device administration over PPP?  If that isn't the 99% 
case, then I suggest re-wording the paragraph.

  Also, updating it to clarify what it means for "future PPP extensions".  
Perhaps just removing that sentence would be best.

5.  Authorization

   ...  The authorization REQUEST message contains a fixed set of fields that
   describe the authenticity of the user or process,

  What is "authenticity" of a user?

 ...  priv_lvl

   This field matches the priv_lvl field in authentication request a

  What does this statement mean?  Does the field (length and value) have to be 
identical to the field in the authentication request?  If not, why not, and 
what happens?  If so, it would be better to just say that it MUST be identical. 
 Similar comments apply for the other fields.  "match" is a word which should 
be used in the context of "A must match B", instead of "is used for matching".  
The first is concrete and implementable.  The second is more philosophical than 
protocol oriented.

  ...  Attribute-value strings are not NULL terminated, rather their length
   value indicates their end.  The maximum length of an attribute-value
   string is 255 characters.

  Are zero-length strings allowed?  I presume not, but it would be good to say 
so.

7.  Attribute-Value Pairs

  ... A value of NULL means an attribute with a zero length string for its
   value i.e. cmd=NULL is actually transmitted as the string of 4
   characters "cmd=".

  That seems contradictory.. NULL is encoded by not encoding it..  Perhaps the 
text could instead say:

   Attributes which have no value are transmitted as the attribute name, 
followed by the mandatory or optional flag.  The value is elided.  For example, 
the attribute "cmd" which has no value is transmitted as a string of 4 
characters "cmd="

  ... acl

   US-ASCII number representing a connection access list.  Used only
   when service=shell and cmd=NULL

  I would suggest eliding the NULL here, too.  The temptation for naive 
implementors would be to encode an actual string "NULL".

  
  There should be a separate "Security Considerations" section as Section 9.  
It should explain all of the issues with the protocol, such as the use of 
"encryption", etc.

  Alan DeKok.

_______________________________________________
OPSAWG mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/opsawg

Reply via email to