Skip to content

General information

ablozhou edited this page Apr 3, 2019 · 10 revisions

概述

由于现实生活中人的身份具有多面性,因此真正可用的身份是复杂的,需要灵活设计,满足现实中各种需求。为了方便使用,我们设计了Usechain等级身份体系。这种身份体系既支持中心化的PKI(Public Key Infrastructure)体系,又支持群体智慧的分布式认证。而且能够很好的保护隐私。还在遇到违法犯罪时具有较好的追查监管能力。

Usechain公链为用户提供最终救济渠道。

我们抽象出了一个信用等级和信用积分,用于方便的管理和查看用户的信用。

这样的身份设计,可以兼容大部分的金融和商业应用场景。

等级身份:

名词定义:

实体:包括物理和虚拟的实体。如自然人,组织(企业,单位,团体,机构等),硬件(汽车,手机,冰箱,传感器等),虚拟实体。有时用用户指代全部实体。

身份:实体在链上映射的标识。Usechain上有UseId来标识身份。基础身份认证通过的具有单独标志。

身份信用等级

用户有独立标志,表示通过基础身份认证。

用户信用有相应的星钻体系,方便交易方直观了解其信用等级。

用户的积分可以分为4类:交易分,认证分,评价分和奖惩分。

实现上将交易分和认证分,评价分进行分离。最终可以得到计算等级分。交易分可以直接使用交易计数。交易是有代价的。

认证分是各种认证给用户带来的信用分。

评价分是各交易对手给的评价,打分。

身份关系

graph TD
B[超级委员会]
B-->C[矿工]
C-->矿工1
C-->矿工2
C-->D[...]
C-->矿工n
矿工1-->用户
矿工2-->用户
D-->用户
矿工n-->用户
用户-->等级n
等级n-->E[...]
E-->等级1
等级1-->等级0

A[Usechain基金会]-->技术委员会
A-->执行委员会
A-->B
A-->顾问委员会


第三方CA机构
政府监管机构

超级委员会主要是链上事务决策处理。超级委员会为符合条件的节点选举产生。

执行委员会主要负责日常联络,行政,法律,市场,运营,宣传等工作。

技术委员会讨论和决定技术发展方向。

顾问委员会为区块链发展提供顾问力量。

第三方机构和政府机构,都可以成为链上实名认证的身份。

CA认证机构为了权威性,一般是社会公认的认证机构或者Usechain理事会指定的机构及代理机构。所有CA机构必须经过委员会确认。

超级委员会(Committee)

超级委员会简称委员会,是Usechain链上决策机构和执行机构。决策和执行机构没有完全分离是为了更高效率。但由于委员会由多个单位组成,所以是集体决策。

委员会成员必须具有身份信用等级3星以上。并且具有一定额度USE的锁仓。根据锁仓额排序。

graph TD
B[超级委员会]

B-->F[Usechain委员1]
B-->G[Usechain委员...]
B-->H[Usechain委员n]

委员会组成

一共由5-11个节点构成。开始时由5个委员组成,随着治理结构完善逐渐补充,到9个,根据需要可能扩充到11个.

Usechain委员由线上选举产生。

委员不足时,Usechain基金会可以指定执行委员会代表,技术委员会代表等直接担任线上节点,后续全部改为选举。

前期5年Usechain基金会保留3个永久委员不参与选举,后续逐步退出。

委员会成员

委员会拥有裁决和奖惩,决策权力。委员会通过投票或签名集体决策。

委员会权益

委员会收益分为3部分。

  1. 固定收益
  2. 工作量收益
  3. 激励收益

固定收益

委员会拥有年USE通胀权益的百分比收益。

工作量收益

委员会拥有裁决手续费收益。初始阶段委员会无工作量收益。

正式运行一段时间后,收费预计如下: 委员会受理裁决手续费为总金额10%或100美金的较大值。 提起裁决必须抵押等值诉求金额,最低100美元等值USE。 提起裁决在抵押后可以立即锁仓被裁决对象等值金额。 其他账号丢失处理等手续费100美元起。

这个数值可能会根据后续需要及社区投票进行调整。

激励收益

维护社区,生态等所得收益,根据运营情况规划。

竞选委员会

锁仓前20%的用户拥有委员会竞选资格,具有最低USE门槛。锁仓期和任期相同,为1年。

如委员会合格候选人不足5人,则基金会可以指定委员来完成链上事务。

锁仓还可以通过社区建设助力,支持某委员的人可以协同锁仓,以增加该委员竞选力量。

任期:1年

身份信用等级:3星以上。

矿工和身份信用等级具有基础身份认证以上成员具有选举委员会权利。

委员会会议

由基金会或委员发起,多数委员同意,每年召开一次委员会会议,以决策包括矿工费、通胀、合作、技术和生态发展等内容。

技术委员会会议

由技术委员会、技术社区参与,对技术方案和方向进行决策。

矿工

矿工是Usechain出块的执行节点和验证节点。

矿工必须具有身份3星以上,并且通过基础身份认证。

矿工必须具有入门USE锁仓。

矿工拥有挖矿收益:发行量总额的0.5%-2%,作为每年通胀额度。矿工从中获取3/4的份额,作为挖矿收益。

认证用户

  • 认证用户必须做基础的身份认证。必须是身份证,护照或社保证明之一。
  • 认证通过后得到基础分,信用达到3星,及身份认证标志。
  • 认证用户可以积累交易认证分和评价分。

匿名用户

  • 匿名用户没有身份信息,也没有任何证明信息。匿名账号是和以太坊兼容的账号。
  • 匿名用户可能被限制交易频度和单位时间总额度。
  • 匿名用户不具有链上的监管能力,违法犯罪无法通过链上身份追查。
  • 匿名用户可积累交易信用。
  • 匿名用户可转实名。

身份存储

链上保存CA签发的证书,DID信息等。

中心化保存照片等信息。因为照片等信息太大,不适合放在链上。

如果保存在IPFS等链上,会有保存成本,而且可能会遗失。

把主要信息保存在链上,方便用户获取身份,给第三方验证。对违规用户,委员会可以追查用户身份。

Usechain支持用户把身份和认证签名信息保存在本地,线上只保存hash和加密算法。可以和交易用户线下验证身份。但未经委员会确认,则不会增加用户认证分数。

身份格式

身份遵循w3c的DID标准,采用JSON-LD格式。

身份具有唯一UseId。该ID类似UUID,是全球唯一的。采用主账号地址代表。

每个身份可以有一个UseId。

每个UseId可以有多种属性,每个属性可以有独立的公开能力。每个属性可以有独立的认证,也可以有多份认证。

每个UseId所带的身份具有用户公钥和签名,并且可以有多份公钥和签名。

身份信息主要由身份和证明两部分。

上链身份信息规范

总体说明

  1. 字符串添加方括号表示字段只是示意说明,内容格式和实际不一样,需要重新计算或获取。
  2. 字段key 如果未添加[],则表示确定不可更改的字段.
  3. 字段key添加?表示有疑虑的,可能移除不存在的字段。
  4. json中所有字段key和value编码采用UTF-8编码。
  5. hash算法如无特别指出,都是SHA3 keccak 256.
  6. 证书规范,遵循ITU和ISO制定的X.509(RFC3280)规范。但证书一般不保存在链上,只作为验证用。链上保留证书签名。
  7. 用户身份更换用户地址,必须是更换前账号state为0正常状态。
  8. 所有二进制信息进行base64编码
  9. @context缺省可以没有,减少存储。除非超出我们规定的格式,需要重新定义格式。

将UseId基本信息,身份信息和签发认证信息分开的理由是,身份信息不会经常变动,认证信息如果用户互相认证的话会不断添加。

上链信息

{
    "@context": "https://usechain.net/useid/v1",
    "useid": "[abc123]",
    "address":"[]",
    "pubkey": "[公钥1pem]",
    "claim": {
        "identity": {
            "[idhash]": {
                "data": "[djajslaldkdk(用户公钥加密身份)]",
                "nation":"cn",
                "entity":[0/1/2/3], 
                "fpr":"[fpr123]",
                "alg": "RSA",
                "certype": "[1身份证]",
                "ver": 1,
                "cdate": "2018-11-01T17:00:00Z"
            },
            "[idhasha]": {
                "data": "[加密数据]",
                "fpr":"[fpr123]",
                "alg": "RSA",
                "certype": "[2护照]",
                "ver": 1,
                "cdate": "2018-11-01T17:00:00Z"
            },
            "[idhashx]": {
                "data": {
                    "id": "[12345678]",
                    "certype": "[100营业执照]",
                    "name": "区块之星",
                    "nation": "cn",
                    "addr": "beijing...",
                    "bdate": "2018-11-01",
                    "edate": "2028-11-01",
                    "[经营范围]": "[xxxxx]"
                },
                "fpr":"[fpr123]",
                "alg": "PLAIN",
                "certype": "[100企业执照]",
                "ver": 1,
                "cdate": "2018-11-01T17:00:00Z"
            }
        },
        "edu": {
            "[hashedu]": {
                "data": "[djdjaj]",
                "fpr":"[fpr123]",
                "alg": "ECC",
                "certype": "[4学习证明]",
                "ver": 1,
                "cdate": "2018-11-1T17:00:00Z"
            }
        },
        "assets": {
            "[hash122]":{
                "data":"[djdjdj]",
                "fpr":"[fpr123]",
                "alg": "ECIES",
                "certype": "[20不动产证明]",
                "ver": 1,
                "cdate": "2018-11-1T17:00:00Z"
            }
        },
        "career": {
            "[careerhash1]": {
                "data": "[djdjhhaj(pubkey加密后数据)]",
                "fpr":"[fpr123]"
                "alg": "ECC",
                "certype": "[5工作证明]"
                "ver": 1,
                "cdate": "2018-11-1T17:00:00Z"
            }
        },
        "other": {}


    },


    "issuer": {
        "[hashedu]": {
            "[useid of ustcca]": {
                "sign":"[sign...]",
                "cdate":"20181028",
                "edate":"[20281028本字段可选]"
            }
            "[useid of 学信网ca]": {
                "sign":"[sign...]",
                "cdate":"20181028",
                "edate":"[20281028可选]"
            }
            
        },
        "[idhash]": {
            "[useid of 身份证认证中心ca]":{         "sign":"[...]",
                "cdate":"20181028",
                "edate":"[20281028可选]"
            }
        },
        "[birthdayhash]": {
            "[useid of hospital_certid]":{ "sign":"[hospital birth cert]",
            "cdate":"20181028",
            "edate":"[20281028可选]"
            }
        },
        "[careerhash1]": {
            "[useidxxx]": {
                "sign": "[sign for careerhash1]",
                "pubkey": "[useidxxx pubkey]",
                "cdate":"20181028",
            "edate":"[20281028可选]"

            },
            "[useidyyy]": {
                "sign": "[sign for careerhash1]",
                "pubkey": "[useidyyy pubkey]",
                "cdate":"20181028",
            "edate":"[20281028可选]"

            }
        }
    }
}
  • @context:格式规范信息,可以不填,缺省使用系统的规范。也可以采用如下json-LD 的方式直接添加规范:
"@context":{
    "useid":"address:40",
    "address":"string:256",
    "name":"string:256"
}
  • useid:链上唯一id,不可重复,长度40字节,直接取公钥生成的账号地址。但生成后和账号保持独立,不再修改。独立的原因是为了方便切换绑定账号。不采用身份类型+id进行hash的主要原因是:子账号可能没有身份信息。第二个原因就是用户可能认证多个身份id,只能选其中一个。第三个原因是方便用户交易时用address检索身份相关信息。

  • address:用户实际账号地址,用来接收交易的。如果为空,则直接用useid。如果不为空,则用address作为实际交易地址。独立是为了避免账号被修改后,交易方发送交易到错误账号。

  • pubkey:用户绑定的公钥,必须是PEM格式。

  • nation:国家或地区,遵循国际域名国别简写。如中国是cn。无国籍填nn,none简写.

  • "entity":"[0/1/2/3],实体类型。 0:human人类,1:orgnization 单位,组织,2:软硬件,包括传感器,手机,汽车,计算机,机器人等,3:other 其他

  • claim :身份信息声明

  • certype: certificate type,证件类型

  • data:数据。如果是加密数据,用Base64编码。使用时,需先base64解码。再解密。

  • alg:算法

  • issuer:签发者及其认证信息

  • 索引hash:由证件类型+证件id的hash组成:hash(type+id)。这样做的好处是相同的证件,只允许注册1次。不同的证件,如果号码相同,索引不会重复,都可以上链。相同hash会覆盖内容,相当于是内容更新。Hash算法为keccak 256.

  • sign:签名数据,base64编码存储。

  • cdate:create date. 创建或处理时间,类型为LONG,0时区计时。

  • bdate:begin date. 开始时间。类型为LONG,0时区计时。

  • edate:end date 或expire date。过期时间或结束时间,类型为LONG,0时区计时。

  • fpr:finger print,content hash,是原始明文去掉格式化空白字符后的hash值。hash算法为SHA3 keccak 256.

data的原始形式示例1

{
	"info": {
		"identity": {
			"hash256(certtype-id)": {
				"id": "123456(身份证号码)",
				"certype": "1(身份证)",
				"name": "张三",
				"sex":"1",
				"ename":"zhang san(opt)",
				"nation": "中国",
				"addr": "beijing...",
				"birthday": "2008-11-01"
			}
		},
		"edu": {
			"hash256": {
			    "id":"123456",
			    "certype":"4学位证",
				"school": "ustc",
				"degree": "be",
				"depart": "computer",
				"bdate": "1995-09-01",
				"edate": "2000-07-01"
			}
		},
		"assets": {
		    "hash128122":{
		        "id":"daa323",
		    	"addr":"ssdfddd"
				"owner":"asdf",
				"ownerid":"234234",
		        "certype": "20不动产证明",
		    	"nation": "cn",
		    	"share":"1.0"
		    	"area":"100m2"
				"cdate": "2018-11-1T17:00:00Z"
		    },
		    "hash256":{
		        "id":"djaja",
		        "owner":"djdjdj",
		        "ownerid":"dasdf",
		        "brand":"bmw",
		        "model":"2016",
		        "certype":"21汽车行驶证",
		        "nation": "cn",
		        "cdate": "2018-11-1T17:00:00Z"
		    }
		    
		},
		"career": {
			"careerhash1281": {
				"org": "acompony",
				"base": "beijing",
				"depart": "ai",
				"bdate": "1995-09-01",
				"edate": "2000-07-01"
			}
		},
		"other": {}
	}
}

其中,数据的chash是keccak 256摘要算法对值的摘要。 如下面的工作经历数据:

{
    "org":"acompony",
    "base":"beijing",
    "depart":"ai",
    "bdate":"1995-09-01",
    "edate":"2000-07-01"
}

将其去除空格,tab和换行,成为

{"org":"acompony","base":"beijing","depart":"ai","bdate":"1995-09-01","edate":"2000-07-01"}

再进行hash256计算,最后得到的hash值是用于上链中一个元数据fpr

索引hash是证件certype+id的hash256计算结果。 如果没有证件号,则采用fpr做索引。

如对身份证,数据如下:

{
    "id": "123456(身份证号码)",
	"certype": "01身份证",
	"name": "张三",
	"sex":"1",
	"nation": "cn",
	"addr": "beijing...",
	"birthday": "2008-11-01"
}

用certype和id拼接再hash。certype由规范规定,见后。

$$hashid=hash(certype-id)$$

如员工的工作经历,没有证件号,可以将fpr数据做索引.

则写到“claim/career”里面的一项即为

"careerhash256":{
    "org":"acompony",
    "base":"beijing",
    "depart":"ai",
    "bdate":"1995-09-01",
    "edate":"2000-07-01"
}

如果采用数据fpr做索引,修改了其中任何一项,则会导致hash的改变。

生成data过程

索引为certype+id对应的hash:“idhash256”。 值为

{
    "id":"123456",
    "certype":"身份证",
    "name":"张三",
    "nation":"cn",
    "addr":"beijing...",
    "birthday":"2008-11-01"
}

计算finger print: 将值里面的数据去空格、制表和换行等无效信息。即为:

{"id":"123456","certtype":"身份证","name":"张三","nation":"cn","addr":"beijing...","birthday":"2008-11-01"}

再用用户公钥pubkey进行加密。加密算法可以为RSA或者ECC。 最终生成:

"hash256":{
        
    "data":"djajslaldkdk(用户公钥加密身份)",
    "alg":"ECIES",
    "pubkey":"pubkeydjjd",//加密data用的公钥
    "fpr":"djjajakak",
    "certype":"01",
    "cdate":"2018-11-1"

}

如果不加密,则为

hash256":{
        
    "data":"{
    
    "id":"123456",
    "certype":"身份证",
    "name":"张三",
    "nation":"cn",
    "addr":"beijing...",
    "birthday":"2008-11-01"

}",
    "alg":"PLAIN",
    "certype":"1(opt)",
    "cdate":"2018-11-1"

}

放到"info/identity"下面的位置。 经过认证后,在auth节添加相应的签名或证书。

公钥生成:

设用户主账号的公私钥为(U,u)。 用户先生成一个普通的公钥A和对应的私钥a。再生成一个随机的公钥R和私钥r。委员会的公钥为C,私钥为c。

U= Hash(aC) G + R
u= Hash(aC) + r

用公钥U对示例1的具体数据进行加密,得到data。

身份信息更新

身份信息可以更新,但保留历史记录。 谁有权限修改链上身份信息? 用户自己和委员会

用户自身: 发送要更新信息的路径,数据和数据签名的交易。矿工验证用户签名和公钥一致,则进行信息添加。

委员会: 委员会可以修改用户身份信息。

验证信息更新

验证信息可以添加和撤销。 谁有权修改链上验证信息? 用户自己,验证机构和委员会

验证信息撤销

验证信息撤销可以由用户,验证机构和委员会发出。

存储

身份加密储存于区块链上或链下。

链上存储

如果需要在链上由委员会认可,则认证要存在链上。

链上信息不可删除。

如果更新,则需要申请新的认证。历史记录也会保留。

照片信息不保存在链上。

一个人的身份信息加证书信息,可能有几十kB.

链下存储

用户可以将隐私信息存在链下如本地,网上,或者链外区块链存储如IPFS。

链上只存储hash,data字段为空。

用户可以链下验证,达成交易。

这种方式得不到委员会认证。

隐私保护

链上身份信息加密存储在区块链中。普通用户无法直接看到用户的身份信息,但可以通过用户的信用积分,信用等级和认证信息判断用户的可靠性。

用户对隐私要求较高,可以将身份信息存储在链下。

身份认证

身份权益

  1. 挖矿:主网必须具有等级3以上的才具有挖矿资格。
  2. 委员会:必须具有等级3以上身份才能竞选委员会成员。
  3. 具有基础身份认证的用户交易不受限。

奖惩机制

  1. 委员会可以降低用户身份等级,扣减和奖励信用分。
  2. 委员会锁定用户账户,此时用户不能参与交易。
  3. 委员会可以锁定账户部分余额

无身份

无身份认证也可以参与交易,但交易方式,交易频度和额度受限。受限方式由委员会决定。

认证注册流程

完整流程参考:KYC 流程

sequenceDiagram
User->>CA: 1 身份信息
CA->>User: 2 查询id
User->>CA: 3 支付费用(可选)
User->>CA: 4 携带查询id,获取证书
CA->>User: 5 证书
User->>SC: 6 身份信息+证书+认证费
SC->>Committee: 7 需要验证数据
Committee->>SC: 8 收取费用,验证上链
  1. 用户给CA发身份认证信息。其中证书请求的name填hash(certype+id).
  2. CA服务器返回一个查询id。
  3. 向CA支付一定费用。
  4. 向CA查询证书。
  5. CA服务器验证通过后,用户可以获取证书。
  6. 用户将身份信息用委员会公钥加密,以及用自己公钥加密,携带证书和认证费用,发到委员会认证智能合约。
  7. 委员会从智能合约获取验证数据。某个委员看到指定由自己验证,则进行数据合法性和证书合法性验证。
  8. 验证通过,收取费用,验证上链。

从细节上,用户主账号公私钥为(m,M)。随机匿名账号公私钥为(r,R)。委员会公钥为C,委员会某个成员的公钥为C1.

用户向委员会认证合约发起注册请求,至少包含下列必要信息:

hash:{
    data:xxx
    fpr:xkxk
    alg
    cdate
    edate
}
data1
C1
cert or sign
  • hash:为keccak256(certype+id)
  • fpr: 位keccak256(claim),claim为用户身份信息
  • alg:加密算法,如ECC
  • cdate:开始日期
  • edate:结束日期

其中,data和data1算法:

$$data = encrypt_M(claim) data1 = encrypt_{C1}(claim)$$

CA认证

基于中心化PKI体系进行认证。CA中心可以是政府单位,具有公信力的组织及其派出和代理执行机构。

如在中国,身份证,驾驶证,护照,户籍,学籍,社保,房产证等均可以作为CA证书认证来源。

认证会花费一定手续费。
CA机构会颁发相应的证书。
CA机构由社会上本来具有公信力的机构颁发证书或Usechain委员会认定合作单位颁发证书。

互相认证

证明者对身份进行认证。 由身份1级以上用户,可以对其他用户进行认证。 认证后,被认证用户获得相应认证分数。同一用户对同一事项反复认证只记一次,也不会有额外的积分。 认证分数:

认证分数=证明者级数*1000

(不设首次和其余不同是为了简化规则,提高效率)

身份链上注册

将委员会认可的CA认证机构或链上具有1级以上个人认证信息发送到链上合约注册,成功后添加相应UseId的等级分。

隐身交易

用户可以签名子账号,使子账号具有签名账号的信用等级,和目标用户交易。账号之间的关联只有目标用户和委员会知道。普通成员无法发现子账号和签名账号之间的关系。

假设交易账号A,私钥a由Alice拥有,不想泄露该账号的交易。可以生成隐身交易的子账号,公钥为X,私钥为x。生成时会利用一个随机的公钥R和私钥r。接受方Bob的公钥为B,私钥b. 委员会Committee的公钥为C,私钥为c。

DID1中获取一个pubkey A对应的私钥 a,

x生成:

X= Hash(aC)G + R
x= Hash(aC) + r

并将{X,r}注册到Usechain委员会。获得相应Useid,委员会将A的等级赋给X。

即X子账号诞生时具有与主账号A相同的信用等级,但诞生后不再和A共享信用等级,互相独立。如果主账号和子账号作恶,则会互相牵连。

用a对X签名,再用S加密,得到signa。交易时携带该signa,让S验证。

接受用户得到signa后,先用s解密,再验证a的签名。 如果a的签名正确,则接收方可以认为X共享A信用和相关证书。

身份信息交换

用户的身份,采用用户公钥加密保存在链上,并附加各认证者的签名。 Alice,密钥为A,a,现在需要和Bob,密钥为B,b进行身份验证,即Alice要发送身份给Bob验证。 假设Alice身份信息如DID1,想交换身份证"info/identity/idhash128". 其明文如下:

"hash256":{
    "id":"123456",//身份证号码
    "certype":"身份证",
    "name":"张三",
    "sex":1,
    "country":"中国",
    "address":"beijing..."
    "birthdate":"2008-11-01"
}

其保存在链中的信息如下:

"hash256":{
    "data":"djajslaldkdk(用户公钥加密身份)",
    "alg":"RSA",
    "pubkey":"pubkeydjjd",//加密data用的公钥
    "certype":"01",
    "fpr":"sdjdjaj",
    "cdate":"2018-11-1"

}

Alice根据自己Useid,取出链中的"info/identity/idhash128/data",用私钥a和算法RSA解密,得到明文。 Alice将明文用Bob的公钥B加密,发送一个交易给Bob。 Bob收到后,发现是一个身份验证的交易。于是用自己私钥b解密,得到明文。对明文进行hash,得到idhash128_1,再读出Alice的Useid中的"info/identity/idhash128/data,pubkey,alg"等信息,比较hash和chash值是否一致。用明文采用RSA和pubkeydjjd公钥加密,得到data_1,比较data和data_1是否一致。如果hash,chash和data都一致,则验证无误。

身份类型

1:身份证
2:护照
3:驾驶证
4:社保证

10:教育证

20:不动产证明
21:存款证明
22:汽车
23:股票

30:工作证明

40:其他

50:企业执照

Clone this wiki locally