Dear Alan, WG

We are restarting the thread on the T+ enhancements for SSH. As background: on 
the recent doc, we had conflated the SSH enhancements with the TLS 
modifications, we have taken advice of WG to split these into separate docs, 
the TLS doc is being progressed independently.

The first item we’d like to discuss regarding the SSH doc relates to Alan’s 
broad concern raised here:

"If we're going to extend TACACS+ by adding major new features, I would suggest 
that it's a priority to design these features correctly, the first time.  
Experience shows that it is extremely difficult to extend fixed-field packet 
formats.  It's almost always better to use an extensible format, as with 
DHCPv4, DHCPv4, DNS options, YANG, RADIUS, Diameter, etc.
Using a format with fixed fields now makes it more difficult to extend TACACS+ 
in the future.  There will just be one complex format added after another.  The 
alternative is instead to define an extensible format, in which case new 
extensions become trivial."

We believe that we can address this issue, but first one detour into why we 
were looking to enhance the T+ Authentication Packet: To provide the support 
for SSH key transfer to the client in a flexible way, we plan to simply import 
the extensible arguments that are present in T+ Authorization and Accounting, 
to Authentication, as an addition to Authentication phase.

By addition here, I mean that the plan was for the original Authentication 
packet to be interfered with in the minimal possible way, but the generic 
arguments section  (essentially A-V Pairs) structure from Author and Acct were 
added to it. This gave us, we believed, the flexibility we need to SSH whilst 
keeping the root of the Authentication format consistent with the old 
authentication format to encourage adoption and simplify implementation.

The downside to this approach, as has been pointed out, is that by embedding 
the original T+ Authentication root into the extended packet, we are bringing 
along all its fixed fields,, for example: username. This compares to other 
protocols, such as RADIUS, that include username as one of the extensible 
attributes.

We believe this might be addressed by simply taking the advice to remove the 
fixed fields from the new Extended Authentication Packet. Then, all the fields 
that might be needed, are simply added as members of the arguments (i.e. the 
A-V Pairs). The fixed fields such as: username, rem-addr, flags etc would no 
longer be brought across from the old Authentication Packet.

To make this more concrete:

Here is the original Authentication Start Packet from current T+:

    1 2 3 4 5 6 7 8  1 2 3 4 5 6 7 8  1 2 3 4 5 6 7 8  1 2 3 4 5 6 7 8
   +----------------+----------------+----------------+----------------+
   |    action      |    priv_lvl    |  authen_type   | authen_service |
   +----------------+----------------+----------------+----------------+
   |    user_len    |    port_len    |  rem_addr_len  |    data_len    |
   +----------------+----------------+----------------+----------------+
   |    user ...
   +----------------+----------------+----------------+----------------+
   |    port ...
   +----------------+----------------+----------------+----------------+
   |    rem_addr ...
   +----------------+----------------+----------------+----------------+
   |    data...
   +----------------+----------------+----------------+----------------+


The initial Extended Authentication Packet proposal added the arguments in the 
same pattern as authorisation and accounting, like this:
    1 2 3 4 5 6 7 8  1 2 3 4 5 6 7 8  1 2 3 4 5 6 7 8  1 2 3 4 5 6 7 8
   +----------------+----------------+----------------+----------------+
   |    action      |    priv_lvl    |  authen_type   | authen_service |
   +----------------+----------------+----------------+----------------+
   |    user_len    |    port_len    |  rem_addr_len  |    data_len    |
   +----------------+----------------+----------------+----------------+
   |    arg_cnt                                                        |
   +----------------+----------------+----------------+----------------+
   |    arg_1_len                                                      |
   +----------------+----------------+----------------+----------------+
   |      ...                                                          |
   +----------------+----------------+----------------+----------------+
   |    arg_N_len                                                      |
   +----------------+----------------+----------------+----------------+
   |    user ...
   +----------------+----------------+----------------+----------------+
   |    port ...
   +----------------+----------------+----------------+----------------+
   |    rem_addr ...
   +----------------+----------------+----------------+----------------+
   |    data...
   +----------------+----------------+----------------+----------------+
   |    arg_1 ...
   +----------------+----------------+----------------+----------------+
   |    arg_2 ...
   +----------------+----------------+----------------+----------------+
   |    ...
   +----------------+----------------+----------------+----------------+
   |    arg_N ...
   +----------------+----------------+----------------+----------------+


Removing the fixed parts inherited from the original, the new proposal would 
look like this:
    1 2 3 4 5 6 7 8  1 2 3 4 5 6 7 8  1 2 3 4 5 6 7 8  1 2 3 4 5 6 7 8
   +----------------+----------------+----------------+----------------+
   |    arg_cnt                                                        |
   +----------------+----------------+----------------+----------------+
   |    arg_1_len                                                      |
   +----------------+----------------+----------------+----------------+
   |      ...                                                          |
   +----------------+----------------+----------------+----------------+
   |    arg_N_len                                                      |
   +----------------+----------------+----------------+----------------+
   |    arg_1 ...
   +----------------+----------------+----------------+----------------+
   |    arg_2 ...
   +----------------+----------------+----------------+----------------+
   |    ...
   +----------------+----------------+----------------+----------------+
   |    arg_N ...
   +----------------+----------------+----------------+----------------+

The New Extended Authentication Packet would then pretty much simply be a set 
of arguments, whilst still maintaining the base style that keeps the new packet 
syntactically compatible with the arguments of the other T+ phases.
It will require the definition of attribute names that were previously 
specified as fixed fields.
Does this approach address your concerns?
Many Thanks,
Regards,
The authors.

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

Reply via email to