基于SM9盲签名的OpenID协议

2022-12-30 14:23王志伟
计算机与现代化 2022年12期
关键词:攻击者代理身份

王 煊,王志伟,2

(1.南京邮电大学计算机学院,江苏 南京 210023; 2.江苏省大数据安全与智能处理重点实验室,江苏 南京 210023)

0 引 言

在遍布人类生活每个角落的物联网中,隐私安全是一项重大挑战[1]。身份认证[2]是隐私保护的重要领域,目前提出的OpenID身份认证协议,构建在OAuth 2.0标准之上[3]。OpenID先后经历了OpenID1.0、OpenID1.1以及OpenID2.0,OpenID2.0是最终的稳定版本[4],OpenID对企业未来的发展非常重要[5],故其安全性受到了重点关注。而OpenID身份认证协议作为一种单点登录[6]认证协议,正在成为以用户为中心的身份基础设施的可行解决方案[7]。

OpenID协议在身份认证的整个过程当中,涵盖了以下2个重要的参与方:

1)OpenID提供者(OpenID Provider, Idp):是一个OpenID的提供商网站[8],诸如Google和Microsoft等站点,用户如果想要使用这个站点的OpenID,首先要在这个网站上进行注册,申明自己的OpenID标识符。Idp负责对依赖方的身份进行验证。

2)OpenID依赖方(Relying Party, RP):是一个支持OpenID的Web站点,用于用户使用OpenID进行登录时的操作。OpenID依赖方RP依据用户输入的标识符来发现Idp,然后请求Idp的认证,Idp的认证需要用户的参与,输入密码确认用户身份登录OpenID的依赖方,然后Idp会将认证的结果返回给RP。RP使用非对称加密[9]技术对Web上的用户进行身份验证,并根据认证的结果来决定是否允许用户访问资源[10]。

在目前的OpenID协议交互过程中,存在着一些安全性的问题亟待解决。一方面,身份提供商Idp可以通过登录到OpenID依赖方的行为从而了解到用户访问了哪些RP、何时进行访问以及访问的频率。另一方面,身份提供商通常情况下拥有包含经过验证的个人用户属性的用户配置文件,这使得身份提供商可以将用户访问的RP数据信息链接到一个唯一确定身份的用户,这样就会泄露用户的敏感信息。

当前用于隐私保护的OpenID协议有很多,Hammann等[11]在标准OpenID协议的基础上做出改进,并提出POIDC协议成功解决了上述问题。协议的流程中通过屏蔽OpenID依赖方RP的网站标识符RPk,使得身份提供商Idp不再了解到用户登录的RP,具体采用的解决方法是使用散列值H(RPk||rp_nonce||u_nonce)替换直接发送给Idp的RPk,其中u_nonce表示一个加密安全、不可预测的随机值,由于u_nonce是由浏览器(用户代理)生成的,这样Idp后端就不会知道它对应的值;rp_nonce是RP为重放保护而生成的nonce值。在哈希中包含rp_nonce,交互的过程不必以明文形式进行发送,使得Idp不可以从rp_nonce获取关于RP的任何信息。通过实验分析可知,该协议在效率方面的表现并不是很好,散列值H(RPk||rp_nonce||u_nonce)在id_token当中被包含,而id_token的使用不但面临着证书管理难度大、开销高的问题,而且RP需要对收到的id_token进行验证操作,这使得协议的效率因此变低。

为了解决Hammann等[11]提出的POIDC协议中的问题,本文在POIDC协议的基础上设计一种基于SM9盲签名的OpenID协议,该协议不但使得身份提供商Idp不再了解到用户登录的RP,保护了用户消息隐私,而且由于本文提出的协议是基于身份基盲签名方案,避免了id_token的使用,解决了证书管理难度大、开销高的问题,并且减少了计算量和通信量,因此协议的效率得到了提高。

在OpenID协议中引入盲签名,使得签名者Idp在不知道具体消息内容的情况下对消息进行签名,且Idp无法将签名过程以及得到的签名链接在一起,因此,协议在双向认证、抵抗假冒攻击等方面表现良好。1982年,Chaum[12]提出了盲签名概念,使用盲签名方案,用户可获得对消息的签名,但不透露有关其签名的任何信息,该方案可以确保不可追踪性和不可链接性[12-14]。

本文的身份基盲签名方案以SM9国密算法[15]为基础,不需要传统公钥加密[16]体制中的认证机构对用户证书进行管理。SM9国密算法为身份基签名算法,整个系统中不需要证书,消除了复杂的证书验证过程。《网络安全等级保护条例》对信息系统使用国密算法有相应的要求,这使得在OpenID协议中使用SM9国密算法是有意义的。本文将SM9改造为身份基盲签名,不仅实现了隐私保护,而且相较基于RSA体制[17]的盲签名算法,签名时间大幅减少,有着非常好的效率,这使得将SM9盲签名用于OpenID协议中具有现实意义。

因为Castagnos等[18]提出的同态加密方案具有密文格式良好的特征,所以在本文的SM9盲签名方案中,使用Castagnos等[18]提出的方案实现对消息的盲化。同态加密技术始于概率加密方案,由Goldwasser等[9]提出,并随后由其他的密码学者做出改进,其中最成功的同态加密系统是由Paillier[19]设计的,但是该同态加密系统仍然存在着2个缺陷,一是需要建立可信的第三方,二是它的安全性基于RSA大整数分解困难问题,由于RSA群上的元素比较多,所以通信效率会比较低。在此背景下,Castagnos等[18]提出了一种基于DDH问题的线性同态加密方案,并在随后进行了相应扩展,提供了一个同态加密方案[20],该方案不需要建立可信的第三方,它的安全性不依赖于大整数分解的困难性,并在HSM(Hard Subgroup Membership)群内提供了实现,随后Yuen[21]对该方案进行了效率分析。

1 基于椭圆曲线的双线性对

双线性对(Bilinear Pairing)又被称为双线性映射[22]。

定义1G1是由P生成的阶为q的循环加法群。双线性对e满足:

非退化性:e(P,P)≠1。

易计算性:对于∀P,Q∈G1,存在有效算法,可计算出e(P,Q)。

2 SM9盲签名方案

2.1 方案的构造

KGC是密钥生成中心,用户根据保存的秘密值和公开参数生成签名公私钥[23]。提出的SM9盲签名方案如图1(见3.1节)所示。

1)参数设置阶段。

2)密钥生成阶段。

输入签名者的身份ID∈{0,1}*,KGC计算QID=H1(ID),输出签名者私钥dA=sQID,具体的步骤与SM9算法中一致。

3)盲化阶段。

4)签名阶段。

②将计算之后的(C1,C2)发送给用户。

5)解盲阶段。

6)签名验证阶段。

用户得到消息M′的盲签名后,向验证者发送验证请求。验证者进入验证签名阶段,随后验证者应当进行如下的步骤:

①检验h是否在[1,N-1]内,若不在规定范围,则验证不通过;②将m转换为椭圆曲线上的点,判断m是否为G1中元素,若不是,验证不通过;③在群GT上计算g=e(P,Ppub);④在群GT上计算t=gh;⑤计算h1=H1(IDK||hid,N);⑥在群G2上计算P′=[h1]P2+Ppub;⑦在群GT上计算u=e(U,P′);⑧在群GT上计算w′=μt,将w′转换为比特串;⑨计算h2=H2(M″ ||w′,N),判断整数h2和h是否相同,若相等,则验证通过,否则不予通过。

2.2 方案的安全性分析

对身份基盲签名方案的安全性分析包括对不可伪造性和盲性的分析。对身份基盲签名方案进行不可伪造性证明时,需要引入安全模型。常见的身份基盲签名方案涉及3个实体:签名者、验证者以及用户。本文的身份基盲签名方案由以下算法构成。1)系统建立算法:由KGC执行,输入安全参数λ,输出系统公共参数params。2)密钥生成算法:由KGC执行,输入签名者身份ID和params,输出签名者私钥dA。3)盲签名算法:由用户和签名者交互式完成,输入params、消息M、签名者私钥dA,最后生成签名,它还包含了3个子算法,即盲化、签名、解盲。4)验证算法:由验证者执行该算法,输入params、消息M和签名,验证签名有效性,若验证有效则通过,否则不予通过。

身份基盲签名方案不可伪造性可以定义为以下游戏。1)设置:挑战者C运行设置算法并将公共参数发送给攻击者A。然后,C执行密钥生成算法并发送公钥给A。2)查询:攻击者A可以进行身份私钥查询和签名查询,挑战者C返回查询结果。3)输出:攻击者针对挑战身份ID*和消息M*生成签名σ*并返回。如果签名σ*合法,且(ID*,M*)未进行过签名查询,那么说明攻击者A赢得了上面的游戏。

定义2 不可伪造性。如果对于任何概率多项式时间攻击者A,A赢得游戏的概率是可忽略的,那么该身份基盲签名方案是不可伪造的。

定理1 本文SM9盲签名方案不可伪造性依赖于SM9签名的安全性。

证明。在这个证明游戏中有3个角色:A代表本文盲签名的攻击者,B代表本文SM9盲签名方案的挑战者,B同时也是SM9签名的攻击者,C则是SM9签名的挑战者。

查询。攻击者A可以发起概率多项式次私钥查询和签名查询。

2)签名查询:当攻击者A对身份ID和消息M进行签名查询时,如果ID′尚未进行身份基私钥查询,则B先对ID进行私钥查询。如果已进行过查询,则B将身份ID′和消息M′发给C进行SM9签名查询。C返回SM9签名应答σ={h,m,w},B随机选择盲因子k1∈Zn*,则另一个盲因子为k2=w/k1。B计算ε=(k1+1)dAw,利用参数param′′和公钥pk生成密文C1=fmpkε和C2=gqε,将其作为盲签名应答返回给A。

定义3 盲性。对于消息M,A可在多项式时间内根据签名推测消息为M*,若M与M*相同的概率是可忽略不计的,则方案具有盲性。

定理2 本文的SM9盲签名方案满足盲性。

3 基于SM9盲签名的OpenID协议

3.1 协议的构造

协议的流程如图1所示。

图1 OpenID协议流程图

1)用户使用他的用户代理(通常是Web浏览器),通过请求登录OpenID依赖方RP来发起协议,他会指定要使用哪个Idp。例如,通过点击RP网页上相应的按钮,这将触发用户代理对RP发起请求。

2)RP将用户代理重定向到身份提供商Idp,将RP的网站标识符RPk及新生成的rp_nonce、u_nonce作为URI片段发送给用户代理。JavaScript可以访问这些URI片段,但不会发送到Idp后端。用户代理将它们连接之后再进行盲化处理。

3)用户代理被重定向到Idp来加载它的网站,但是这个请求并不包含任何查询参数。此外,用户代理还会将盲化后的消息M′转发给Idp。如果有必要,那么用户也需要登录Idp。

4)Idp将其网站内容发送给用户代理,网站的内容包括JavaScript代码和Idp的公共验证密钥,随后,用户代理利用公共验证密钥执行JavaScript代码来验证Idp的身份。如果此验证成功,那么用户代理就会为用户打开一个对话框,以确认他希望登录到相应的OpenID依赖方RP。

5)为了同意授权,用户单击对话框中的确认按钮,然后向Idp发送对消息M′进行签名的请求。

6)Idp收到来自用户代理的请求之后,对消息M′进行签名,并将签名之后生成的值发送给用户代理。

7)用户代理收到签名值之后对其进行解盲,完成解盲之后用户代理就可以向OpenID依赖方RP发送登录请求。

8)RP验证盲签名的正确性,并验证网站的标识符RPk是否没有发生变化,当所有验证通过之后,RP向用户代理发送登录请求回应,通知用户代理是否登录成功。

3.2 协议的安全性分析

在本节中,将本文提出的基于SM9盲签名的OpenID协议先是从双向认证性、抵抗假冒攻击、重放攻击3个方面进行理论分析,然后使用形式化分析工具Scyther对协议的安全性进行分析。

1)双向认证。

双向认证是协议所要具备的最基本的安全需求[25],本文提出的协议具备双向认证性,分析如下:

在3.1节第3步中,用户代理被重定向到身份提供商Idp来加载它的网站后,Idp将其网站内容发送给用户代理,网站内容包括JavaScript代码和Idp的公共验证密钥,随后用户代理需要利用公共验证密钥执行JavaScript代码来验证Idp的身份。如果验证成功,用户代理才会为用户打开一个对话框。在此之后,用户代理会向Idp发送签名请求,Idp使用自己的私钥进行签名相当于对消息进行了认证,只有当双方的验证都能通过之后,才会继续执行协议的流程,在3.1节第7、8步中,用户代理得到消息M′的盲签名后向OpenID依赖方RP发送登录请求,随后,RP验证盲签名的正确性,并验证网站的标识符RPk是否没有发生变化,当所有验证通过之后,RP通知用户代理是否登录成功,用户代理在收到RP登录成功的消息之后,会对信息的真伪性进行相关验证,并最终执行完协议的全部流程。所以本文提出的协议可提供双向认证的安全需求。

2)假冒攻击。

3)重放攻击。

4)利用Scyther工具分析协议。

2008年,Creamers[26]提出了基于操作语义的协议自动化分析软件Scyther1.0,并利用Scyther工具对很多的经典密钥建立协议进行了分析和验证。Scyther工具是使用安全协议描述语言SPDL对协议角色进行编写的,由于软件过程定义语言SPDL是对过程建模的语言,所以可以很直观地对照着所提出协议流程的每一步进行程序的编写,SPDL语言还可以对协议流程中所有实体以及相关的属性进行定义。

当用Scyther工具对本文的协议建模时,首先使用角色序列作为参数,而后对发送事件和接收事件进行定义,如图2所示,角色R代表的是用户代理,角色S代表的是RP,角色T代表的是Idp。在使用Scyther对本文的协议过程进行阶段性的考虑时,会逐步地去添加安全认证协议的机密性、同步性以及一致性,协议所有的角色分别使用Alive、Weakagree、Niagree、Nisynch进行安全声明,并检查生成和接受变量的安全性,随后Scyther工具会对添加的相应属性进行验证。IDk指的是用户的标识符,RPk则指的是RP的网站标识符,从图中可看出2个标识符在协议流程中没有被泄露。如果流程中存在攻击,那么在Status(状态栏)一列会显示Fail;如果在协议的流程当中并不存在着攻击,则会在Status一列显示出OK,并且在Comments一列显示No attacks within bounds(限制范围内没有找到攻击),这意味着在设置的最大运行次数的界限内不存在攻击,可以看出结果图的状态栏都显示OK,由此证明了协议的安全性。

图2 Scyther工具对协议的分析结果

3.3 协议的性能分析

从本文前文有关基于SM9盲签名的OpenID协议描述可以知晓,协议的三方在交互的过程中都参与了计算和通信,产生了一定的计算量和通信量,所以可以针对协议不同阶段中产生的计算量和通信量,对协议进行性能方面的分析。将本文的协议与Hammann等[11]中基于标准OpenID协议而做出改进的2个协议,即POIDC和pairwise POIDC进行对比分析,对比分析的结果见表1所示。

表1 不同协议之间性能分析对比

对表1中的符号解释如下:Ta是按位运算的计算量;Tb是随机数发生器产生随机数的计算量;Tc是哈希函数的计算量。

表1还统计了本文提出的协议在整个交互流程中的通信量,其中符号τ代表协议中使用常量的平均比特位长度。需要注意,协议中除了产生的哈希值长度是2τ以外,其余符号或输出结果长度均为τ。下面本文从RP与用户代理之间、用户代理与Idp之间分析通信时在信道中传输的数据长度。在RP与用户代理进行交互过程中,包含了待盲化的消息M、解盲后的{h,m,w}、签名请求、向RP发送的登录请求以及登录请求回应,整个交互过程当中总共需要9τ。在用户代理与Idp进行交互过程中,包含了wT、M′、C1、C2、加载网站请求、JavaScript代码、Idp的公共验证密钥,其中的M′=(α,β,γ),输出结果长度为3τ,所以整个交互过程当中总共需要9τ。综上所述本文的协议通信量大小为18τ。

通过本节的分析, 可以发现由于本文提出的协议是基于SM9盲签名的,所以相较于其他2个对比协议,总体的计算量方面略少于其他2个对比协议, 并且因为在协议的流程中取消了令牌的使用,使得整个协议的交互流程不需要令牌的传送与接收,所以在通信量方面明显少于其他2个对比协议。

4 结束语

本文提出了一种基于SM9盲签名的OpenID协议,该协议是基于身份基盲签名的,不仅优化了OpenID协议的交互流程,同时实现了隐私保护。在协议交互的过程当中,避免了由于令牌的使用所造成的计算量和通信量方面的额外开销,在保证了OpenID协议安全性的同时,协议效率也得到了提升,通过仿真实验和理论分析说明了整个协议具有推广使用的前景。

猜你喜欢
攻击者代理身份
正面迎接批判
正面迎接批判
跟踪导练(三)(5)
妈妈的N种身份
身份案(下)
复仇代理乌龟君
有限次重复博弈下的网络攻击行为研究
108名特困生有了“代理妈妈”
胜似妈妈的代理家长
放松一下 隐瞒身份