indy-sdk tutorials数字身份认证(一)

一、Write a DID and Query Its Verkey

1、启动

docker network create --subnet 10.0.0.0/8 indy_pool_network
docker build --build-arg pool_ip=10.0.0.2 -f ci/indy-pool.dockerfile -t indy_pool .
docker run -d --ip=“10.0.0.2” --net=ci/indy_pool_network indy_pool

2、config

genesis_file_path = ‘/indy-sdk/cli/docker_pool_transactions_genesis’

3、run

python3.5 write_did.py
step:
(2)告诉SDK您将使用哪个池。 您应该已经使用docker compose或类似的方式启动了此池。 在这里,我们只是出于演示目的而转储配置。
3.1 创建新的分类帐池配置以连接到分类帐。
3.2 打开分类帐并获取处理。
3.3 创建新的身份钱包
(3)首先,将管家DID及其密钥对放入钱包中。 这不会给分类账写任何东西,但是它给了我们一个密钥,我们可以用它来签署我们稍后要提交的分类账交易。
此管家钥匙的DID和public verkey已经在分类账中; 它们是我们告诉SDK在上一步开始的创世纪交易的一部分。 但是我们还必须将DID,verkey和私人签名密钥放入我们的钱包中,这样我们就可以使用签名密钥向分类帐提交一个可接受的签名交易,创建我们的* next * DID(这是真正新的)。 这就是为什么我们在创建这个DID时使用硬编码的种子 - 它保证创建相同的DID和密钥材料来创建以符合txn期望。
3.4 打开身份钱包和处理
3.5 生成并存储管家DID和verkey

Steward DID: Th7MpTaRZVRYnPiabds81Y
Steward Verkey: FYmoFw55GeQH7SRFa37dkx1d2dZ3zUF8ckg7wmL7ofN4

3.6 生成和存储信任锚DID和verkey
为信任锚创建一个新的DID和verkey,并将其存储在我们的钱包中。 不要使用种子; 这个DID及其密钥是安全和随机的。 同样,我们还没有写到分类账。

Trust anchor DID: Nj7GhWA5CHmwSQEwhZEYnG
Trust anchor Verkey: CqoW6cuHLFV4zwm6MRDAfPWU3gsV8r8H9Q1VNxDjwJPm

indy中的一些操作只能通过具有特殊角色的身份(DID)来完成。例如,作为steward的DID可以将节点(他们拥有的节点)添加到验证器池,并且可以创建具有信任锚角色的DID。信任锚DID可以将任意DID添加到分类帐。
在这里,我们使用DID +密钥对材料填充我们的身份钱包,用于一个管家身份和一个信任锚身份。steward身份是一个引导步骤,而信任锚DID是我们稍后会查询的。
请注意,steward DID是使用种子创建的,但信任锚DID不是。这是因为管家DID及其verkey已经在分类账中;它们是我们告诉SDK在上一步开始的创世纪交易的一部分。但我们还必须将DID,verkey和私人签名密钥(分类帐不知道)放入我们的钱包中,这样我们就可以使用签名密钥向分类帐提交可接受的签名交易。我们将使用此管家的签名密钥来创建我们的下一个DID - 我们的信任锚,这是真正的新。这就是我们在创建管家DID时使用硬编码种子的原因 - 它保证创建与创世纪交易所期望的相同的DID和密钥材料。在诸如Sovrin“live”网络的生产indy池中,引导的管家身份不会知道种子。
(4)在这里,我们正在构建我们将发送的事务有效负载,以将Trust Anchor identity写入分类帐。 我们在分类帐已经识别的管理员DID的授权下提交此交易。 此调用将在我们的钱包中查找管家DID的私钥,并使用它来签署交易。
3.7 构建NYM请求以将信任锚添加到分类帐
NYM交易请求:

{'identifier': 'Th7MpTaRZVRYnPiabds81Y',
 'operation': {'dest': 'Nj7GhWA5CHmwSQEwhZEYnG',
               'role': '101',
               'type': '1',
               'verkey': 'CqoW6cuHLFV4zwm6MRDAfPWU3gsV8r8H9Q1VNxDjwJPm'},
 'protocolVersion': 2,
 'reqId': 1547539369614334029}

3.8 将NYM请求发送到分类帐
现在我们准备好了交易,发送它。 构建和发送是单独的步骤,因为一些客户可能想要在一段代码中准备事务(例如,可以访问特权后端系统),并且在不同的代码段中与分类帐通信(例如,生活在外部 安全的内部网络)。
NYM交易回复:

{'op': 'REPLY',
'result': {'auditPath': ['EsY4hbw8MPXuyQTiq43pvwJqak6pGzfKwJKMXoi6uYS7',
                         'DNHM372JZJoGcxdHdmsj3QSSiomyeZux6ssJXxAJqyvd'],
           'reqSignature': {'type': 'ED25519',
                            'values': [{'from': 'Th7MpTaRZVRYnPiabds81Y',
                                        'value': 'yDLTXt9TQGC5KoHHV3MYeJkKmPCD8CRo541AQ1zTWKXAcroPTGfDTbVuss935Pf1wUKG83FJCmUv7TNSADUrBgk'}]},
           'rootHash': '3ihKMNpURyAKwrmFTrSWNEkE9G9HgUQQ7efhTTfPbcm5',
           'txn': {'data': {'dest': 'Nj7GhWA5CHmwSQEwhZEYnG',
                            'role': '101',
                            'verkey': 'CqoW6cuHLFV4zwm6MRDAfPWU3gsV8r8H9Q1VNxDjwJPm'},
                   'metadata': {'digest': 'ead3ee1878fe734abf99c84b0ab6d0077072233ecce25d9390441593bc63eb57',
                                'from': 'Th7MpTaRZVRYnPiabds81Y',
                                'reqId': 1547539369614334029},
                   'protocolVersion': 2,
                   'type': '1'},
           'txnMetadata': {'seqNo': 11,
                           'txnId': '6f1289b93acb703bd54335fd2bb71951f71227855732d3fbd99c8687268c610a',
                           'txnTime': 1547539369},
           'ver': '1'}}

此时,我们已成功将新identity 写入分类帐。 我们的下一步将是查询它。
3.9 生成并存储DID和verkey,代表客户端想要获取获取信任锚Verkey。
(5)我们在这里创建第三个DID。 这个从未写入分类帐,但我们必须将它放在钱包中,因为对分类帐的每个请求都必须由某个请求者签名。 通过在此处创建DID,我们强制钱包分配一个密钥对和身份,我们可以使用该密钥对和身份来签署将从分类帐中读取信任锚信息的请求。

Client DID: 7GJpGSpcmHJmuzaYhcw4Mz
Client Verkey: 4R1rcRpFDTE115cGrDHMAa2VAVBRmcZ46z8TKenCg9gT

3.10 构建GET_NYM请求以查询信任锚verkey

GET_NYM request: 
{'identifier': '7GJpGSpcmHJmuzaYhcw4Mz',
 'operation': {'dest': 'Nj7GhWA5CHmwSQEwhZEYnG', 'type': '105'},
 'protocolVersion': 2,
 'reqId': 1547539369808735055}

3.11 将获取NYM请求发送到分类帐

GET_NYM response: 
{'op': 'REPLY',
 'result': {'data': '{"dest":"Nj7GhWA5CHmwSQEwhZEYnG","identifier":"Th7MpTaRZVRYnPiabds81Y","role":"101","seqNo":11,"txnTime":1547539369,"verkey":"CqoW6cuHLFV4zwm6MRDAfPWU3gsV8r8H9Q1VNxDjwJPm"}',
            'dest': 'Nj7GhWA5CHmwSQEwhZEYnG',
            'identifier': '7GJpGSpcmHJmuzaYhcw4Mz',
            'reqId': 1547539369808735055,
            'seqNo': 11,
            'state_proof': {'multi_signature': {'participants': ['Node3',
                                                                 'Node4',
                                                                 'Node2'],
                                                'signature': 'QuM9qxApmaw1e1cBcKaVR9Xb2VkpE5c82cLas9rUcSaizT1Zg57Qjj1mRYbgjjDE3SKfdsqu9j8FKaiAuoEvRx4RRaPyG1bKoe7CHRqvfNL2gEnQXHtPhf7i4yhBjnMKUUmzXxKhyVBuEfwmEAV252MLu5T4NJY3noY1SJxjcVyZPd',
                                                'value': {'ledger_id': 1,
                                                          'pool_state_root_hash': 'GT89NJKZFSV4i4L2cRjDRCnfeDXFBjsAZn7SBLEdxoJE',
                                                          'state_root_hash': '5ppwxtGE8pCzubrbrJnxUt4aW2tnddV3LWVYYRYoLgKG',
                                                          'timestamp': 1547539369,
                                                          'txn_root_hash': '3ihKMNpURyAKwrmFTrSWNEkE9G9HgUQQ7efhTTfPbcm5'}},
                            'proof_nodes': '+QI8+LOgIBKJuTrLcDvVQzX9K7cZUfcSJ4VXMtP72ZyGhyaMYQq4kPiOuIx7ImlkZW50aWZpZXIiOiJUaDdNcFRhUlpWUlluUGlhYmRzODFZIiwicm9sZSI6IjEwMSIsInNlcU5vIjoxMSwidHhuVGltZSI6MTU0NzUzOTM2OSwidmVya2V5IjoiQ3FvVzZjdUhMRlY0endtNk1SREFmUFdVM2dzVjhyOEg5UTFWTnhEandKUG0iffhxgICAgICAoHeZm1UQEPhALOwlrEsCr6rdsj9u9CKRsv4WQHZGWd0GgKA/yVgA4zYchy2zVsIiV5EZbNOJYgeH3b0zZsHJXKYKHICAgICAgKDpdNsLM/7s6kSC6G0TvdqUAeeZ7ZLJbHqIBSyPrw65YoD5ARGg09I/bgmxWmztC58rrZwebgwutUGli7VUyVOFwmuLFqOAgKCamro+9EH/vrNION29c750BMkCYdpXzasRUbZmgA75MICgAhvH9MNjbLg4m1mIm3NU2MkgIFCkniHrxxesFWXTAS+gQdBkJcWjNV+bjB/SABAAchEfdAsRS59aqPobjP8iwz2AgICAoCRyJt6FDmJQ60JcPeVA5EXTnNrRiLBPYNq9dgI6SYlCgKB9JVxOO1bVJRb8Jwgua4GPO/Juk6XhGUySCneElMV7aqAb0qE5bnVw9F5IUz5uGMXwnAHQmog75MzPMOjuL+f3taA7Ohl8US/Ipw9m90WNb/7n5LAxzanxSmitjBCIzSGcGoA=',
                            'root_hash': '5ppwxtGE8pCzubrbrJnxUt4aW2tnddV3LWVYYRYoLgKG'},
            'txnTime': 1547539369,
            'type': '105'}}

3.12 比较Steward管家写入的Trust Anchor 信任锚 verkey和客户提交的GET_NYM响应中检索到的verkey
看看我们是否收到了与我们在第3.4步中编写分类帐相同的信息。

Written by Steward: CqoW6cuHLFV4zwm6MRDAfPWU3gsV8r8H9Q1VNxDjwJPm
Queried from ledger: CqoW6cuHLFV4zwm6MRDAfPWU3gsV8r8H9Q1VNxDjwJPm
Matching: True

做一些清理工作。
3.13 关闭钱包和分类账池
3.14 删除创建的钱包
3.15 删除分类帐池配置

4、result

验证结果
12. Comparing Trust Anchor verkey as written by Steward and as retrieved in GET_NYM response submitted by Client

Written by Steward: CqoW6cuHLFV4zwm6MRDAfPWU3gsV8r8H9Q1VNxDjwJPm
Queried from ledger: CqoW6cuHLFV4zwm6MRDAfPWU3gsV8r8H9Q1VNxDjwJPm
Matching: True

indy-sdk tutorials数字身份认证(一)_第1张图片

二、 Rotate a Key

1-8

 同(一)1-8,build_nym_request(submitter_did=steward_did,target_did=trust_anchor_did, ver_key=trust_anchor_verkey, alias=None, role='TRUST_ANCHOR'
 sign_and_submit_request(pool_handle=pool_handle,wallet_handle=wallet_handle,submitter_did=steward_did,request_json=nym_transaction_request

9、在钱包中生成信任锚的新verkey

did.replace_keys_start(wallet_handle, trust_anchor_did, “{}”)

New Trust Anchor Verkey: FQUnM8MEQ8muxiMXR1YGQvBnKipwoi8xzwPWrBmZTYaa

10、构建NYM请求以将新的verkey更新到分类帐(写入VerKey到ledger

ledger.build_nym_request(trust_anchor_did, trust_anchor_did, new_verkey, None, ‘TRUST_ANCHOR’)

NYM request:
{'identifier': '$(trust anchor id)',
 'operation': {'dest': '$(trust anchor id)',
               'role': '101',
               'type': '1',
               'verkey': '$(New Trust Anchor Verkey)'},
 'protocolVersion': 2,
 'reqId': 1547689638792741170}

11、将NYM请求发送到分类帐
ledger.sign_and_submit_request(pool_handle, wallet_handle, trust_anchor_did, nym_request)

NYM response:
{'op': 'REPLY',
 'result': {'auditPath': ['AcctzGMWr4TrdWtcAfdr2h8NsxCepyg99k5yxkScG9F7'],
            'reqSignature': {'type': 'ED25519',
                             'values': [{'from': '$(trust anchor id)',
                                         'value': '28P7VA9kMDSQFJKtzZExrmDj9kAhedsG16YNigAw4pBEwiWnt7ANEJcreWqmYCRKXKvxGUTd2cqfS88Bar9eX2cw'}]},
            'rootHash': '9DFYvQDS32hNGkJNRFNP2y5EQWMc1YwJUu1Ub2j7UeWV',
            'txn': {'data': {'dest': ''$(trust anchor id)',
                             'role': '101',
                             'verkey': '$(New Trust Anchor Verkey)'},
                    'metadata': {'digest': '2485a2efaeeaa8747782663b5a735cf9c9e25fe828e706bd02ea9dd33a9caf26',
                                 'from': '$(trust anchor id)',
                                 'reqId': 1547689638792741170},
                    'protocolVersion': 2,
                    'type': '1'},
            'txnMetadata': {'seqNo': 17,
                            'txnId': 'adc9e72e144a0a25e458d028b3ca15474afa2548c4d8fc9dc7715e1eb5449c93',
                            'txnTime': 1547689639},
            'ver': '1'}}

12、在钱包中应用新的verkey
did.replace_keys_apply(wallet_handle, trust_anchor_did)
13、从钱包中读取新的verkey
did.key_for_local_did(wallet_handle, trust_anchor_did)

Trust Anchor Verkey in wallet: FQUnM8MEQ8muxiMXR1YGQvBnKipwoi8xzwPWrBmZTYaa

14、构建GET_NYM请求以获取Trust Anchor verkey(从ledger读取新的Verkey
edger.build_get_nym_request(trust_anchor_did, trust_anchor_did)

Get NYM request:
{'identifier': '$(trust anchor id)',
 'operation': {'dest': '$(trust anchor id)', 'type': '105'},
 'protocolVersion': 2,
 'reqId': 1547689639801713757}

15、将NYM请求发送到分类帐
ledger.submit_request(pool_handle, get_nym_request)

GET NYM response:
{'op': 'REPLY',
 'result': {'data': '{"dest":"$(trust anchor id)",
"identifier":"$(Steward DID)",
"role":"101","seqNo":17,"txnTime":1547689639,"verkey":"$(New Trust Anchor Verkey)"}',
            'dest': '$(trust anchor id)',
            'identifier': '$(trust anchor id)',
            'reqId': 1547689639801713757,
            'seqNo': 17,
            'state_proof': {'multi_signature': {'participants': ['Node3',
                                                                 'Node4',
                                                                 'Node2'],
                                                'signature': 'QwW9jGxdCwvw6G3p2yN97Trj4PTcWiTAfcQGzeoSX7aVq4gcGJkqLExmGpL5wUwWucnwBptKdWb8aazJnnFRr3vLRkLvsLumLEzf6hEAiQZvyY3pQ76iZjp3jYob79v9eamL8JkhJ6y6qbGcQa54qauqLmZ8oxFNNyBUuDLaJmfeHV',
                                                'value': {'ledger_id': 1,
                                                          'pool_state_root_hash': 'GT89NJKZFSV4i4L2cRjDRCnfeDXFBjsAZn7SBLEdxoJE',
                                                          'state_root_hash': '7US4wAzXmzJamxqNcDpVYd7HiXuPU6fEmcGGbLnm677G',
                                                          'timestamp': 1547689639,
                                                          'txn_root_hash': '9DFYvQDS32hNGkJNRFNP2y5EQWMc1YwJUu1Ub2j7UeWV'}},
                            'proof_nodes': '+QIJ+LOgPcnnLhRKCiXkWNAos8oVR0r6JUjE2Pydx3FeHrVEnJO4kPiOuIx7ImlkZW50aWZpZXIiOiJUaDdNcFRhUlpWUlluUGlhYmRzODFZIiwicm9sZSI6IjEwMSIsInNlcU5vIjoxNywidHhuVGltZSI6MTU0NzY4OTYzOSwidmVya2V5IjoiRlFVbk04TUVROG11eGlNWFIxWUdRdkJuS2lwd29pOHh6d1BXckJtWlRZYWEiffkBUaBWWc/RnVUAK1oZiemSEzu96UkmpCsAi/9rvEqSL24LkaDmuBdIe7jemQFiCcyenyWbCqXnsXzUdQlmqr+p+gkI7oCg5p9rF8gbMaboz5aKMC5trlrtom1JdasOrqwfMbr0TP+AoAIbx/TDY2y4OJtZiJtzVNjJICBQpJ4h68cXrBVl0wEvoEQAggmzS6f2NWpUQAFsJZORzSvJtNWsWBopTosPpyIZgICAoGNRXBk5pnjMx26RsRJJqFItPiefB387cA2F+x68UefUoCRyJt6FDmJQ60JcPeVA5EXTnNrRiLBPYNq9dgI6SYlCgKB9JVxOO1bVJRb8Jwgua4GPO/Juk6XhGUySCneElMV7aqAb0qE5bnVw9F5IUz5uGMXwnAHQmog75MzPMOjuL+f3taA7Ohl8US/Ipw9m90WNb/7n5LAxzanxSmitjBCIzSGcGoA=',
                            'root_hash': '7US4wAzXmzJamxqNcDpVYd7HiXuPU6fEmcGGbLnm677G'},
            'txnTime': 1547689639,
            'type': '105'}}

16、比较Trust Anchor verkeys:由Steward(原始)编写,当前钱包和当前来自分类帐

Written by Steward: DHqL5vyCCajqVub26CizsB3JLf3P2tkDk4KkaVjRSKko
Current in wallet: FQUnM8MEQ8muxiMXR1YGQvBnKipwoi8xzwPWrBmZTYaa
Current from ledger: FQUnM8MEQ8muxiMXR1YGQvBnKipwoi8xzwPWrBmZTYaa
Matching: True

17-19 、clean up
同(一)13-15
indy-sdk tutorials数字身份认证(一)_第2张图片

你可能感兴趣的:(indy-sdk数字身份认证)