EAP-SIM技术手册一.基本概念1.EAP-SIM的定义EAP-SIM是采用GSM-SIM卡作为EAP认证和密匙分发的机制。它是基于GSM,即全球移动通讯系统(GlobalSystemforMobileCommunication)认证的基础上产生的。由于GSM认证缺少双向认证,只是服务器端认证了用户端;而且,会话密钥Kc只有64位,密钥长度太短,没有足够的强度抵抗暴力攻击。所以,EAP-SIM才应运而生。EAP-SIM提供了双向认证,即服务器端认证客户端,客户端也认证服务器端,只有双向认证通过之后,服务器端才发送EAP-Success消息至客户端,客户端才可以接入网络。同时,EAP-SIM认证机制还通过多次挑战响应机制,生成更强的会话密钥。2.EAP-SIM的协议包格式CodeIdentifierLengthTypeSubtypeReservedAttributeField在上表中表示EAP-SIM协议包的格式。Code域占据一个字节,代表EAP包类型,其中1代表request类型,2代表response类型,3代表success类型,4代表failure类型。Identifier域占据一个字节,指代数据包的标识域,方便request包与response包的匹配。Length域占据两个字节,标识EAP包的总长度。Type域占据一个字节,此处的值为18。Subtype域占据一个字节,标识EAP-SIM子类型,其中10表示start类型,11表示challenge类型。Reserved域占据两个字节,为协议将来的扩展,目前保留,值置为0。数据包随后的字段为属性域,根据包的类型不同,属性域也有所不同。3.EAP-SIM的工作原理客户端可以是手机或是具有SIM卡读卡器的电脑。首先,客户端通过安全隧道与支持802.1x的无线接入点(AP)取得联系,而后通过WLANAP连接到Radius服务器,Radius服务器支持EAP-SIM认证协议,并且具有GSM/MAP/SS7的数据通道,通过此通道与存储着用户信息的HLR(HomeLocationRegister,归属位置寄存器)进行连接。从理论上讲,在EAP-SIM的服务器端,需要有Radius服务器和HLR(归属位置寄存器),二者通过GSM/MAP/SS7的数据通道进行连接。但在本手册中,我们是将HLR和Radius服务器整合为一个整体,即HLR数据库仅仅是Hostapd服务器中的一个文件——hostapd.sim_db,在这个文件中存储着要接入的用户信息。本实验用到的EAP-SIM认证结构如下图所示:客户端(本实验中是华为的安卓手机T8830)WLAN接入点(一款支持802.1x协议的无线路由器)服务器端(Linux系统下搭建的Hostapd服务器,Radius服务器和HLR同在一台PC上)4.EAP-SIM的认证流程整个EAP-SIM的认证流程如下所示:(1).客户端发送EAPOL_Start帧,请求认证接入;(2).WLANAP发出请求帧,请求客户端发送身份信息;(3).客户端响应请求,将身份信息发送至AP;(4).AP将客户端身份信息重新封装成RADIUSAccess-Request帧转发至服务器端;(5).服务器验证客户端身份,验证合法之后向用户发送EAP-Request/SIM/Start帧,封装在RADIUSAccess-Challenge帧中;(6).AP提取RADIUSAccess-Challenge帧中的EAP-Request/SIM/Start帧,转发至客户端;(7).客户端响应请求,将EAP-Response/SIM/Start帧发送至AP;(8).AP将EAP-Response/SIM/Start帧重新封装成RADIUSAccess-Request帧,转发至服务器端;(9).服务器根据客户端响应结果,回送EAP-Request/SIM/Challenge帧至AP,此帧封装在RADIUSAccess-Challenge帧中;(10).AP提取RADIUSAccess-Challenge帧中的EAP-Request/SIM/Challenge帧,转发至客户端;(11).客户端响应请求,将EAP-Response/SIM/Challenge帧发送至AP;(12).AP将EAP-Response/SIM/Challenge帧重新封装成RADIUSAccess-Request帧,转发至服务器端;(13).服务器端认证成功,将EAP-Success帧封装在RADIUSAccess-Accept帧中,发送至AP;(14).AP提取RADIUSAccess-Accept帧中的EAP-Success帧,转发至客户端.EAP-SIM双向认证结束,认证成功。二.实验部分1.搭建EAP-SIM测试环境的需求清单1、一张sim卡。无特殊要求,现在通用的sim卡即可。2、一部支持EAP-SIM认证的手机用作客户端。例如华为的安卓手机T8830。售价在800元左右。或者华为的安卓手机AscendG305T,已通过四川现网测试,具备真正EAP-SIM商用能力。售价大概在600元左右。3、一款支持802.1X协议的无线路由器。目前市面上大部分TP-LINK的路由器均支持。4、认证服务器。Linux系统下的hostapd或者freeradius服务器均可。Hostapd配置比较简单,容易上手。Freeradius服务器配置难度大,但是功能更强。2.配置路由器进入路由器的设置界面。配置如下:认证类型使用WPA2。因为EAP-SIM认证类型是WPA2认证类型的其中一种。加密算法采用AES。Radius服务器IP:设置成radius服务器所在电脑的IP。Radius端口:设置成1812。Radius密码:这是radius服务器和路由器之间进行通信的密码。3.radius服务器的安装使用开源软件hostapd来搭建radius服务器。1、在hostapd的官方网站获取hostapd的压缩包。2、将获取到的包解压,进入hostapd。在终端输入命令:tarxzvfhostapd-x.y.z.tar.gzcdhostapd-x.y.z/hostapd3、复制配置文件在终端输入命令:cpdefconfig.config4、配置.config文件选取以下配置:CONFIG_DRIVER_WIRED=yCONFIG_DRIVER_NONE=yCONFIG_EAP=yCONFIG_EAP_MD5=yCONFIG_EAP_TLS=yCONFIG_EAP_MSCHAPV2=yCONFIG_EAP_PEAP=yCONFIG_EAP_GTC=yCONFIG_EAP_TTLS=yCONFIG_EAP_SIM=yCONFIG_EAP_AKA=yCONFIG_EAP_PAX=yCONFIG_EAP_PSK=yCONFIG_EAP_SAKE=yCONFIG_EAP_GPSK=yCONFIG_EAP_GPSK_SHA256=yCONFIG_EAP_IKEV2=yCONFIG_EAP_TNC=yCONFIG_PKCS12=yCONFIG_RADIUS_SERVER=y这里需要注意几点:1)这里我仅仅把hostapd作为一个radiusserver使用,因此.config文件的其它部分都注释掉。2)编译过程中可能会出现缺乏openssl文件等错误,需要下载编译安装openssl。5、在终端输入命令make、makeinstall,hostapd安装成功。4.radius服务器的配置1、启动radius服务器前需要先对配置文件hostapd.conf进行配置。在安装目录下找到hostapd.conf文件,进行配置。主要配置以下内容:interface=eth0eap_server=1eap_user_file=/home/yang/hostapd.eap_usereap_sim_db=unix:/tmp/hlr_auc_gw.sockown_ip_addr=192.168.1.253#用于配置路由器的IPauth_server_addr=127.0.0.1#radius服务器的地址auth_server_port=1812#radius服务器的端口auth_server_shared_secret=secretradius_server_clients=/home/yang/hostapd.radius_clients#配置客户端的文件路径radius_server_auth_port=18122、配置hostapd.eap_user将安装目录下的范例文件hostapd.eap_user直接拷来用即可。3、配置hostapd.radius_clients允许IP为192.168.1.253的无线路由器使用这个radius服务器,共享密码为yangrenjie:192.168.1.253yangrenjie5.编译安装hlr_auc_gw程序hlr_auc_gw程序用于radius认证服务器和hlr的连接。同时可以监听客户端发来的请求。在安装目录下找到hlr_auc_gw.c文件,在终端输入make、makeinstall,编译并安装。6.模拟测试1、在手机端用hellosim.apk这个软件读出sim卡的IMIS、Kc、SRES、Rand这个四个值。将这四个值以一定的格式写入到hostapd安装目录下的hostapd.sim_db这个文件中。此文件相当于HLR。2、在hostapd安装目录下,启动终端。输入命令:sudo./hlr_auc_gw–ghostapd.sim_db该命令用于服务器和hlr连接,并监听客户端的请求。3、启动另一个终端。输入命令:sudohostapdhostapd.conf–dd本命令用于启动radius服务器。4、用手机搜寻测试用的路由器SSID。安全类型为802.1X。图中SSID为fengfengfeng的路由器,就是我们测试用的路由器。5、连接的时候对手机进行设置,将验证类型改为EAP-SIM方式。6、进行连接监听端显示信息如下所示:服务器端显示信息如下所示:最后,实验结果说明,手机无需输入用户名和密码,只要利用SIM卡的信息即可通过认证,与服务器连接。