OpenID协议在云计算身份认证中的风险和改进
2016-01-05黄红桃陈晓杭
黄红桃++陈晓杭
摘要:该文探讨OpenID协议在云计算身份认证中可能存在的各种风险,针对网络窃听的风险,提出一种采用流密码加密URL的改进方案。
关键词:云计算;网络安全;OpenID协议
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)29-0021-02
The Risks and Improvement of OpenID Protocol in Identity Authentication based on Cloud Computing
HUANG Hong-tao, CHEN Xiao-hang
(Guangdong University of Foreign Studies, Guangzhou 510006, China)
Abstract: This paper discusses the possible risks of OpenID protocol in identity authentication based on cloud computing, and presents an improved scheme for URL encryption based on stream cipher in order to prevent network eavesdropping.
Key words: cloud computing; network security; OpenID protocol
随着云计算概念的普及,一些大型的门户网站开始使用云计算为用户提供更便利的服务,最基本的协议之一就是OpenID。随着该协议被广泛应用,其安全性问题也受到了关注,成为影响云计算大范围应用的一个因素。
1 OpenID协议的基本原理
1.1 OpenID的概念
OpenID是一个分布式身份认证系统。对于用户来说,只需要在一个中心网站上面注册过后,凭借注册后获得的OpenID URL,就可以不必在其他同样支持OpenID协议的网站上再次注册,免去用户在不同网站上面频繁的注册活动和省去了对不同帐号密码的记忆,达到凭一个账号可以在多个网站登录的效果。而对于服务提供者来说,利用中心网站提供的OpenID,不仅可以省去对用户账号的添加、删除、修改等管理工作,还可以快速沿用中心网站的庞大用户群。
使用 OpenID时,URL就是用户的OpenID身份认证,可在多个网站上进行登录。URL的构成有两部分:账号名和提供OpenID身份的网址。例如:在中心网站openid.com上的账号是:user,对应的URL就是:http://user.openid.com/[1]。
1.2 OpenID的工作原理
1.2.1 角色定义
用户User (通常指用户浏览器)
服务提供者RP( Relying Party, 又称为Service Provider)
身份提供者OP( OpenID Provider, 又称为OpenID Server)
1.2.2 OpenID的工作流程
1)用户需要使用服务提供者RP的某项服务,首先提供自己的身份,即上面所述OpenID URL。
2)RP根据用户的OpenID URL 与身份提供者OP进行通信。有两种通信模式:一种是不提示用户在后台进行;更常见的是第二种:RP在同一个浏览器窗口将用户引导到OP的身份认证页面。
3)用户在认证页面输入在OP之前设定的密码,向OP表明身份,完成认证。
4)认证结束,OP将用户引导回到RP,同时返回的信息包含认证用户的结果判断,以及RP需要的一些其他信息。
5)RP判断返回信息的有效性,如果认证成功,用户即可使用相应的服务[2]。
2 OpenID可能存在的风险
2.1 拒绝服务攻击
对于RP的连接请求,OpenID协议本身并没有设置检查机制,无法判断一个请求是否原始请求。恶意的RP可以重复请求连接, 认证或签名验证,并且在每个消息上指定系数与生成器,导致OP疲于运行每个消息,无法响应其他正常请求[3]。
2.2 网络钓鱼
RP将用户引导到OP的身份认证页面时,存在网络钓鱼攻击的风险。例如:恶意的RP事先构建某些提供OP服务的钓鱼网站,当用户输入其URL后,将用户重定向到伪造的页面,等用户输入密码后再跳转回RP网站。表面看来用户以为自己认证成功,但此时用户的OpenID和密码已被恶意RP窃取。
2.3 网络窃听
从OpenID的认证流程来看,当认证成功时会返回认证结果给服务提供者RP,同时伴随传送的还有用户的一些信息,例如OpenID URL,这个URL很容易被人截获并加以利用,攻击者可以从中截取一个成功的认证并重用[4]。
3 改进方案
3.1 选中的改进点
针对网络窃听,在OpenID身份提供者和服务提供者之间通过共享密钥的方法来应对。这里采用一个固定长度的随机字符串来加密URL,考虑采用RC4流密码算法,加密后再把这个随机字符串放到密文的前面。因为之前已经协商好,服务提供者就能知道提取前面多少位的字符串来做为解密用的密钥,从而进行解密,得到正确的OpenID URL。
3.2 改进算法
流密码是指每次只加密数据流的一位或一个字节的加密方法。1949年,香农(Shannon)提出只要一次一密的密码体制是绝对安全的,如果密钥流是随机的,除非是获得了密钥流,否则这个密码是不可破的。
基于这种思想,用随机生成的5位数字作为密钥来对产生的OpenID进行加密,由于密钥流的随机性和一次性,同一个OpenID的加密结果每次都是不同的,这样就能有效地对抗网络窃听。而这个随机密钥流要如何传送到服务提供端,有两种思路:第一种是把密钥流也加入到密文中,即使密钥流被人截获,也比较难判断出哪一部分是密钥了;第二种是以某种特定算法将密钥流再次进行加密然后通过TCP认证过程中传输的字段将其传输给服务提供方,服务提供者再用协商好的解密方法去获得密钥流。这里简单起见,采用第1种方法。
举例如下:假设在经过OpenID的验证之后,OpenID服务器要返回给服务提供者的URL为http://test.openid.com/ 而随机生成的5位随机数字为12345,利用这5位随机数字对OpenID URL进行一轮加密后得到的结果可能为grql5.-qans,ll`mga*^m-,此时再将5位随机数字附加在密文前面,得出结果为:12345grql5.-qans,ll`mga*^m-,以此作为验证成功的数据发送给服务提供方,当然也可以把密钥流拆散放在密文当中的固定位置。当服务提供者接收到这样的密文时,由于事先协商好解密方法,知道应该提取前面的5位字符来做为解密密钥,从而成功地获得用户的OpenID URL。而窃听方由于不知道密钥的位数、位置和加密算法,想要凭借截获的密文去获取用户的OpenID将变得较为困难。
4 结束语
本文首先阐述了OpenID协议的原理,接下来分析协议用于身份认证中存在的风险,最后针对网络窃听,设计了一种基于RC4流密码的加密方案,对用户的身份:OpenID URL进行加密。由于采用一次一密的方法,较好的预防了网络窃听。
参考文献:
[1] 豆丁网. 什么是OpenID?OpenID概念、原理和案例介绍[EB/OL]. (2012).http://www.docin.com/p-65565629.html.
[2] 刘为, 郝梅. 利用OpenID和OAuth进行安全授权及风险防范的分析[J]. 武汉商业服务学院学报, 2011, 25(5): 90-93.
[3] 张明西, 刘晖. OpenID标准化认证机制的研究与应用[J]. 计算机应用与软件, 2010,27(7): 61-62.
[4] 张明西. OpenID多级安全问题研究[D]. 上海: 东华大学, 2009.