Subject: Re: [eap] [Issue] Corner case in 802.1X/EAP State Machines

From: John Vollbrecht <[email-masked]>
Date: Tue, 11 May 2004 18:22:02 -0400

--On Monday, May 10, 2004 11:29 PM -0400 Nick Petroni <[email-masked]> 
wrote:

> Sorry I am just playing catchup. This is an interesting conversation, but
> I am not sure we have yet captured the essence of what is going wrong in
> this scenario. First and foremost, I think the 802.1X-REV document is very
> clear what it *intends* EAP to do when an EAPOL-Start is received-
> everything should be reset. The informative section of that document
> reads:
>
> F.3.2 eapRestart
> The authenticator state machine sets this signal to indicate to the higher
> layer that PAE is restarting. It is expected that the higher layer will
> reset its state to remain synchronized with the PAE state machine. The
> higher layer must reset this signal to indicate it has completed its own
> restart. This signal is required to inform the higher layer of a PAE event
> that should cause the termination of in-progress or outstanding
> authentications. The higher layer must reset eapSuccess and eapFail after
> eapRestart is set true by the PAE layer.
>
> On Mon, 10 May 2004, Jim Burns wrote:
>
> > I believe the correct fix would be as follows:
> > The EAP state machine (not the .1X state machine) differentiates between
> > its initial EAP request and subsequent requests following receipt of a
> > response to its initial request.  If  EAP is in the initial state and
> > receives an 'eapRestart' then it ignores it and just resends its initial
> > request with the same ID.  In other words, put the resend of the initial
> > request that used to reside in the .1X-2001 machine in the EAP machine.
>
> If I understand this correctly, this seems to violate the informative
> section of 802.1X-REV and the spirit of what is meant in the 802.1X-REV
> machines IMHO. EAPOL-Start means game over as far as I can tell.
>
> The issue from my point of view seems to center around the interaction
> between EAP and the backend. One of my primary reasons for this conclusion
> is that a standalone authenticator is not likely to have this issue.
> eapRestart will be able to reset all state, including policy and the
> method, which cannot occur in the backend case. Furthermore, I am not sure
> if this really is 802.1X specific. What would happen if there were a
> backend authentication server in the PPP case and your phone line
> suddenly dropped, followed by the user dialing back in to the same modem?
> It seems there must be some way for the authenticator to "reset" the
> backend. Perhaps someone can help me distinguish these two scenarios?
>
> It seems to me that either
> (1) 802.1X wrongly assumes there is such a thing as "completely reset EAP"
> or
> (2) EAP is not quite clear how to implement this for passthrough.
>
> # 2 seems more likely and my guess is this is RADIUS-EAP specific, but I
> could certainly be missing some things in my analysis.
>
> Thanks,
> nick
>
>
>
I agree with your analysis.    I think this is a very interesting case and 
the discussion has been very informative.  I think there are differences in 
opinion on how this should work as well as problem with the handling of 
this on the backend.

In looking at this is seems that 802.1X does set eapRestart at appropriate 
places, and EAP does handle this in both the standalone and full 
authenticator, resetting variables and starting EAP again.   In my opinion 
this is correct.

There are two other cases where it seems a problem.

1) In the passthrough case it is not clear whether eapRestart goes to the 
INITIALIZE state for the full Authenticator or just falls through.  In this 
case I think it should go to the INITIALIZE state, and the fix might be to 
include an INITIALIZE-2 state in the passthrough diagram that would 
indicate this.  Other ways to fix it might be possible, but the requirement 
seems to be that eapRestart reset the authentication.

2) In the backend case (which is I think what Bernard was talking about), 
there is no way in the state machine to signal that the authentication 
should be restarted.  My understanding of what happens in the case where 
the  Passthrough authenticator/NAS has gone to restart and then sends a new 
RADIUS Request with new EAP message is that the RADIUS server passes the 
new eap message to the EAP machine.

2.1) If the RADIUS/EAP request has no EAP message - i.e. it is an initial 
request - the backend server could go to INITIALIZE and reset variables and 
start a new authentication.  It does not do this right now, but this seems 
a reasonable thing to change.

2.2) If the RADIUS/EAP request has an EAP Response message, the server does 
not seem to have any way to know if the EAP Response is for a new EAP 
authentication or a continuation of the old authentication.  Here there 
seem to be two cases, one where the EAP method in the request is identical 
to the  one waiting to respond, and one where the methods are different.

2.2.1) When the EAP method in the new request is the same as that in the 
old request, I see no way signal to the state machine that it should reset. 
In this case it seems that some additional information in the RADIUS 
Request may be needed - a "first EAP message" attribute.  This would allow 
the backend server to know that this a first request and go to INITIALIZE. 
Alternatively one might do something iffy like sendig a RADIUS Accounting 
Done message prior to sending the first EAP message.  I am interested if 
there are better ideas.

2.2.2) When the EAP methods are different, one could assume that a new 
authentication is started and go to INITIALIZE.  This uses the idea that 
EAP methods cannot be chained.   However, whatever fix for 2.2.1 gets 
implemented will probably fix this as well, so finding an appropriate fix 
for 2.2.1 seems the right approach.

The above is an attempt to suggest changes to support Nick's idea that 
there is a problem between the authenticator and backend.  I think the 
suggested change to 1) and 2.1) seem fairly minor and probably should be 
done.  I am not sure about the fix to 2.2.1, but it seems that one is 
needed.

Comments?

-- John
_______________________________________________
eap mailing list
[email-masked]
http://mail.frascone.com/mailman/listinfo/eap

---

From: Bernard Aboba <[email-masked]>
Date: Tue, 11 May 2004 17:29:35 -0700 (PDT)

> a reasonable thing to change.

The issue of whether a given RADIUS Access-Request is part of an existing
EAP exchange or represents a new exchange is not unique to this particular
discussion. It can occur in multiple contexts.

RFC 3579 discusses this issue in Section 2.6.1:

"  In EAP, each session has its own unique Identifier space.  RADIUS
   server implementations MUST be able to distinguish between EAP
   packets with the same Identifier existing within distinct sessions,
   originating on the same NAS.  For this purpose, sessions can be
   distinguished based on NAS and session identification attributes.
   NAS identification attributes include NAS-Identifier,
   NAS-IPv6-Address and NAS-IPv4-Address.  Session identification
   attributes include User-Name, NAS-Port, NAS-Port-Type, NAS-Port-Id,
   Called-Station-Id, Calling-Station-Id and Originating-Line-Info."

I take this to mean that the a NAS wishing to start a new RADIUS exchange
needs to ensure that the server can distinguish this exchange from others
which may be occuring on the same or other NASen.

In this particular case, NAS Identification attributes are the same (same
NAS), as is the User-Name, Called-Station-Id, Calling-Station-Id,
NAS-Port-Type.

However, RFC 3579 nevertheless requires that the sessions be
distinguished.

The question is how.  In some cases (such as when the peer attaches to a
new NAS Port), the sessions can be distinguished via a different NAS-Port
or NAS-Port-Id.

However, when the  NAS-Port is the same (e.g. the peer has associated to
the AP, and therefore the Association-Id/NAS-Port hasn't changed) we need
another way of distinguishing the sessions.
_______________________________________________
eap mailing list
[email-masked]
http://mail.frascone.com/mailman/listinfo/eap