一种基于区块链的数字身份认证方案

0 摘要

身份认证是一种用户与服务商相互的需求。

用户对服务商的身份认证很好办,比如超文本传输协议和公钥基础设施实现
难就难在服务商对用户的身份认证

本文采用一种基于新的拜占庭容错算法的联盟链为底层,设计一个去中心化的互联网数字身份认证系统。用户只需一次注册数字身份,就可实现系统全体服务器的认证。

很神奇的地方是,即使是用户的数字身份认证公开也不会影响其安全性和隐私性。而且这俩的认证都不会受到第三方认证机构的阻碍。

本文自主设计了用户数字身份标识DID,且灵活运用异步拜占庭容错算法,最终实现了基于联盟链的去中心化用户身份认证系统。

1 概要介绍

现有对服务器的认证:超文本传输安全协议HTTPS

  • 建立中心化的公钥基础设施PKI,对服务器身份进行认证
  • 混合加密机制,保证数据端到端的安全传输

但是对客户端的设备验证是无法验证用户的身份,国内外主要采用三种方式验证客户端身份:
企业化,联盟式,用户中心化

1.1 企业化

角色:客户端,服务器,数据库
采用账号-口令方式,其中涉及到哈希值,盐值,session值,cookie值

优点:

  • 注册、校验都只需一次 HTTPS 连接下的消息往返
  • 运算量少:注册、校验都只需要一次哈希计算

缺点:

  • 安全问题:服务器有安全风险
  • 整体成本高
  • 通用性问题:服务商之间数据不互通
  • 隐私性问题:不诚实的服务商可以不经过用户的授权
  • 数据冗余问题:服务商保存了用户的身份 认证信息,增加了存储和安全成本
  • 控制问题:用户无法完全控制自己的账号,都是由服务器掌握

1.2 联盟式

角色:客户端,多个服务网站,一个认证服务器
采用账号-口令方式,其中涉及到哈希值,盐值,session值,cookie值

只要系统内一个网站注册和登录成功,其他网站可用同一套账号-口令实现登录

优点:

  • 通用性更强
  • 数据冗余少
  • 易用性更好

缺点:

  • 具有一个中心化的认证节点
  • 隐私问题:认证节点
  • 可用性 问题:存在“单点故障”问题
  • 安全问题:中心节点数据的安全性依赖于节点 安全措施
  • 中心权力滥用问题:认证中心可以随时停止对某些用户的认证服务

1.3 用户中心化

角色:资源拥有者(用户),第三方应用,认证平台(支付宝,微信),资源服务器(开通权限)。

优点:

  • 通用性更好,自主选择注册一个 平台身份来登录多个第三方服务
  • 安全性得到了提高

缺点:

  • 认证中心的可用性
  • 最大问题:中心权力滥用问题
  • 不同的认证服务平台之间数据不互通
  • 不诚实的认证服务商可以不经过用户的授权

1.4 本文创新点

采用密码学,计算机网络,异步拜占庭容错算法等技术

  1. 设计了一种新的数字身份标识 DID 以及一种新的异步拜占庭容错算法 dsBFT
  2. 基于 DID 和 dsBFT,设计联盟式区块链
  3. 以区块链为底层,设计一个去中心化身份认证系统

采用RSA或者ECC易受到粉尘攻击和量子计算的破解,基于格的非对称密钥算法未广泛使用。
针对这个问题,椭圆曲线数字签名算法(ECDSA)与其它密码学方法相结合

DID节点众多,也就会存在恶意节点,所以采取共识算法,在恶意节点的情况下,依然能保证信息的正确判断。

2 方案基础知识介绍

2.1 密码学工具与算法

2.1.1 随机数

随机数生成与密钥生成

2.1.2 哈希函数

本文主要使用的 SHA-256 哈希函数属于安全散列算法。该算法能计算出一个数字消息所对应到的, 长度固定为 256 比特的字符串(又称消息摘要)。且若输入的消息不同,它们对应到不同字符串的机率会很高。

2.1.3 椭圆曲线数字签名算法

本文使用的椭圆曲线数字签名算法是一种被广泛应用于数字签名的加密算法,属于椭圆曲线密码学体系,其构造依赖于解决椭圆曲线离散对数问题的困难性
ECC 的主要优势是在某些情况下与其他方法相比,如 RSA 加密算法,其能够使用更短的密钥提供相当的或更高等级的安全。

2.1.4 量子攻击

量子计算是使用量子叠加量子纠缠的量子力学现象来执行的一种计算方式,量子计算机可以实现这种计算。目前量子计算中成型的算法主要有:Shor 算法和 Grover 算法两种。

  • Shor 的算法可以使基于大素数整数因子分解或离散对数问题的现代非对称密码学崩溃。如果攻击者拥有大型量子计算机,那么他可以使用 Shor 算法解决离散对数问题,从而破解私钥和共享秘密。椭圆曲线相比RSA,会更先遭到量子计算机的破解。
  • Grover 算法是另一种量子算法,能够以很高的概率根据一个确定的输出找到一个 黑盒函数的输入。算法复杂度 O ( N ) O(\sqrt{N}) N N 为定义域大小。

2.2 HTTPS与PKI介绍

2.2.1 HPPTS介绍

HTTPS 提供了对网站服务器的身份认证,并能够保护交换数据的隐私与完整性,协议的主要流程如下:

  1. 服务器向客户端发送由权威 CA 机构签名颁发的数字证书,包含服务器的公钥,服务器名称,CA名称
  2. 客户端用本地验证签名的正确性,确认服务器的公钥是他的,而不是中间人的
  3. 客户端使用服务器的公钥加密本地生成的随机数,并将其发给服务器
  4. 服务器利用客户端随机数生成用于加密和解密的对称密钥

TLS握手成功,服务器使用会话密钥以及对称加密算法进行后续操作。

2.2.2 PKI介绍

PKI 是用于颁发数字证书的一套体系。其具体过程:

  1. 服务器生成公私钥对,并把公钥,自己的相关信息发送给RA
  2. RA审核用户的身份信息,然后由 CA 来为公钥签名,并将该公钥放入数字证书后发布到证书库当中
  3. 服务器将数字证书发送给客户端,客户端通过使用认证机关的公开密钥验证服务器的证书真实性

举个最简单例子,B将自己的一些信息文件给检察司,检察司核实身份无误后,签个名。后边B跟A通信的时候,B拿出这个数字证书给A,A通过检查发现是真的,A就可以相信B。

2.2.3 数字证书介绍

数字证书是一种用于证明公钥所有权的电子文档,证书包括公钥信息,所有者身份信息,并且包含了 CA 机构的数字签名以确保证书内容不被篡改。

数字证书分为:服务端证书和客户端证书
客户端证书成本高,开销大,无法证实用户的身份。

2.3 区块链介绍

2.3.1 数据层

主要由数字身份标识DID,区块结构,区块链结构构成。

校验合法的DID集合 --> 序列化 --> 放入新的区块 --> 新区块添加到区块链尾端 --> 修改前驱指针

形成过程
在这里插入图片描述

  • hash :存储的是由用户本地基于 ECC 生成的公钥的 SHA-256 哈希值,用于隐藏公钥
  • prevId :指向更新前的 DID 位置
  • prevPubKey :指向更新前的 DID 的公钥
  • URL : 存储一个统一资源定位符 URL,指向一个由用户控制的,或者用户信任的,具有访问控制结构的存储设施,用于存放隐私信息
  • nonce:存储工作量证明,即每个 DID 在 生成过程中都需要完成工作量证明
  • signature:用上一个DID的私钥签名

2.3.2 网络层

四种网络结构:集中式、纯分布式、混合式、结构化网络。

集中式网络:由索引服务器记录了所有节点的 IP 地址,端口号等信息。节点A与节点B通信流程为:节点A首先询问索引服务器,找到节点B所在的位置,再进行连接。

纯分布式网络:没有中心节点,节点之间随机连接,新节点加入网络之后随机与 其它节点建立连接,并且广播来传递信息,广播机制通常使用“泛洪机制”。

混合式网络:以多个超级节点为核心,超级节点之间同步信息。普通节点选择加 入某个超级节点的网络。

结构式网络:将数据节点以某种结构有序的连接起来。用来在分布式环境中准确 的路由,定位数据。可以考虑有向无环图之类的

2.3.3 共识层

2.3.3.1 区块链类型

区块链可分为三类:私有链,公有链,联盟链

私有链

代表算法:Paxos,Raft

仅能对系统一半数量以下的故障节 点进行容错,无法对拜占庭节点进行容错。

公有链

代表算法:工作量证明(POW), 股权证明(POS),授权股权证明(DPOS)

可以达成异步网络中的拜占庭共识,但是系统的可用性很低.

联盟链

代表算法:pbft(基于消息传递)

去中心化程度低,系统支持节点数量少,系统可用性随着节点数量增加而降低,能够实现异步拜占庭容错。

2.3.3.2 共识算法引理

CAP定理(布鲁尔定理):一个分布式计算系统中,不可能同时满足一致性, 可用性,分区容错性。

公有链中,去中心化程度高,可以看作是一个CP 分布式应用,即牺牲了可用性换取了一致性和分区容错性。

联盟链中,由于 BFT 类共识算法仅能支持百节点以内数量级的节点达成拜占庭共识,可以看作是一个 CA 类分布式应用,即能够容忍的去中心化程度有限,尽量保证了可用性和一致性。

2.3.4 激励层

中本聪比特币白皮书

3 数字身份标识设计与实现

function DIDAuth(DIDStr)
	DIDStr := getDID (DIDStr) 
	Signature := getSig(DIDStr) 
	DID := Deserialize(DIDStr)
	if blockchain Contains(hash) then 
    	return False 
	else if isValidNonce(SHA-256(DIDStr) then 
    	if signature != null then 
        	//return True 
           	if prevPubKeyHash = SHA-256(prevPubKey) then  
               	if verify(prevPubKey,DIDStr,signature) then 
                   	return True 
               	else 
               		return False 
           	else 
           		return False    
	    else
	        return False 
Function BlockAuth (newBlock)
	if newBlcok.previousHash = latestBlock.hash && newBlcok.index = latestBlock.index +1 && hash = SHA-256(index || previousHash || Serialize(DIDs)) { 
		for i := 1 to 100 {
			if DIDAuth(DIDs[i])  
				continue 
			else 
				return false 
		} 
	} else 
		return false  
	return true

4 共识算法设计与实现

4.2

4.2.1 一阶SCA算法

先斩后奏

4.2.2 二阶pbft算法

实用拜占庭容错算法

5 去中心化身份认证设计与实现

用户在本方案设计的系统中的代表节点处注册 DID,代表节 点之间使用第四章中提出并实现的 dsBFT 共识算法对 DID 数据进行共识,共识达成 之后将用户的 DID 数据写入区块链。其它服务商从代表节点处同步区块链数据,服 务节点通过在不同代表节点处获取区块的哈希值快速校验区块的合法性,确认区块数 据合法之后,服务节点借助链上的 DID 数据实现对用户数字身份的认证。

猜你喜欢

转载自blog.csdn.net/qq_37195179/article/details/104963182