链接数据的加密密钥对等库 (crypto-ld) (简体中文)
一个 Javascript 库,用于在 Linked Data 加密密钥对上生成和进行共同操作.
目录
背景情况
另见(相关规格):
支持的密钥类型
此库提供一般链接数据加密密钥生成 函数,但不默认支持任何单个密钥类型.
要使用它,你必须 安装单个驱动程序库 每个 密码密钥类型 。 目前支持以下图书馆.
| 类型 | 密码套件 | 图书馆 | 使用量 |
|---|---|---|---|
Ed25519 | Ed25519 核查Key 2020 (建议), Ed25519 核查Key2018 (遗产) | ed25519-verification-key-2020 >=1.0 (建议), ed25519-verification-key-2018 >=2.0 (遗产) | 签署、加入、签署、签署、签署、签署 |
X25519/Curve25519 | X25519 关键协定Key2019 | x25519-key-agreement-key-2019 >=4.0 | ECDH 人权委 键协议, JWE/CWE 加密 minimal-cipher |
Secp256k1 | Ecdsa Secp 256k1 核查 Key2019 | ecdsa-secp256k1-verification-key-2019 | 签名, VCs, z Caps, DIDAuth, HD 钱包 |
选择密钥类型
数字签字
jsonld-signatures, (中文(简体) ),
使用 vc-js, (中文(简体) ),
授权能力,以及 DIDAuth 操作:
- 偏爱 Ed25519 核查Key 2020 键,默认情况下.
- 使用 EcdsaSepc256k1 (英语) 键,如果您的使用大小写需要的话(例如,如果 你正在开发一个基于比特币或伊特鲁姆的分类账,或者如果你 需要分级决定(HD)钱包功能.
对于加密操作的关键协议协议协议 :
- 使用 曲线25519 与
minimal-cipher图书馆.
警卫
同大多数与安全和密码学有关的工具一样 您的系统将在很大程度上取决于您的设计决定 .
安装
- 需要14.0+节点.
在当地安装(用于开发):
git clone https://github.com/digitalcredentials/crypto-ld.git
cd crypto-ld
npm install
使用量
安装密钥类型的支持
要使用此库, 您需要导入并安装驱动程序
库,用于您将通过 use() 方法.
要使用一个或多个支持的套件库 :
import {Ed25519VerificationKey2020} from '@digitalcredentials/ed25519-verification-key-2020';
import {X25519KeyAgreementKey2020} from '@digitalcredentials/x25519-key-agreement-key-2020';
import {CryptoLD} from '@digitalcredentials/crypto-ld';
const cryptoLd = new CryptoLD();
cryptoLd.use(Ed25519VerificationKey2020);
cryptoLd.use(X25519KeyAgreementKey2020);
const edKeyPair = await cryptoLd.generate({type: 'Ed25519VerificationKey2020'});
生成新的公用/私用密钥对
要生成一个新的公/私密密钥配对 : cryptoLd.generate(options)数字 :
{string} [type]需要套房名称.{string} [controller]可选控制器 URI 或 Did 初始化 生成了密钥。 (此会输入密钥 ID. ){string} [seed]可选的确定种子值( 只有部分种子支持) 关键类型,例如ed25519从中生成密钥.
从存储导入一对密钥
从下列数据中创建公/私密密钥对实例:
存储,使用 cryptoLd.from()数字 :
const serializedKeyPair = { ... };
const keyPair = await cryptoLd.from(serializedKeyPair);
注意,如果您试图创建
键对通过 from() 对于一个不支持的类型,会显示错误.
常见的单个密钥配对操作
整个行动范围将取决于关键类型。 这里有些常见的 所有关键类型支持的操作.
只导出公钥
仅导出一对的公钥 - 使用 export()数字 :
keyPair.export({publicKey: true});
// ->
{
type: 'Ed25519VerificationKey2020',
id: 'did:example:1234#z6MkszZtxCmA2Ce4vUV132PCuLQmwnaDD5mw2L23fGNnsiX3',
controller: 'did:example:1234',
publicKeyMultibase: 'zEYJrMxWigf9boyeJMTRN4Ern8DJMoCXaLK77pzQmxVjf'
}
导出完整的公-私密密钥配对
要导出完整一对密钥, 包括私钥( 警告 : 这应该是 仔细考虑的操作,最好留给专用密钥管理系统:
keyPair.export({publicKey: true, privateKey: true});
// ->
{
type: 'Ed25519VerificationKey2020',
id: 'did:example:1234#z6MkszZtxCmA2Ce4vUV132PCuLQmwnaDD5mw2L23fGNnsiX3',
controller: 'did:example:1234',
publicKeyMultibase: 'zEYJrMxWigf9boyeJMTRN4Ern8DJMoCXaLK77pzQmxVjf',
privateKeyMultibase: 'z4E7Q4neNHwv3pXUNzUjzc6TTYspqn9Aw6vakpRKpbVrCzwKWD4hQDHnxuhfrTaMjnR8BTp9NeUvJiwJoSUM6xHAZ'
}
生成和验证密钥指纹
要生成指纹 :
keyPair.fingerprint();
// ->
'z6MkszZtxCmA2Ce4vUV132PCuLQmwnaDD5mw2L23fGNnsiX3'
为了验证指纹:
keyPair.verifyFingerprint({
fingerprint: 'z6MkszZtxCmA2Ce4vUV132PCuLQmwnaDD5mw2L23fGNnsiX3'
});
// ->
{ valid: true }
对签名相关密钥对的操作
对于与签字和核查有关的密钥配对(从
页:1 LDVerifierKeyPair ),必须支持另外两个操作:
创建签名函数
为了执行加密签名,您需要创建 sign
函数,然后引用它.
const keyPair = await cryptoLd.generate({type: 'Ed25519VerificationKey2020'});
const {sign} = keyPair.signer();
const data = 'test data to sign';
const signatureValue = await sign({data});
创建验证函数
为了验证密码签名,您需要创建 verify
函数,然后引用它(通过数据验证,和签名).
const keyPair = await cryptoLd.generate({type: 'Ed25519VerificationKey2020'});
const {verify} = keyPair.verifier();
const {valid} = await verify({data, signature});
贡献
见 贡献文件来啊!
公关接受.
请遵照 标准读取 规格.
商业支助
该图书馆的商务支助可应下列请求提供: 数字集市: 支持@ digitalbazaar.com