本体技术视点 | 风险与安全:基于DID的认证协议探讨

图片

引言

本体技术视点 | 去中心化身份新手指南(上)中,我们讲述了去中心化身份标识符(DID,Decentralized Identifier),这是去中心化身份技术的重要组成部分。我们已知在 DID Document 中可以挂载很多的验证方法(Verification Methods),一种最主要的验证方法就是公私钥对。这些验证方法有不同的用处,比如进行密钥协商、DID 撤销能力授权和 DID 代理能力授权等。很多小伙伴提到可以利用其进行身份认证,今天我们就来聊一聊利用 DID Document 中挂载的公私钥对进行双向认证时遇到的一个问题。

图片

图源网络

认证和授权

认证协议是一个重要的密码学协议。著名的 WebAuthn 就是一个利用公钥密码学机制建立的认证协议。在实际应用中,认证(Authentication)和授权(Authorization)两个概念容易被人混淆,但它们其实是两个完全不同的概念。所谓认证,就是证实某个实体是它所声明的那个实体。而授权,就是决定一个实体能够访问哪些资源。一般来说,提供服务的依赖方会先对用户进行身份认证,再进行授权。

图片

图源网络

在利用公钥密码学机制建立的身份认证协议中,一个较为流行的认证流程就是采用挑战响应的策略。假定通信双方是客户端 Alice 和服务端 Bob。在挑战响应的流程中,服务端发起一个挑战,客户端利用其秘密信息响应该挑战,最后服务端利用客户端的公开信息进行验证。这里的挑战一般是随机数等,而响应的做法就是利用自己私钥对挑战进行签名。认证协议可以分为单向认证和双向认证。顾名思义,单向认证只是一方对另一方进行身份认证,而双向认证时双方都对对方身份进行验证。

简单认证协议

我们看一下下面这个简单的认证协议。假定协议中用到的符号如下:

A:在身份认证协议中是客户端;

B:在身份认证协议中是服务端;

SK(M):使用密钥 K 对消息 M 进行签名;

S2_X,P2_X:X 签名/验证用的私钥和公钥;

Rx,Nx:X 产生的随机数和X任意选择的信息;

IDn:第 n 个数据包的标识符;

一个简要的双向身份认证流程可以简述如下。在这里,我们省略了如何验证通信双方的公钥。这在传统的方法中,可以采用数字证书的方式;而在基于 DID 的方法中,我们可以采用验证 DID Document 等公开信息来进行。这个简单的双向身份认证就是采用的挑战响应机制,其中响应就是对对方提供的随机数进行签名。

1. 客户端向服务器发送数据包标识、随机数及任意一段信息;

2. 服务端返回加一后的数据包标识,客户端发来的随机数及服务器端产生的随机数以及服务端产生的任意信息,同时包含服务器端对客户端发来的随机数及服务器端产生的随机数以及服务端产生的任意信息的签名数据;

3. 客户端验证服务器端返回的随机数,对服务器端返回的签名数据进行验签;

4. 客户端返回加一后的数据包标识、服务端随机数、客户端随机数及任意一段信息,同时包含对服务端随机数、客户端随机数及任意一段信息的签名数据;

5. 服务器端对服务器随机数进行验证,同时对客户端返回的签名数据进行验签。

图片

简单认证协议中的安全风险

只对随机数进行签名的做法,会让协议存在安全漏洞。通信中的一方可以恶意冒充另一方和第三方进行身份认证。这就是中间人攻击。即假定 A、B、C 是系统内的合法用户,一旦当 A 发起和 B 的双向认证时,B 同时可以假冒 A 发起和 C 的双向认证。当A和B通过双向认证时,B 也以 A 的身份通过了和 C 的双向认证。此时,C 认为 B 就是 A。

整个攻击过程如下:

图片

在上面的攻击中,A 和 B 经步骤1,4和5通过了双向认证。B 以 A 的身份和 C 经步骤2,3和6通过了双向认证。这时,C 认为 B 就是 A。

协议修补

那么,该如何防止这种安全威胁呢?这就引出了我们的问题,即签名的时候要把接收者的身份签进去。整个协议如下:

假定协议中用到的符号如下:

1. A->B:{ID1,RA,NA}

2. B->A:{ID2,(RA,RB,Nc),SS2_B(RA,RB,NB,A)}

3. A->B:{ID3,(RB,RB,NA’),SS2_A(RB,RA,NA’,B)}

这样,在上述攻击第5步时,信息就会变成:

5. A->B:{ID3,(RC,RA,NA’),SS2_A(RC,RA,NA’,B)}

第6步中,B 将 SS2_A(RC,RA,NA’,B)转发给 C,C 验证签名时就能发现与之认证的不是 A。

结语

利用 DID 来构建身份认证协议是 Web 3中的重要一环,这可以使得通信的去中心化身份双方能有效地认证通信对方,从而保证通信的安全性,保护用户隐私。在构建认证协议时,我们推荐使用较为成熟的认证流程,注意认证过程中的细节,最大化地保护用户隐私。

如有任何问题,可通过 [email protected] 联络我们。

添加“ontology_2020”并备注【技术】可进行技术探讨或加入社群。

图片

猜你喜欢

转载自blog.csdn.net/ontologycoding/article/details/119611235
今日推荐