区块链与数字身份的结合——uPort调研报告
概述
数字身份与区块链两者缺一不可,相互协同,互相促进,共同构建起价值互联网的基础设施。目前来看,发展区块链数字身份系统是必然的,区块链技术在某种程度上也提供了一个相对可信的方案。基于区块链,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。同时,企业需要进行用户身份的识别和验证,在遵守用户隐私规定的条件下,建立起完整的用户数据库。
总体来看,区块链技术应用于身份认证,主要有两种思路:一种是创建新的基于区块链的数字身份,一种是将已有的数字身份信息置于去中心化的区块链之上。
而uPort采用的是第一种思路,解决方案为:创建一个由用户控制的,基于区块链的数字身份,类似于一个社交媒体账户,这个基于区块链的账户可以应用于全网。此外,用户可以基于不同情况授予或废除对其信息的访问权。
uPort项目是基于以太坊的自主权身份ID应用,它允许用户进行身份验证、无密登录、数字签名并和以太坊上的其它应用交互。
image.png
如何理解uPort?
对用户来说
例如现在市面上有很多共享汽车的应用,如果想使用,需要做以下的事情:
- 每个应用都要申请账号。
- 由于开车需要有驾照。需要在每个应用上上传驾照照片,等待审核。审核的时间有长有短。
- 每个应用可能还需要交纳一定的押金。
- 如果某个应用提供的是豪华车,你可能还需要交纳更多的押金,或者上传你的信用或资金证明并等待审核。
这里只是共享汽车。假如还有更多的应用要求上传更多各种不同的证明文件,并且通过审核才能使用,那将会需要随身带着各种证明资料,或者,把它们拍成照片存放在手机里,哪个应用需要就从相册里上传哪个资料。而假如文件袋或者手机遗失,会面临隐私泄漏以及补办资料的麻烦。
对应用开发者来说
开发者需要开发对应的证明验证系统,并且对接证书机构进行验证。
那uPort将如何解决这个问题?
- 在手机上安装一个uPort的app,申请一个uPort ID。
- 使用app将各种证明文件进行拍照上传,很快得到是否验证通过的结果。
- 现在uPort ID将会关联起所有的证明文件。
- 假如将要使用的某个应用需要有驾照证明,或者资产证明,并且这个应用接入了uPort。现在要做的就是打开uPort app,扫描应用二维码注册或者登录。
- 现在不再需要在不同的应用中重复上传证明文件了。同一个应用要求多个证明时,也可以迅速完成验证。
uPort背后的简单逻辑
- 证书机构发布的证书需要建立了电子档案,并且这些证明文件上提供了类似二维码的可供捕获的信息。
- uPort与证书机构合作,可以调用这些证书机构的电子档案。
- 用户申请uPort ID,使用uPort app扫描证明文件。
- uPort将用户扫描的证明文件信息与证书机构电子档案进行匹配。
- 匹配成功,uPort会将该用户的uPort ID与证明文件进行关联。
- 应用接入uPort,说明使用此应用,用户需要何种证明文件。
- 用户通过uPort app,扫描应用二维码进行注册。应用获取到用户uPort ID,并传给uPort,请求uPort检查此ID是否已验证过应用所需的证明文件。
- uPort检查通过,通知应用,应用允许用户注册使用,并将用户的uPort ID写入到账户合约中。
- uPort检查不通过,说明用户还未关联过证明文件,通知应用,应用要求用户在uPort中验证所需的证明文件。
- 通过后,用户下次使用uPort登录应用时,传入uPort ID,应用会去账户合约中匹配uPort ID,如果存在,则允许登录。
uPort身份本质上是什么?
uPort身份是一个Ethereum地址。 所以与终端用户交互时所需要的只是由uPort提供的Ethereum地址。 然而,uPort还允许应用程序及其用户独自交换信息(基于以太坊区块链的安全性为保障)
更多的,uPort身份是一个人(应用程序,组织,设备或机器人)的完整数字表示,能够on-chain或者off-chain时与智能合同和其他uPort身份进行交互。 这种在不依赖中心化身份提供者的情况下对自己(用户或app等)进行标识的能力使得uPort成为自主权身份的平台。
image (1).png
永久身份
在传统的公共密钥加密系统中,公钥代表身份。 身份所有权由拥有控制公钥的私钥决定。 这种公共/私人密钥模型在加密身份系统中已经使用了许多多年并拥有许多优点。 验证签名不需要很多基础架构 - 只需访问公钥。
这种传统模式有一些核心问题。 如果丢失私钥将失去身份。 此外,如果没有额外的中心化基础设施,也不能直接撤销密钥,也不能将身份的控制安全地转移给其他人。 这些技术上的限制阻碍了人们在加密身份系统上的尝试。
以太坊智能合约为我们提供了一个加密密钥管理问题的通用解决方案,为设置永久身份提供了基础。 可以通过智能合约或传统公共密钥的地址来表示以太坊身份。 由于智能合约可以由其他智能合约来控制,因此可以对其进行编程,以支持各种私钥找回方法。
uPort身份本质上是一个非常简单的智能合约,由可替换的控制器合约控制,其中包含密钥恢复和访问控制逻辑。 控制器合约又由安全地存储在智能手机上的密钥控制。
uPort注册表:共享的事实来源
uPort注册表是所有uPort身份共享的一个智能合约,提供离线数据共享和身份验证所需的基础架构。它允许身份做出关于他们是谁的简单陈述。
如果在uPort应用程序中创建uPort身份,默认有关自己的信息(名称,图像,描述等)设置为公开,将来能够控制这些信息,但现在可以将其视为基于Ethereum版的公开Facebook个人资料。 这是对区块链世界的公开声明:你是谁?
uPort应用程序与uPort注册表工作的方式非常简单:
- 它根据http://schema.org (http://schema.org/)约定创建一个JSON配置文件对象
- 配置文件JSON已上传到IPFS
- 最后,它在注册表中创建一个setAttributes事务,它将生成的IPFS哈希值设置为您的公共声明
虽然uPort注册表是一个共享合同,但是每个身份在这个单一的真实来源中存储的数据只能由其uPort身份本身控制,这使得它不可能检查或屏蔽。 这个简单的控制方式是uPort身份自主权概念的关键。
需要注意的是uPort注册表合约是on-chain对off-chain数据的引用。数据会被上传到[IPFS] (https://zh.wikipedia.org/wiki/%E6%98%9F%E9%99%85%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F)而不是存储在区块链上,只有IPFS哈希值会被存储在链上。
当前版本的uPort注册表部署在Ropsten 网络的0xb9C1598e24650437a3055F7f66AC1820c419a679上。可以查看其使用的简单solidity源代码
例如,我的uPort身份是0xceaaac60d36d2cb52ac727a93ad5ea301afc89dc。可以使用uPort应用把我添加为联系人,也可以在区块链浏览器中查看我的地址
{"@context":"http://schema.org","@type":"Person","name":"Pelle
(http://. schema.org/) Brandgaard","banner":
{"@type":"ImageObject","name":"banner","contentUrl":"/ipfs/QmNXQGZ2kwAqM24pqiibHqrg2JRSUdpnfZohhKjFpM5CNe"},
"description":"Lead Engineer on Uport",
"publicKey":"0x04613bb3a4874d27032618f020614c21cbe4c4e4781687525f6674089f9bd3d6c7f6eb13569053d31715a3ba32e0b791b97922af6387f087d6b5548c06944ab062",
"image":{"@type":"ImageObject","name":"avatar","contentUrl":"/ipfs/QmZ2F9z9A3cCKe9AREu5XnFE9otKbo4Ptc46A4m3AgY1i9"}}
如果有uPort app,就可以轻松的在Identity Page > Settings > Developer Tools中查看个人信息
一个去中心的,链上到连下的身份世界
在一个纯粹的Ethereum世界里,所有的应用程序和数据都完全在整个blockchain上,我们不需要uPort注册表作为一个共享事实(真实数据)来源。 相反,事实只会从公开的块中读出来。 然而为了满足数据隐私等需求,很多数据存在链下,如果应用程序需要获取关于用户地址和余额的任何有关用户的信息,开发人员需依赖于uPort注册表或其自己的集中式用户数据库。
此外有更多的复杂场景需要在用户和应用之间交换私人信息,如年收入或国家ID号码。 多数人不愿意将这些信息存储在一个公开的区块上,因此我们需要一种安全分享的方法。
正如我们前面提到的,在以太坊中的合约身份几乎可以做任何基于密钥的身份可以做的事情,除了不能像私钥 一样对链下数据签名。因此,我们需要一种方式让uPort注册表将链下数据签名委托给一个关键字:即uPort注册表项中的publicKey字段。
publicKey允许我的个人身份将签名权限委托给另一个uPort应用程序。如果我丢失或升级我的设备,还可以更改此密钥(publicKey )。
Uport使Ethereum应用程序人性化
uPort可以提升区块链用户的体验。 用户不再只是使用抽象的十六进制编码地址与其他十六进制地址进行交互,而是真正的人,他们现在能够充分表达自己,与其他人,应用程序,设备和业务进行交互。
总结
uPort能够让用户直接在区块链世界中创建属于自己的数字身份ID,并告知给大家”我是谁”,得以在拥有数字身份的同时保护自身隐私,在互相表明身份的基础上进行交互,比之前抽象的十六进制编码地址的交互方式更直观,有利于更多的非技术用户了解并加入区块链世界,想象一下,我们在区块链世界中有了身份,不同身份之间会形成关系网,根据关系网会自动或被动地配置资源,最终将会形成怎样的社会形态?
参考资料:
https://developer.uport.me/
https://medium.com/uport/what-is-a-uport-identity-b790b065809c
https://www.jianshu.com/p/12a2454440bf