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连接_第1张图片

wpa_supplicant配置选项如下:

WIFI驱动开发——WIFI支持WPA3连接_第2张图片

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

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

 

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

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

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

WIFI驱动开发——WIFI支持WPA3连接_第3张图片

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

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

 

3.3.1 wpa_supplicant的使用

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

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

wpa_supplicant v2.9
Copyright (c) 2003-2019, Jouni Malinen <[email protected]> and contributors

This software may be distributed under the terms of the BSD license.
See README for more details.

This product includes software developed by the OpenSSL Project
for 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 driver
options:
  -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_supplicant
update_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 -B
Successfully 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.0
route 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/hostapd
interface=wlan0
driver=nl80211
hw_mode=g
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
ssid=A-WPA3
channel=1
wpa=2
wpa_key_mgmt=SAE
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP
wpa_passphrase=12345678
wps_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获取无线热点信息

> status
state=ENABLED
phy=phy0
freq=2462
num_sta_non_erp=0
num_sta_no_short_slot_time=0
num_sta_no_short_preamble=0
olbc=0
num_sta_ht_no_gf=0
num_sta_no_ht=0
num_sta_ht_20_mhz=0
num_sta_ht40_intolerant=0
olbc_ht=0
ht_op_mode=0x0
cac_time_seconds=0
cac_time_left_seconds=N/A
channel=11
secondary_channel=0
ieee80211n=1
ieee80211ac=0
beacon_int=100
dtim_period=2
ht_caps_info=000e
ht_mcs_bitmask=ffff0000000000000000
supported_rates=02 04 0b 16 0c 12 18 24 30 48 60 6c
max_txpower=20
bss[0]=wl3
bssid[0]=20:32:33:59:28:04
ssid[0]=EdgerOS
num_sta[0]=1

get_config获取无线热点信息:

> get_config
bssid=20:32:33:59:28:04
ssid=EdgerOS
wps_state=configured
passphrase=987654321
psk=d1b952932f9c3c4db8fe39930c2b88d6849a01a66a7e58a2c41f82c3724549c8
wpa=2
key_mgmt=WPA-PSK
group_cipher=CCMP
rsn_pairwise_cipher=CCMP

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

cat /proc/net/rtl8192eu/wl3/rf_info
cat /proc/net/rtl8192eu/wl3/ap_info 
cat /proc/net/rtl8192eu/wl3/tx_info_msg
cat /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

你可能感兴趣的:(Wi-Fi驱动开发,Linux驱动开发,驱动开发,驱动程序,u-boot)