Flutter安全存储接口插件dart_ssi的使用
Flutter安全存储接口插件dart_ssi的使用
dart_ssi
dart_ssi
是一个支持SSI(去中心化身份)空间中几个标准的Dart包,包括基于 Hive 的最小钱包实现。该包包含用于存储可验证凭证和相关密钥对的类和函数;可以签发、验证和撤销凭证和演示文稿,并与 ERC1056 智能合约进行交互。此外,该包还支持两个交换协议(IWCE 和 DIDComm V2),用于可验证凭证和演示文稿。
重要提示:此包尚处于开发阶段。API 可能会更改,并且代码尚未经过广泛测试。
开始使用
要设置一个钱包,只需执行以下操作:
void main() {
var wallet = new WalletStore('holder');
await wallet.openBoxes('holderPW');
wallet.initialize();
}
凭证
此包中最重要的一部分是支持的凭证。这些凭证能够通过简单的基于哈希的机制实现选择性披露。因此,每个凭证属性都使用盐进行哈希处理。由发行者签署的可验证凭证只包含这些哈希值。在持有者的钱包中,存储了两种凭证——一种包含所有值及其盐的凭证和一种已签名的凭证。选择性披露机制的使用是可选的。例如,第一种类型——在包中称为明文凭证——看起来像这样:
{
"id":"did:ethr:0x1611994c317bed3102D65A93B667Dbe0591Da41c",
"type": ["HashedPlaintextCredential2021","NameAgeCredential"],
"hashAlg": "keccak-256",
"name": {
"value":"Max",
"salt":"dc0931a0-60c6-4bc8-a27d-b3fd13e62c63",
},
"age": {
"value":20,
"salt":"3e9bacd3-aa74-42c1-9895-e490e3931a73",
}
}
相应的签名可验证凭证如下所示:
{
"@context":["https://www.w3.org/2018/credentials/v1",
"https://credentials.hs-mittweida.de/credentials/ld-context/"],
"type":["VerifiableCredential"],
"credentialSubject": {
"id":"did:ethr:0x1611994c317bed3102D65A93B667Dbe0591Da41c",
"type":"NameAgeCredential",
"name":"0xd8925653ed000200d2b491bcabe2ea69f378abb91f056993a6d3e3b28ad4ccc4",
"age":"0x43bde6fcd11015c6a996206dadd25e149d131c69a7249280bae723c6bad53888"},
"issuer":"did:ethr:0x6d32738382c6389eF0D79045a76411C42Fff3a5e",
"issuanceDate":"2020-11-30T11:06:39.423520Z",
"proof": {
"type":"EcdsaSecp256k1RecoverySignature2020",
"proofPurpose":"assertionMethod",
"verificationMethod":"did:ethr:0x6d32738382c6389eF0D79045a76411C42Fff3a5e",
"created":"2020-11-30T11:06:39.497073Z",
"jws":"ey..E="}
}
目前仅支持 EcdsaSecp256k1RecoverySignature2020
和 Ed25519Signature2020
作为证明部分的签名套件。如果需要其他套件,可以通过扩展签名器API来实现。如何开发和使用自己的签名套件详见 extendSigners.md。
关于Json-Ld签名的一些注意事项
-
为安全性和性能原因,一些重要的Json-ld上下文与库捆绑在一起。这些包括:
-
用于加载上下文的函数被实现为仅加载指定的上下文。它不会从网络下载任何内容。所有需要此类文档加载器的函数都有一个可选参数
loadDocumentFunction
。这意味着如果需要,您可以编写自己的上下文加载函数。 -
Json-ld处理器的
safeMode
选项设置为true
。
凭证的使用
根据 W3C 验证凭证规范,凭证由发行者签发,由持有者存储并提交给验证者。使用此包实现这一点的示例可以在 issuance.dart 和 verification.dart 中找到。除了这之外,凭证还可以由发行者撤销,如 credential_revocation.dart 所示。对于撤销,使用了一个简单的以太坊智能合约,每个发行者都应该部署这样的合约。
密钥和标识符管理
这里使用的标识符是根据 did:ethr 方法
和 did:key 方法
的去中心化标识符(DID)。在后一种情况下,目前只支持 Ed25519 和 X25519 密钥。所有密钥以类似于比特币钱包的方式进行分层确定性管理,因为建议为每个凭证或服务使用新的标识符。生成新的标识符可以使用以下代码:
var newDID = await wallet.getNextCredentialDID();
// 或者(当与新服务联系时)
var newDID = await wallet.getNextConnectionDID();
更多关于Flutter安全存储接口插件dart_ssi的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html