> 文档中心 > WIFI驱动开发——WIFI支持WPA3连接

WIFI驱动开发——WIFI支持WPA3连接


Linux Kernel Support WPA3

文章目录

  • Linux Kernel Support WPA3
    • 1. WPA3是什么
    • 2. WPA3相对于WPA2改进的地方
    • 3. 如何使用WPA3
      • 3.1 驱动加载确认
      • 3.2 编译生成`wpa_supplicant`,`hostapd`工具
      • 3.3 `STA`模式下,连接WPA3加密的WIFI
        • 3.3.1 `wpa_supplicant`的使用
        • 3.3.2 `wpa_passphrase`的使用
        • 3.3.3 `wpa_cli`
        • 3.3.3 配置文件`wpa_supplicant.conf`
        • 3.3.4 连接WIFI
      • 3.4 `AP`模式下,创建WPA3加密的热点
        • 3.4.1 `hostapd`使用
        • 3.4.2 `hostapd_cli`使用
    • 4、相关网站推荐

1. WPA3是什么

WPA3全名为Wi-Fi Protected Access 3,是Wi-Fi联盟组织于2018年1月8日在美国拉斯维加斯的国际消费电子展(CES)上发布的Wi-Fi新加密协议,是Wi-Fi身份验证标准WPA2技术的的后续版本。

2018年6月26日,WiFi联盟宣布WPA3协议已最终完成。

 

2. WPA3相对于WPA2改进的地方

  • 防范了字典爆破攻击WPA3安全协议,采用了SAE握手协议,会限制错误密码次数,从而击败基于字典爆破的尝试。
  • 增加了安全防范WPA3采用了非认证加密的方式,支持OWE(Opportunistic Wireless Encryption),修复了KRACK(重装密钥攻击,攻击者可以获取STA和AP之间传输的数据)的问题
  • 提高了交互便利WPA3采用了DPP:Wi-Fi Device Provisioning Protocol替代WPS,即便是没有屏幕,没有交互的设备(如智能灯泡),也可以轻松安全的加入WPA 3网络。
  • 提高了算法等级WPA3增加的session key大小,加密位数升到了192位(CNSA标准),并且,即便你没有设置Wifi密码,数据也是受192位加密保护的。

 

3. 如何使用WPA3

要想使我们的WIFI模块连接上网络,除了WIFI芯片厂商提供的驱动外,我们还需要借助在Linux下常用的WIFI管理工具wpa_supplicanthostapd

  • wpa_supplicant:主要管理WIFISTA模式,也就是我们用于连接网络的方式。
  • hostapd:主要管理WIFIAP模式,也就是我们开启热点的方式。

 

3.1 驱动加载确认

通过ifconfig命令,查看我们的网卡驱动是否加载成功。

wlan0     Link encap:Ethernet  HWaddr 30:8E:7A:2C:EE:F4   inet addr:240.168.100.1  Bcast:0.0.0.0  Mask:255.255.255.0   UP BROADCAST MULTICAST  MTU:1500  Metric:1   RX packets:0 errors:0 dropped:0 overruns:0 frame:0   TX packets:0 errors:0 dropped:0 overruns:0 carrier:0   collisions:0 txqueuelen:1000   RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

 

3.2 编译生成wpa_supplicanthostapd工具

我们打开menuconfig

打开Target packages->Networking applications->hostapdwpa_supplicant选项,并且 选中Enable WPSEnable WPA3 support相关选项

我的hostapd选项配置如下:

WIFI驱动开发——WIFI支持WPA3连接

wpa_supplicant配置选项如下:

WIFI驱动开发——WIFI支持WPA3连接

当然,编译方式有很多种,也可以下载源码包,直接编译出来相关工具,方式大同小异,我们编译出来就行。

在这里强调一下,WPA3部分WIFI驱动可能需要在编译的时候打开相关CONFIG配置才能使用,这点一定要排查一下哦!

 

3.3 STA模式下,连接WPA3加密的WIFI

我们编译完成后,会生成wpa_supplicantwpa_cli的可执行文件。那么wpa_supplicantwpa_cli的区别是什么呢?

  • wpa_supplicant:控制的核心程序,其作为一个独立的守护进程,主要在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等,通常称为服务端。
  • wpa_cli:其主要用于和用户的交互,用来搜索、设置、和连接网络等,通常称为客户端

WIFI驱动开发——WIFI支持WPA3连接

对应上述结构, WiFi控制可以分为三大组件

  • 客户端wpa_cli命令行,与用户进行交互,获取用户的操作指令
  • 服务端wpa_supplicant 运行于后台,对应上述中间部分,功能是“上传下达”。接收wpa_cli传递的用户命令,控制硬件。
  • 底层硬件:网卡驱动

 

3.3.1 wpa_supplicant的使用

上面已经介绍了,wpa_supplicant是一个服务端的程序,所以我们==第一步就是运行这个服务端程序==。

wpa_supplicant --help,查看一下命令介绍

wpa_supplicant v2.9Copyright (c) 2003-2019, Jouni Malinen <j@w1.fi> and contributorsThis software may be distributed under the terms of the BSD license.See README for more details.This product includes software developed by the OpenSSL Projectfor use in the OpenSSL Toolkit (http://www.openssl.org/)usage:  wpa_supplicant [-BddhKLqqstvW] [-P<pid file>] [-g<global ctrl>] \ [-G<group>] \ -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-p<driver_param>] \ [-b<br_ifname>] [-e<entropy file>] [-f<debug file>] \ [-o<override driver>] [-O<override ctrl>] \ [-N -i<ifname> -c<conf> [-C<ctrl>] [-D<driver>] \ [-m<P2P Device config file>] \ [-p<driver_param>] [-b<br_ifname>] [-I<config file>] ...]drivers:  nl80211 = Linux nl80211/cfg80211  wext = Linux wireless extensions (generic)  wired = Wired Ethernet driveroptions:  -b = optional bridge interface name  -B = run daemon in the background  -c = Configuration file  -C = ctrl_interface parameter (only used if -c is not)  -d = increase debugging verbosity (-dd even more)  -D = driver name (can be multiple drivers: nl80211,wext)  -e = entropy file  -f = log output to debug file instead of stdout......example:  wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf

我们注意一下这个example示例:

wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B

大概了解一下常用的设置选项

-D:WIFI的驱动名称

-i:网卡名称

-c:配置文件路径

-B:后台运行

选项后面,加不加空格都可以。

 

3.3.2 wpa_passphrase的使用

正如上面键入的命令,你会发现,配置文件我们是缺失的!那这个配置文件从哪里来呢?

从整体来说,配置文件来源可以有三个渠道:

  • wpa_passphrase工具生成初版,结合wpa_cli设置完整的conf:该方法适合第一次配置
  • 根据源码所提供的示例参考编写wpa_supplicant源码目录/example/xxx.conf
  • 直接由以往的配置文件拷贝而来:(Ps:一般来说,配置文件都是基本改变比较小的,通常都是改动SSID和PSK两个,编写过一次后,后面可以直接复制)

通常来说,后两种一般是基于你对相关配置熟悉之后,快速完成目标的选择,对于不太熟悉wpa_supplicantwpa_passphrasewpa_cli相关工具使用的人来说,建议一步一步来。

wpa_passphrase ssid psd > /etc/wpa_supplicant.conf#输入WIFI账号,密码到配置文件

此时,wpa_passphrase会自动生成一个特殊格式的conf文件。

为了我们后续能够使用wpa_cli更新配置,我们还需要添加一些配置,下面代码放在第1,2行!

ctrl_interface=/var/run/wpa_supplicantupdate_config=1
  • ctrl_interface指向的是一个目录,在这个目录中默认会生成一个文件/var/run/wpa_supplicant/wlan0,这是local socket address,相当于UNIX Domain Socket,程序和后台程序wpa_supplicant进行通信(其实是wpa_supplicant作为后台服务程序是通过本地socket和客户端进行通信的)

  • update_config = 1时会在(客户端发送SAVE_CONFIG命令)更新这个配置文件。

此时,我们就可以开启wpa_supplicant服务啦!开启成功后,会打印log信息

# wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -BSuccessfully initialized wpa_supplicant

Tip:当然,此时我们想要知道这些属性信息都表示哪些意思,都有哪些属性可以设置?

我们可以通过我们的编译目录wpa_supplicant下的README文件可以查看完整的详细信息。

 

3.3.3 wpa_cli

上面已经开启了wpa_supplicant服务,接下来我们就可以使用wpa_cli客户端进行控制

我们可以通过wpa_cli -i wlan0进入命令行接口

输入命令help可以查看各种信息,此时会有密密麻麻的指令,让你头疼…

下面列举一些常用指令:

  • scan:扫描附近热点
  • scan_result:显示附近热点
  • status:网卡状态
  • add_network:添加一个网络
  • list_network:查看添加的网络
  • set_network ssid "xxx":给刚添加网络的序号设置网络连接账号,加上引号
  • set_network pwd "xxx":给刚添加网络的序号设置网络连接密码,加上引号
  • remove_network :删除一个网络
  • wpa_cli set_network priority 1 :设置优先级等
  • save_config:保存配置文件到默认路径/etc/wpa_supplicant.conf

 

3.3.3 配置文件wpa_supplicant.conf

用于连接WPA3的配置文件如下:

ctrl_interface=/var/run/wpa_supplicant//用于与后台程序通信update_config=1//文件可覆盖ap_scan=1//AP扫描network={ ssid="TEST"//WIFI账号 proto=RSN//通信协议,RSN为WPA3,WPA为WPA2 ,WPA key_mgmt=SAE WPA-PSK WPA-PSK-SHA256//认证方式,WPA3为SAE认证 pairwise=CCMP TKIP//密码解析 scan_ssid=1//扫描ssid psk="12345678"//WIFI密码 sae_password="12345678"//WPA3的密码 ieee80211w=1//启用/禁用PMF}

 

3.3.4 连接WIFI

 ifconfig wlan0 up wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf 
ifconfig wlan0 192.168.1.119 netmask 255.255.255.0route add default gw 192.168.1.1

WPA3使用SAE(Simultaneous Authentication of Equals)的握手协议,所以在

 

3.4 AP模式下,创建WPA3加密的热点

对于AP模式,就不得不说两个工具了:hostapdhostapd_cli

hostapd_cli 是一款用作无线 AP 功能的客户端程序。它需要与 hostapd 主程序配置使用。

 

3.4.1 hostapd使用

hostapdwpa_supplicant相同,作为后台服务程序,其成功运行都需要一个配置文件,并且指定好一个控制接口。即需要在配置文件中,对 ctrl_interface 进行设置。

WPA3的配置文件/etc/hostapd.conf如下:

ctrl_interface=/var/run/hostapdinterface=wlan0driver=nl80211hw_mode=gmacaddr_acl=0ignore_broadcast_ssid=0auth_algs=1ssid=A-WPA3channel=1wpa=2wpa_key_mgmt=SAEwpa_pairwise=CCMP TKIPrsn_pairwise=CCMPwpa_passphrase=12345678wps_cred_add_sae=1

打开hostapd服务:

hostapd -B /etc/hostapd.conf

 

3.4.2 hostapd_cli使用

hostapd_cli 作为 hostapd 的客户端,使用时,首先需要先启动 hostapd 主程序。

hostapd 启动后,运行 cli 客户端时,会自动去连接当前正在工作的 hostapd 进程,连接成功后,cli 客户端就可以对 hostapd 应用程序进行参数的获取和控制。

hostapd_cliwpa_cli相同,运行模式有两种:一种是shell交互方式,另一种是带参数运行,两种方式都大同小异,主要介绍一些命令。

hostapd 可以使用 set 命令,在 hostapd 启动后,对 hostapd 配置文件,即 hostapd.conf
内所有的配置项进行配置,从而实现动态修改配置的目的。

  • 动态修改配置
set ssid xxxx#修改ssid名字set wpa_ppassphrase xxx#修改密码set channel xx#修改通道reload#保存到配置中
  • wps_config

wps_config用来修改无线热点名称,密码,加密方式。

wps_config <new SSID> <auth> <encr> <new key>examples:  hostapd_cli wps_config testing WPA2PSK CCMP 12345678  hostapd_cli wps_config "no security" OPEN NONE "" <auth> must be one of the following: OPEN WPAPSK WPA2PSK WPAPSKALL<encr> must be one of the following: NONE WEP TKIP CCMP
  • status、get_config

status获取无线热点信息

> statusstate=ENABLEDphy=phy0freq=2462num_sta_non_erp=0num_sta_no_short_slot_time=0num_sta_no_short_preamble=0olbc=0num_sta_ht_no_gf=0num_sta_no_ht=0num_sta_ht_20_mhz=0num_sta_ht40_intolerant=0olbc_ht=0ht_op_mode=0x0cac_time_seconds=0cac_time_left_seconds=N/Achannel=11secondary_channel=0ieee80211n=1ieee80211ac=0beacon_int=100dtim_period=2ht_caps_info=000eht_mcs_bitmask=ffff0000000000000000supported_rates=02 04 0b 16 0c 12 18 24 30 48 60 6cmax_txpower=20bss[0]=wl3bssid[0]=20:32:33:59:28:04ssid[0]=EdgerOSnum_sta[0]=1

get_config获取无线热点信息:

> get_configbssid=20:32:33:59:28:04ssid=EdgerOSwps_state=configuredpassphrase=987654321psk=d1b952932f9c3c4db8fe39930c2b88d6849a01a66a7e58a2c41f82c3724549c8wpa=2key_mgmt=WPA-PSKgroup_cipher=CCMPrsn_pairwise_cipher=CCMP

获取信息的另一种方式:访问进程

cat /proc/net/rtl8192eu/wl3/rf_infocat /proc/net/rtl8192eu/wl3/ap_info cat /proc/net/rtl8192eu/wl3/tx_info_msgcat /proc/net/rtl8192eu/wl3/all_sta_info

 

4、相关网站推荐

[1] http://w1.fi/releases/

[2] https://www.cnblogs.com/jackyangrui/p/9929532.html

[3] https://blog.csdn.net/weixin_34226182/article/details/89802794

[4] https://blog.csdn.net/weixin_33691700/article/details/94156801

[5] wpa_supplicant/hostapd 官网介绍

[6] https://www.cnblogs.com/hokori/p/14168584.html