Alice有一辆自动驾驶的汽车,她用它来上班。她的朋友Bob想了解这辆车,并想让Alice把车借给给他三天,因为他想参观一些旅游景点。现在的问题是Alice如何完全控制Bob的车。有没有一种方法可以让她既能保证控制权,又能让她把车安全借给Bob?自动驾驶汽车本身有没有办法决定谁可以驾驶,谁不能驾驶?汽车有自主权吗?
在研究这个问题之前,请先了解有关分散身份的一些基本知识。
这同样适用于身份,而不是让政府控制您的身份,区块链使您可以控制自己的身份并直接与服务提供商合作,同时确保完全透明和负责。
同样的原则在我们的案例中也适用,因此,自动驾驶汽车将拥有自己独特的身份,而不是由Alice控制/拥有自动驾驶汽车,并拥有一切自由,可以做真正的自动驾驶汽车。
DID可以识别现在存在的所有已知事物,这是对任何身份声明控制权的新方法。您,您的孩子,您的汽车,自行车,智能手机都可以通过DID进行唯一标识,并具有自己的身份。唯一的区别是您将成为所有这些实体的监护人,并在需要时将其监护权移交给其他实体。
最吸引人的是“万物都有自己的特性,并控制自己的特性,这是自我主权同一性的基本原则”
现在我们必须了解控制的另一个基本方面
功能与访问控制列表(Capabilities vs. Access Control Lists)
从根本上说,访问控制列表是关于身份的授权,而对象能力是关于拥有的授权。
通过身份进行授权是根据特定实体的身份将资源访问权授予特定实体的过程。这些过程通常会问一个问题:“你是谁?”
拥有权是将拥有资源(例如钥匙)的任何实体授予访问权的过程。这些过程通常会问一个问题:“您有适合该锁的钥匙吗?”
因此,在我们的例子中,自动驾驶汽车将有一个能力,允许任何人使用,只要他们拥有许可。这将确保汽车有自己的自主权。谁拥有打开汽车的钥匙,谁就是车主。
DID被表示为JSON-LD结构,这些消息从一个代理传递到另一个代理。在我们的案例中,Bob将拥有一个移动钱包,用于存储其身份。该汽车将拥有自己的云钱包,这些实体可以安全地在消息下方交换消息,并验证来自区块链的每个身份的所有权。
分散生态系统中的Alice身份:
{
"@context":[
"https://example.org/did/v1",
"https://example.org/ocap/v1",
"http://schema.org"
],
"id":"did:example:83f75926-51ba-4472-84ff-51f5e39ab9ab",
"type":"Person",
"name":"Alice",
"publicKey":[
{
"id":"did:example:83f75926-51ba-4472-84ff-51f5e39ab9ab#key-1",
"owner":"did:example:83f75926-51ba-4472-84ff-51f5e39ab9ab",
"publicKeyPem":"-----BEGIN PUBLIC KEY-----\r\n..."
}
]
}
了解上述结构
id-DID,唯一标识一个人或物体
publicKey-显示此文档所有权的方式
id-代表谁控制此身份,它是alice DID密钥
owner -Alice did
publicKeyPem:用于使用私钥对文档进行签名的公钥
汽车身份:
{
"@context":[
"https://example.org/did/v1",
"https://example.org/ocap/v1",
"http://schema.org"
],
"id":"https://autocar12A15.example/a-fancy-car",
"type":"Service",
"name":"Autonomous Car 12A15",
"publicKey":[
{
"id":"did:example:0b36c784-f9f4-4c1e-b76c-d821a4b32741#key-1",
"owner":"did:example:0b36c784-f9f4-4c1e-b76c-d821a4b32741",
"publicKeyPem":"-----BEGIN PUBLIC KEY-----\r\n..."
}
]
}
Bob身份:
{
"@context":[
"https://example.org/did/v1",
"https://example.org/ocap/v1",
"http://schema.org"
],
"id":"did:example:ee568de7-2970-4925-ad09-c685ab367b66",
"type":"Person",
"name":"Bob",
"publicKey":[
{
"id":"did:example:ee568de7-2970-4925-ad09-c685ab367b66#key-1",
"owner":"did:example:ee568de7-2970-4925-ad09-c685ab367b66",
"publicKeyPem":"-----BEGIN PUBLIC KEY-----\r\n..."
}
]
}
现在,Alice能够使用car 12A15:
{
"@context":[
"https://w3id.org/security/v2",
"https://autopower.example/"
],
"id":"https://autocar12A15.example/a-fancy-car/proc/7a397d7b",
"parentCapability":"https://autocar12A15.example/a-fancy-car",
"invoker":"https://social.example/alice#key-for-car",
"proof":{
"type":"Ed25519Signature2018",
"created":"2018-02-13T21:26:08Z",
"capabilityChain":[
"https://autocar12A15.example/a-fancy-car"
],
"jws":"eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..lfAFjrWE-4RxhL0gtzSMRX72NR9SRDgaMmkjPA4if0ERbw4R2bnts5sAs8OyhAlbFzBAKOqrFk57AYqwSR2vCw",
"proofPurpose":"capabilityDelegation",
"verificationMethod":"https://example.com/i/alice/keys/1"
}
}
了解以上结构:
parentCapability-由于这是第一个委派的功能,parentCapability指向此功能将要针对的目标(在本例中为Alice's Car)
invoker:我们正在专门授予Alice的一个加密密钥的授权
Proof : 最后,我们使用来自Alice Car的capabilityDelegation字段的加密材料对该对象进行签名,并使用capabilityDelegationproofPurpose。
注意:更改了alice,bob和Car的DID,只是为了直观地了解谁是关键。
打开汽车,用Alice写的“去办公室”:
{
"@context":[
"https://example.org/zcap/v1",
"https://autopower.example/"
],
"id":"urn:uuid:ad86cb2c-e9db-434a-beae-71b82120a8a4",
"action":"Drive",
"proof":{
"type":"RsaSignature2016",
"proofPurpose":"capabilityInvocation",
"capability":"https://autocar12A15.example/a-fancy-car/proc/7a397d7b",
"created":"2016-02-08T17:13:48Z",
"creator":"https://social.example/alice/#key-for-car",
"signatureValue":"..."
}
}
action-要执行什么样的动作Drive-打开汽车并到达办公室
capabiltiy:在此汽车上的能力取决于汽车12A15
现在回到问题上来,Bob请求Alice让他用几天车。在这种情况下,Alice使用警告将使用汽车的责任委托给Bob
{
"@context":[
"https://example.org/zcap/v1",
"https://autopower.example/"
],
"id":"https://social.example/alice/caps#79795d78",
"parentCapability":"https://autocar12A15.example/a-fancy-car/proc/7a397d7b",
"invoker":"https://bob.example/bob/#key-33",
"caveat":[
{
"type":"ValidWhileTrue",
"uri":"https://social.example/alice/bob-can-still-use-car"
}
],
"proof":{
"type":"RsaSignature2016",
"proofPurpose":"capabilityDelegation",
"created":"2017-03-28T06:01:25Z",
"creator":"https://social.example/alice/#key-for-car",
"signatureValue":"..."
}
}
警告:它允许将来撤销,只要警告是真的,Bob可以使用Alice汽车,或者以其他方式autocar12A15将允许Bob使用其服务,只要警告成立。
invoker : Alice授予对Bob密钥之一的访问权
proof: Alice用她被授予对autocar12A15的授权权的密钥
Bob去了一家旅馆,并委托代客(Carol)放权并增加了限制,要求代客泊车,以免代客在旅馆内搭便车。
{
"@context":[
"https://example.org/zcap/v1",
"https://autopower.example/"
],
"id":"https://bob.example/bob/caps#2cdea8c1",
"parentCapability":"https://social.example/alice/caps#79795d78",
"invoker":"https://carol.example/#key-bf36",
"caveat":[
{
"type":"DriveNoMoreThan",
"kilometers":4000
}
],
"proof":{
"type":"RsaSignature2016",
"proofPurpose":"capabilityDelegation",
"created":"2017-06-13T19:15:03Z",
"creator":"https://bob.example/bob/#key-33",
"signatureValue":"..."
}
}
//警告:Alice的仪表显示目前行驶了3995公里,因此这只比当前值多了5公里
invoker : 授权卡罗尔使用汽车服务
proof: Bob签署了这个对象,现在autocar12A15将允许carol使用其服务,如果需要,carol最多可以使用5公里的路程
CapabilityInvocation和CapabilityDelegation是DID的两个重要属性,可让用户控制IoT设备,智能汽车,数字设备等非生物物品。
DID仅通过证明加密密钥的所有权即可确保实体的存在,并且无需人工干预即可与其他实体进行交互。
---------------------------------------------
原文作者:Pratap Singh
译者:链三丰
译文出处:http://bitoken.world
---------------------------------------------