收藏 分销(赏)

基于智能合约和非同质化代币的去中心化匿名身份认证模型_黄金荣.pdf

上传人:自信****多点 文档编号:370609 上传时间:2023-09-07 格式:PDF 页数:9 大小:1.73MB
下载 相关 举报
基于智能合约和非同质化代币的去中心化匿名身份认证模型_黄金荣.pdf_第1页
第1页 / 共9页
基于智能合约和非同质化代币的去中心化匿名身份认证模型_黄金荣.pdf_第2页
第2页 / 共9页
基于智能合约和非同质化代币的去中心化匿名身份认证模型_黄金荣.pdf_第3页
第3页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第 49卷 第 4期2023年 4月Computer Engineering 计算机工程基于智能合约和非同质化代币的去中心化匿名身份认证模型黄金荣1,2,刘百祥1,2,张亮1,2,张展鹏1,2(1.复旦大学 计算机科学技术学院,上海 200433;2.上海市区块链工程技术研究中心,上海 200433)摘要:在传统的互联网环境下,服务商的用户系统相互独立。为了使用在各种场景下的应用服务,人们需注册大量的账号,面临不可控的信息泄露风险和繁杂的信息更新流程。为解决数字身份之间相互隔离的问题,使用户更好地掌控自己的数字身份,具有去中心化身份(DID)的认证机制被提出,然而现有DID方案给用户带来密钥管

2、理的负担,且这些方案都假设已经存在由一组凭证发行者组成的生态系统,不能与现有的互联网生态兼容。提出一种基于智能合约和非同质化代币的数字身份认证方案,通过阐述数字身份和数字账户的概念,说明两者的区别及其关联,使用分层确定性钱包技术生成并管理用户的数字身份和数字账户的密钥,充分兼容现有互联网服务商的用户系统和认证机制,将数字账户以非同质化代币的形式保存在区块链上,通过零知识的手段隐藏用户账户的真实信息。在此基础上,将单点登录(SSO)中的认证方由可信的第三方替换为区块链上的智能合约,实现类似SSO的“一次认证,处处登录”机制。在以太坊测试链上的实验结果证明,该方案能够有效实现去中心化场景下的SSO

3、功能,且具有良好的可用性、匿名性和安全性。关键词:单点登录;智能合约;去中心化身份;非同质化代币;区块链开放科学(资源服务)标志码(OSID):源代码链接:https:/ J.计算机工程,2023,49(4):14-22.英文引用格式:HUANG J R,LIU B X,ZHANG L,et al.Decentralized anonymous identity authentication model based on smart contracts and non-fungible tokens J.Computer Engineering,2023,49(4):14-22.Decentr

4、alized Anonymous Identity Authentication Model Based on Smart Contracts and Non-Fungible TokensHUANG Jinrong1,2,LIU Baixiang1,2,ZHANG Liang1,2,ZHANG Zhanpeng1,2(1.School of Computer Science,Fudan University,Shanghai 200433,China;2.Shanghai Engineering Research Center of Blockchain,Shanghai 200433,Ch

5、ina)【Abstract】Service providers are separated in a traditional Internet environment.In various scenarios,people have to register a large number of accounts to use application services,which leads to uncontrollable information leakage risks and complicated information update processes.Many Decentrali

6、zed Identity(DID)authentication mechanisms have been proposed to break down the barriers around isolated digital identities to give users greater control over their private data.However,existing approaches burden users with the management of private keys and presume spontaneous availability of a cre

7、dential-issuance ecosystem.This study proposes a decentralized digital identity authentication scheme based on smart contracts and non-fungible tokens.It elaborates on the concepts of digital identities and accounts,and illustrates their differences and associations.Hierarchical deterministic wallet

8、 technology is applied to generate and manage cryptographic key pairs as digital identities and digital accounts which are stored on a blockchain as Non-Fungible Tokens(NFT).Moreover,zero-knowledge proofs are incorporated to protect personal information.Traditional trusted third parties are replaced

9、 with smart contracts on the blockchain to achieve Single Sign-On(SSO)mechanism,which enables authentication once,login everywhere and is compatible with legacy web accounts.The proposed scheme was then tested on a private Ethereum blockchain.The experimental results show that the scheme implements

10、SSO in a decentralized method and satisfies the requirements of availability,anonymity,and security.【Key words】Single Sign-On(SSO);smart contracts;Decentralized Identity(DID);Non-Fungible Token(NFT);blockchainDOI:10.19678/j.issn.1000-3428.0064244基金项目:国家重点研发计划(2019YFB2101703);国家自然科学基金重点项目(U19A2066);上

11、海市科技创新行动计划(20511102200,20222420800);广东省重点领域研发计划(2020B0101090001);复旦大学义乌研究院项目。作者简介:黄金荣(1999),男,硕士研究生,主研方向为区块链应用;刘百祥,博士;张亮,博士研究生;张展鹏,硕士研究生。收稿日期:2022-03-21 修回日期:2022-06-09 Email:热点与综述文章编号:1000-3428(2023)04-0014-09 文献标志码:A 中图分类号:TP309第 49卷 第 4期黄金荣,刘百祥,张亮,等:基于智能合约和非同质化代币的去中心化匿名身份认证模型0概述 面向用户的系统的核心是用户的身份管

12、理1。传统的互联网服务商会要求用户注册一个账户,然后对该账户开放服务权限,服务的对象为账户而非真正使用该服务的人。出于安全考虑,这些平台在注册账号时都会对密码提出要求,如至少有 12个字符长,使用字母、数字、特殊字符等组合,而且建议用户不应该在另一个账户中重复使用密码,既给用户带来了记忆上的负担和繁琐的登录过程,又带来了不容小觑的安全隐患2-3。为此,类似安全断言标记语言(Security Assertion Markup Language,SAML)的这种单点登录(Single Sign-On,SSO)4协议被业界广泛采用,例如华为云、Google Cloud5和 Microsoft Azu

13、re6都对外开放了基于 SAML协 议 SSO 接 口。此 外,还 有 OAuth7、OpenID 和Connect8等SSO授权协议,如有些应用可以用微信或Github账号登录。上述身份模型称为联邦身份9,联邦身份要求存在一个中心化的机构用于身份注册和身份认证,这个机构称为身份提供商(Identity Provider,IdP)。用户只需在IdP认证后便可登录至其他应用,这种单点登录的机制提升了用户的体验,但也带来了一些风险。首先用户的身份数据全权交由IdP管理,因此IdP有能力跟踪用户行为,拒绝访问甚至恶意访问其他服务10。此外,一些大规模的用户数据泄露事故也使得人们对于把个人数据托管在第

14、三方机构的安全性感到担忧11。研究人员通过研究各种方案来减少中央机构对用户数据的所有权12,近年来飞速发展的区块链技术为去中心化身份(Decentralized Identity,DID)提供了一种技术基础。DID 主张用户的存在独立于服务,允许用户在自行创建的 DID 下,通过控制与 DID关联的私钥来收集和管理自己的身份凭证。目前已有 许 多 的 DID 标 准,例 如 Microsoft Azure AD13、WeIdentity14和 Hyperledger Indy15等。然而,上述的 DID 方案中都有亟待解决的问题。首先这些方案大都假设存在一个由凭证发行者组成的生态系统,但都没有

15、说明如何去实现16;其次这些方案大都没有对用户如何进行数字身份管理进行设计。本文提出一种基于智能合约和非同质化代币(Non-Fungible Token,NFT)的数字身份认证方案。该方案不存在中心化的IdP,数字账户(Digital Account,DA)以非同质化代币的形式公开存储在链上,具有NFT 具备的可交易和可销毁等功能,通过运用密码学和零知识的手段,在不泄露用户身份的情况下实现链上的单点登录,其以用户为中心,数字账户由用户注册,用户的声明和身份证明由用户自行生成,可进行修改与可共享。在此基础上,对数字身份和数字账户进行具体定义,使用分层钱包技术帮助用户离线生成并管理数字身份与数字账

16、户。同时,考虑对现有互联网服务的兼容性,尽可能降低 Web 服务在接入本文方案时的修改成本。1相关研究 1.1跨域单点登录跨域单点登录技术相对成熟,已有较多的开源项目和协议,如 SAML4、OAuth7和 OIDC(OpenID Connect)8等。SAML 主要用于实现 Web 浏览器的单点登录,允许用户进行一次身份验证后即可获得其他网站的访问权限。由 IdP 执行身份验证并将用户的身份和授权级别传递给网络服务提供商(Internet Service Provider,ISP),如果 ISP信任该 IdP,便可以将用户请求的资源授权给用户。OAuth是一个关于授权的开放网络标准。目前较新的

17、版本是 OAuth 2.07,核心功能是让第三方应用安全可控地获取用户的授权,与存有用户身份信息的服务商提供商进行交互,标准中定义了 4 种模式,即授权码模式、简化模式、密码模式和客户端模式。其中,授权码模式最常用,也是功能最完整、流程最严密的17的一种模式。OpenID Connect 是 对 OAuth 2.0 的 扩 展,在OAuth 2.0基础上标准化了用户身份的认证,并引入了许多新概念,如用户身份认证中使用的 ID Token。1.2去中心化身份随着近年来区块链技术的飞速发展,身份认证领域的焦点也逐渐向去中心化靠拢。去中心化身份主张每个用户都有权获得并控制自己的数字身份,涉及的身份验

18、证、信息存储等环节都是去中心化的,同时要求具有安全性、隐私性和可信性。关于 DID 体系的确切定义业界还在进行探索,目 前 已 经 出 现 了 许 多 DID 系 统 实 现 的 标 准 和 规范18-19:可验证凭证数据模型 1.0 规范20于 2019 年 11 月作为 W3C 建议发布;去中心化标识符数据模型21处于草案阶段;W3C 凭证社区组、去中心化身份基金会、Hyperledger 项目、Rebooting the Web of Trust 会议22和其他社区正在孵化其他标准和协议。1.3非同质化代币开发者根据ERC72123标准在以太坊上发行的代币称为NFT24,从本质上讲,NF

19、T 代表了数字世界的产权。每个代币都具有唯一性,且不可再分和不可合并。随着元宇宙概念兴起,有关元宇宙中的数字资产和身份认证的讨论日益增多,元宇宙中提倡的开放互操作性与 NFT 相符合,NFT 本身的特性使得它几乎可以用来代表任何数字资产,包括数字身份,基于智能合约的可编程性也为 NFT应对复杂的身份验证或授权场景提供了有力的支持。1.4分层确定性钱包分层确定性钱包技术25是用于存储比特币和以太坊等加密货币的数字密钥的技术,该技术的核心152023年 4月 15日Computer Engineering 计算机工程是密钥派生算法,每个公私钥对都能派生出它的子公私钥对,而在派生算法中除了公私钥本身

20、外,还可以传入其他参数,比如子代的索引,因此一对公私钥可以派生出许多的子公私钥对,派生出来的每个子公私钥对又可继续派生属于自己的下一代。钱包中所有的公私钥对构成了一个树状结构,只需保存位于树状结构根部的主密钥,即可推导出任意路径上的公私钥对。例如路径“M/a/b”,代表着主密钥对 M 的第 a 个子密钥对的第 b 个子密钥对。子密钥对不能推导父密钥对,兄弟密钥对之间也不能互相推导。2本文方案 本文方案中的重要字母缩写及说明如表1所示。2.1系统角色本文提出的方案中含有两类角色,分别是用户和应用服务提供商,两类角色的描述如下:1)用户对应实际生活中的个人,本文方案中需要在安全的环境下使用椭圆曲线

21、算法生成一组公私钥对。2)服务提供商同样需要一组公私钥对,其中,私钥记为 PSK,公钥记为 PPK。本文方案完全保留 ISP已有的账户系统和登录鉴权机制,当满足下列条件时该客户端应被视为登录成功:(1)平台接入本文方案时为用户系统中的每个账户生成的独一无二的标识符 PUID(Provider User Identity)。(2)客户端请求登录某个 ISP 账户,并能够充分证明对该账户的所有权。2.2数字账户数字账户(DA)是连接某个数字身份UPK和某个ISP账户的纽带,以非同质化代币的形式存储在区块链上。在 ERC721 合 约 中 提 供 了 接 口:_safeMint(address to

22、,uint256 tokenId)。该接口用于创建一个代币,它的 ID 为 tokenId,传入的地址 to 将被设置为代币的拥有者。有许多基于ERC721的扩展合约在方案中需要使用 ERC721URIStorage26,该合约在原有的 ERC721基础 上 提 供 了 关 于 tokenURI 的 接 口:_setTokenURI(uint256 tokenId,string _tokenURI)。该接口可以将某个代币的 tokenURI 字段设置为传入的字符串,而tokenURI字段同上述的 tokenId、owner字段一同作为NFT的基本属性在链上存储。DA的基本结构如表 2所示。2.

23、3账户钱包每个 DA 都是一个 ISP 账号的链上映射。为了最大限度地减少用户对这些 DA的管理成本,基于分层确定性钱包技术设计了一套 DA钱包的机制。账户钱包中涉及 3个概念:1)用户/使用者:对应个人。2)数字身份:在虚拟世界(元宇宙)中的身份,一个用户可以在不同的场合拥有不同的数字身份。3)数字账户:对应某个具体网络服务提供商的账户,一个数字身份可以同时使用多个服务,也就拥有了多个数字账户。方案为每个数字身份创建互不相关的公私钥对(Usk,UPK),由该公私钥对派生出的每个子代密钥对(sk,PK)都对应一个 DA。将 DA的 tokenId设置为公钥 PK的哈希,DA的 owner为 P

24、K对应的以太坊地址。由于子密钥对无法推出父密钥对,因此无法通过 DA 得知数字身份 UPK,同代的密钥对之间由于不能互相推导,因此具有良好的成对隐私性,即第三方无法得知哪些 DA是属于同一个人的。至于ISP账户的PUID和数字身份UPK,本文通过计算两者在椭圆曲线上乘积,将所得结果写入 DA的tokenURI字段,关于 tokenURI字段的生成过程将在下文详细论述。确保除了PUID的提供者和拥有者外,任何人都无法从某个DA的tokenURI字段解释出对应的表 1字母缩写及其含义 Table 1Abbreviations and it their meanings缩写ISPPUIDDADAID

25、DAMCIPCUsk,UPKPsk,PPK含义网络服务提供商,例如微信、Mete等ISP对旗下账号生成的唯一标识符,不同于公开的账号,类似于账户条目在后台数据库的主键,不对所有人开放数字账户,本质上是非同质化代币,公开在链上存储。每个 DA都对应一个 PUID,一个 PUID可以对应多个 DADA的 ID,即非同质化代币的 tokenId提供对数字账户的创建、查询操作的智能合约提供了登录数字身份、查询登录凭证接口的智能合约用户数字身份背后的公私钥对(基于椭圆曲线)ISP的公私钥对(基于椭圆曲线)表 2数字账户的基本字段 Table 2Basic fields of digital accoun

26、t字段名tokenIdownertokenURI类型uint256addressstring含义每个代币独一无二的标识拥有者的地址可携带信息的字符串16第 49卷 第 4期黄金荣,刘百祥,张亮,等:基于智能合约和非同质化代币的去中心化匿名身份认证模型PUID或是该 DA是哪个 ISP的账户映射。账户钱包和 DA的关系如图 1所示。2.4智能合约方案涉及了以下 2个智能合约:1)数字账户管理合约(Digital Account Management Contract,DAMC)。该合约继承自ERC721URIStorage,提供以下关于 tokenURI的接口:tokenURI(uint256

27、tokenId)string_setTokenURI(uint256 tokenId,string tokenURI)其中:tokenURI可以直接被外界调用用于读取某个代币的 tokenURI;_setTokenURI只能被 DAMC调用。DAMC本身提供了创建 DA的接口:Create(uint256 tokenId,string _tokenURI)bool2)身 份 认 证 合 约(Identity Provider Contract,IPC)。该合约主要提供 2个接口:Login(uint256 5 proof,string declaration)Query(uint256 key

28、)string,uint256用户可调用Login接口进行链上登录,ISP可以调用Declaration接口获取用户在链上登录时设置的声明。2.5整体流程本文方案整体流程如下:1)使用者可以为自己所拥有的任意平台上的任何账号创建对应的 DA,并将其托管到某个数字身份下。2)使用者链下生成该数字身份的可验证凭证和相关身份声明,声明包含凭证有效期以及其他使用者自定义的字段。3)使用者可以调用智能合约 IPC 的 Login接口,将身份声明和部分凭证提交上链。4)使用者可以使用另一部分凭证登录数字身份下所有 DA 对应的 ISP账户,只要凭证没有过期就可登录成功。图 2所示为与用户相关的软件架构。3

29、方案设计 3.1数字账户的创建使用者通过上述过程可以创建一个去中心化的数字身份DA,该DA将指向某个ISP账户。DA的本质是一个 NFT,在创建过程中需要关注 tokenId、owner和tokenURI 3个字段。DA 的创建过程如图 3所示,主要步骤如下:步骤 1 用户向 ISP发送创建 DA的申请,平台生成一个身份标识串PUID,PUID在ISP内部可以唯一表图 1账户钱包和数字账户的关系Fig.1Relationship between account wallet and digital accounts图 2与用户相关的软件架构Fig.2User-related software

30、architecture172023年 4月 15日Computer Engineering 计算机工程示一个账户,或者与平台内部已有用户系统中的某个账户进行绑定,随后ISP将PUID与自己的公钥PPK返回给用户。步骤 2 用户在账户钱包中选择一个数字身份密钥对(usk,UPK),再使用分层确定性钱包的子节点派生算法生成一个新的子密钥对(sk,PK),最后进行如下计算:1)tokenId=Hash(PK),其中,Hash为常用的哈希算法。2)将PUID和公钥PK作椭圆曲线上的乘法,再将得到的坐标点进行压缩处理,即:str1=comp(PUID*PK)。3)用PPK对PUID进行椭圆曲线上的非对

31、称加密,并 对 结 果 中 的 坐 标 点 进 行 缩 处 理,即:str2=comp(asymEncrypt(PUID,PPK)。4)用usk对PUID进行对称加密,即:str3=symEncrypt(PUID,usk)。5)将str1、str2和str3这3个字符串依次拼接,并用减号“-”分隔,即:tokenURI=-.join(str1,str2,str3)。最后用(sk,PK)发送交易,调用合约 DAMC 的Create接口,将 tokenId和 tokenURI作为参数传入。步骤 3 DAMC的 Create接口核心代码(solidity)如下:function Create(uin

32、t256 tokenId,string memory_tokenURI)public payable returns(string memory)/check if tokenId already exists_safeMint(msg.sender,tokenId);_setTokenURI(tokenId,_tokenURI);return tokenId该接口中调用ERC721的_safeMint创建一个NFT,在设置tokenId的同时,将交易的发起者地址设置为NFT的owner。随后调用ERC721URIStorage的_setTokenURI设置为tokenURI。如果整个过程成功

33、,则将tokenId作为返回值。步骤 4 用户在成功调用 Create后,将 tokenId和对应的 PUID告知 ISP,随后 ISP调用 tokenURI验证用户是否创建了 DA,并将查询到的 tokenURI的第二部分(步骤2的str2)解压解密,判断得到的结果是否与PUID一致,若一致,则 ISP可激活 PUID对应的账户。在整个创建过程中,PUID是用户和ISP之间的秘密,涉及 PUID的通信过程应该在安全的环境下进行,例如HTTPS。公开的操作例如步骤3中调用智能合约时暴露了参数,甚至调用交易的发起者隐藏了用户(UPK)、ISP和 PUID的信息以及三者之间的关系。第三方在一个公开

34、的 DA 上无法得知 DA 背后的用户(UPK),也无法得知 DA指向的 PUID。3.2链上登录链上登录的含义是指某个数字身份的拥有者证明对该数字身份的所有权,同时以该数字身份的名义做出声明。数字身份的拥有者对此次登录的声明以 json格式表达,比如登录的有效期。此外还可包含一些其他用户自定义字段。在本文方案中有效期是必需字段。一段最简单的声明如下:exp:1650844800其中:exp字段说明了此次登录的过期时间。链上登录的过程如图 4所示,主要步骤如下:步骤 1 用户选取数字身份(usk,UPK),创建json 格式的声明,将声明以 Base64URL 格式进行编码得到 D。然后进行如

35、下计算:生成随机数 r,计算:r*G=Rkey=Hash(R,D)s=r+key*uskproof=R,s,UPK,declaration=D本地保存 R 和 key,账户钱包本质上是一个应用软件,具备存储功能。同时,调用 IPC 的 Login接口,并将 proof和 declaration作为参数传入。步骤 2 IPC 中设计了用于存储证明和声明的数据结构,变量定义如下:mapping(uint256string)private declarations;mapping(uint256uint256)private signatures;图 3数字账户创建的时序图Fig.3Sequence

36、 diagram of digital account creation18第 49卷 第 4期黄金荣,刘百祥,张亮,等:基于智能合约和非同质化代币的去中心化匿名身份认证模型IPC中被用户调用的 Login接口核心代码如下:function Login(uint256 5 memory proof,string memory declaration)public payable Get R,s,UPK from proof/verify schnorr signaturerequire(verify(proof);/key=Hash(R)uint256 key=uint256(keccak25

37、6(R)/store declaration and sdeclarations key=declaration;signatures key=s;该接口首先对输入的证明 proof进行验证,本质上是 Schnorr签名算法的验证过程,即验证下列等式是否成立:s*G?=R+Hash(R,D)*UPK在验证成功后,代码继续执行,以 Hash(R,D)为键,以传入的声明字符串 declaration和证明中的 s为值,构 造 出 来 的 键 值 对 分 别 存 入 declarations 和signatures中,便于后续查询。整个链上登录的过程都是公开的,所有人都可以看到某个数字身份 UPK

38、做出的一些声明,但是这些声明并不涉及任何一个具体的 DA,第三方对 DA的攻击将无从下手。此外,声明完全是由用户构建的,用户对自己的数字身份拥有完全的掌控权,掌控权体现在用户可以自己决定登录的有效期,用户可以自己决定声明中携带的其他字段,但需要负担额外存储带来的费用即可。3.3链下登录链下登录是指用户提供对某个 DA 所有权的证明,从而获取该 DA 对应的 ISP 账户的使用权,即在ISP 处对该 ISP 账户完成一次登录,这一过程的核心操作在链下进行。用户以数字身份(usk,UPK)的名义链上登录时保存了 R 和 key,这两个参数在链下登录时需要使用到,链下登录过程如图 5所示。链下登录主

39、要步骤如下:步骤1 用户在账户钱包中获取 DA 的 ID,如果有缓存就读缓存,否则就根据 DA 的公钥 PK 计算DAID=Hash(PK),将 DAID 放入钱包缓存便于下次读取。从用户的角度看到的是一个个数字身份 DA,从区块链的角度来看,DA 的本质是一个个 NFT,所以DAID 就是对应 NFT 的 tokenId。用户在账户钱包中获取该 DA对应的 PUID,如果有缓存就读缓存,理论上最初创建 DA 时账户钱包就应该将 PUID 记录在本地;如果没有缓存,则调用 DAMC 的 tokenURI 接口,将 DAID 作为参数传入,从返回值 tokenURI中解析出第三部分(创建 DA

40、过程中的 str3),再用 usk 对str3 解密即可得到 PUID,将其放入钱包缓存便于下次读取。在通常情况下,DAID 和对应的 PUID 都能直接从钱包本地读取到,之后进行椭圆曲线上的乘法:Rpuid=R*PUID随后在安全的环境下(HTTPS),将 DAID、Rpuid和 key传入 ISP提供的登录接口。步骤 2 ISP 的登录接口首先根据传入的 DAID调用 DAMC 获取 tokenURI。然后将 key 传入 IPC 的Query接口获取链上登录时的部分签名 s和声明 declaration。Query的核心代码(solidity)如下:图 4链上登录时序图Fig.4Sequ

41、ence diagram of on-chain login图 5链下登录时序图Fig.5Sequence diagram of off-chain login192023年 4月 15日Computer Engineering 计算机工程function Query(uint256 key)public view returns (string memory declaration,uint 256 s)declaration=declarations key;s=signatures key;接着对声明解码 Base64URLDecode(declaration)得到json格式,检查其中

42、的exp字段,判断是否过期,若未过期,则继续验证签名。验证签名过程如下:从 tokenURI 中 解 析 出 前 两 部 分:str1 和 str2。str1是压缩后的坐标点,将它解压还原后得到的点记为 PUPK;str2 是经 ISP 公钥 PPK 加密后得到的压缩后的密文,解压解密后便可得到 PUID。计算:R =Rpuid*(1/PUID)验证 1:key?=Hash(R)验证 2:s*G*PUID?=Rpuid+key*PUPK上述验证都通过后,此次链下登录视为成功,ISP将对用户开放 PUID账户的使用权限。例如生成该账户的 token或 sessionId并将其返回给用户,使用者保

43、存该 token或 sessionId即可。验证 2是在以下的标准 Schnorr签名验证算法的基础上构建的,即:s*G?=R+Hash(R)*UPK。在等式的两边同时对 PUID 作乘法:s*G*PUID?=(R+Hash(R)*UPK)*PUID,即可得到验证 2。为了保证 Rpuid到 key的单向性,还需要辅以验证 1,即:key?=Hash(Rpuid*(1/PUID),以此来保证登录者对 PUID 账户及其背后的数字账户和数字身份的所有权。4实验结果与分析 本文对方案的核心部分进行了实现,并对所有涉及以太坊智能合约的部分进行了实验与统计。方案 中 的 智 能 合 约 使 用 Sol

44、idity 语 言 开 发,编 译 器solcde1 版 本 大 于 0.8.10;测 试 环 境 下 的 客 户 端 由 JavaScript 模拟,负责与智能合约交互,调用智能合约函数获取返回值并测量 Gas 消耗;整套实验方案依托于 Truffle框架,版本为 5.5.4,智能合约部署在框架提供的以太坊测试链上,客户端通过框架内的Web3.js与测试链上的合约交互。本文对以下 3个环节进行测试:1)创 建 数 字 身 份 时 用 户 调 用 合 约 DAMC 的Create接口。2)在链上登录时用户调用合约IPC的Login接口。3)在链下登录时 ISP 调用合约 IPC 的 Query

45、 接口和 DAMC的 tokenURI接口。在进行测试之前所需的基本条件均已在离线环境下初始化完毕,例如用户数字身份的公私钥对(usk,UPK)及其子代数字账户的公私钥对(sk,PK)与 ISP的公私钥对(psk,PPK)等。由于任何交易都需要矿工处理,即使调用的智能合约函数不做任何操作,都要消耗 Gas,为此合约中实现了一个空函数 empty:function empty()public pure 实验测得调用空函数的交易费用约为21 340 Gas,所以后续对各个操作测得的费用将满足如下关系:Gas_e=Gas_t21 340其中:Gas_t 为交易的基础费用;Gas_e为合约函数的执行费

46、用。文中记录的消耗均为 Gas_e。4.1Create接口该 接 口 接 收 的 参 数 为 tokenId 和 tokenURI,其中,tokenId=Hash(PK),实验中采用的哈希函数为SHA-256,与 tokenId的 uint256类型契合。在生成 tokenURI的过程中涉及比特币的公钥压缩方法:将公钥写成(x,y)坐标点的形式后只保留x 部分,如果 y 为奇数,则在 x 前方加上 03,否则加上02。因此,压缩后的公钥写成 16 进制字符串长度,一般为 2+64=66。用 ISP 公钥 PPK 对 PUID 进行 ECC 非对称加密得到的密文有 2 个坐标点,压缩得到的 16

47、 进制字符串长度为 266=132。在用类型为uint256的私钥sk对类型为uint256的PUID 进行对称加密时采用 AES-256算法 CFB模式,Block Size设置为8,使得加密得到的密文与原文PUID大小一致,均为256位,写成16进制字符串长度为64。因此,tokenURI的长度一般为 66+132+64=262。实验对 Create接口及其内部的主要操作进行了测试,结果如表 3所示。在 创 建 DA 的 过 程 中 需 要 设 置 NFT 的tokenURI,这一字段需要占用链上的存储空间,为此实验统计了设置不同长度的 tokenURI 消耗的 Gas,结果如图 6 所示

48、。可以看到,除了在长度为 32 时出表 3Create接口测试结果 Table 3Test result of Create port操作Create_safeMint_setTokenURI说明创建 DA新建 NFT,设置 tokenId和 owner设置 NFT的 tokenURI消耗费用/Gas259 02531 001230 52320第 49卷 第 4期黄金荣,刘百祥,张亮,等:基于智能合约和非同质化代币的去中心化匿名身份认证模型现一个跳跃点外,总体上每增加 32个字符会增加大约 23 600的 Gas消耗。4.2Login接口链上登录的核心操作是验证来自客户端的Schnorr签名,

49、验证通过后将相关的签名和声明存储在链上。整个过程既需要运算能力又使用了存储空间,算力主要消耗在验签环节中椭圆曲线上的运算。为了尽量减少这一过程的 Gas消耗,实验选择了 zk-SNARK中的曲线BN128,而不是常见的Secp256K1。图7所示为这两条曲线上基本运算(加法和乘法)的Gas消耗对比。可以看出 BN128消耗更少。实验对 Login 接口及其内部的主要操作进行了测试,结果如表 4所示。链上登录时用户的声明是由用户创建的,可包含一些自定义字段,导致声明的长度不一。实验测试了存储不同长度的声明消耗的 Gas,结果如图 8所示。同样,在长度为 32 时出现一个跳跃点,只是每增加 32个

50、字符会增加 22 000左右的 Gas消耗。4.3Query和 tokenURI在链下登录时,ISP 调用 Query 从 ISP 获取链上登录时存储的声明和部分签名,调用 tokenURI 从DAMC 获取 DA 的 tokenURI。这两个接口均为读取操作,并未涉及以太坊的状态更新。实验测试了查询不同长度的声明和 tokenURI消耗的 Gas,结果如图 9 所示,可以看出读取操作并不会随着被读取字符串长度的变化而变化。5结束语 本文提出一种去中心化的身份认证方案。该方案以以太坊智能合约作为 IdP实现单点登录机制,可以实现身份认证功能,具有良好的匿名性和安全性,并在保护用户隐私的同时给予

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服