Re: brcmfmac: how to setup SAE on RPi // Re: [PATCH] wifi: brcmsmac: advertise MFP_CAPABLE to enable WPA3

KeithG <[email protected]> Thu, 27 Jun 2024 08:46:22 -0500
Newsgroups gmane.linux.kernel.wireless.general,gmane.linux.drivers.hostap
Message-ID <CAG17S_OMU2QbeMnue+RWqFErhbPKVCmFR90VMOYkVy+aMcdoBQ@mail.gmail.com>
On Thu, Jun 27, 2024 at 6:34=E2=80=AFAM KeithG <[email protected]> wrote:
>
> On Thu, Jun 27, 2024 at 12:01=E2=80=AFAM Arend Van Spriel
> <arend.vanspriel-dY08KVG/lbpWk0Htik3J/[email protected]> wrote:
> >
> > On June 27, 2024 12:47:02 AM KeithG <[email protected]> wrote:
> >
> > > On Wed, Jun 26, 2024 at 7:30=E2=80=AFAM Arend Van Spriel
> > > <arend.vanspriel-dY08KVG/lbpWk0Htik3J/[email protected]> wrote:
> > >>
> > >> On June 26, 2024 2:05:07 PM KeithG <[email protected]> wrote:
> > >>
> > >>> On Wed, Jun 26, 2024 at 2:48=E2=80=AFAM Arend Van Spriel
> > >>> <arend.vanspriel-dY08KVG/lbpWk0Htik3J/[email protected]> wrote:
> > >>>>
> > >>>> On June 21, 2024 2:24:19 PM KeithG <[email protected]> wrote:
> > >>>>
> > >>>>> On Fri, Jun 21, 2024 at 4:09=E2=80=AFAM Arend van Spriel
> > >>>>> <arend.vanspriel-dY08KVG/lbpWk0Htik3J/[email protected]> wrote:
> > >>>>>>
> > >>>>>> + Jouni
> > >>>>>>
> > >>>>>> On 6/20/2024 8:25 PM, KeithG wrote:
> > >>>>>>> 1718907734.308740: wlan0: WPA: AP group 0x10 network profile gr=
oup
> > >>>>>>> 0x18; available group 0x10
> > >>>>>>> 1718907734.308748: wlan0: WPA: using GTK CCMP
> > >>>>>>> 1718907734.308758: wlan0: WPA: AP pairwise 0x10 network profile
> > >>>>>>> pairwise 0x10; available pairwise 0x10
> > >>>>>>> 1718907734.308767: wlan0: WPA: using PTK CCMP
> > >>>>>>> 1718907734.308772: wlan0: WPA: AP key_mgmt 0x400 network profil=
e
> > >>>>>>> key_mgmt 0x400; available key_mgmt 0x0
> > >>>>>>
> > >>>>>>
> > >>>>>> I suspect the message above indicates the problem as there is no
> > >>>>>> available key_mgmt to select so looked it up in the code and her=
e it is:
> > >>>>>>
> > >>>>>> sel =3D ie.key_mgmt & ssid->key_mgmt;
> > >>>>>> #ifdef CONFIG_SAE
> > >>>>>> if ((!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SAE) &&
> > >>>>>> !(wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_SAE_OFFLOAD_STA)) ||
> > >>>>>> wpas_is_sae_avoided(wpa_s, ssid, &ie))
> > >>>>>> sel &=3D ~(WPA_KEY_MGMT_SAE | WPA_KEY_MGMT_SAE_EXT_KEY |
> > >>>>>> WPA_KEY_MGMT_FT_SAE |
> > >>>>>> WPA_KEY_MGMT_FT_SAE_EXT_KEY);
> > >>>>>> #endif /* CONFIG_SAE */
> > >>>>>> #ifdef CONFIG_IEEE80211R
> > >>>>>> if (!(wpa_s->drv_flags & (WPA_DRIVER_FLAGS_SME |
> > >>>>>>         WPA_DRIVER_FLAGS_UPDATE_FT_IES)))
> > >>>>>> sel &=3D ~WPA_KEY_MGMT_FT;
> > >>>>>> #endif /* CONFIG_IEEE80211R */
> > >>>>>> wpa_dbg(wpa_s, MSG_DEBUG,
> > >>>>>> "WPA: AP key_mgmt 0x%x network profile key_mgmt 0x%x;
> > >>>>>> available key_mgmt 0x%x",
> > >>>>>> ie.key_mgmt, ssid->key_mgmt, sel);
> > >>>>>>
> > >>>>>> So 0x400 matches the expectation:
> > >>>>>>
> > >>>>>> #define WPA_KEY_MGMT_SAE BIT(10)
> > >>>>>>
> > >>>>>> You already confirmed that the driver reports SAE and SAE offloa=
d
> > >>>>>> support. So it seems wpas_is_sae_avoided() must return true. Tha=
t will
> > >>>>>> check whether the AP and network profile are setup to MFP. This =
seems to
> > >>>>>> be the fact as your hostapd.conf and wpa_supplicant.conf both ha=
ve
> > >>>>>> ieee80211w=3D2 defined. This function can only return true when
> > >>>>>> is enabled in configuration file:
> > >>>>>>
> > >>>>>> # sae_check_mfp: Require PMF support to select SAE key_mgmt
> > >>>>>> # 0 =3D Do not check PMF for SAE (default)
> > >>>>>> # 1 =3D Limit SAE when PMF is not enabled
> > >>>>>> #
> > >>>>>> # When enabled SAE will not be selected if PMF will not be used
> > >>>>>> # for the connection.
> > >>>>>> # Scenarios where this check will limit SAE:
> > >>>>>> #  1) ieee80211w=3D0 is set for the network
> > >>>>>> #  2) The AP does not have PMF enabled.
> > >>>>>> #  3) ieee80211w is unset, pmf=3D1 is enabled globally, and
> > >>>>>> #     the device does not support the BIP cipher.
> > >>>>>> # Consider the configuration of global parameterss sae_check_mfp=
=3D1,
> > >>>>>> pmf=3D1 and a
> > >>>>>> # network configured with ieee80211w unset and key_mgmt=3DSAE WP=
A-PSK.
> > >>>>>> # In the example WPA-PSK will be used if the device does not sup=
port
> > >>>>>> # the BIP cipher or the AP has PMF disabled.
> > >>>>>> # Limiting SAE with this check can avoid failing to associate to=
 an AP
> > >>>>>> # that is configured with sae_requires_mfp=3D1 if the device doe=
s
> > >>>>>> # not support PMF due to lack of the BIP cipher.
> > >>>>>>
> > >>>>>> The default is not to check it and you wpa_supplicant.conf does =
not
> > >>>>>> specify it.
> > >>>>>>
> > >>>>>> # cat /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
> > >>>>>> ctrl_interface=3DDIR=3D/run/wpa_supplicant GROUP=3Dnetdev
> > >>>>>> update_config=3D1
> > >>>>>> network=3D{
> > >>>>>> ssid=3D"deskSAE"
> > >>>>>> sae_password=3D"secret123"
> > >>>>>> proto=3DRSN
> > >>>>>> key_mgmt=3DSAE
> > >>>>>> pairwise=3DCCMP
> > >>>>>> ieee80211w=3D2
> > >>>>>> }
> > >>>>>>
> > >>>>>> $ cat /etc/hostapd/hostapd.conf
> > >>>>>> # interface and driver
> > >>>>>> interface=3Dap0
> > >>>>>> driver=3Dnl80211
> > >>>>>>
> > >>>>>> # WIFI-Config
> > >>>>>> ssid=3DdeskSAE
> > >>>>>> channel=3D1
> > >>>>>> hw_mode=3Dg
> > >>>>>>
> > >>>>>> wpa=3D2
> > >>>>>> wpa_key_mgmt=3DSAE
> > >>>>>> wpa_pairwise=3DCCMP
> > >>>>>> sae_password=3Dsecret123
> > >>>>>> sae_groups=3D19
> > >>>>>> ieee80211w=3D2
> > >>>>>> sae_pwe=3D0
> > >>>>>>
> > >>>>>> Regards,
> > >>>>>> Arend
> > >>>>>>
> > >>>>>>
> > >>>>>>> 1718907734.308779: wlan0: WPA: Failed to select authenticated k=
ey
> > >>>>>>> management type
> > >>>>>>> 1718907734.308787: wlan0: WPA: Failed to set WPA key management=
 and
> > >>>>>>> encryption suites
> > >>>>>
> > >>>>> Arend,
> > >>>>>
> > >>>>> I find the wpa_supplicant docs really hard to understand. I have =
read
> > >>>>> through your response a few times and am still a bit confused. Do=
es
> > >>>>> this have to do with a pure wpa3 versus a wpa2/3 AP?
> > >>>>
> > >>>> Correct. If I am not mistaken MFP aka PMF aka 802.11w is mandatory=
 for WPA3.
> > >>>>
> > >>>>> I have tried editing my hostapd.conf and my wpa_supplicant.conf a=
nd
> > >>>>> still cannot get a connection, so I must be doing something wrong=
.
> > >>>>> I commented the ieee80211w line on both and it would not connect.
> > >>>>> I tried changing the wpa_key_mgmt on both ends to be 'SAE WPA_PSK=
' and
> > >>>>> it still would not connect.
> > >>>>>
> > >>>>> What *should* the configurations be in the hostapd.conf and
> > >>>>> wpa_supplicant.conf to negotiate this as a pure wpa3 setup? What
> > >>>>> should it be to be a wpa2/3 setup? My phone worked fine to connec=
t
> > >>>>> with the original hostapd setup, but I have no idea what it is do=
ing
> > >>>>
> > >>>> As I mentioned in my previous email both config files listed above=
 look
> > >>>> okay to me (might be wrong though). The problem seems to be with
> > >>>> wpas_is_sae_avoided(). For it to return true the config should hav=
e:
> > >>>>
> > >>>> sae_check_mfp=3D1
> > >>>>
> > >>>> But you don't have that and default is 0 so it should check for MF=
P. This
> > >>>> is where my trail ends. To learn more I would add additional debug=
 prints.
> > >>>> Are you comfortable rebuilding wpa_supplicant from source?
> > >>>>
> > >>>> Regards,
> > >>>> Arend
> > >>>
> > >>> Arend,
> > >>>
> > >>> Thanks for the reply. I could try to rebuild wpa_supplicant from
> > >>> source. This is on RPi, so debian *.debs which are a pain, but I th=
ink
> > >>> I can do it.
> > >>>
> > >>> Do I understand correctly that 'sae_check_mfp=3D1' is supposed to b=
e in
> > >>> the hostapd.conf and wpa_supplicant.conf? I can try that and see if
> > >>> anything changes.
> > >>
> > >> Ok. We can try first to put following in wpa_supplicant.conf:
> > >>
> > >> sae_check_mfp=3D0
> > >>
> > >> Let me know if that makes any difference.
> > >>
> > >>> Why would I have to re-build wpa_supplicant?
> > >>
> > >> I would provide a patch with additional debug prints so I get better
> > >> understanding what is going wrong. Would be great if you can apply t=
hat and
> > >> rebuild.
> > >>
> > >> Regards,
> > >> Arend
> > > Arend,
> > >
> > > I was able to try it this afternoon.
> > > My hostapd is still:
> > > # interface and driver
> > > interface=3Dap0
> > > driver=3Dnl80211
> > >
> > > # WIFI-Config
> > > ssid=3DdeskSAE
> > > channel=3D1
> > > hw_mode=3Dg
> > >
> > > wpa=3D2
> > > wpa_key_mgmt=3DSAE
> > > wpa_pairwise=3DCCMP
> > > sae_password=3Dsecret123
> > > sae_groups=3D19
> > > ieee80211w=3D2
> > > sae_pwe=3D0
> > >
> > > and I can still connect from my phone to this AP.
> > >
> > > I tried this as my /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
> > > ctrl_interface=3DDIR=3D/run/wpa_supplicant GROUP=3Dnetdev
> > > update_config=3D1
> > > network=3D{
> > >  ssid=3D"deskSAE"
> > >  sae_password=3D"secret123"
> > >  proto=3DRSN
> > >  key_mgmt=3DSAE
> > >  pairwise=3DCCMP
> > >  ieee80211w=3D2
> > >  sae_check_mfp=3D1
> > > }
> > >
> > > and when I try to connect, I get:
> > > # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant-wlan0=
.conf
> > > Successfully initialized wpa_supplicant
> > > Line 10: unknown network field 'sae_check_mfp'.
> > > Line 11: failed to parse network block.
> >
> > Right. The setting sae_check_mfp is a global setting like update_config=
. So
> > it should be moved outside the network block.
> >
> > Regards,
> > Arend
> >
> Arend,
>
> Thanks for the hand holding, I am out of my depth here!
>
> I tried this config and get a similar result.
> ctrl_interface=3DDIR=3D/run/wpa_supplicant GROUP=3Dnetdev
> update_config=3D1
> sae_check_mfp=3D1
>  network=3D{
>   ssid=3D"deskSAE"
>   sae_password=3D"secret123"
>   proto=3DRSN
>   key_mgmt=3DSAE
>   pairwise=3DCCMP
>   ieee80211w=3D2
> }
> # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant-wlan0.con=
f
> Successfully initialized wpa_supplicant
> Line 3: unknown global field 'sae_check_mfp=3D1'.
> Line 3: Invalid configuration line 'sae_check_mfp=3D1'.
> Failed to read or parse configuration
> '/etc/wpa_supplicant/wpa_supplicant-wlan0.conf'.
> : CTRL-EVENT-DSCP-POLICY clear_all
>
> seems it doesn't recognize this parameter.
>
> Keith

Replying to my own post.
I re-built wpa_supplicant from the current git:
# wpa_supplicant -v
wpa_supplicant v2.11-devel-hostap_2_10-2215-gc9db4925f
Copyright (c) 2003-2022, Jouni Malinen <[email protected]> and contributors

It now seems to recognize the 'sae_check_mfp' parameter, but still
does not connect:
# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
Successfully initialized wpa_supplicant
wlan0: Trying to associate with SSID 'deskSAE'
wlan0: CTRL-EVENT-ASSOC-REJECT bssid=3D00:00:00:00:00:00 status_code=3D16
wlan0: Added BSSID d8:3a:dd:60:a3:0c into ignore list, ignoring for 10 seco=
nds
wlan0: Removed BSSID d8:3a:dd:60:a3:0c from ignore list (clear)
wlan0: Trying to associate with SSID 'deskSAE'
wlan0: CTRL-EVENT-ASSOC-REJECT bssid=3D00:00:00:00:00:00 status_code=3D16
wlan0: Added BSSID d8:3a:dd:60:a3:0c into ignore list, ignoring for 10 seco=
nds
wlan0: Removed BSSID d8:3a:dd:60:a3:0c from ignore list (clear)
wlan0: Trying to associate with SSID 'deskSAE'
wlan0: CTRL-EVENT-ASSOC-REJECT bssid=3D00:00:00:00:00:00 status_code=3D16
wlan0: Added BSSID d8:3a:dd:60:a3:0c into ignore list, ignoring for 10 seco=
nds
wlan0: Removed BSSID d8:3a:dd:60:a3:0c from ignore list (clear)
wlan0: Trying to associate with SSID 'deskSAE'
wlan0: CTRL-EVENT-ASSOC-REJECT bssid=3D00:00:00:00:00:00 status_code=3D16
wlan0: Added BSSID d8:3a:dd:60:a3:0c into ignore list, ignoring for 10 seco=
nds
wlan0: CTRL-EVENT-SSID-TEMP-DISABLED id=3D0 ssid=3D"deskSAE"
auth_failures=3D1 duration=3D10 reason=3DCONN_FAILED
wlan0: CTRL-EVENT-SSID-REENABLED id=3D0 ssid=3D"deskSAE"
wlan0: BSSID d8:3a:dd:60:a3:0c ignore list count incremented to 2,
ignoring for 10 seconds
wlan0: Removed BSSID d8:3a:dd:60:a3:0c from ignore list (clear)
wlan0: Trying to associate with SSID 'deskSAE'
wlan0: CTRL-EVENT-ASSOC-REJECT bssid=3D00:00:00:00:00:00 status_code=3D16
wlan0: Added BSSID d8:3a:dd:60:a3:0c into ignore list, ignoring for 10 seco=
nds
wlan0: CTRL-EVENT-SSID-TEMP-DISABLED id=3D0 ssid=3D"deskSAE"
auth_failures=3D2 duration=3D20 reason=3DCONN_FAILED
^Cp2p-dev-wlan0: CTRL-EVENT-DSCP-POLICY clear_all
p2p-dev-wlan0: CTRL-EVENT-DSCP-POLICY clear_all
nl80211: deinit ifname=3Dp2p-dev-wlan0 disabled_11b_rates=3D0
p2p-dev-wlan0: CTRL-EVENT-TERMINATING
wlan0: CTRL-EVENT-DSCP-POLICY clear_all
wlan0: Removed BSSID d8:3a:dd:60:a3:0c from ignore list (clear)
wlan0: CTRL-EVENT-DSCP-POLICY clear_all
nl80211: deinit ifname=3Dwlan0 disabled_11b_rates=3D0
wlan0: CTRL-EVENT-TERMINATING

I tried setting the 'sae_check_mfp' to both 1 and 0 and still cannot
connect with this 'current' version of wpa_supplicant.

Keith