中国将在今年六月强制推行自己的无线通信加密标准WAPI(WLAN Authentication and Privacy Infrastructure),一时间在行业掀起了波澜。关于这个标准毁誉不一,各种各样的说法都有,最核心的一点是中国到底有没有必要和能力实施这个标准。我不想重复那些政治、经济、民族等角度讨论的论调,而是试图从技术角度探讨一下这个标准的来龙去脉。
网络安全问题一直困扰着使用网络的人们,无线网络这方面的问题更加突出。因为我们很难控制无线电波的覆盖范围,这样我们就不能通过覆盖范围来控制谁可以连接,谁不能连接无线网络。同样地,由于我们看不见无线电的辐射,我们也不能随时很清楚自己到底正在和哪一个无线设备通信。同时,无线电通信的监听可以很容易地进行,难以发觉有人在监听。
基于上述的理由,为了安全地使用无线网络,我们必须有一种有效的办法解决上述的问题。所谓有效的方法可以归结为两点:
1、 认证。即AP能够确认终端用户的身份,并控制用户的使用;反过来,终端用户也需要确认AP的身份,以避免被欺骗。
2、 加密。既然我们不能防止监听,那我们就必须让监听者不能理解监听到的内容。
目前无线局域网通信(802.11)中使用的一个标准算法是Wired Equivalent Privacy (有线等效加密,简称WEP),其认证和数据加密均依赖于一个AP和通信终端间共享的密钥,只有密钥相同的AP和终端之间才可以相互通信。老实说,这算不上一种认证方式,顶多算一种分组方法,因为这个密钥很容易泄露。而且,同一个AP的用户必然使用相同的密钥,这样在提供公共接入的地方就不能使用这种方法了。
而在加密方面,WEP也是不可靠的。这个算法是基于RC4,我们配置的密钥,并不是直接用来加密的。这个密钥将和一个随机数(在WEP中称之为初始矩阵)一起生成一个和发送数据等长的加密密钥。在通信的时候,使用这个加密密钥和原文进行异或运算,得到密文,并且和初始矩阵的明文一起发送出去。使用原文和密钥进行异或进行加密的方法有一个要求,就是密钥不能重复,否则只要得到两段使用相同加密密钥的密文,就可以进行破解。但在网络通信过程中,数据总是有不少固定内容,如端口,协议命令的等等,这大大方便了破译。WEP使用初始矩阵的方式减少加密密钥重复的可能,每一个初始矩阵对应着一个不同的加密密钥,但是初始矩阵只有24位长度,在一个通信量比较大的网络里,2个小时左右就肯定有一个密钥重复。
另外,WEP没有强制规定设备必须每个包都使用不同的初始矩阵。有些厂家的设备会一直使用相同的初始矩阵,有的则不是使用随机数而是使用简单的序列。遇到上述这两种厂家的设备,破译的时间将大大缩短。
此外,为了防止数据被篡改,WEP还使用了CRC算法对数据进行验证。但是CRC是一种线性算法,修改数据中某几位之后,可以改变CRC校验中的某几位来得到正确的校验,在这个操作中我们不需要原文的完整知识。而且,WEP的异或计算令我们很容易完成这些位的修改。通过这种方式我们可以做很多事情,比如重放用户发送邮件的全过程,修改其中收件人的地址。这样,我们就可以轻易得到文件的原文,反过来得到这些数据包对应的密钥,再以此破译所有使用这些密钥加密的数据。
上述这些问题,在网上已经公开讨论的非常多,而且清清楚楚。一个合格的程序员不难根据这些内容编写相应的破解程序,然后就是提着一个带无线网卡的手提电脑逛街,一天下来收获一定不少。可以打赌,在一个城市里不难得到一两个信用卡的资料。
实际上,无线通信的安全问题已经成为制约无线通信推广的瓶颈。据一些调查显示,在不选择无线网络的决定中,安全问题因素超过了40%,成为头位制约无线发展的杀手。为此,各大厂家及其联盟都在这里花了大量的精力。也就是说,安全问题的解决是势在必行了,但问题是谁来解决。在这点上,大家都想抢占标准这个制高点。
世界上无线通信最大的联盟组织在WEP之后推出了WPA(Protected Access),作为WEP的改进,解决了上述WEP的存在的问题。WPA是通过在WEP的基础上增加了初始矩阵的长度,改进了数据校验,同时增加了用户验证机制。并为了方便现有的厂家升级已有产品,仍然保留了基于RC4的算法。WPA事实上是在IEEE 802推出最终的标准IEEE 802.11i之前的一种过渡方案,而最终方案据了解要起码2006年才能定稿。而中国作为一个无线通信市场发展最快,潜力最大的国家,看来已经等不及2006年这个时间了。当然,我们也能够理解政府也需要为其他的政治,经济的因素而推出了自己的标准。事实上,我们也已经知道WAPI这个标准已经公布,并将在
据目前掌握的资料看来,这个标准实际上和IEEE 802.11i的运作架构区别不大,想来政府已经考虑了今后的兼容问题。目前非议最多的,是其中的一个加密算法没有公开,还有就是专利的授权方式。许多“技术专家”以保密的算法不安全为理由来抨击这个算法。那我们来看看这个理由是否成立。
我不知道在那篇密码学的文献上说过不公开的算法就是不安全的算法。而我记得的原话是:一个加密算法的安全性不能依赖于算法的保密。不依赖于算法保密和算法是否需要公开并没有任何逻辑上的联系。
逻辑上,如果一个算法的安全性不依赖算法的保密,那么对算法保密就更能够保证其安全性。大家可以翻翻德国二战时用的密码系统——依格码,它的破译始于获得了一台样机。如果没有这台样机,我估计那些天才的数学家(包括图灵先生),都不可能开展破译工作。而依格码的设计原理,恰恰就是不依赖于算法保密的。
之所以有人说如果一个算法不公开的话就不能保证其有效性,是因为如果不公开算法,就没有多少人了解,也没有太多人去分析其弱点,而算法的弱点就不容易被发现。但是,这里有一个前提,那就是:分析出你的弱点的人,必须会诚实的告诉你弱点所在。我不认为美国的国家安全局会义务为中国政府去做分析。
有一个例子,是关于目前用得很多的DES加密标准。DES加密标准在推行之前提交给美国的安全部(NSA),而NSA修改了DES算法中S盒的若干位,至于为什么修改没有作任何说明。也许是这个算法的制定者IBM在这里加了后门,NSA信不过他们;也许是NSA为了留有后门,修改了S盒。反正谁也不知道原因。
根据算法保密而判定一个算法不安全,是站不住脚的。至于一个商业算法是否需要保密,那是另外的问题了。我的看法是:这更可能是一个前期的保护手段和一个讨价还价的筹码。
至于为什么Wi-Fi在改进后还保留了RC4的算法呢?这是因为RC4这个算法速度很快,仅仅是密钥生成和异或操作,适合于CPU运算能力不强的AP。这样不至于在加密的时候对AP的性能产生太大的影响。
不过,比较好的加密算法基本上都是分组加密,通过多次轮换计算出来,但这种方法对CPU的要求较高。为了加快速度,非常好的的解决方法都是通过专用芯片来实现。这样,WAPI标准的推行,必然会给这些加密芯片带来很大的市场。
应该承认,我们在芯片设计和生产上不占任何优势,标准的强制推行和算法保密在不违反WTO的原则上给本地厂家提供了一个保护。但这种保护的作用需要依赖于标准推行的成功和国内市场的消化能力。不过,这已经不完全是技术的问题了。
在发稿前收到一个消息,中国政府和美国达成协议,无限期推迟实施WAPI强制性标准。同时致力于通过国际标准组织将WAPI的标准融入今后的国际标准中,下个月IEEE将来到北京和国家标准局共同商讨这件事情。
也许,这才是强制推行WAPI的意义所在。