一种基于区块链的身份认证方法及其系统
技术领域
本发明涉及信息安全领域,特别涉及一种基于区块链的身份认证方法及其系统,可以应用在需要进行统一身份认证的应用场景中。
背景技术
随着互联网技术的快速发展,电子身份认证的业务越来越多,为了解决用户在一个地方输入口令,能安全的在多个业务里进行快捷的统一身份认证,成为一种趋势。目前的统一认证都是依赖集中的认证服务器,既可能存在单点故障,也由于集中式的权利控制在某一家服务端手里,让多个不同组织在使用统一认证方法时存在安全隐患。
因此,提供一种安全性好、认证快捷的基于区块链的身份认证方法及其系统,是本发明的创研动机。
发明内容
本发明的目的在于克服现有技术的不足,提供一种安全性好、认证快捷的基于区块链的身份认证方法及其系统。应用区块链的分布式、去中心化的方案可以解决现有的统一认证技术安全性差的问题。
本发明提供的一种基于区块链的身份认证方法,其技术方案为:
一种基于区块链的身份认证方法,包括如下步骤:
区块链智能合约接收服务端发送的身份认证请求,所述身份认证请求包括用户公钥及E(f(x))、E(g(x)),所述E(f(x))和E(g(x))由客户端根据预设同态加密算法E计算获得,其中,f(x)=H1(x),g(x)=H2(x),其中函数H1与H2是两个不同的单向散列函数,且H1与H2的输出位数相同;
所述智能合约根据用户公钥查询用户在区块链上的认证凭证Ea,并根据E(f(x))、E(g(x))、以及同态加密算法E的同态属性进行计算验证,若满足同态属性,则身份认证通过;
所述智能合约将身份认证结果返回所述服务端。
优选地,所述同态加密算法E为加法同态加密算法,所述认证凭证Ea为E(f(x)+g(x));所述智能合约根据E(f(x))、E(g(x))、以及同态加密算法E的同态属性进行验证,包括:所述智能合约根据E(f(x))、E(g(x))计算E(f(x))*E(g(x)),并与所述认证凭证Ea进行比对,比对一致,则身份认证通过。
优选地,所述E(f(x))和E(g(x))由所述服务端采用所述智能合约的公钥进行加密获得密文,并发送到所述智能合约;所述智能合约采用其私钥对所述密文解密获得E(f(x))和E(g(x))明文。
优选地,还包括区块链注册步骤,所述区块链注册步骤包括:
1)、所述智能合约接收客户端发送的注册请求,所述注册请求包括用户公钥及预设密码x,所述预设密码x采用所述智能合约的公钥加密发送所述智能合约;
2)、所述智能合约采用其私钥对接收到的加密的预设密码x进行解密,获得预设密码x明文;
3)、所述智能合约根据预设密码x及所述预设同态加密算法E计算所述认证凭证Ea,并采用智能合约公钥对所述认证凭证Ea进行加密,加密后的认证凭证Ea与用户公钥一并存储在区块链上。
优选地,所述区块链注册步骤还包括步骤4):
4)、所述智能合约为所述用户生成区块链身份标识eid,并与所述用户公钥一并存储于区块链上。
优选地,所述智能合约的公私钥对的生成方法为:所述智能合约的私钥由区块链上的服务端采用预设的密钥协商算法协商得出;所述智能合约的公钥由其私钥根据预设椭圆曲线算法计算得出。
优选地,所述智能合约根据用户请求变更其预设密码x,包括以下步骤:
所述智能合约接收客户端提交的变更密码请求,所述变更密码请求包括原始预设密码x与新密码;
所述智能合约根据原始预设密码x及所述预设的同态加密算法E生成认证凭证,并与区块链上存储的所述用户的认证凭证Ea进行比对,比对一致则验证通过;
所述智能合约根据变更密码请求将原始预设密码x变更为新密码。
本发明还提供了一种基于区块链的身份认证方法,用于服务端,包括如下步骤:
服务端接收客户端发送的服务请求,所述服务请求包括用户公钥及E(f(x))、E(g(x)),所述E(f(x))和E(g(x))由客户端根据预设同态加密算法E计算获得,其中,f(x)=H1(x),g(x)=H2(x),其中函数H1与H2是两个不同的单向散列函数,且H1与H2的输出位数相同;
服务端发送身份认证请求至区块链的智能合约,所述身份认证请求包括所述用户公钥及E(f(x))、E(g(x));
服务端根据所述智能合约返回的身份认证结果响应所述服务请求。
优选地,所述身份认证结果由所述智能合约根据接收到的E(f(x))、E(g(x))及预设的同态加密算法E的同态属性进行计算验证获得;若满足同态属性,则身份认证结果为通过身份认证;若不满足同态属性,则身份认证结果为未通过身份认证。
优选地,所述服务端根据所述智能合约返回的身份认证结果响应客户端请求,包括:
若所述智能合约返回的身份认证结果为通过身份认证,则根据用户公钥在区块链上查找用户的区块链身份标识eid,并根据用户的区块链身份标识eid查询其在所述服务端的服务身份标识uid;根据所述服务身份标识uid响应所述服务请求并反馈客户端;
若所述智能合约返回的身份认证结果为未通过身份认证,则返回客户端错误提示。
优选地,所述用户的区块链身份标识eid与所述用户的服务身份标识uid在所述用户首次向所述服务端请求服务时进行绑定。
本发明还提供了一种基于区块链的身份认证方法,用于服务端,包括如下步骤:
服务端接收客户端发送的服务请求,所述服务请求包括用户公钥及E(f(x))、E(g(x)),所述E(f(x))和E(g(x))由客户端根据预设同态加密算法E计算获得,其中,f(x)=H1(x),g(x)=H2(x),其中函数H1与H2是两个不同的单向散列函数,且H1与H2的输出位数相同;
服务端发送认证凭证获取请求至区块链的智能合约,所述认证凭证获取请求包括所述用户公钥;
服务端接收所述智能合约返回的所述用户的认证凭证Ea,并根据E(f(x))、E(g(x))、以及所述同态加密算法E的同态属性进行计算验证,若满足同态属性,则身份认证通过;
服务端根据身份认证结果响应所述服务请求。
本发明还提供了一种基于区块链的身份认证系统,包括客户端、服务端、区块链,所述区块链采用上述的身份认证方法进行统一身份认证。
本发明的实施包括以下技术效果:
1)、使用本发明的身份认证方法,只在链上公开区块链身份标识eid,用户在各区块链服务端的内部真实服务身份标识uid永不泄露,很好的保障服务端内部账户体系不动,且隐私不易泄露。
2)、身份认证过程的验证和计算过程分别在客户端本地、区块链、各服务端的认证服务器进行,运算更快,权责清晰,减少用户密码泄露的可能。
3)、对用户密码进行无存储的保护,泄露公开认证凭证Ea不会导致用户认证被破解,具有更高的安全性。
4)、客户端本地、区块链、各服务端之间交互极少,计算一次即可验证,兼具安全性的同时,还提高了计算效率,节省用户身份认证的时间。利用同态属性等式,可以构建nizk(non-interactive zero knowledge(非交互的零知识证明)),在不泄露用户身份认证的原始凭据(如用户密码、指纹)的条件下,证明用户拥有其凭据,从而证明其身份。
附图说明
图1为本发明实施例一的基于区块链的身份认证方法流程示意图。
图2为自注册步骤流程示意图。
图3为本发明实施例二的基于区块链的身份认证方法流程示意图。
具体实施方式
下面将结合实施例以及附图对本发明加以详细说明,需要指出的是,所描述的实施例仅旨在便于对本发明的理解,而对其不起任何限定作用。
本发明提供的一种基于区块链的身份认证方法,假定x为需要认证用户的预设密码,该预设密码x不在任何地方直接存储。本实施例利用同态加密算法的同态属性进行身份认证,并基于区块链技术实现统一身份认证。使用任意一种具有同态加密属性的函数,在实现统一身份认证时,利用同态属性等式,可以构建nizk(non-interactive zero knowledge(非交互的零知识证明)),在不泄露用户身份认证的原始凭据(如用户密码、指纹)的条件下,证明用户拥有其凭据,从而证明其身份。
具体方案中,用户在区块链服务端的系统登录或需要请求其它服务时,服务端可选择使用区块链进行统一身份认证,也可以从区块链获取认证凭证后在服务端的认证服务器进行身份认证。
实施例一
参见图1所示,本实施例的技术方案采用区块链进行统一身份认证,其步骤为:
客户端接收用户输入的预设密码x,并根据预设同态加密算法E在本地计算E(f(x))、E(g(x));
客户端发送服务请求至服务端,所述服务请求包括用户公钥和E(f(x))、E(g(x)),以及客户端欲办理的事项;其中,f(x)=H1(x),g(x)=H2(x),其中函数H1与H2是两个不同的单向散列函数,且H1与H2的输出位数相同,输出长度在256bit以上;
所述服务端接收客户端发送的服务请求,并通过区块链进行身份认证,根据区块链返回的身份认证结果响应客户端的服务请求;
具体的,所述服务端发送身份认证请求至区块链的智能合约,所述身份认证请求包括所述用户公钥及E(f(x))、E(g(x));
所述智能合约接收服务端发送的身份认证请求,并根据用户公钥查询到用户在区块链上的认证凭证Ea,然后根据E(f(x))、E(g(x))、以及同态加密算法E的同态属性进行计算验证,若满足同态属性,则身份认证通过;
所述智能合约将身份认证结果返回所述服务端。同态加密算法E的同态属性可使用已经成熟的现有技术,本处不再赘述。
所述服务端均加入了区块链的统一认证联盟,其可以通过区块链进行统一身份认证,因此解决用户在一个地方输入口令,能安全的在多个区块链服务端的业务里进行快捷的统一身份认证,区块链本身的特性,也能抵御重放攻击和暴力破解的威胁,导致攻击成本增大。区块链可以使用已知的区块链(如以太坊或自建区块链),统一身份认证的用户是区块链(优选公链)的合法用户。其有自己的身份公私钥对,确认自身的合法身份。对用户的身份认证,也可以不在公链上进行,优选在公链上进行的优点是公链上的各个节点可以自由加入和退出网络,并参加链上数据的读写,读写时以扁平的拓扑结构互联互通,网络中不存在任何中心化的服务端节点。特别是使用以太坊的智能合约,可以自动的进行验证。以太坊可以理解为利用区块链技术的通用计算机,简单地讲,以太坊=区块链+智能合约。以太坊最大的不同点是:它可以支持更加强大的脚本语言(用技术语言讲就是图灵完备的脚本语言),允许开发者在上面开发任意应用,实现任意智能合约,这也是以太坊的最强大之处。同态加密是基于数学难题的计算复杂性理论的密码学技术,对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。
具体地,服务端根据所述智能合约返回的身份认证结果响应客户端请求,包括:若所述智能合约返回的身份认证结果为通过身份认证,则根据用户公钥在区块链上查找用户的区块链身份标识eid,并根据用户的区块链身份标识eid查询其在所述服务端的服务身份标识uid;根据所述服务身份标识uid响应所述服务请求并反馈客户端;若所述智能合约返回的身份认证结果为未通过身份认证,则返回客户端错误提示。
所述服务端发送身份认证请求时,将E(f(x))、E(g(x))使用所述智能合约的公钥进行加密获得密文,并发送到所述智能合约;所述智能合约采用其私钥对所述密文解密获得E(f(x))和E(g(x))明文。
所述同态加密算法E可以为加法同态加密算法,如SM9算法中E(x)=e(P1,P2)x(其中,P1、P2分别为阶为N的加法循环群G1、G2的生成元),根据同态属性,E(f(x)+g(x))=E(f(x))*E(g(x))。本实施例中,所述认证凭证Ea为E(f(x)+g(x));所述智能合约根据E(f(x))、E(g(x))、以及同态加密算法E的同态属性进行身份验证,包括:所述智能合约根据E(f(x))、E(g(x))计算E(f(x))*E(g(x)),并与所述认证凭证Ea进行比对,验证等式E(f(x)+g(x))=E(f(x))*E(g(x))是否成立,比对一致,则身份验证通过。
本发明提供的基于区块链的身份认证方法,智能合约在区块链(如公链)上构建,智能合约将自动验证认证凭证Ea的同态属性等式是否成立。加入统一认证联盟的区块链服务提供商分别提供自身统一的认证接口,此接口发送身份认证请求到区块链的智能合约进行验证。身份认证过程的验证和计算过程分别在用户本地、区块链、各服务端的认证服务器进行,运算更快,权责清晰,减少用户密码泄露的可能。对用户密码进行无存储的保护,泄露公开认证凭证Ea不会导致用户认证被破解,具有更高的安全性。用户本地、区块链、各服务端之间交互极少,计算一次即可验证,兼具安全性的同时,还提高了计算效率,节省用户身份认证的时间。
各区块链服务端可以有自身的用户身份标志体系,用户身份标志设定为各自的服务身份标识uid,用户首次向所述服务端请求服务时,所述服务端将所述用户的区块链身份标识eid与所述用户的服务身份标识uid进行本地绑定。服务端收到智能合约返回的身份认证通过的结果后,通过查询区块链身份标识eid对应的服务身份标识uid,根据此服务身份标识uid按客户端的服务请求给用户提供服务。区块链身份标识eid在链上公开。使用本发明的身份认证方法,只在链上公开区块链身份标识eid,用户在加入统一认证联盟的各区块链服务端的内部真实服务身份标识uid永不泄露,很好的保障原始服务端内部账户体系不动,且隐私不易泄露。
具体方案中,参见图2所示,本实施例提供的身份认证方法还包括区块链注册步骤,所述区块链注册步骤包括:
1)、智能合约控制用户在区块链(本实施例选择公链)上自行进行注册;所述智能合约接收客户端发送的注册请求,所述注册请求包括用户公钥及预设密码x,所述预设密码x采用所述智能合约的公钥加密发送所述智能合约;
2)、所述智能合约采用其私钥对接收到的所述预设密码x进行解密,获得预设密码x明文;
3)、所述智能合约根据预设密码x及预设同态加密算法E计算所述认证凭证Ea,并采用其公钥对所述认证凭证Ea进行加密,加密后的认证凭证Ea与用户公钥一并存储在区块链上。具体地,本实施例选择加法同态加密算法,认证凭证Ea为E(f(x)+g(x));
4)、所述智能合约为所述用户生成区块链身份标识eid,并与用户公钥一一对应,存储于区块链上。用户和服务端可通过用户公钥获取用户的区块链身份标识eid。
具体地,所述智能合约的公私钥生成方法为:所述智能合约的私钥由区块链上的服务端采用预设的密钥协商算法协商(如ECDH协商算法)得出;所述智能合约的公钥由其私钥根据预设椭圆曲线计算得出。
具体地,服务端采用其私钥及其他服务端公钥经预设密钥协商算法生成协商密钥,作为智能合约的私钥;根据智能合约的私钥采用预设椭圆曲线(如secp256r1)计算获得智能合约的公钥。
智能合约能够完成用户注册和用户身份验证,智能合约程序不只是一个可以自动执行的计算机程序:它自己就是一个系统参与者。它对接收到的信息进行回应,它可以接收和储存价值,也可以向外发送信息和价值。智能合约在区块链技术中已经广泛使用,本处不再赘述。
优选地,智能合约根据用户请求变更其预设密码x,包括以下步骤:所述智能合约接收客户端提交的变更密码请求,所述变更密码请求包括原始预设密码x与新密码;所述智能合约根据原始预设密码x及所述预设的同态加密算法E生成认证凭证,并与区块链上存储的所述用户的认证凭证Ea进行比对,比对一致则验证通过;所述智能合约根据变更密码请求将原始预设密码x变更为新密码。
本发明的认证方法用于对用户的认证凭证Ea进行验证,可以在任何区块链(公链、私链或联盟链)上进行验证,本领域普通技术人员在阅读上述披露的基础上,能够理解并得出在私链或联盟链上进行身份认证的方法,本处不再赘述。
实施例二
本实施例中,参见图3所示,服务端从区块链获取认证凭证后在服务端的认证服务器进行身份认证。
具体的,服务端接收客户端发送的服务请求,所述服务请求包括用户公钥及E(f(x))、E(g(x)),所述E(f(x))和E(g(x))由客户端根据预设同态加密算法E计算获得,其中,f(x)=H1(x),g(x)=H2(x),其中函数H1与H2是两个不同的单向散列函数,且H1与H2的输出位数相同,输出长度在256bit以上;服务端发送认证凭证获取请求至区块链的智能合约,所述认证凭证获取请求包括所述用户公钥;智能合约通过用户公钥查找用户认证凭证并返回服务端;服务端接收所述智能合约返回的所述用户的认证凭证Ea,并根据E(f(x))、E(g(x))、以及所述同态加密算法E的同态属性进行计算验证,若满足同态属性,则身份认证通过;服务端根据身份认证结果响应所述服务请求。
具体地,服务端根据E(f(x))、E(g(x))、以及所述同态加密算法E的同态属性进行计算验证,其方法同实施例一中区块链的智能合约根据E(f(x))、E(g(x))、以及同态加密算法E的同态属性进行计算验证的方法,在此不再赘述。
实施例三
本实施例提供了一种基于区块链的身份认证系统,包括客户端、服务端、区块链,该身份认证系统采用如实施例一的身份认证方法进行统一身份认证。此处不再赘述。
最后应当说明的是,以上实施例仅用以说明本发明的技术方案,而非对本发明保护范围的限制,尽管参照较佳实施例对本发明作了详细地说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的实质和范围。