身份认证是一种用户与服务商相互的需求。
用户对服务商的身份认证很好办,比如超文本传输协议和公钥基础设施实现
难就难在服务商对用户的身份认证
本文采用一种基于新的拜占庭容错算法的联盟链为底层,设计一个去中心化的互联网数字身份认证系统。用户只需一次注册数字身份,就可实现系统全体服务器的认证。
很神奇的地方是,即使是用户的数字身份认证公开也不会影响其安全性和隐私性。而且这俩的认证都不会受到第三方认证机构的阻碍。
本文自主设计了用户数字身份标识DID,且灵活运用异步拜占庭容错算法,最终实现了基于联盟链的去中心化用户身份认证系统。
现有对服务器的认证:超文本传输安全协议HTTPS
但是对客户端的设备验证是无法验证用户的身份,国内外主要采用三种方式验证客户端身份:
企业化,联盟式,用户中心化
。
角色:客户端,服务器,数据库
采用账号-口令方式,其中涉及到哈希值,盐值,session值,cookie值
优点:
缺点:
角色:客户端,多个服务网站,一个认证服务器
采用账号-口令方式,其中涉及到哈希值,盐值,session值,cookie值
只要系统内一个网站注册和登录成功,其他网站可用同一套账号-口令实现登录
优点:
缺点:
角色:资源拥有者(用户),第三方应用,认证平台(支付宝,微信),资源服务器(开通权限)。
优点:
缺点:
采用密码学,计算机网络,异步拜占庭容错算法等技术
采用RSA或者ECC易受到粉尘攻击和量子计算的破解,基于格的非对称密钥算法未广泛使用。
针对这个问题,椭圆曲线数字签名算法(ECDSA)与其它密码学方法相结合
DID节点众多,也就会存在恶意节点,所以采取共识算法,在恶意节点的情况下,依然能保证信息的正确判断。
本文主要使用的 SHA-256 哈希函数属于安全散列算法。该算法能计算出一个数字消息所对应到的, 长度固定为 256 比特的字符串(又称消息摘要)。且若输入的消息不同,它们对应到不同字符串的机率会很高。
本文使用的椭圆曲线数字签名算法是一种被广泛应用于数字签名的加密算法,属于椭圆曲线密码学体系,其构造依赖于解决椭圆曲线离散对数问题的困难性。
ECC 的主要优势是在某些情况下与其他方法相比,如 RSA 加密算法,其能够使用更短的密钥提供相当的或更高等级的安全。
量子计算是使用量子叠加
和量子纠缠
的量子力学现象来执行的一种计算方式,量子计算机可以实现这种计算。目前量子计算中成型的算法主要有:Shor 算法和 Grover 算法两种。
HTTPS 提供了对网站服务器的身份认证,并能够保护交换数据的隐私与完整性,协议的主要流程如下:
TLS握手成功,服务器使用会话密钥以及对称加密算法进行后续操作。
PKI 是用于颁发数字证书的一套体系。其具体过程:
举个最简单例子,B将自己的一些信息文件给检察司,检察司核实身份无误后,签个名。后边B跟A通信的时候,B拿出这个数字证书给A,A通过检查发现是真的,A就可以相信B。
数字证书是一种用于证明公钥所有权的电子文档,证书包括公钥信息,所有者身份信息,并且包含了 CA 机构的数字签名以确保证书内容不被篡改。
数字证书分为:服务端证书和客户端证书
客户端证书成本高,开销大,无法证实用户的身份。
主要由数字身份标识DID,区块结构,区块链结构
构成。
校验合法的DID集合 --> 序列化 --> 放入新的区块 --> 新区块添加到区块链尾端 --> 修改前驱指针
四种网络结构:集中式、纯分布式、混合式、结构化网络。
集中式网络:由索引服务器记录了所有节点的 IP 地址,端口号等信息。节点A与节点B通信流程为:节点A首先询问索引服务器,找到节点B所在的位置,再进行连接。
纯分布式网络:没有中心节点,节点之间随机连接,新节点加入网络之后随机与 其它节点建立连接,并且广播来传递信息,广播机制通常使用“泛洪机制”。
混合式网络:以多个超级节点为核心,超级节点之间同步信息。普通节点选择加 入某个超级节点的网络。
结构式网络:将数据节点以某种结构有序的连接起来。用来在分布式环境中准确 的路由,定位数据。可以考虑有向无环图之类的
。
区块链可分为三类:私有链,公有链,联盟链
私有链
代表算法:Paxos,Raft
仅能对系统一半数量以下的故障节 点进行容错,无法对拜占庭节点进行容错。
公有链
代表算法:工作量证明(POW), 股权证明(POS),授权股权证明(DPOS)
可以达成异步网络中的拜占庭共识,但是系统的可用性很低.
联盟链
代表算法:pbft(基于消息传递)
去中心化程度低,系统支持节点数量少,系统可用性随着节点数量增加而降低,能够实现异步拜占庭容错。
CAP定理(布鲁尔定理):一个分布式计算系统中,不可能同时满足一致性, 可用性,分区容错性。
公有链中,去中心化程度高,可以看作是一个CP 分布式应用,即牺牲了可用性换取了一致性和分区容错性。
联盟链中,由于 BFT 类共识算法仅能支持百节点以内数量级的节点达成拜占庭共识,可以看作是一个 CA 类分布式应用,即能够容忍的去中心化程度有限,尽量保证了可用性和一致性。
中本聪比特币白皮书
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
先斩后奏
实用拜占庭容错算法
用户在本方案设计的系统中的代表节点处注册 DID,代表节 点之间使用第四章中提出并实现的 dsBFT 共识算法对 DID 数据进行共识,共识达成 之后将用户的 DID 数据写入区块链。其它服务商从代表节点处同步区块链数据,服 务节点通过在不同代表节点处获取区块的哈希值快速校验区块的合法性,确认区块数 据合法之后,服务节点借助链上的 DID 数据实现对用户数字身份的认证。