-
Notifications
You must be signed in to change notification settings - Fork 30
uPort白皮书
Christian Lundkvist博士,Rouven Heck,Joel Torstensson,Zac Mitton,迈克尔塞纳 原文
目前的身份系统状态存在许多问题。数字身份在各种服务提供商之间是去中心的、孤立的,阻碍了整体观点,并且提供糟糕的用户体验,需要重复注册并使用用户名和密码登录。这会导致不安全的系统,人们在他们的许多站点上使用相同的密码。像Google和Facebook这样的身份提供商的集中式服务器是蜜罐数据,因此它们对于黑客试图破解在经济上是有价值的。即将依赖数十亿台物联网设备使得所有这些设备都由集中式身份提供商控制,因此此提供商(的管理或技术)漏洞不仅会对数字而且对物理基础设施造成灾难性后果。
公钥/私钥密码术和区块链等去中心技术为上述问题提供了有前途的解决方案。这些技术将身份的所有权从集中式服务推向边缘 - 即个人 - 从而身份本身得到控制。这通常被称为自主身份。这种方法将数据和计算去中心,并将它们推向边缘,因为这对黑客来说在经济上不太有价值,因为它需要大量的努力来逐一攻击许多个人身份。
然而,向最终用户引入新技术是困难的。像PGP这样的公钥加密工具已经存在了25年,但由于它们不直观和复杂的用户体验,以及用户名和密码对大多数人来说运作良好的事实,它们在数字身份系统中的使用几乎没有用处。区块链技术很有趣,因为它们需要使用加密密钥为区块链的每次交互签署消息。因此像比特币这样的加密货币和像以太坊这样的一般区块链架构的兴起,引发了新的兴趣,使得公钥加密技术可以用于普通用户和用户,以便他们与这些系统进行交互。
与基于区块链的系统的交互需要可用的公钥密码系统,到目前为止,密钥管理解决方案(通常称为“钱包”)很难用于非技术用户。有趣的是,区块链本身可以通过充当去中心公钥基础设施(PKI)来帮助使公钥密码更加可用和安全。区块链可以被看作是一个去中心的认证机构(CA),可以维护身份到公钥的映射。智能合约还可以添加复杂的逻辑,有助于密钥的撤销和恢复,从而减轻最终用户的密钥管理负担。
Uport建立在以太坊之上,是一个安全、易用的自主身份识别系统。uPort技术由三个主要组件组成:智能合约、开发人员库和移动应用程序。
移动应用程序保存用户的密钥。以太坊智能合约构成了身份识别的核心,并且包含了让用户在移动设备丢失时恢复其身份的逻辑。最后,开发人员库用于第三方应用程序开发人员将uPort支持集成到他们的应用程序中。
uPort身份可以采取多种形式:个人、设备、实体或机构。Uport的身份是自主性的,这意味着它们由创建者完全拥有和控制,并且不依赖于集中的第三方进行创建或验证。uPort身份的核心功能是它可以签署和验证声明、操作或交易 - 涵盖了广泛的用例。
身份可以加密链接到链外数据存储。每个身份都能够存储属性化数据blob的哈希,无论是在IPFS、Azure、AWS、Dropbox,等等,这是所有与该身份相关的数据安全存储的地方。身份可以自己更新此文件,例如添加个人资料照片或朋友,或者他们还可以授予其他人临时权限以读取或写入特定文件。
由于他们可以与区块链交互,因此uPort身份也可以控制数字化资产,如加密货币或其他通证化资产。
一个自主身份系统会有许多使用案例,这里列举了其中的一些使用案例:
uPort允许最终用户:拥有和控制他们的个人身份、声誉、数据和数字资产;;安全和有选择地向交易对手披露其数据; 不使用密码访问数字服务;签署声明、交易和文件; 控制和发送区块链上的价值;与去中心应用程序和智能合约交互;和加密消息和数据。
uPort允许企业:建立企业身份; 轻松地接纳新客户和员工;建立一个改进和传递的客户洞察流程; 为员工建立安全的访问控制环境,减少摩擦; 通过不保留敏感的客户信息来减少责任;增加合规性; 维护供应商网络; 用特定权限建立具有特定角色的、行为者不可知的身份(即CTO)。
以太坊是一个具有关联的状态数据库、能够存储程序及其状态的区块链架构。这些程序通常被称为智能合约。任何一个以太坊用户都可以部署智能合约,并且它具有基于函数的界面。一旦部署,智能合约可以通过其地址来引用,该地址是一个加密标识符。用户可以通过发送一个以此地址为目的地的交易来调用智能合约函数,交易中带上包含函数签名的数据载荷和输入参数。调用函数会导致网络的矿工以最小信任度的方式执行程序并更新其状态。智能合约可以保存和发送原生代币(以太币),还可以调用其他智能合约的函数。有关以太坊和智能合约的进一步阅读,请参阅以太坊白皮书。
uPort身份的核心是uPort标识符,一个20字节的十六进制字符串,充当全局唯一的持久化标识符。这个标识符被定义为以太坊智能合约的地址,称为代理合约。代理合约可以中继交易,并且通过这种机制,身份与以太坊区块链上的其他智能合约进行交互。
当用户想要与某个特定的应用程序智能合约进行交互时,他们通过包含主要访问控制逻辑的控制器合约利用代理合约发送交易。代理合约然后将此交易转发给应用程序智能合约。该体系结构允许应用程序将代理合约地址视为交互实体。代理合约因此在用户的私钥(存储在他们的移动设备上)与应用程序智能合约之间引入了间接层。
将代理合约作为核心标识符的目的是允许用户在维护持久化标识符的同时替换其私钥。如果用户的uPort标识符是与其私钥相对应的公钥,那么如果他们失去保存私钥的设备,他们将失去对其标识符的控制权。
在设备丢失的情况下,控制器合约维护一个恢复委托列表,可以帮助uPort用户恢复其身份。这些委托可以是个人,比如选定的朋友和家庭成员,也可以是银行和信用合作社等机构。要让用户恢复其身份并将其连接到新设备需要仲裁委托。
我们也可以将uPort用于非区块链身份相关用例。这是通过使用注册合约将外部数据结构与uPort标识符进行加密绑定来实现的。注册合约包含从uPort标识符到IPFS哈希的映射。IPFS是用于存储、链接和传输数据的去中心系统。哈希保证数据结构的完整性,并且对标识符的加密绑定由智能合约访问控制定义:只有uPort代理被授权更新注册合约。
对应于IPFS哈希的数据结构可以包含配置文件信息,如名称、头像等。它还可以包含诸如公钥之类的数据,以支持去中心的公钥基础设施。所使用的数据结构是JSON模式的集合。每个JSON模式都可以使用私钥进行数字签名以创建JSON Web令牌。这个令牌然后可以被用作链外证明。
证明是一个非常普遍的结构。它可以用作证明某个身份对另一身份的声明。它也可以是自签名证书,指出公钥属于特定身份。此外,证明可以用来提供双向链接到像Twitter这样的服务,允许用户利用他们现有的社交网络。
在本节中,我们将更详细地介绍uPort系统的主要组件。
智能合约组件
-
代理合约是一种最小的合约,用于转发交易,其地址是uPort身份的核心标识。
-
控制器合约维护对代理合约的访问控制,并允许附加功能。
-
恢复仲裁合约有助于在发生密钥丢失时恢复身份。
-
注册合约维护uPort标识符和与其关联的链外数据属性之间的加密绑定。
数据组件
- 证明或凭证是包含配置文件属性和/或可验证的声明的已签名数据记录,存储在链外。
开发人员组件
- 开发人员库允许将uPort简单集成到去中心式应用程序或现有数字服务中。
移动组件
- 移动应用程序将身份的私钥存储在智能手机的安全区域中,该私钥用于控制身份和签署证明。
服务器组件
-
Chasqui - 消息服务器
-
Sensui - gas加注服务器
-
Infura RPC
-
Infura IPFS
uPort系统的很大一部分基于以太坊EVM中的概念,即合约地址和公钥哈希既可以是发送到智能合约的消息的来源,也可以是目标智能合约,在这两种情况下没有区别。这使得与以太坊的任何交互都可以通过代理合约转发,代理合约位于最初签署的交易和其预期目标之间。这种方案的主要优点之一是可以添加诸如密钥恢复或花费限制等功能,这些功能不可能使用简单的私钥/公钥对。另一个好处是,代理地址可以保持不变,因为密钥被恢复或更新,从而允许用户维护随着时间推移而获得声誉的不可变标识符,作为真实性和行为的第三方证明。
代理是标准化的,有两个主要功能。代理合约的拥有者可以:
-
转发以太坊交易给一个外部地址
-
替换为另一个拥有者
代理合约的Solidity代码非常简单,这里提供一个参考:
contract Owned {
address public owner;
modifier onlyOwner(){ if (isOwner(msg.sender)) _ }
modifier ifOwner(address sender) { if(isOwner(sender)) _ }
function Owned(){
owner = msg.sender;
}
function isOwner(address addr) public returns(bool) { return addr == owner;
}
function transfer(address _owner) onlyOwner {
owner = _owner;
}
}
contract Proxy is Owned {
event Forwarded (address indexed destination,uint value,bytes data);
function forward(address destination, uint value, bytes data) onlyOwner {
if (!destination.call.value(value)(data)) {throw;}
Forwarded(destination, value, data);
}
}
随着uPort软件的成熟,我们希望用户能够更新自己的智能合约逻辑,而不必更改其核心uPort标识符,该标识符与信誉、资产和历史记录相关联。考虑到这一目标,代理合约设计得非常简单。另一份合约即控制器合约旨在充当代理合约的正式拥有者。控制器合约维护核心访问控制功能,允许用户使用他们的私钥对代理合约进行身份认证,并代表他们采取行动。随着更好的控制器最终被开发出来,用户将能够用新的控制器替换他们的控制器,而不影响与其身份相关联的服务。
控制器合约的第一个版本是RecoverableController.sol。该合约有两个与其关联的主要地址:用户地址和恢复地址。用户地址对应于用户的私人设备密钥,并且是与合约交互的标准方式。恢复地址用于帮助用户在失去密钥时恢复控制权。我们使用单独的合约来表示恢复地址;请参阅下面的恢复仲裁部分。
具体来说,定义了以下交互:
-
用户地址可以转发交易到代理合约
-
用户地址可以将代理合约的控制权交给新的控制器合约(时间锁定)
-
用户地址可以用新的用户地址替换自己(时间锁定)
-
恢复地址可以用新地址替换用户地址。
相互作用2和3是“时间锁定”,这意味着他们需要一定的时间才能生效。这种额外的安全措施为用户提供了额外的时间,以便在他们的密钥被盗并且受到恶意实体的攻击时使用恢复地址恢复其账户。
在以上对恢复仲裁合约RecoverableController.sol的描述中,恢复地址有能力将控制器的主要用户地址换出。目前我们把这个访问权限控制赋予一个叫RecoveryQuorum.sol的合约。这是由用户的朋友或其他可信实体(称为恢复委托人)控制的多签名合约。恢复委托人可以为控制器 Contract指定一个新的用户地址。此功能为uPort用户提供了在丢失设备时恢复其身份的方法。在用户获得新设备并将新生成的设备密钥传送给其恢复委托人后,恢复委托人可以用相应的用户地址替换该新的设备密钥。
恢复仲裁合约提供以下交互:
-
恢复委托人可以签署投票来更改用户地址 - 在超过一半的恢复委托人投票支持该更改后,恢复仲裁将生效。
-
用户地址可以添加/删除恢复委托人(timelocked)
交互2意味着攻击者损害用户的设备密钥可以用她自己的代替恢复委托人并完全控制身份。然而,由于交互是时间锁定的,现有恢复委托人有一个宽限期,可以替换用户密钥以及阻止恢复委托人的添加和删除,这将有效地阻止攻击。
注册合约维护uPort身份和链外数据结构(IPFS等)之间的加密绑定。
这个智能合约是访问与uPort身份关联的属性的主要入口点。
uPort注册合约充当逻辑中心化但物理上去中心的注册表或查找表,将每个uPort标识符映射到IPFS哈希,该哈希链接一个到包含用户属性、配置文件数据和证明的结构(有关证明的更多信息,请参阅下文)。
IPFS是一个去中心的对象存储和检索系统。哈希保证了数据的完整性,同时也允许从IPFS对等端获取数据。我们也可以使用Dropbox、Microsoft OneDrive等更传统的服务,而不是将数据存储在IPFS中。
通过内置在以太坊区块链中的加密访问控制,我们可以保证只有uPort身份的拥有者(即设备的持有者键)有权修改相应的注册条目。
uPort注册表将配置文件数据或属性以加密方式链接到uPort标识符。这些数据可以作为普通的JSON结构存在,也可以作为签名的JSON Web令牌存在,我们称之为证明或凭证。
{
“header” : {
"alg": "RS256",
"typ": "JWT"
}
“payload” : {
iss: <uPortId of issuer>,
sub: <uPortId of subject>,
iat: 1479850830,
exp: 1511305200,
claim: {
“name” : “Christian Lundkvist”
}
}
“Signature” : {
<JWT signature data>
}
}
签署用户属性允许其他身份验证和证明身份配置文件数据的有效性。这可能对KYC很有用,银行可以证实个人资料数据或其客户其他属性的有效性。然后银行客户可以使用该证明作为便携式的KYC令牌来访问其他金融服务。
属性/证明的其他示例可以是公共密钥证书,允许uPort身份充当自己的自主CA(证书颁发机构),为应用程序、设备或服务提供密钥并在必要时撤销它们。
另一个重要的例子是链接配置文件( linked profiles)的概念。这个术语是指使用现有的社交媒体服务来引导您的身份。例如,
{
"@type": "Account",
"service": "twitter",
"identifier": "ChrisLundkvist",
"proofType": "http",
"proofUrl":
"https://twitter.com/ChrisLundkvist/status/720015561703493632"
}
上述属性包含一个Twitter标识符ChrisLundkvist。使用uPort签名密钥对属性签名创建了一个声明,即uPort身份使用句柄ChrisLundkvist控制Twitter账户。该属性还包含一个proofUrl,它链接到一个Twitter帖子,声明这个Twitter用户也控制着这个特定的uPort身份。因此,此证明会创建一个双向链接,将uPort身份与Twitter个人资料相关联。
我们为开发人员提供了一个JavaScript库,uport-connect,使他们能够轻松地将对uPort的支持集成到他们的应用程序中。这个库允许开发人员使用标准的web3提供者集成uport登录事件和交易签名。未来的增强将提供方法,使用您的uPort登录到传统Web服务以及签署文档和其他数据。
最新的开发者库可以在这里找到:
https://github.com/uport-project/uport-connect
移动应用程序是最终用户与其uPort进行交互的方式,也是管理用户私钥的主要手段。主要思想是将用户的密钥保存在其设备的安全区域中,并在密钥用于签名时通过本地生物识别身份认证进行访问。密钥仍保留在设备上,并且没有办法将私钥导出设备。
用户体验是移动应用交互模型的主要设计目标之一。在与以太坊的去中心式应用程序进行交互时,主要有两个操作:
- “连接”:提供uPort标识符(或通常以太坊地址)给dapp
- “核实/验证/授权”交互:一个交互:使用私钥签名交易
是在流行的应用程序(如WhatsApp和WeChat)中找到的设计模式之后建模的。这些应用程序的桌面版本显示QR代码,并且使用该应用程序的移动版本扫描此QR代码会使用户登录。uPort移动应用程序将使用这个用户流程作为dapp中的“连接”流程。
当用户需要确认与区块链的交互(即签署交易)时,会显示另一个QR码。用户扫描此代码并通过确认屏幕显示,他们可以使用他们的指纹确认交互。这与瑞典用于与银行互动并验证交易的BankID系统类似。如果在移动浏览器中运行dapp,交互模型会稍有不同。不再显示QR码,dapp将会要求启动uPort应用程序。然后,用户将被重定向到uPort应用程序,他们可以授权发布其标识符或签署交易。一旦采取行动,用户将被带回移动浏览器继续与dapp互动。
我们特意设计了这个用户体验,用户不需要知道公钥/私钥密码学。用户的心理模式应该是他们的智能手机和uPort应用可以用来与dapps交互,登录到网站、验证交易、用他们的名字签署文件等,如果他们失去了手机,他们可以请求朋友帮助他们再次恢复身份。
消息传递服务器Chasqui负责从基于桌面的去中心式应用程序前端与移动应用程序之间的通信。uPort用户最初通过扫描“与uPort连接”的QR码连接到dapp。此代码包含在移动应用程序和dapp前端之间共享的会话ID。与uPort连接时,dapp前端显示QR码,然后轮询Chasqui服务器以查找发布到会话ID的uPort标识符。移动应用程序将发布标识符,然后立即由dapp前端接收。
同样,通过移动应用程序发送交易时,dapp将轮询Chasqui服务器以查找交易哈希。一旦交易哈希已经发布,dapp可以立即显示交易已经发送并相应地更新UI。
请注意,当去中心式应用程序在移动浏览器中运行时,不会使用Chasqui服务器。
加油服务器Sensui帮助以太坊的新用户克服需要购买以太币的最初障碍,以支付使用网络所需的费用。Sensui致力于通过为用户支付gas费来缓解这一问题,允许用户创建新的uPort并立即启动并运行。
Sensui服务器通过利用以太网网络的基于账户的基础设施工作。假设用户想要发送交易但他们的发送账户中没有以太币。用户按照通常的方式签署交易,然后将已签署的交易发送到Sensui服务器。服务器验证发送账户没有足够的以太币支付gas费,发送足够的以太币到该账户来支付花费,最后将用户签署的交易发送到网络。
以太坊 RPC端点提供程序Infura允许uPort通过Infura提供的标准RPC接口与以太坊网络进行通信。这允许使用uPort移动应用程序,直到有成熟的移动轻客户端可用于以太坊。
Infura还允许uPort移动应用程序连接一个IPFS节点,以便于与IPFS网络通信。
uPort体系结构将在未来进行一系列增强。以下是一些计划中未来增加的内容:
在当前的体系结构中,用户的所有恢复委托都可以在区块链上公开获得。这可能构成安全风险,因为攻击者可能决定攻击用户的委托人以破坏其身份。在未来,我们将使用一系列一次性使用的恢复密钥,这些密钥不会公开与特定身份的关联。
目前,该移动应用只能拥有一个身份。将来,用户将有能力为不同目的而拥有多个角色。
临时存储在Chasqui服务器上的数据在未被加密时可能会成为隐私问题。其目的是使所有通过此服务器的通信端对端加密,以便服务器仅存储加密信息。
Sensui服务器将在未来采用更复杂的架构为用户支付费用,这将涉及内置于控制器合约中的智能合约逻辑。
本白皮书介绍了uPort,这是一种身份验证系统,旨在成为一种灵活且易于使用的与去中心应用程序交互以及区块链身份相关任务的方法。该系统旨在将最终用户的公钥密码学抽象出来,以使用户体验直观。移动应用程序保存用户的私钥,并将智能合约地址作为其标识符。我们使用新颖的身份恢复机制,让用户从联系人列表中选择朋友,这些朋友的仲裁可以在用户移动设备丢失后恢复用户身份。