可左右滑动选省市

基于联盟链的群智感知场景下分布式假名和匿名认证方法

更新时间:2024-07-01
基于联盟链的群智感知场景下分布式假名和匿名认证方法 专利申请类型:发明专利;
源自:北京高价值专利检索信息库;

专利名称:基于联盟链的群智感知场景下分布式假名和匿名认证方法

专利类型:发明专利

专利申请号:CN202111295611.X

专利申请(专利权)人:北京邮电大学,浪潮云信息技术股份公司
权利人地址:北京市海淀区西土城路10号

专利发明(设计)人:芮兰兰,高志鹏,李保辉,杨杨,方亚东,徐伟,赵志刚

专利摘要:本发明公开了一种基于联盟链的群智感知场景下分布式假名和匿名认证方法,基于区块链超级账本Fabric的分布式假名架构,实现了分布式假名机制,基于区块链的分布式避免了假名过于依赖第三方平台,解决传统认证机构和假名机构的中心化问题。同时,基于智能合约实现了假名生成逻辑,借助生成的假名实现用户匿名参与任务和密钥协商,分离用户身份和感知数据,实现数据加密传输,用户身份匿名认证,解决了数据泄露问题。

主权利要求:
1.基于联盟链的群智感知场景下分布式假名和匿名认证方法,其特征在于,包括以下步骤:S1、用户第一次参与感知任务,注册身份信息到区块链上,同时区块链上合约通过用户ID和用户端生成的用户公钥,为用户生成身份证书;
S2、用户申请假名,平台转发请求到区块链上,区块链基于超级账本Fabric的分布式假名机制处理生成假名;
假名生成流程为:
S201、初始化:用户完成注册流程之后,部署假名合约contract到区块链上;
S202、获取验证随机数:利用时间戳作为种子在平台生成随机数R:用于获取假名;随机数R1:用于提取奖励;
上述生成的随机数,通过用户PKuser进行加密发送给用户,通过用户私钥进行解密,同时随机数通过上传到区块链链上,绑定到之后生成的假名;其中随机数R作为后续用户获取假名时的验证数,如果一致允许用户获取假名;随机数R1作为后续用户提现时的验证,如果该随机数一致允许用户提现,对于随机数R1提现成功后会进行更新;
同时平台会在后端生成一对假名公私钥PKfakeuser和SKfakeuser作为请求参数上传至区块链,用于生成假名,假名公钥数据库备份一份;
contract.createFakeInfo(userid|R|PKfakeuser|R1|SKfakeuser)合约方法根据参数创建上述假名结构的假名,userid用于获取用户公钥PKuser,同时将假名fakeid与用户PKuser关联起来,用于后续认证用户;
S203、获取假名:用户通过私钥SKuser解密该随机数R,通过解密数据调用假名获取方法,获取该假名;
fakeinfouser=contract.getFakeInfo(userid,R)通过用户userid获取fakeid,通过fakeid获取假名;
S3、基于假名的身份认证和密钥协商;
身份认证流程如下:
S301、用户发起提现请求:用户使用之前获取假名时得到的随机数R1以及一个更新随机数R2作为请求参数,并通过用户私钥进行签名,发起请求;
S302、身份验证:根据假名fakeid查询对应的用户真实公钥PKuser,由该公钥参数进行验证,如果验证成功则允许提现,否则返回提现失败,同时当前随机数R1失效,更新随机数为参数R2;
密钥协商过程如下:
S303、对用户身份进行验证:验证参与用户的假名公钥PKfakeuser是否在平台数据库中;
S304、验证通过后会将平台证书crtpublic发给用户;
S305、对平台证书进行验证:借助区块链网络上开放的只读接口验证平台公钥是否在区块链上存在,存在即可验证通过,通过之后会生成一个随机数作为会话密钥key;
S306、用户通过会话密钥key加密一个验证随机数R2,并通过平台公钥crtpublic将加密随机数R2和会话密钥key发给平台;
S307、平台使用自己的私钥crtprivate解密,得到会话密钥key,通过会话密钥key得到加密随机数R2,之后使用用户PKfakeuser将加密随机数R2发给用户,用户解密随机数R2,验证是否相同,相同结束协商过程。
2.根据权利要求1所述的基于联盟链的群智感知场景下分布式假名和匿名认证方法,其特征在于,步骤S1的具体过程为:在本地调用OpenSSL生成自身公私钥,之后注册用户发送请求requestregister到平台,平台对用户手机号、身份id进行验证,验证通过的执行下一步,否则注册失败;对于验证通过的用户将其信息写入数据库中,同时调用合约接口将注册信息requestplatform记录到区块链上;之后会触发合约证书创建方法,执行创建证书流程,根据用户证书结构创建关联用户userid和用户公钥PKuser的证书user_ca,将相关信息写入用户证书。
3.根据权利要求1所述的基于联盟链的群智感知场景下分布式假名和匿名认证方法,其特征在于,步骤S2的假名结构如下:fakeinfouser={fakeid||fakename||PKfakeuser||SKfakeuser}fakeid为用户假名标识id,fakename为用户假名名称,fakeid用于传输数据,PKfakeuser和SKfakeuser分别为假名公私钥,用于传输数据之前密钥协商。 说明书 : 基于联盟链的群智感知场景下分布式假名和匿名认证方法技术领域[0001] 本发明涉及联盟链技术领域,尤其涉及一种基于联盟链的群智感知场景下分布式假名和匿名认证方法。背景技术[0002] 随着移动互联网的快速发展和移动智能设备的发展水平和普及大幅提高,群智感知形成了一种新的数据获取模式。群智感知最早来源于加州大学洛杉矶分校提出的参与式感知,通过利用人和移动设备,群智感知可以实现大量特定数据的搜集和上传,应用场景广泛。国内外高校和研究机构进行了大量研究,如加州伯克利大学(UCB)开发的空气质量检测应用CommonSense、中山大学借助感知数据绘制道路交通地图和利用实时交通信息感知实现电动汽车路径选择和充电导航策略等。[0003] 区块链是一种新型技术,它可以通过共识机制在不可靠网络下实现共识分布式账本。它采用密码学方法实现数据的不可篡改,在信任交互、物品溯源等方面有着广泛的应用。[0004] 虽然群智感知可以快速获取更加多元的感知数据,但是由于认证时需要用户上传包括位置等的隐私数据,存在数据泄露风险,如何解决这一问题成为了众多学者研究的方向。[0005] 为了解现有技术的发展状况,对已有的论文和专利进行了检索、比较和分析,筛选出如下与本发明相关度比较高的技术信息:[0006] 技术方案1:公开号CN108737383A(申请号201810368800.7)提出一种可混淆的匿名认证方法,通过利用系统管理员初始化全局参数,用户进行认证时利用混淆密钥,生成一组认证数据,服务端堆认证数组进行认证;通过混淆密钥的引入,避免了隐私信息的传输,该方法可以有效降低追踪和攻击的概率。[0007] 技术方案2:公开号CN112039872A(申请号202010882623.1)提出一种基于区块链的跨域匿名认证方法和系统,该发明通过利用区块链和智能合约存储通信方的密钥信息,通过智能合约逻辑实现链上用户认证;该发明在认证时考虑了单点故障利用区块链作为认证机构,避免了单点故障攻击和更新不同步以及开销问题大的问题,同时支持用户跨域认证。[0008] 然而,现有的匿名认证方法中,如技术方案1采用的是一个中心化的系统管理员,在遇到单点攻击或者DDOS攻击,并不能很好地处理。技术方案2提出的基于区块链的跨域匿名认证可以很好在避免单点攻击基础上实现用户认证,结合区块链实现匿名高效认证,但是该方法依赖可信密钥中心,一旦可信密钥中心出现问题将导致用户无法注册。因此,需要开发一种在群智感知场景下匿名认证方法,避免传统认证机构和假名机构中心化问题。发明内容[0009] 有鉴于此,本发明提出一种基于联盟链的群智感知场景下分布式假名和匿名认证方法,实现数据加密传输,用户身份匿名认证,同时避免传统认证机构和假名机构的中心化问题。[0010] 为了实现上述目的,本发明提供如下技术方案:[0011] 基于联盟链的群智感知场景下分布式假名和匿名认证方法,[0012] S1、用户第一次参与感知任务,注册身份信息到区块链上,同时区块链上合约通过用户ID和用户端生成的用户公钥,为用户生成身份证书;[0013] S2、用户申请假名,平台转发请求到区块链上,区块链基于超级账本Fabric的分布式假名机制处理生成假名;[0014] S3、基于假名的身份认证和密钥协商。[0015] 进一步地,步骤S1的具体过程为:在本地调用OpenSSL生成自身公私钥,之后注册用户发送请求requestregister到平台,平台对用户手机号、身份id进行验证,验证通过的执行下一步,否则注册失败;对于验证通过的用户将其信息写入数据库中,同时调用合约接口将注册信息requestplatform记录到区块链上;之后会触发合约证书创建方法,执行创建证书流程,根据用户证书结构创建关联用户Userid和用户公钥PKuser的证书user_ca,将相关信息写入用户证书。[0016] 进一步地,步骤S2的假名结构如下:[0017] fakeinfouser={fakeid||fakename||PKfakeuser||SKfakeuser}[0018] fakeid为用户假名标识id,fakename为用户假名名称,fakeid用于传输数据,PKfakeuser和SKfakeuser分别为假名公私钥,用于传输数据之前密钥协商。[0019] 进一步地,步骤S2的假名生成流程为:[0020] S201、初始化:用户完成注册流程之后,部署假名合约contract到区块链上;[0021] S202、获取验证随机数:利用时间戳作为种子在平台生成随机数R:用于获取假名;随机数R1:用于提取奖励;[0022][0023][0024] 上述生成的随机数,通过用户PKuser进行加密发送给用户,通过用户私钥进行解密,同时随机数通过上传到区块链链上,绑定到之后生成的假名;其中随机数R作为后续用户获取假名时的验证数,如果一致允许用户获取假名;随机数R1作为后续用户提现时的验证,如果该随机数一致允许用户提现,对于随机数R1提现成功后会进行更新;[0025] 同时平台会在后端生成一对假名公私钥PKfakeuser和SKfakeuser作为请求参数上传至区块链,用于生成假名,假名公钥数据库备份一份;[0026] contract.createFakeInfo(userid|R|PKfakeuser|R1|SKfakeuser)[0027] 合约方法根据参数创建上述假名结构的假名,userid用于获取用户公钥PKuser,同时将假名fakeid与用户PKuser关联起来,用于后续认证用户;[0028] S203、获取假名:用户通过私钥SKuser解密该随机数R,通过解密数据调用假名获取方法,获取该假名;[0029] fakeinfouser=contract.getFakeInfo(userid,R)[0030] 通过用户userid获取fakeid,通过fakeid获取假名。[0031] 进一步地,步骤S3身份认证流程如下:[0032] S301、用户发起提现请求:用户使用之前获取假名时得到的随机数R1以及一个更新随机数R2作为请求参数,并通过用户私钥进行签名,发起请求;[0033] S302、身份验证:根据假名fakeid查询对应的用户真实公钥PKuser,由该公钥参数进行验证,如果验证成功则允许提现,否则返回提现失败,同时当前随机数R1失效,更新随机数为参数R2。[0034] 进一步地,步骤S3的密钥协商过程如下:[0035] S303、对用户身份进行验证:验证参与用户的假名公钥PKfakeuser是否在平台数据库中;[0036] S304、验证通过后会将平台证书crtpublic发给用户;[0037] S305、对平台证书进行验证:借助区块链网络上开放的只读接口验证平台公钥是否在区块链上存在,存在即可验证通过,通过之后会生成一个随机数作为会话密钥key;[0038] S306、用户通过会话密钥key加密一个验证随机数R2,并通过平台公钥crtpublic将加密随机数R2和会话密钥key发给平台;[0039] S307、平台使用自己的私钥crtprivate解密,得到会话密钥key,通过会话密钥key得到加密随机数R2,之后使用用户PKfakeuser将加密随机数R2发给用户,用户解密随机数R2,验证是否相同,相同结束协商过程。[0040] 与现有技术相比,本发明的有益效果为:[0041] 本发明提出的基于联盟链的群智感知场景下分布式假名和匿名认证方法,基于区块链超级账本Fabric的分布式假名架构,实现了分布式假名机制,基于区块链的分布式避免了假名过于依赖第三方平台,解决传统认证机构和假名机构的中心化问题。同时,基于智能合约实现了假名生成逻辑,借助生成的假名实现用户匿名参与任务和密钥协商,分离用户身份和感知数据,实现数据加密传输,用户身份匿名认证,解决了数据泄露问题。附图说明[0042] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。[0043] 图1为本发明实施例提供的假名生成流程图。[0044] 图2为本发明实施例提供的密钥协商流程图。[0045] 图3为本发明实施例提供的用户证书生成速度图。[0046] 图4为本发明实施例提供的假名生成速度图。[0047] 图5为本发明实施例提供的认证速度图。[0048] 图6为本发明实施例提供的假名和证书生成速度对比图。具体实施方式[0049] 为了更好地理解本技术方案,下面结合附图对本发明的方法做详细的说明。[0050] 本发明提供了一种基于联盟链的群智感知场景下分布式假名和匿名认证方法,[0051] 步骤如下:[0052] 1)用户信息注册和证书生成:[0053] 用户第一次参与感知任务,需要注册身份信息到链上,同时链上合约会通过用户ID和用户端生成的用户公钥,为用户生成身份证书。[0054] 用户注册时会在本地调用OpenSSL生成自身公私钥,之后注册用户发送请求requestregister到平台,平台对用户手机号,身份id进行验证,通过的执行下一步,否则注册失败。requestregister结构如公式(1)所示:[0055] requestregister={userid,gender,age,phone,cardid,PKuser}(1)[0056] 对于验证通过的用户将其信息(公钥不进行保存)写入数据库中,同时调用合约接口将注册信息requestplatform记录到链上。requestplatform如公式(2):[0057][0058] PKplatform代表平台的公钥,用于与链上交互时,进行加密操作。[0059] 之后会触发合约证书创建方法(contractcreateCA),执行创建证书流程。根据用户证书结构创建关联用户userid和用户公钥的PKuser的证书user_ca,相关信息写入用户证书。[0060] 证书userca格式字段如下:[0061] {SerialNumber,Userid,PKuser,Subject,NotBefore,NotAfter,Version}(3)[0062] 证书中Subject格式如下:[0063] {Organization,OrganizationalUnit,CommonName}(4)[0064] 上述中Subject代表X.509的识别名,包括公共属性可以认为是链上证书颁发机构,创建成功后返回信息同时用户注册成功和证书创建成功。[0065] 2)用户申请假名,平台转发请求到链上,由区块链处理生成假名:[0066] 假名主要用于用户链下匿名参与任务,保护用户隐私,数据安全。[0067] 假名结构如下:[0068] fakeinfouser={fakeid,fakename,PKfakeuser,SKfakeuser}(5)[0069] 主要使用假名fakeid,fakename代替用户真实身份标识传输数据,同时假名公私钥PKfakeuser,SKfakeuser用于传输数据之前密钥协商。[0070] 如图1所示,假名生成流程如下(对外开放相应接口,仅可有平台调用合约接口):[0071] (1)初始化:该过程需要启动服务,用户完成注册流程,也即用户已经拥有自己的身份证书user_ca,之后部署假名合约contract到区块链上(主要包括假名方法(contract.createFakeInfo)、获取假名方法(contract.getFakeInfo))。[0072] (2)获取验证随机数:随机数在平台生成(利用时间戳作为种子生成随机数R:用于获取假名;随机数R1:用于提取奖励)。[0073][0074][0075] 上述生成的随机数,会通过用户PKuser进行加密发送给用户,通过用户私钥进行解密,同时随机数会通过上传到区块链链上,绑定到之后生成的假名,其中随机数R作为后续用户获取假名时的验证数,如果和用户持有的R一致允许用户获取假名,随机数R1作为后续用户提现时的验证,该随机数一致允许用户提现,对于随机数R1提现成功后会进行更新。[0076] 同时平台会在后端生成一对假名公私钥(PKfakeuser,SKfakeuser),作为请求参数上传至区块链,用于生成假名,假名公钥数据库备份一份。[0077] contract.createFakeInfo(userid|R|PKfakeuser|R1|SKfakeuser)(8)[0078] 合约方法会根据参数创建上述假名结构的假名,userid用于获取用户公钥PKuser,同时将假名fakeid与用户PKuser关联起来,用于后续认证用户。[0079] (3)获取假名:用户通过私钥SKuser解密该随机数R,通过解密数据调用假名获取方法,获取该假名。[0080] fakeinfouser=contract.getFakeInfo(userid,R)(9)[0081] 通过用户userid获取fakeid,通过fakeid获取假名。[0082] 3)基于假名的身份认证和密钥协商:[0083] 身份认证主要用于奖励提取,虽然用户处于登录状态,可以代表用户身份,但是鉴于如果其它攻击者破解了用户登录密码,可能会提取奖励,故在用户需要进行提取奖励操作时需要提供自身私钥签名的验证随机数R1,进行二次验证。[0084] 身份认证流程如下:[0085] 步骤1:用户发起提现请求:用户使用之前获取假名时得到的随机数R1以及一个更新随机数R2作为请求参数,并通过用户私钥进行签名,发起请求。[0086][0087] 步骤2:身份验证:根据假名fakeid查询对应的用户真实公钥PKuser,由该公钥参数进行验证,如果验证成功则允许提现,否则返回提现失败,公式如下:[0088] 验证:[0089][0090] 如果随机数不匹配,返回提现失败,如果验证成功则允许提现,减少对应金额,同时当前随机数R1失效,更新随机数为参数R2。[0091] 密钥协商是为了解决明文传输信息的问题,密钥协商过程会对双方进行身份验证,如图2所示,密钥协商流程如下:[0092] 步骤1为对用户身份进行验证:由于协商过程不能泄露用户真实身份,故协商密钥也是基于用户假名,由于用户注册信息之后会申请假名,平台数据库会备份一份平台生成的用户假名公钥,因此该过程主要验证参与用户的假名公钥PKfakeuser是否在平台数据库中。[0093] 步骤2验证通过后会将平台证书crtpublic发给用户。[0094] 步骤3对平台证书进行验证:该验证主要是借助区块链网络上开放的只读接口验证平台公钥是否在区块链上存在,存在即可验证通过,通过之后会生成一个随机数作为会话密钥key。[0095] 步骤4用户通过会话密钥key加密一个验证随机数R2并通过平台公钥crtpublic对加密随机数R2和会话密钥key发给平台。[0096] 步骤5平台使用自己的私钥crtprivate解密,得到key,通过key得到R2,之后使用用户PKfakeuser加密R2发给用户,用户解密随机数,验证是否相同,结束协商过程。[0097] 为了评估本发明提出的联盟链的群智感知场景下分布式假名和匿名认证方法的性能,我们使用超级账本搭建仿真环境并实现假名合约进行了仿真分析算法性能。具体地,本发明使用windows10(AMD4800H+16G+工作频率2.9GHZ)+Linux部署hyperledger2.0搭建仿真环境,利用go编写部署相关合约,对用户证书生成速度、假名生成速度、认证延迟速度,tps等进行了仿真实验。验证了所提基于超级账本Fabric的分布式假名机制的可行性和有效性。[0098] (一)仿真实验结果分析[0099] 用户证书生成速度测试,我们由于使用了联盟链作为PKI,考虑到区块链写入和读取需要进行共识,因此证书生成速度主要包括:通过RSA算法生成密钥时间、写入账本的时间和读取出证书的时间(不考虑客户端连接到区块链网络的延迟情况)。图3展示了随着用户增加,证书生成时间和证书平均生成时间的变化情况:随着参与用户增多,生成证书时间逐渐上升,但是生成证书平均时间变化稳定在0.1s左右。[0100] 假名生成速度测试,假名生成也是在链上生成,由用户链下申请,生成对应假名,结果如图4所示,主要延迟为链下假名公私钥时间和链上读写区块时间。[0101] 认证延迟测试结果,认证过程主要包括:对随机数的签名和认证时间、对信息进行hash验证完整性的时间,以及读取通过fakeid查询区块链得到PKfake_user和PKuser,最后通过PKuser对签名的随机数进行验证,并更新随机数的时间,在认证请求频率固定的情况下,仿真结果如下:如图5所示,可以看出随着认证人数增加,认证时间平稳上升,平均认证时间在0.11s左右,也即随着认证人数增加,认证效率具有可用性和稳定性,单位认证响应时间在0.1s级,具有可拓展性。[0102] 证书生成和假名生成时间对比,由于设计的证书结构和假名不同,我们对该结构对生成时间的影响进行了测试,结果如图6所示:可以看出,假名生成的时间要比证书生成时间要长,主要由于生成假名的一个交易比生成证书的交易要大,因此写入区块链时占用时间较长,从结构看时假名包含假名私钥,而我们选取的RSA为2048位,也即是256byte,因此假名明显比证书占空间。[0103] 以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换,但这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

专利地区:北京

专利申请日期:2021-11-03

专利公开日期:2024-06-18

专利公告号:CN113987460B

电话咨询
读内容
搜本页
回顶部