一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于SM9盲签名的OpenID协议设计方法

2022-04-24 23:52:50 来源:中国专利 TAG:

一种基于sm9盲签名的openid协议设计方法
技术领域
1.本发明涉及信息安全技术领域,具体的说是一种基于sm9盲签名的openid 协议设计方法。


背景技术:

2.身份验证又称“验证”、“鉴权”,是指通过一定的手段,完成对用户身份的确认,身份验证的方法有很多,基本上可分为:基于共享密钥的身份验证和基于公开密钥加密算法的身份验证。基于共享密钥的身份验证是指服务器端和用户共同拥有一个或一组密码。当用户需要进行身份验证时,用户通过输入或通过保管有密码的设备提交由用户和服务器共同拥有的密码,服务器在收到用户提交的密码后,检查用户所提交的密码是否与服务器端保存的密码一致,如果一致,就判断用户为合法用户,如果用户提交的密码与服务器端所保存的密码不一致时,则判定身份验证失败。基于公开秘钥加密算法的身份验证是指通信中的双方分别持有公开密钥和私有密钥,由其中的一方采用私有密钥对特定数据进行加密,而对方采用公开密钥对数据进行解密,如果解密成功,就认为用户是合法用户,否则就认为是身份验证失败。
3.盲签名是由chaum在1982年首次提出的,用户可从签名者那里得到签名者对消息的签名,却没有对签名者泄露关于所签名消息的内容,而且即使以后签名者又见到了这个消息签名时,也无法把签名过程与最终的签名对应起来。盲签名的这种特性使得其被广泛应用于电子现金、电子投票等领域。盲签名被提出后立即得到了广泛的发展和应用。当前的盲签名主要有2个研究方向:一个是基于大素数分解、二次剩余等提出的一系列盲签名方案;另一个是将盲签名和其他的数字签名糅合衍生的分支,例如代理盲签名、公平盲签名、多重盲签名和群盲签名等。一个盲签名由盲化、签名、解盲、验证4个部分组成。基于身份的盲签名取消了公钥证书的使用,达到了提高效率的目的。
4.openid相关的技术有统一认证和单点登录等。单点登录是一种认证和授权机制,主要目的是为了方便用户访问多个系统,统一身份认证旨在将分散在各个信息系统中的用户和权限资源进行统一集中管理,提升系统安全性,简化资源访问操作。在支持openid的网站登录时,对于用户只需输入openid标识,就可以成为此网站的用户,享受其服务。第三方网站会根据用户输入的openid标识去发现openid提供商,openid提供商对持有该标识的用户进行认证,认证完成后,第三方网站可以根据用户的选择,分享用户在openid提供商网站的信息,这就涉及到授权访问的问题。授权访问可以采用oauth开放授权技术实现第三方网站对openid提供商网站资源的访问。
5.cn110880977a一种基于sm9数字签名的环签名生成方法,本发明由密钥生成中心(kgc)负责密钥分发,由签名者(signer)负责自发组建签名群组并完成消息签名,验证者(verifier)可验证消息签名合法性,并判断签名者是否为环内用户。该环签名生成方法虽然可以用来做到一定程度的匿名性,不过毕竟真实的签名者还是会暴露,存在一定的安全隐患。
6.cn113014398a公开了一种基于sm9数字签名算法的聚合签名生成方法,该方法是在不改变sm9数字签名的整体架构上,对签名算法进行优化,使其支持签名的聚合。多个不同的消息签名可聚合成单个签名,验证聚合后签名的有效性等同于分别验证每个签名的有效性,不需要逐个验证,实现批量验证,极大地提高了签名的验证效率。但是当攻击者得到某个成员的签名后,就可以对任意的消息产生有效的签名。


技术实现要素:

7.为了解决上述问题,本发明提供了一种基于sm9盲签名的openid协议设计方法,该方法可以很好地避免idp了解到用户登录的用户的依赖方rp,很好的保护用户相关的隐私信息。
8.为了达到上述目的,本发明是通过以下技术方案实现的:
9.本发明是一种基于sm9盲签名的openid协议设计方法,具体步骤如下:
10.步骤1,发起协议阶段:用户使用用户代理,通过请求登录rp来发起协议,并指定idp;
11.步骤2,rp和用户代理交互阶段:rp将用户代理重定向到idp,发送rp的具体网站的标识符rpk和新生成的nonce作为查询参数,将标识符rpk和新生成的 nonce连接并作为盲化流程中的消息m;
12.步骤3,用户和idp交互阶段:用户代理被重定向到idp,用户代理在计算h=h2(m||w,n)后采用cl方案将盲化后的m’发送给idp;
13.步骤4,显示对话框阶段:idp打开一个在浏览器中显示的对话框,要求用户确认其所希望登录到的rp,为此,idp查找一个可读的client_name,属于rpk,然后用户单击对话框中的确认按钮。
14.本发明的进一步改进在于:步骤3用户和idp交互阶段具体包括以下步骤:
15.步骤3.1,盲化操作:使用密码杂凑函数计算盲因子k1、k2,计算 h=h2(m||w,n),其中m是待盲化的消息,之后计算σ=f-h
pk
w.
,ε=gw,将盲化后的消息m’=(μ,σ,ε)发送给签名者;
16.步骤3.2,签名操作:签名者在接收到盲化后的消息m’之后,对消息进行签名,并将签名值发送给用户;
17.步骤3.3,解盲操作:用户代理收到签名值之后,在g1中生成元素u,r,最终得到消息m’的盲签名为(u,r);
18.步骤3.4,验证签名操作:用户代理得到消息m’的盲签名(u,r)后,向rp发起登录请求,随后rp进入验证签名阶段,对签名进行验证,如果验证成功,则判定盲签名有效,若验证不成功,则判定盲签名无效,rp通知浏览器是否登录成功。
19.本发明的进一步改进在于:步骤3.1具体操作为:
20.步骤s3.11、用户采用随机数发生器随机生成两个整数p1、p2,p1、p2为大于 2
197
的两个素数;
21.步骤s3.12、通过用户标识idk和生成的用户识别符hid计算idk||hid,得到结果为一个比特串;
22.步骤s3.13、使用密码杂凑函数计算盲因子k1、k2;
23.步骤s3.14、计算h=h2(m||w,n),其中m是待盲化的消息;
24.步骤s3.15、计算σ=f-h
pkw,ε=gw;
25.步骤s3.16、将盲化后的消息m’=(μ,σ,ε)发送给签名者;
26.其中g,f分别是g,f的生成元。
27.本发明的进一步改进在于:步骤3.2具体操作为:
28.步骤s3.21、计算群g
t
中的元素g=e(p,pk);
29.步骤s3.22、签名者在接收到m’之后,在群g1上分别计算分别计算分别计算
30.步骤s3.23、将计算之后的u’,r’发送给用户代理。
31.本发明的进一步改进在于:步骤3.3具体操作为:
32.步骤s3.31、计算整数l=(k1k
2-h)modn;
33.步骤s3.32、用户代理收到(u’,r’)后,将u’和r’的数据类型转换为字节串,在g1中生成元素u=[l]u’,r=[l]r’,消息m’的盲签名为(u,r)。
[0034]
本发明的进一步改进在于:步骤3.4中对签名进行验证具体为:根据公开参数计算h=h2(m||w,n),并验证等式e(u,pk dap)=r
·gh
是否成立,如果等式成立,则判定盲签名有效;若不成立,则判定盲签名无效。
[0035]
本发明的有益效果是:本发明在不改变sm9签名算法整体架构的基础上,对签名算法进行了优化,对签名过程中带签名的消息进行盲化,能够保证消息不被泄露的情况下完成签名,即签名者不知道签名内容,但用户能够得到真实消息的sm9签名。
[0036]
同时本发明实现了生成sm9签名的功能,在生成签名时用户代理和idp两方必须同时参与,保障了代签名内容对签名者的不可见,具有很好的盲性和不可伪造性。
[0037]
即使给予攻击方最强的攻击能力,即攻击者可以冒充可信的签名方和第三方。那么,攻击者会在对消息m’进行签名之前,迫切地想要得到原始消息m的内容,所以本发明在对方案设计进行安全性分析时,不必考虑流程中签名阶段及其之后的解盲和验证阶段。
[0038]
因此,攻击者就可以获得盲化后的消息m’=(μ,σ,ε),以及h=h2(m||w,n)。其中,μ=f
k2
·
pkw,σ=f-h
pkw,ε=gw。一方面,由于对消息m的加密采用了 cl加密的方式,使用cl加密优于paillier加密的优点是类组的生成是不可信的,并且类组元素的大小小于paillier组元素的大小(对于相同的安全级别),并且cl 方案具有cl密文格式良好性的特征,所以攻击者进行解密得到原始消息m的概率是可忽略的。
[0039]
另一方面,攻击者首先需要计算出随机数k1,k2∈[1,n-1],然后通过碰撞攻击等方法攻破单向哈希函数h=h2(m||w,n)才能获得m。当n足够大时,推导出 k1和k2的概率是可以忽略的,况且,在本发明的盲签名方案中,使用了密码杂凑函数计算盲因子k1=h1(idk||hid,p1),k2=h1(idk||hid,p2),其中p1、p2为大于2
197
的两个素数,不仅满足了p1、p2足够大的条件,而且同样引入了单向哈希函数,更进一步,即使推测出k1,k2,只要使用安全性高的单向哈希函数,攻击者也无法获取真实消息m。因此本发明提出的盲签名方案安全性能够得到充分保障。
[0040]
此外,在保留现有的sm9签名具有强安全性和高效率性的情况下,签名过程中既能保证签名的正确性,又能保证签名消息的隐私性。
[0041]
本发明在签名过程中采用了yuen推广的hsm-cl加密方案,不需要向公钥管理系统发起请求,用户代理和idp之间也不需要进行证书或公钥的交换,不仅有效提高了系统效率,而且降低了使用成本。
附图说明
[0042]
图1是本发明中的openid协议交互流程图。
[0043]
图2是本发明中的盲签名方案流程图。
具体实施方式
[0044]
以下将以图式揭露本发明的实施方式,为明确说明起见,许多实务上的细节将在以下叙述中一并说明。然而,应了解到,这些实务上的细节不应用以限制本发明。也就是说,在本发明的部分实施方式中,这些实务上的细节是非必要的。
[0045]
本发明是一种基于sm9盲签名的openid协议设计方法,如图1是本发明中的openid协议交互流程图,协议主要包括三方,依赖方rp,用户代理以及身份提供者idp,用户使用户代理(通常是web浏览器),通过请求登录rp来发起协议之后,进入三方交互阶段,在用户代理和idp交互阶段中,采用基于sm9算法的盲签名方案,在盲化和签名阶段,采用了yuen推广的hsm-cl加密方案。在最后的验证阶段,需要依赖方rp验证idp上的签名。
[0046]
本发明的具体步骤如下:
[0047]
步骤1、发起协议阶段:用户使用他的用户代理(通常是web浏览器),通过请求登录rp来发起协议,并指定idp;
[0048]
一个流行的openid connect实现是google登录。用户可以点击谷歌登录按钮,例如在stackoverflow.com上。如果该用户还没有登录,其会被重定向到谷歌(idp),并被要求登录到其谷歌帐户。谷歌页面然后显示一条消息,要求用户确认其想要登录到stack overflow。此外,还必须确认stack overflow可以访问其电子邮件地址。然后,用户被重定向到stackoverflow.com,并登录,并且其用户配置文件已经包含了其经过验证的电子邮件地址。
[0049]
步骤2、rp和用户代理交互阶段:rp将用户代理重定向到idp,发送rp 的具体网站的标识符client_id和新生成的nonce作为查询参数,标识符rpk和新生成的nonce作为盲化流程中的消息m;
[0050]
步骤3、用户和idp交互阶段:用户代理被重定向到idp,用户代理在计算 h=h2(m||w,n)后采用cl方案将盲化后的m’发送给idp;
[0051]
转发盲化后的消息m’的方法,不同于原始openid协议中将查询参数直接转发给idp的步骤。h是一个加密哈希函数,||表示连接,采用这样的替换方式idp 后端就无法得到m的值,达到了加密的效果。
[0052]
步骤4、显示对话框阶段:idp打开一个在浏览器中显示的对话框,要求用户确认其希望登录的rp,为此,idp查找一个可读的client_name,它属于rpk,然后用户单击对话框中的确认按钮。
[0053]
本发明的步骤3用户代理和idp之间的交互使用了盲签名方案,采用了yuen 推广的hsm-cl加密方案。
[0054]
步骤3包括以下阶段:
[0055]
(1)盲签名准备阶段
[0056]
发布安全参数n,由kgc生成主密钥对(sk,pk)及用户的签名私钥da。
[0057]
(2)系统主密钥和用户密钥的产生
[0058]
kgc产生随机数sk∈[1,n-1]作为主私钥,计算g2中的元素pk=[sk]p作为主公钥,则主密钥对为(sk,pk)。kgc将sk秘密保存,并公开pk。
[0059]
g1和g2是2个阶为素数q(q》2n),p是g1的一个生成元,双线性映射e:g1×
g2→gt
,s∈z
q*
,pk=[sk]p,选择两个hash函数h1:{0,1}*
→zq*
,h2:{0, 1}
*
×
g2→zq*
。签名者在群g
t
上计算g=e(p,pk)。
[0060]
(3)盲签名阶段
[0061]
该阶段包括盲化操作、签名操作、解盲操作和签名验证操作;
[0062]
其中,盲化操作如下:
[0063]
步骤s3.11、用户采用随机数发生器随机生成两个整数p1、p2,p1、p2为大于 2
197
的两个素数;
[0064]
步骤s3.12、通过用户标识idk和生成的用户识别符hid计算idk||hid,得到结果为一个比特串;
[0065]
步骤s3.13、使用密码杂凑函数计算盲因子k1、k2;
[0066]
步骤s3.14、计算h=h2(m||w,n),其中m是待盲化的消息;
[0067]
步骤s3.15、计算μ=f
k2
·
pkw,σ=f-h
pkw,ε=gw;
[0068]
步骤s3.16、将盲化后的消息m’=(μ,σ,ε)发送给签名者;
[0069]
签名操作如下:
[0070]
步骤s3.21、计算群g
t
中的元素g=e(p,pk);
[0071]
步骤s3.22、签名者在接收到m’之后,在群g1上分别计算分别计算分别计算
[0072]
步骤s3.23、将计算之后的u’,r’发送给用户代理。
[0073]
在原始的openid协议中,idp发送id_token(经过身份验证的用户可以从 idp请求一个令牌,可以使用该令牌登录到rp),之后浏览器将id_token转发给rp。而本发明的协议设计是基于身份基的盲签名方案,不需要进行证书或公钥的交换。
[0074]
解盲操作如下:
[0075]
步骤s3.31、计算整数l=(k1k
2-h)modn;
[0076]
步骤s3.32、用户代理收到(u’,r’)后,将u’和r’的数据类型转换为字节串,在g1中生成元素u=[l]u’,r=[l]r’,消息m’的盲签名为(u,r)。
[0077]
签名验证操作如下:
[0078]
用户代理在收到消息m’的盲签名(u,r)后为了检验其正确性,用户代理应该进行以下运算以下步骤:
[0079]
用户代理得到消息m’的盲签名(u,r)后,向rp发送登录请求,随后 rp进入验证签名阶段,根据公开参数计算h=h2(m||w,n),并验证等式e(u, pk dap)=r
·gh
是否成立。如果等式成立,则判定盲签名有效;若不成立,则判定盲签名无效。在之后的用户代理和rp的交互流程中,rp就可以通知浏览器是否登录成功。
[0080]
工具证明协议的安全性
[0081]
采用形式化分析工具scyther对本发明的openid认证协议进行分析,在协议的整体流程当中并不存在受到攻击的情况。
[0082]
本发明利用基于身份基盲签名的openid认证协议不同于公钥签名算法,它是不需要证书的,从而减少了开销,同时所采用的sm9盲签名方法可以很好的达到不可伪造性和盲性的特点,可以很好地避免idp了解到用户登录的rp,起到了保护用户相关的隐私信息的目的,在盲化和签名阶段,采用了yuen推广的 hsm-cl加密方案,可以在签名者不知道真实消息的情况下生成正确的sm9盲签名。
[0083]
以上所述仅为本发明的实施方式而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理的内所作的任何修改、等同替换、改进等,均应包括在本发明的权利要求范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献