EAP的话题(1)
撰写于:2013年9月18日
作者:silex Wi-Fi专家
“企业安全”是无线局域网中的神奇的世界。有时它被称为 "EAP",有时被称为 "802.1X",有时在AP设置中会有一个 "RADIUS "项目,但我认为很少有人确切了解其中的含义。在本文中,我想通过一系列文章对此进行解释。
为什么是企业安全?
在上一篇文章中,我们谈到了PSK 系统的问题在于它们 "难以配置和更新",因此 "一旦配置了密钥,它往往会一直被使用,这可能会导致安全漏洞“。不过,仅这一个问题就可以通过使用集中管理型 AP 得到一定程度的缓解。集中式身份验证是一种系统,在这种系统中,子机的身份验证不是由单个AP独自执行,而是由位于单一位置的身份验证服务器通过网络执行。虽然子机侧的密钥管理问题依然存在,但 AP 侧的密钥管理要容易得多。
不过,PSK 系统还有一个问题。那就是 "只使用密码进行身份验证"。也就是说PSK中没有 “用户名”这一要素。虽然 PSK 可以实现 "加密(防止窃听)"和 "消除未授权用户(身份验证)"的功能,但 PSK 系统中每个人都使用相同的密码,这意味着 "谁在登录 "等信息基本上是未知的。唯一可以使用的是 MAC 地址,但 MAC 地址不过是一串枯燥的数字,很难作为用户 ID 进行管理,而且还会随着个人电脑和局域网适配器的更换而改变,因此也很难处理。
就密码强度而言,无线局域网中的企业级安全(802.1X),没有比 PSK 更好(最终密码算法相同,都是 AES-CCMP)。但最大的区别在于 “用户信息可以关联和管理”。可以跟踪谁在何时何地登录,也可以禁止特定用户登录。相比之下,如果想要将某个特定用户排除在 PSK系统之外的话,就只能一次性更改清除该用户之外的所有人的所有密钥(太麻烦),或者设置 MAC 地址过滤器,禁止除已知身份的设备之外的其他设备登录(管理工作量更大,也更不方便)。
EAPoL和 802.1X
在无线局域网(WLAN)出现之前,有线局域网(LAN)就已经在讨论网络中的设备认证问题,为此制定了IEEE 802.1X标准。
有时会被错误地称为"802.11X",其实是 "1X",而不是 "11X"。X 可以用小写或大写书写,但习惯上都是大写,因为用小写x 书写可能会被视为 "任意字母"。
在802.1X规格中承担认证的协议是EAPoL。EAP 的全称是Extension Authentication Protocol,其历史可以追溯到 1990 年代,当时用户使用电话调制解调器进行拨号上网,以当时的用户身份验证协议规格为基础,经过不断发展到现今的 EAP。所谓“Extension”,是指原本在拨号协议PPP (Point-to-Point Protocol)中加入认证序列,但随着各大供应商和操作系统供应商开始实施各自扩展的认证。为了将这些认证作为“可扩展”的认证协议在一个框架内管理,从而制定了EAP 。
EAPoL 指局域网上的 EAP,最初是为电话线创建的,现在扩展成可在局域网线路上使用的状态。
最初的 EAP 通常使用挑战身份验证协议(CHAP,Challenge Handshake Authentication Protocol);以哈希算法命名的 EAP-MD5 比EAP-CHAP 更常用。这是因为 EAP 的前身 PPP 已经有一个名为 "CHAP"的身份验证协议(*注),所以特意给它起了一个不同的名字,以避免混淆。
注:微软已在其产品中使用MSCHAP(使用 WindowsNT 自身的密码哈希值)及其改进版 MSCHAPv2(在 PPP 上使用)。EAP的制定是为了包含了这些专有扩展,但如后续所述MSCHAP/MSCHAPv2 后来还是以不同的形式继续存在。
挑战型认证采用如下算法,将伪随机数和散列函数组合起来,将密码和用户名打乱破坏掉。虽然破坏的结果是128bit的乍一看非常混乱的比特串,但是只要密码和用户名有一个字母的差异,结果就会大不相同。而且用户名+密码→哈希的转换很简单,但反过来从哈希推算用户名和密码却非常困难。
802.1X和 RADIUS
现在,802.1X 涉及到另一个关键词:RADIUS,RADIUS是Remote Access Dial In User Service的缩写,是过去拨号互联网上用于管理用户登录的身份验证协议。802.1X 就像是将这一机制从"拨号 "转移到了 "以太网"并加以实施,网络交换机和客户端之间的认证上使用EAPoL进行,网络交换机和服务器之间认证上使用 RADIUS进行认证。
RADIUS有自己的框架,与 EAP 不同的是,其基本规范包括用于未加密密码的 PAP(Password Authentication Protocol)和用于基于挑战型验证的 CHAP。RADIUS CHAP 与EAP-MD5 类似,但并不直接兼容(*注)。后来,RFC 3579 扩展了 EAP over RADIUS的选项,允许EAP 数据包直接通过 RADIUS。当前的 802.1X 基本上就是在这种模式下运行的。也就是说, RADIUS 框架被用作 EAP on IP 而不是 EAPoL,而 RADIUS 本身的身份验证功能(PAP、CHAP)却很少被使用。
注:这方面的关系有点复杂,因为 RADIUS (RFC2059) 是在 EAP (RFC2284) 之前制定,而且是在 EAP 扩展之前根据 PPP (RFC1661) 身份验证协议设计的。
然而,这个 "几乎"是个棘手的问题,因为至少 RADIUS 密码(密文)必须设置正确,因为 RADIUS 数据包上有一个防篡改的验证散列字段(Authentication),如果客户端(AP)和验证服务器端的密文信息不匹配,验证散列值就会不匹配,数据包就会被丢弃。RADIUS密钥与 802.1X 中提供给单个用户的密码不同,基本上是提供给每个身份验证服务器的。但也可以通过区分IP地址范围来设置不同的密码(至少 FreeRADIUS 具有该功能)。
另外,EAP选项扩展后,并没有取消RADIUS自身的用户名和密码选项,而且在实际安装和配置中,发送哪些值以及接收到的RADIUS 用户名是否经过验证也存在差异。关于 802.1X 中 ID 和密码的混淆问题,我们后续也会提及到。即使是同一种 "802.1X 标准 "之所以有一定的 "兼容性",是因为这方面的规范比较灵活(或者更直白地说,比较 "松散")。
迈向神奇的EAP世界
有线局域网的IEEE802.1X 标准使用 EAP-MD5 作为标准算法。不过,EAP-MD5 是单向验证。这意味着网络只能验证终端,终端无法验证网络。虽然这在有线局域网中是一个安全问题,但在无线局域网中却构成了更大的风险。这意味着,当攻击者试图建立一个假 AP 让用户连接并窃取信息时,单向验证协议无法区分 "真 AP "和 "假AP"。无线局域网的身份验证协议需要相互身份验证(Mutual Authentication),这也是扩展 EAP 的原因。我们终于要踏入 EAP 的神奇世界了,但这将是下一期的主题。
嵌入式无线LAN模块产品介绍页面
为什么是企业安全?
在上一篇文章中,我们谈到了PSK 系统的问题在于它们 "难以配置和更新",因此 "一旦配置了密钥,它往往会一直被使用,这可能会导致安全漏洞“。不过,仅这一个问题就可以通过使用集中管理型 AP 得到一定程度的缓解。集中式身份验证是一种系统,在这种系统中,子机的身份验证不是由单个AP独自执行,而是由位于单一位置的身份验证服务器通过网络执行。虽然子机侧的密钥管理问题依然存在,但 AP 侧的密钥管理要容易得多。
不过,PSK 系统还有一个问题。那就是 "只使用密码进行身份验证"。也就是说PSK中没有 “用户名”这一要素。虽然 PSK 可以实现 "加密(防止窃听)"和 "消除未授权用户(身份验证)"的功能,但 PSK 系统中每个人都使用相同的密码,这意味着 "谁在登录 "等信息基本上是未知的。唯一可以使用的是 MAC 地址,但 MAC 地址不过是一串枯燥的数字,很难作为用户 ID 进行管理,而且还会随着个人电脑和局域网适配器的更换而改变,因此也很难处理。
就密码强度而言,无线局域网中的企业级安全(802.1X),没有比 PSK 更好(最终密码算法相同,都是 AES-CCMP)。但最大的区别在于 “用户信息可以关联和管理”。可以跟踪谁在何时何地登录,也可以禁止特定用户登录。相比之下,如果想要将某个特定用户排除在 PSK系统之外的话,就只能一次性更改清除该用户之外的所有人的所有密钥(太麻烦),或者设置 MAC 地址过滤器,禁止除已知身份的设备之外的其他设备登录(管理工作量更大,也更不方便)。
EAPoL和 802.1X
在无线局域网(WLAN)出现之前,有线局域网(LAN)就已经在讨论网络中的设备认证问题,为此制定了IEEE 802.1X标准。
有时会被错误地称为"802.11X",其实是 "1X",而不是 "11X"。X 可以用小写或大写书写,但习惯上都是大写,因为用小写x 书写可能会被视为 "任意字母"。
在802.1X规格中承担认证的协议是EAPoL。EAP 的全称是Extension Authentication Protocol,其历史可以追溯到 1990 年代,当时用户使用电话调制解调器进行拨号上网,以当时的用户身份验证协议规格为基础,经过不断发展到现今的 EAP。所谓“Extension”,是指原本在拨号协议PPP (Point-to-Point Protocol)中加入认证序列,但随着各大供应商和操作系统供应商开始实施各自扩展的认证。为了将这些认证作为“可扩展”的认证协议在一个框架内管理,从而制定了EAP 。
EAPoL 指局域网上的 EAP,最初是为电话线创建的,现在扩展成可在局域网线路上使用的状态。
最初的 EAP 通常使用挑战身份验证协议(CHAP,Challenge Handshake Authentication Protocol);以哈希算法命名的 EAP-MD5 比EAP-CHAP 更常用。这是因为 EAP 的前身 PPP 已经有一个名为 "CHAP"的身份验证协议(*注),所以特意给它起了一个不同的名字,以避免混淆。
注:微软已在其产品中使用MSCHAP(使用 WindowsNT 自身的密码哈希值)及其改进版 MSCHAPv2(在 PPP 上使用)。EAP的制定是为了包含了这些专有扩展,但如后续所述MSCHAP/MSCHAPv2 后来还是以不同的形式继续存在。
挑战型认证采用如下算法,将伪随机数和散列函数组合起来,将密码和用户名打乱破坏掉。虽然破坏的结果是128bit的乍一看非常混乱的比特串,但是只要密码和用户名有一个字母的差异,结果就会大不相同。而且用户名+密码→哈希的转换很简单,但反过来从哈希推算用户名和密码却非常困难。
![](/upload/images/blog/blog11/digest_l.jpg)
摘要认证机制
802.1X和 RADIUS
现在,802.1X 涉及到另一个关键词:RADIUS,RADIUS是Remote Access Dial In User Service的缩写,是过去拨号互联网上用于管理用户登录的身份验证协议。802.1X 就像是将这一机制从"拨号 "转移到了 "以太网"并加以实施,网络交换机和客户端之间的认证上使用EAPoL进行,网络交换机和服务器之间认证上使用 RADIUS进行认证。
![](/upload/images/blog/blog11/radius_l.jpg)
RADIUS的结构
RADIUS有自己的框架,与 EAP 不同的是,其基本规范包括用于未加密密码的 PAP(Password Authentication Protocol)和用于基于挑战型验证的 CHAP。RADIUS CHAP 与EAP-MD5 类似,但并不直接兼容(*注)。后来,RFC 3579 扩展了 EAP over RADIUS的选项,允许EAP 数据包直接通过 RADIUS。当前的 802.1X 基本上就是在这种模式下运行的。也就是说, RADIUS 框架被用作 EAP on IP 而不是 EAPoL,而 RADIUS 本身的身份验证功能(PAP、CHAP)却很少被使用。
注:这方面的关系有点复杂,因为 RADIUS (RFC2059) 是在 EAP (RFC2284) 之前制定,而且是在 EAP 扩展之前根据 PPP (RFC1661) 身份验证协议设计的。
然而,这个 "几乎"是个棘手的问题,因为至少 RADIUS 密码(密文)必须设置正确,因为 RADIUS 数据包上有一个防篡改的验证散列字段(Authentication),如果客户端(AP)和验证服务器端的密文信息不匹配,验证散列值就会不匹配,数据包就会被丢弃。RADIUS密钥与 802.1X 中提供给单个用户的密码不同,基本上是提供给每个身份验证服务器的。但也可以通过区分IP地址范围来设置不同的密码(至少 FreeRADIUS 具有该功能)。
另外,EAP选项扩展后,并没有取消RADIUS自身的用户名和密码选项,而且在实际安装和配置中,发送哪些值以及接收到的RADIUS 用户名是否经过验证也存在差异。关于 802.1X 中 ID 和密码的混淆问题,我们后续也会提及到。即使是同一种 "802.1X 标准 "之所以有一定的 "兼容性",是因为这方面的规范比较灵活(或者更直白地说,比较 "松散")。
迈向神奇的EAP世界
有线局域网的IEEE802.1X 标准使用 EAP-MD5 作为标准算法。不过,EAP-MD5 是单向验证。这意味着网络只能验证终端,终端无法验证网络。虽然这在有线局域网中是一个安全问题,但在无线局域网中却构成了更大的风险。这意味着,当攻击者试图建立一个假 AP 让用户连接并窃取信息时,单向验证协议无法区分 "真 AP "和 "假AP"。无线局域网的身份验证协议需要相互身份验证(Mutual Authentication),这也是扩展 EAP 的原因。我们终于要踏入 EAP 的神奇世界了,但这将是下一期的主题。
嵌入式无线LAN模块产品介绍页面