一种基于区块链智能合约的线上快速身份认证系统及方法

未命名 07-14 阅读:141 评论:0


1.本发明属于区块链智能合约和fido身份认证系统技术领域,具体是一种基于区块链智能合约的线上快速身份认证系统及方法。


背景技术:

2.目前的认证技术在互联网上存在着许多缺点;用户的身份验证体验也非常分散,例如,用户需要多次对不同的实体进行身份验证,包括本地设备及各种在线服务,如电子邮件、微信、各种支付设备等,容易泄露用户隐私;而密码是目前最常用的认证方法,但存在容易受到攻击、篡改以及被盗用的风险。
3.区块链是一种随着比特币等加密货币而兴起的一种类似于非关系型的去中心化分布式存储数据库,去中心化保证各个厂商开发的强认证技术之间的互操作性,由于区块链的不可篡改性,因此区块链被广泛使用在认证技术中。
4.例如中国专利公布号为cn113704822a的专利公开了一种基于区块链技术的商业秘密保护系统及方法,包括区块链商业秘密的确权系统、访问用户的ca认证系统、商业秘密存储模块以及商业秘密流转过程管控系统。该方案通过权利人对商业秘密数据的确权取证。商业秘密数据一旦发布到区块链上,不可更改,由于hash值的计算原理,即使是商业秘密源数据变动一个字节,也会引起hash值的变化。因此,一旦商业秘密数据上链后,就无法篡改。
5.但是,由于区块链的不可篡改性,信息一但上传服务器,信息均保存到各节点当中,当一个节点被第三方攻破后,信息都会遭到泄露,系统缺乏安全性,信息没有隐私性。


技术实现要素:

6.为了解决上述问题,本发明的目的是提供一种基于区块链智能合约的线上快速身份认证系统及方法,以用于解决用户身份认证的不安全性以及用户身份的匿名性和隐私性,同时解决现有线上快速身份认证的单一性。
7.为了实现上述目的,本发明的技术方案如下:一种基于区块链智能合约的线上快速身份认证系统,包括可信机构构建服务器模块和服务器,服务器包括密钥证书管理中心模块、区块链模块、智能合约模块和fido身份认证模块;
8.可信机构构建服务器模块,用于构建一个去中心化的区块链网络,在智能合约模块中部署合约;
9.服务器,用于承载密钥证书管理中心模块、区块链模块、智能合约模块和fido身份认证模块的运行;
10.密钥证书管理中心模块,用于负责生成公钥和私钥,并通过智能合约模块将公钥和私钥分别发送至区块链模块和fido身份认证模块,其中,私钥被加密保存,公钥公开在服务器中;密钥证书管理中心模块还会对公钥和私钥进行定时更新,每次更新时都会产生新的密钥版本号,密钥版本号会随公钥和私钥发送至区块链模块和fido身份认证模块;
11.区块链模块,用于存储服务器的数据,区块链模块采用梅克尔树状数据结构将服务器的数据进行排列存储,从而构建分布式数据库;
12.智能合约模块,分别与密钥证书管理中心模块、区块链模块和fido身份认证模块相连;智能合约模块包括合约生成模块和合约执行模块,合约生成模块,用于将用户的身份数据信息生成合约存储在区块链模块中,并将合约的连接地址发送至区块链模块和fido身份认证模块;
13.合约执行模块,在fido身份认证模块进行线上验证身份信息时,服务器的各节点会调用区块链模块存储的合约进行验证,各节点执行合约是相互独立的,各节点生成验证结果并将其发送至合约执行模块,合约执行模块基于各节点的验证结果进行对比;合约执行模块接收到验证结果一致时,合约执行模块将验证结果发送至fido身份认证模块,同时将验证结果存入区块链模块中;
14.fido身份认证模块,用于完成线上快速身份认证,当用户登录服务器注册信息时,基于私钥和公钥,fido身份认证模块基于fido协议生成与私钥对应的签名数据a1,fido身份认证模块使用非对称加密算法中椭圆曲线数字签名算法生成对应的公钥,椭圆曲线数字签名算法为ecdsa算法,用户基于私钥对签名数据的摘要进行加密,得到签名值a,并将签名值a保存至fido身份认证模块中;当用户登录服务器验证身份信息时,用户使用私钥对服务器的待签名数据做签名数据a2,服务器使用对应的公钥对签名值a进行解密,得到摘要值a1,fido身份认证模块将签名数据a2采用密钥版本号中约定的算法进行哈希运算和解密得到的摘要值a1进行比较即可验证。
15.一种基于区块链智能合约的线上快速身份认证方法,包括如下步骤:
16.step1、利用可信机构构建区块链网络模块构建一个去中心化的区块链网络;
17.step1.1、在智能合约模块中部署合约,然后将智能合约地址发送至区块链和fido身份认证模块;
18.step2、利用密钥证书管理中心模块生成公钥、私钥和密钥版本号;
19.step2.1、当用户登录服务器注册信息时,密钥证书管理中心模块通过哈希函数算法(sha-256)生成256位长度比特串的私钥;
20.step2.2、使用非对称加密算法中椭圆曲线数字签名算法生成对应的公钥;
21.step2.3、密钥的生成算法;
22.step2.4、公钥经过单向的哈希函数算法生成与用户对应的地址;
23.step2.5、利用密钥证书管理中心模块对公钥和私钥进行定时更新,产生新的密钥版本号,将公私和密钥版本号发送至fido身份认证模块,fido身份认证模块将公钥与用户对应的地址账户相关联;
24.setp2.6、密钥证书管理中心模块将私钥和密钥版本号发送至区块链模块,私钥和密钥版本号经加密后作为隐私数据存储在区块链模块中;
25.step3、将用户关联身份数据信息生成合约存储在区块链模块的分布式数据库中;
26.step3.1、用户首次登录fido身份认证模块注册信息时,用户基于密钥证书管理中心模块生成的私钥,得到签名数据a1,用户基于私钥对签名数据的摘要进行加密,得到签名值a,并将签名值a;保存至fido身份认证模块中;将签名数据a1与用户的身份信息进行关联并发送至智能合约模块;
27.step3.2、智能合约模块将身份信息生成合约后发送至服务器中各节点;
28.step3.3、服务器中各节点使用共识算法pow,身份信息经各节点确认后存储在区块链模块中;
29.step3.4、利用智能合约模块判断用户关联身份数据信息是否加入区块链数据库,是,执行step4,否,返回步骤step3;
30.step4、智能合约模块的合约执行;
31.step4.1、用户进行线上验证身份信息时,各节点调用区块链模块存储的合约进行验证;
32.step4.2、各节点执行智能合约是相互独立的,各节点生成验证结果并将其发送至合约执行模块,合约执行模块基于各节点的验证结果进行对比;
33.step4.3、各节点的验证结果一致时,合约执行模块将验证结果发送至fido身份认证模块,同时将验证结果存入区块链模块中。
34.step5、在步骤step1、步骤step3和步骤step4中执行合约过程中需要燃料费用,每个节点在验证时都会进行相同的计算并储存,在执行合约过程中,每一个命令都会有一个对应的燃料消耗;
35.step5.1、生成以太坊钱包,获取token,用于支付所需要的燃料费用;
36.step6、验证用户的线上身份信息;
37.step6.1、采用协议为u2f的fido协议进行认证,u2f协议采用非对称公钥和私钥;
38.step6.2、fido协议采用椭圆曲线数字签名算法进行签名验证;
39.step6.3、当用户登录服务器验证身份信息时,用户使用私钥对服务器的待签名数据做数字签名,该数字签名为签名数据a2;
40.step6.4、服务器使用对应的公钥对签名值a进行解密,得到摘要值a1,然后使用步骤step2.3的算法对待签名数据进行哈希运算和解密得到的摘要值进行比较验证,该过程为验证签名;
41.step6.5、验证签名通过,服务器调用区块链模块中相关联的身份信息,完成身份验证。
42.step6.6、验证签名没通过,退出系统;
43.step7、完成身份认证。
44.进一步,步骤step2.3的具体步骤如下:
45.step2.3.1、选择两个大素数;m和n;
46.step2.3.2、计算p=m
×
n,其中m,n分别为两个互异的大素数,m,n必然保密,一般要求m,n为安全素数,p的长度大于512bit,有欧拉函数(p)=(m-1)
×
(n-1);
47.step2.3.3、随机选择加密密钥sk,满足sk和(m-1)
×
(n-1)互质;
48.step2.3.4、利用euclid算法计算解密密钥pk,满足sk
×
pk=(modφ(p)),其中p和sk也要互质,pk是公钥,sk是私钥。
49.进一步,步骤step2.4的具体步骤如下:
50.step2.4.1、地址是由公钥经过单向的哈希函数生成,公式可以表示为:
51.a=ripemd160[sha256(k)],
[0052]
其中a为比特币地址,k为公钥,以公钥k输入,计算sha256哈希值,并以此结果计算
ripemd160的哈希值,得到一个长度为160比特、容量为20字节的数字后进行base58check编码即可得到比特币地址。
[0053]
进一步,步骤step5.1的具体步骤如下:
[0054]
step5.1.1、选择在chorme浏览器安装和配置metamask插件,获取数字面具metamask中文版钱包;
[0055]
step5.1.2、打开metamask界面,按照token发行的协议,获取token,完成智能合约的创建以及交易。
[0056]
进一步,步骤step6.2中u2f认证的具体步骤如下:
[0057]
step6.2.1、用户登录系统,系统将数据提交给服务器。
[0058]
step6.2.2、服务器组织认证数据;
[0059]
sign data{domstring version;domstring challenge;domstring app_id;domstring keyhandle;domstring sessionid;},其中key handle为秘钥,
[0060]
将sign data数据发送给服务器;
[0061]
step6.2.3、浏览器收到数据后给u2f设备,u2f设备验证key handle是否存在设备中,key handle和用户是否匹配。
[0062]
step6.2.4、如果验证成功,通过key handle对应的私钥对指定数据做签名,对应密钥对的引用计数器加一,返回值中数据包括引用计数和签名值,并将返回值传送给服务器。
[0063]
step6.2.5、服务器验证引用计数,判断用户的登录设备是否被克隆,验证client data数据合法性,组织签名数据,使用对应的公钥做验签操作,验签成功,服务器将该用户的引用计数更新为最新的引用计数。
[0064]
进一步,步骤step6.4中数字签名的具体步骤如下:sig:=sign(sk,message)//签名过程是把一段消息和私钥作为一个输入,对于消息输出就是签名。
[0065]
进一步,步骤step6.4中验证签名的具体步骤如下:
[0066]
step6.4.1、isvalid:=verify(pk,message,sig)//验证过程是通过把一段消息和签名消息与公钥作为输入,如果返回的结果是真,证明签名属实,执行step6.5;如果返回结果为假,证明签名消息为假,执行step6.6;
[0067]
step6.4.2、有效签名算法如下;
[0068]
verify(pk,message,sign(sk,message))==true。
[0069]
进一步,步骤step2.2、step3.1和step6.2中椭圆曲线数字签名算法(ecdsa)的公式如下:
[0070][0071]
其中,w、u1、u2表示验证参数,z表示待验证信息的哈希值,r、s表示签名参数,n表示椭圆曲线的可倍积阶数,(x,y)表示曲线上的验证点,g表示椭圆曲线上的基点,pk表示公钥。
[0072]
采用上述方案后实现了以下有益效果:1、本发明的一种基于区块链智能合约的线
上快速身份认证系统及方法,采用了区块链去中心化网络,降低了中心服务器的负担,去中心化保证各个厂商开发的强认证技术之间的互操作性。
[0073]
2、本发明的一种基于区块链智能合约的线上快速身份认证系统及方法,用户有各种在线身份,本发明能在这些在线身份中提供隔离,不依赖各方或身份提供者将它们联系在一起,保证用户的隐私性。
[0074]
3、本发明的一种基于区块链智能合约的线上快速身份认证系统及方法,在线认证系统(fido身份认证模块)能改变目前使用密码作为主要验证手段的在线验证方式,减少用户对密码的依赖,为在线身份认证的多样性提供强有力的支撑,解决现有线上快速身份认证的单一性。
附图说明
[0075]
图1为本发明实施例线上快速身份认证系统的示意图。
[0076]
图2为图1的区块链模块的分布式数据库示意图。
具体实施方式
[0077]
下面通过具体实施方式进一步详细说明:
[0078]
实施例基本如附图1所示:一种基于区块链智能合约的线上快速身份认证系统,包括可信机构构建服务器模块和服务器,服务器包括密钥证书管理中心模块、区块链模块、智能合约模块和fido身份认证模块;
[0079]
可信机构构建服务器模块,用于构建一个去中心化的区块链网络,在智能合约模块中部署合约;
[0080]
服务器,用于承载密钥证书管理中心模块、区块链模块、智能合约模块和fido身份认证模块的运行;
[0081]
密钥证书管理中心模块,用于负责生成公钥和私钥,并通过智能合约模块将公钥和私钥分别发送至区块链模块和fido身份认证模块,其中,私钥被加密保存,公钥公开在服务器中;密钥证书管理中心模块还会对公钥和私钥进行定时更新,每次更新时都会产生新的密钥版本号,密钥版本号会随公钥和私钥发送至区块链模块和fido身份认证模块。
[0082]
区块链模块,用于存储服务器的数据,区块链模块采用梅克尔树状数据结构将服务器的数据进行排列存储,从而构建分布式数据库;区块链模块的建立过程(如图2所示),由哈希指针构建的一个链表,把两个基于哈希值的数据结构结合起来:第一个数据结构是区块的哈希链,每一个区块都有一个区块头部,里面有一个哈希指针指向上一个区块。第二个数据结构是一个树状数据结构-梅克尔树,也就是以树状结构把区块内所有交易的哈希值进行排列存储。其具有防篡改特性;如果改变某区块k的数据,区块k+1的哈希值将与整个区块的哈希值不匹配,网络各节点将会检测到区块k中的新数据以及区块k+1中的哈希指针的不一致性,此时网络节点将不会承认区块k,且向全网广播此区块为非法区块,并将之丢弃。区块链用来存储智能合约生成的用户身份数据信息以及密钥证书管理中心生成的密钥对和密钥版本号,同时在终端服务器进行身份验证时提供智能合约调用,完成fido身份认证系统端服务器的验证。
[0083]
智能合约模块,分别与密钥证书管理中心模块、区块链模块和fido身份认证模块
相连;智能合约模块包括合约生成模块和合约执行模块,合约生成模块,用于将用户的身份数据信息生成合约存储在区块链模块中,并将合约的连接地址发送至区块链模块和fido身份认证模块;
[0084]
合约执行模块,在fido身份认证模块进行线上验证身份信息时,服务器的各节点会调用区块链模块存储的合约进行验证,各节点执行合约是相互独立的,各节点生成验证结果并将其发送至合约执行模块,合约执行模块基于各节点的验证结果进行对比;合约执行模块接收到验证结果一致时,合约执行模块将验证结果发送至fido身份认证模块,同时将验证结果存入区块链模块中;
[0085]
fido身份认证模块,用于完成线上快速身份认证,当用户登录服务器注册信息时,基于私钥和公钥,fido身份认证模块基于fido协议生成与私钥对应的签名数据a1,fido身份认证模块使用非对称加密算法中椭圆曲线数字签名算法(ecdsa)生成对应的公钥,用户基于私钥对签名数据的摘要进行加密,得到签名值a,并将签名值a保存至fido身份认证模块中;当用户登录服务器验证身份信息时,用户使用私钥对服务器的待签名数据做签名数据a2,服务器使用对应的公钥对签名值a进行解密,得到摘要值a1,fido身份认证模块将签名数据a2采用密钥版本号中约定的算法进行哈希运算和解密得到的摘要值a1进行比较即可验证。
[0086]
具体实施过程如下:
[0087]
一种基于区块链智能合约的线上快速身份认证方法,包括如下步骤:
[0088]
step1、利用可信机构构建区块链网络模块构建一个去中心化的区块链网络;
[0089]
step1.1、在智能合约模块中部署合约,然后将智能合约地址发送至区块链和fido身份认证模块;
[0090]
step2、利用密钥证书管理中心模块生成公钥、私钥和密钥版本号;
[0091]
生成公钥和私钥的伪代码为:
[0092]
keypairgenerator keypairgen=keypairgenerator.getinstance-(“rsa”);//初始化rsa库
[0093]
keypairgen.initialize(256);//密钥长度为256位
[0094]
keypair keypair=keypairgen.generatekeypair();//生成公私钥对
[0095]
rsapublickeypublickey=(rsapublickey)keypair.getpublic();//取得公钥
[0096]
rsaprivatekey privatekey=(rsaprivatekey)keypair.getprivate();//取得私钥
[0097]
(sk,pk):=generatekeys(keysize)//generatekeys方法把keysize作为输入,来产生一对公钥(pk)和私钥(sk);私钥sk被安全保存,并用来签名一段消息;公钥pk是用来验证签名
[0098]
step2.1、当用户登录服务器注册信息时,密钥证书管理中心模块通过哈希函数算法(sha-256)生成256位长度比特串的私钥;
[0099]
step2.2、使用非对称加密算法中椭圆曲线数字签名算法(ecdsa)生成对应的公钥;
[0100]
其中,ecdsa各种参数信息比特串长度如下:
[0101]
个人私钥:256位,
[0102]
公钥(未压缩):512位,
[0103]
公钥(压缩):257位,
[0104]
待签名信息:256位,
[0105]
签名:512位。
[0106]
step2.3、密钥的生成算法;
[0107]
步骤step2.3的具体步骤如下step2.3.1、选择两个大素数;m和n;
[0108]
step2.3.2、计算p=m
×
n(m,n分别为两个互异的大素数,m,n必然保密,一般要求m,n为安全素数,p的长度大于512bit),有欧拉函数(p)=(m-1)
×
(n-1);
[0109]
step2.3.3、随机选择加密密钥sk,满足sk和(m-1)
×
(n-1)互质;
[0110]
step2.3.4、利用euclid算法计算解密密钥pk,满足sk
×
pk=(modφ(p)),其中p和sk也要互质,pk是公钥,sk是私钥。
[0111]
step2.4、公钥经过单向的哈希函数算法生成与用户对应的地址;
[0112]
步骤step2.4的具体步骤如下:
[0113]
step2.4.1、地址是由公钥经过单向的哈希函数生成,公式可以表示为:
[0114]
a=ripemd160[sha256(k)],
[0115]
其中a为比特币地址,k为公钥,以公钥k输入,计算sha256哈希值,并以此结果计算ripemd160的哈希值,得到一个长度为160比特(20字节)的数字后进行base58check编码即可得到比特币地址。
[0116]
step2.5、利用密钥证书管理中心模块对公钥和私钥进行定时更新,产生新的密钥版本号,将公私和密钥版本号发送至fido身份认证模块,fido身份认证模块将公钥与用户对应的地址账户相关联;
[0117]
setp2.6、密钥证书管理中心模块将私钥和密钥版本号发送至区块链模块,私钥和密钥版本号经加密后作为隐私数据存储在区块链模块中;
[0118]
step3、将用户关联身份数据信息生成合约存储在区块链模块的分布式数据库中;
[0119]
step3.1、用户首次登录fido身份认证模块注册信息时,用户基于密钥证书管理中心模块生成的私钥,得到签名数据a1,用户基于私钥对签名数据的摘要进行加密,得到签名值a,并将签名值a;保存至fido身份认证模块中;将签名数据a1与用户的身份信息进行关联并发送至智能合约模块;
[0120]
step3.2、智能合约模块将身份信息生成合约后发送至服务器中各节点;
[0121]
step3.3、服务器中各节点使用共识算法pow,身份信息经各节点确认后存储在区块链模块中;
[0122]
step3.4、利用智能合约模块判断用户关联身份数据信息是否加入区块链数据库,是,执行step4,否,返回步骤step3;
[0123]
step4、智能合约模块的合约执行;
[0124]
step4.1、用户进行线上验证身份信息时,各节点调用区块链模块存储的合约进行验证;
[0125]
step4.2、各节点执行智能合约是相互独立的,各节点生成验证结果并将其发送至合约执行模块,合约执行模块基于各节点的验证结果进行对比;
[0126]
step4.3、各节点的验证结果一致时,合约执行模块将验证结果发送至fido身份认
证模块,同时将验证结果存入区块链模块中。
[0127]
step5、在步骤step1、步骤step3和步骤step4中执行合约过程中需要燃料费用,每个节点在验证时都会进行相同的计算并储存,在执行合约过程中,每一个命令都会有一个对应的燃料消耗;
[0128]
step5.1、生成以太坊钱包,获取token,用于支付所需要的燃料费用;
[0129]
步骤step5.1的具体步骤如下:
[0130]
step5.1.1、选择在chorme浏览器安装和配置metamask插件,获取数字面具metamask中文版钱包;
[0131]
step5.1.2、打开metamask界面,按照token发行的协议,获取token,完成智能合约的创建以及交易
[0132]
step6、验证用户的线上身份信息;
[0133]
step6.1、采用协议为u2f的fido协议进行认证,u2f协议采用非对称公钥和私钥;
[0134]
step6.2、fido协议采用椭圆曲线数字签名算法(ecdsa)进行签名验证;
[0135]
步骤step6.2中u2f认证的具体步骤如下:
[0136]
step6.2.1、用户登录系统,系统将数据提交给服务器。
[0137]
step6.2.2、服务器组织认证数据;
[0138]
sign data{domstring version;domstring challenge;domstring app_id;domstring keyhandle;domstring sessionid;},其中key handle为秘钥,
[0139]
将sign data数据发送给服务器;
[0140]
step6.2.3、浏览器收到数据后给u2f设备,u2f设备验证key handle是否存在设备中,key handle和用户是否匹配。
[0141]
step6.2.4、如果验证成功,通过key handle对应的私钥对指定数据做签名,对应密钥对的引用计数器加一,返回值中数据包括引用计数和签名值,并将返回值传送给服务器。
[0142]
step6.2.5、服务器验证引用计数,判断用户的登录设备是否被克隆,验证client data数据合法性,组织签名数据,使用对应的公钥做验签操作,验签成功,服务器将该用户的引用计数更新为最新的引用计数。
[0143]
step6.3、当用户登录服务器验证身份信息时,用户使用私钥对服务器的待签名数据做数字签名,该数字签名为签名数据a2;
[0144]
step6.4、服务器使用对应的公钥对签名值a进行解密,得到摘要值a1,然后使用步骤step2.3的算法对待签名数据进行哈希运算和解密得到的摘要值进行比较验证,该过程为验证签名;
[0145]
步骤step6.4中数字签名的具体步骤如下:sig:=sign(sk,message)//签名过程是把一段消息和私钥作为一个输入,对于消息输出就是签名。
[0146]
步骤step6.4中验证签名的具体步骤如下:
[0147]
step6.4.1、isvalid:=verify(pk,message,sig)//验证过程是通过把一段消息和签名消息与公钥作为输入,如果返回的结果是真,证明签名属实,执行step6.5;如果返回结果为假,证明签名消息为假,执行step6.6。
[0148]
step6.4.2、有效签名算法如下;
[0149]
verify(pk,message,sign(sk,message))==true。
[0150]
step6.5、验证签名通过,服务器调用区块链模块中相关联的身份信息,完成身份验证。
[0151]
step6.6、验证签名没通过,退出系统;
[0152]
step7、完成身份认证。
[0153]
其中,步骤step2.2、step3.1和step6.2中椭圆曲线数字签名算法(ecdsa)的公式如下:
[0154][0155]
其中,w、u1、u2表示验证参数,z表示待验证信息的哈希值,r、s表示签名参数,n表示椭圆曲线的可倍积阶数,(x,y)表示曲线上的验证点,g表示椭圆曲线上的基点,pk表示公钥。
[0156]
通过上述过程,1、本发明的一种基于区块链智能合约的线上快速身份认证系统及方法,采用了区块链去中心化网络,降低了中心服务器的负担,去中心化保证各个厂商开发的强认证技术之间的互操作性。
[0157]
2、本发明的一种基于区块链智能合约的线上快速身份认证系统及方法,用户有各种在线身份,本发明能在这些在线身份中提供隔离,不依赖各方或身份提供者将它们联系在一起,保证用户的隐私性。
[0158]
3、本发明的一种基于区块链智能合约的线上快速身份认证系统及方法,在线认证系统(fido身份认证模块)能改变目前使用密码作为主要验证手段的在线验证方式,减少用户对密码的依赖,为在线身份认证的多样性提供强有力的支撑,解决现有线上快速身份认证的单一性。
[0159]
以上所述的仅是本发明的实施例,方案中公知的具体结构和/或特性等常识在此未作过多描述。应当指出,对于本领域的技术人员来说,在不脱离本发明结构的前提下,还可以作出若干变形和改进,这些也应该视为本发明的保护范围,这些都不会影响本发明实施的效果和专利的实用性。本技术要求的保护范围应当以其权利要求的内容为准,说明书中的具体实施方式等记载可以用于解释权利要求的内容。

技术特征:
1.一种基于区块链智能合约的线上快速身份认证系统,其特征在于:包括可信机构构建服务器模块和服务器,服务器包括密钥证书管理中心模块、区块链模块、智能合约模块和fido身份认证模块;可信机构构建服务器模块,用于构建一个去中心化的区块链网络,在智能合约模块中部署合约;服务器,用于承载密钥证书管理中心模块、区块链模块、智能合约模块和fido身份认证模块的运行;密钥证书管理中心模块,用于负责生成公钥和私钥,并通过智能合约模块将公钥和私钥分别发送至区块链模块和fido身份认证模块,其中,私钥被加密保存,公钥公开在服务器中;密钥证书管理中心模块还会对公钥和私钥进行定时更新,每次更新时都会产生新的密钥版本号,密钥版本号会随公钥和私钥发送至区块链模块和fido身份认证模块;区块链模块,用于存储服务器的数据,区块链模块采用梅克尔树状数据结构将服务器的数据进行排列存储,从而构建分布式数据库;智能合约模块,分别与密钥证书管理中心模块、区块链模块和fido身份认证模块相连;智能合约模块包括合约生成模块和合约执行模块,合约生成模块,用于将用户的身份数据信息生成合约存储在区块链模块中,并将合约的连接地址发送至区块链模块和fido身份认证模块;合约执行模块,在fido身份认证模块进行线上验证身份信息时,服务器的各节点会调用区块链模块存储的合约进行验证,各节点执行合约是相互独立的,各节点生成验证结果并将其发送至合约执行模块,合约执行模块基于各节点的验证结果进行对比;合约执行模块接收到验证结果一致时,合约执行模块将验证结果发送至fido身份认证模块,同时将验证结果存入区块链模块中;fido身份认证模块,用于完成线上快速身份认证,当用户登录服务器注册信息时,基于私钥和公钥,fido身份认证模块基于fido协议生成与私钥对应的签名数据a1,fido身份认证模块使用非对称加密算法中椭圆曲线数字签名算法生成对应的公钥,椭圆曲线数字签名算法为ecdsa算法,用户基于私钥对签名数据的摘要进行加密,得到签名值a,并将签名值a保存至fido身份认证模块中;当用户登录服务器验证身份信息时,用户使用私钥对服务器的待签名数据做签名数据a2,服务器使用对应的公钥对签名值a进行解密,得到摘要值a1,fido身份认证模块将签名数据a2采用密钥版本号中约定的算法进行哈希运算和解密得到的摘要值a1进行比较即可验证。2.一种基于区块链智能合约的线上快速身份认证方法,其特征在于:根据权利要求1所述的基于区块链智能合约的线上快速身份认证系统的方法,包括如下步骤:step1、利用可信机构构建区块链网络模块构建一个去中心化的区块链网络;step1.1、在智能合约模块中部署合约,然后将智能合约地址发送至区块链和fido身份认证模块;step2、利用密钥证书管理中心模块生成公钥、私钥和密钥版本号;step2.1、当用户登录服务器注册信息时,密钥证书管理中心模块通过哈希函数算法(sha-256)生成256位长度比特串的私钥;step2.2、使用非对称加密算法中椭圆曲线数字签名算法生成对应的公钥;
step2.3、密钥的生成算法;step2.4、公钥经过单向的哈希函数算法生成与用户对应的地址;step2.5、利用密钥证书管理中心模块对公钥和私钥进行定时更新,产生新的密钥版本号,将公私和密钥版本号发送至fido身份认证模块,fido身份认证模块将公钥与用户对应的地址账户相关联;setp2.6、密钥证书管理中心模块将私钥和密钥版本号发送至区块链模块,私钥和密钥版本号经加密后作为隐私数据存储在区块链模块中;step3、将用户关联身份数据信息生成合约存储在区块链模块的分布式数据库中;step3.1、用户首次登录fido身份认证模块注册信息时,用户基于密钥证书管理中心模块生成的私钥,得到签名数据a1,用户基于私钥对签名数据的摘要进行加密,得到签名值a,并将签名值a;保存至fido身份认证模块中;将签名数据a1与用户的身份信息进行关联并发送至智能合约模块;step3.2、智能合约模块将身份信息生成合约后发送至服务器中各节点;step3.3、服务器中各节点使用共识算法pow,身份信息经各节点确认后存储在区块链模块中;step3.4、利用智能合约模块判断用户关联身份数据信息是否加入区块链数据库,是,执行step4,否,返回步骤step3;step4、智能合约模块的合约执行;step4.1、用户进行线上验证身份信息时,各节点调用区块链模块存储的合约进行验证;step4.2、各节点执行智能合约是相互独立的,各节点生成验证结果并将其发送至合约执行模块,合约执行模块基于各节点的验证结果进行对比;step4.3、各节点的验证结果一致时,合约执行模块将验证结果发送至fido身份认证模块,同时将验证结果存入区块链模块中。step5、在步骤step1、步骤step3和步骤step4中执行合约过程中需要燃料费用,每个节点在验证时都会进行相同的计算并储存,在执行合约过程中,每一个命令都会有一个对应的燃料消耗;step5.1、生成以太坊钱包,获取token,用于支付所需要的燃料费用;step6、验证用户的线上身份信息;step6.1、采用协议为u2f的fido协议进行认证,u2f协议采用非对称公钥和私钥;step6.2、fido协议采用椭圆曲线数字签名算法进行签名验证;step6.3、当用户登录服务器验证身份信息时,用户使用私钥对服务器的待签名数据做数字签名,该数字签名为签名数据a2;step6.4、服务器使用对应的公钥对签名值a进行解密,得到摘要值a1,然后使用步骤step2.3的算法对待签名数据进行哈希运算和解密得到的摘要值进行比较验证,该过程为验证签名;step6.5、验证签名通过,服务器调用区块链模块中相关联的身份信息,完成身份验证。step6.6、验证签名没通过,退出系统;step7、完成身份认证。
3.根据权利要求2所述的基于区块链智能合约的线上快速身份认证方法,其特征在于:步骤step2.3的具体步骤如下:step2.3.1、选择两个大素数;m和n;step2.3.2、计算p=m
×
n,其中m,n分别为两个互异的大素数,m,n必然保密,一般要求m,n为安全素数,p的长度大于512bit,有欧拉函数(p)=(m-1)
×
(n-1);step2.3.3、随机选择加密密钥sk,满足sk和(m-1)
×
(n-1)互质;step2.3.4、利用euclid算法计算解密密钥pk,满足sk
×
pk=(modφ(p)),其中p和sk也要互质,pk是公钥,sk是私钥。4.根据权利要求2所述的基于区块链智能合约的线上快速身份认证方法,其特征在于:步骤step2.4的具体步骤如下:step2.4.1、地址是由公钥经过单向的哈希函数生成,公式可以表示为:a=ripemd160[sha256(k)],其中a为比特币地址,k为公钥,以公钥k输入,计算sha256哈希值,并以此结果计算ripemd160的哈希值,得到一个长度为160比特、容量为20字节的数字后进行base58check编码即可得到比特币地址。5.根据权利要求2所述的基于区块链智能合约的线上快速身份认证方法,其特征在于:步骤step5.1的具体步骤如下:step5.1.1、选择在chorme浏览器安装和配置metamask插件,获取数字面具metamask中文版钱包;step5.1.2、打开metamask界面,按照token发行的协议,获取token,完成智能合约的创建以及交易。6.根据权利要求2所述的基于区块链智能合约的线上快速身份认证方法,其特征在于:步骤step6.2中u2f认证的具体步骤如下:step6.2.1、用户登录系统,系统将数据提交给服务器。step6.2.2、服务器组织认证数据;sign data{domstring version;domstring challenge;domstring app_id;domstring keyhandle;domstring sessionid;},其中key handle为秘钥,将sign data数据发送给服务器;step6.2.3、浏览器收到数据后给u2f设备,u2f设备验证key handle是否存在设备中,key handle和用户是否匹配。step6.2.4、如果验证成功,通过key handle对应的私钥对指定数据做签名,对应密钥对的引用计数器加一,返回值中数据包括引用计数和签名值,并将返回值传送给服务器。step6.2.5、服务器验证引用计数,判断用户的登录设备是否被克隆,验证client data数据合法性,组织签名数据,使用对应的公钥做验签操作,验签成功,服务器将该用户的引用计数更新为最新的引用计数。7.根据权利要求2所述的基于区块链智能合约的线上快速身份认证方法,其特征在于:步骤step6.4中数字签名的具体步骤如下:sig:=sign(sk,message)//签名过程是把一段消息和私钥作为一个输入,对于消息输出就是签名。8.根据权利要求2所述的基于区块链智能合约的线上快速身份认证方法,其特征在于:
步骤step6.4中验证签名的具体步骤如下:step6.4.1、isvalid:=verify(pk,message,sig)//验证过程是通过把一段消息和签名消息与公钥作为输入,如果返回的结果是真,证明签名属实,执行step6.5;如果返回结果为假,证明签名消息为假,执行step6.6;step6.4.2、有效签名算法如下;verify(pk,message,sign(sk,message))==true。9.根据权利要求2所述的基于区块链智能合约的线上快速身份认证方法,其特征在于:步骤step2.2、step3.1和step6.2中椭圆曲线数字签名算法的公式如下:其中,w、u1、u2表示验证参数,z表示待验证信息的哈希值,r、s表示签名参数,n表示椭圆曲线的可倍积阶数,(x,y)表示曲线上的验证点,g表示椭圆曲线上的基点,pk表示公钥。

技术总结
本发明公开了区块链智能合约和FIDO身份认证系统技术领域的一种基于区块链智能合约的线上快速身份认证系统及方法,本发明首先构建一个区块链网络,在区块链网络中部署智能合约,然后将智能合约与区块链模块、FIDO身份认证模块、密钥证书管理中心模块相连。密钥证书管理中心模块通过哈希函数算法生成256位长度的比特串作为私钥,使用非对称加密算法中椭圆曲线数字签名算法生成对应的公钥,公钥经过单向的哈希函数生成地址;验证者用自己的私钥进行数字签名,线上终端服务器用签名者对应的公钥进行解密,从而完成线上快速身份认证。从而完成线上快速身份认证。从而完成线上快速身份认证。


技术研发人员:廖江福 陈佳 何首武 谭鸿健 何美洁 彭纬婷 朱倩倩
受保护的技术使用者:桂林理工大学南宁分校
技术研发日:2023.03.08
技术公布日:2023/7/13
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐