JTI可信认证v2
JTI = J Trusted Identity 可信身份认证。打造一个在Jouleverse链上提供可信身份认证的体系,为日后涌现出其他更好、更严谨、更可靠的可信身份认证体系做一个示范。
区块链的特点之一是匿名化,更准确的说,是中本聪隐私模型,即将身份隐私信息置于链下不上链,与链上行为地址相分离,从而杜绝互联网传统隐私模型的大面积隐私泄露风险。具体可参考中本聪撰写的比特币白皮书中“隐私”一节。
但是,这也为区块链应用于非货币场景带来了新的难题。首当其冲的,便是众所周知的“女巫攻击”(sybil attack)问题。该问题说的是,由于区块链地址可以由无限自制的随机私钥无限创建,一个链下的真实主体便可以创建无限多的链上地址,实现“分身”。
比如,在一个限定每人一票的链上治理机制中,一个人可以轻而易举地创造压倒性比例的“分身”来实现压倒性的票数,从而控制和操纵投票结果,进而篡夺整个治理系统。
同时,可信身份也有助于消除区块链被应用于非法活动的风险。结合区块链本身的可溯源性,可以有效追溯非法活动的源头和走向,并在执法机构需要时配合打击犯罪。
JTI,就是对于在去中心化的链上实现一套可以抗女巫攻击的可信身份系统的尝试。
在这个解决方案中,所采用的方法是社交认证的方法。即,通过链下的人际社会关系来尽最大努力识别和判断区块链地址的所有者是一个真实、可靠的人,然后通过赋予NFT (Non-Fungible Token)的方式来对地址进行标记,同时保持隐私信息不上链,以此实现中本聪隐私模型和抗女巫攻击的结合。
有人认为,可信身份认证是违背区块链匿名性、隐私性以及抗审查性的“原教旨”特性的。这是对区块链的深刻误解。
区块链从来都不是完全匿名的。它只是采用了中本聪隐私模型,把隐私数据与链上地址相分离,以达到更好保护隐私的目的。至于担心链下部分的隐私信息泄露问题,那就是如何加强链下数据安全保管的技术问题。
另外,区块链的所谓抗审查性,指的是下层节点不对上层应用的交易数据进行价值判断和过滤,而绝非指对抗现实世界的法律秩序和道德规范。越是应用链,越是远离货币(如BTC)这一包容性最强的应用场景,就越是要注意符合现实世界的秩序和规范,并尽可能在上层应用层主动担当起合规义务。
认证参与角色有三个人:球长(负责人,赋予星球标识),其他星球的球长(见证人,赋予JTI认证标识),审计人(负责审计登记信息)
一、用户和球长取得联系
分两种情况:
二、球长帮助用户上星(入驻星球)
步骤:
三、见证人验证用户真实性,进行JTI认证
步骤:
四、审计人后向审核用户登记信息无误
步骤:
(全流程完)
把整个JTI v1的三个设计要素进行分离,解耦合为三个部分:
功能 functionality | 实现 implementation | 元数据 metadata | 赋予权 assigner | 条件 condition | 修改/撤销权 modifier |
---|---|---|---|---|---|
星球标记 | planet NFT | planet, assigner | 星球管理人(原分组组长) | 1. 互加微信,进星球群 2. 填登记表 | 审计人 |
可信身份 | identity NFT | id, timestamp, assigner | 其他星球管理人 | 1. 互加微信 2. 二次确认登记表已填写无误 | 审计人 |
name | JTIConfig |
---|---|
owner | 平稳运行后移交给JNSDAO多签(?);可以配置planetName, planetColor, planetAdmin, planetAuditor, identityAuditor |
planetAdmin | mapping(uint=>address) 星球可自由申请创立(需符合条件,星系管理委员会负责审核); |
planetAuditor | mapping(address=>bool) |
identityAuditor | mapping(address=>bool) 可以revoke identity NFT |
mapping(address=>uint) 可以在指定星级以下加星、减星 |
组长兼任的情况,如果允许同一个组长使用两个地址,就会出现自己set planet然后自己assign identity的问题。所以要记录assigner address并做排斥判断。
一个星球只能有一个admin。多人共管的情况,那就上面套一层多签。
name | Planet |
---|---|
type | ERC-721 non-transferrable |
owner | 平稳运行后移交给core多签(?);可以配置JTIConfig合约地址 |
planetOfToken | 星球id(0 = 地球)结合Config可以得到 name(名称),color(色彩) |
planetAddresses | 反向索引,用于枚举某个星球上所有的居民(成员) |
assignerOfToken | 谁赋予的星球标记(用于排斥判断) |
func assign(mint) | 仅planetAdmin |
取消此功能。planet NFT不需要revoke | |
func changePlanet | 仅本人或auditor |
func tokenURI | 返回NFT json |
name | Identity |
---|---|
type | ERC-721 non-transferrable |
owner | 平稳运行后移交给core多签(?);可以配置JTIConfig合约地址、Planet合约地址;可以fixSince |
ICON_COLOR | 视觉色彩,初始默认 string"c647ba", can be changed by owner |
transfer | 允许持有者transfer,相当于更改地址 |
verifier | 验证者地址。谁赋予JTI标记(用于审计) |
verifiedByPlanet | 验证者管理的星球id |
sinceBlock | 获得认证时的区块高度, can be fixed by owner |
sinceTimestamp | 获得认证时的timestamp, can be fixed by owner |
func assign | mint. 仅planetAdmin (& identity auditor) 且 非Planet assigner |
func revoke | burn. 仅identityAuditor |
func reassign | mint with older tokenId. |
func tokenURI | 返回NFT json |