应用层密钥 (JWK/PASERK) 生成器
项目描述
mkkey - 应用层密钥 (JWK/PASERK) 生成器
mkkey 是一个 CLI 工具,用于生成以下应用层密钥:
到目前为止,为了创建 JWK,您必须使用诸如 之类的命令创建 PEM 格式的密钥对openssl,然后加载它并将其转换为 JWK。使用mkkey,您可以直接轻松地创建可在应用程序中使用的 JWK 和 PASERK,如下所示,无需生成中间密钥(PEM 格式的密钥):
指数
安装
您可以使用 pip 安装 mkkey:
$ pip install mkkey
如果您使用的 shell 是bash,zsh或fish,您可以按照以下步骤激活制表符补全:
- 运行
mkkey --install。 - 按照输出中描述的步骤进行操作
mkkey --install。
基本用法
JWK(JSON 网络密钥)
可以使用该mkkey jwk命令生成 JWK。
本节显示了典型用例,但有关详细信息,请参阅帮助:
$ mkkey jwk --help
生成一个简单的(默认)JWK
最简单的使用mkkey jwt方法如下。只需指定一个键类型(在本例中为ec)。现在您将获得所需的最小 JWK。
$ mkkey jwk ec
{
"public": {
"jwk": {
"kty": "EC",
"crv": "P-256",
"x": "Ti-mNoi-uQFYBVNkH6BSmuTAd8WL8kyEVJufZYv3mG8",
"y": "ANwoZQFI_teNrltM0s9LPjWli0_zyYvvv8cEZWKx1CQ"
}
},
"secret": {
"jwk": {
"kty": "EC",
"crv": "P-256",
"x": "Ti-mNoi-uQFYBVNkH6BSmuTAd8WL8kyEVJufZYv3mG8",
"y": "ANwoZQFI_teNrltM0s9LPjWli0_zyYvvv8cEZWKx1CQ",
"d": "l9Pbq0BmCsOzdapBtSxVpRiHhDTK5-ATteA0nMKzvFU"
}
}
}
除了ec,rsa和okp(Octet Key Pair) 可以用作键类型:
$ mkkey jwk rsa
$ mkkey jwk okp
生成带有指定曲线的 JWK
如果要使用 以外的曲线P-256,请使用以下--crv选项:
$ mkkey jwk ec --crv P-384
生成带有可选属性的 JWK
如果要在 JWK 中包含kid、和alg,请分别使用、、和:usekey_ops--kid--alg--use--key-ops
$ mkkey jwk ec --kid 01 --alg ES256 --use sig --key-ops
{
"public": {
"jwk": {
"kid": "01",
"kty": "EC",
"crv": "P-256",
"alg": "ES256",
"use": "sig",
"key_ops": ["verify"],
"x": "qg-3SA7jNvG7DPF8ajuRR69d5LoBz-I8Xg4ze1kjdHs",
"y": "JctPLnWOeyJM3apWxyEX3bHDo97kel4gdI8x0FlTwHc"
}
},
"secret": {
"jwk": {
"kid": "01",
"kty": "EC",
"crv": "P-256",
"alg": "ES256",
"use": "sig",
"key_ops": ["sign"],
"x": "qg-3SA7jNvG7DPF8ajuRR69d5LoBz-I8Xg4ze1kjdHs",
"y": "JctPLnWOeyJM3apWxyEX3bHDo97kel4gdI8x0FlTwHc",
"d": "GZ9ihMNwYYbglWHV8vau-W5gaZal5ajBb_NiY7Ci7Uk"
}
}
}
使用孩子生成方法生成 JWK
kid也可以自动生成。在这种情况下,使用--kid-type指定生成方法。目前,只有sha256(请参阅JWK 的孩子生成方法)可用。您也可以使用以下方法调整自动生成的孩子的大小--kid-size:
$ mkkey jwk ec --kid-type sha256 --kid-size 16
{
"public": {
"jwk": {
"kid": "ozh_CYlRd3A1f2RLlA3Y5w",
"kty": "EC",
"crv": "P-256",
"x": "hDuMnnmlnFAKMsn-qP37XsKchg6K0bXPhsFgmWOpnVw",
"y": "_oQgP8b8V0hC_H73gIVBaMylAoTOA4mwM57Y2hC2xIk"
}
},
"secret": {
"jwk": {
"kid": "ozh_CYlRd3A1f2RLlA3Y5w",
"kty": "EC",
"crv": "P-256",
"x": "hDuMnnmlnFAKMsn-qP37XsKchg6K0bXPhsFgmWOpnVw",
"y": "_oQgP8b8V0hC_H73gIVBaMylAoTOA4mwM57Y2hC2xIk",
"d": "1b0lNEiyV_C8U0fGXDczfwTrKnHpWwjt_OU0H-MLJvs"
}
}
}
PASERK(与平台无关的序列化密钥)
PASERK 可以使用该mkkey paserk命令生成。
本节显示了典型用例,但有关详细信息,请参阅帮助:
$ mkkey paserk --help
生成 PASERK
PASERK 可以使用mkkey paserk带有目标 PASETO 版本和目的的命令生成(在这种情况下,v4分别public)。
$ mkkey paserk v4 public
{
"public": {
"paserk": "k4.public.2BWUTPg5pmXZ3EVrOBv9I4I_F8Afj0TJ21HkaPT926M"
},
"secret": {
"paserk": "k4.secret.fKIawV2PPVpEONDcEH3_p1dc4OEYlTncmMa8gvwMVy_YFZRM-DmmZdncRWs4G_0jgj8XwB-PRMnbUeRo9P3bow"
}
}
生成一个 PASERK 和一个 PASERK ID
如果要生成 PASERK ID ( kid) 和 PASERK,请使用以下--kid选项:
$ mkkey paserk v4 public --kid
{
"public": {
"kid": "k4.pid.B7i9vMzTQv32mDV9JKjyRy5Iu4eyuufb_RjXwQeZiGrh",
"paserk": "k4.public.Qo7ipKpEa2RxCqmVXSpHdRbWMGtg9QsesMUbLQfU_Pw"
},
"secret": {
"kid": "k4.sid.v1091k4VuZOEKfIO5hLByGwK-RP6dFhfaltURc4CFkUd",
"paserk": "k4.secret.0h5Q2HDR8PbFMZhN8z7iXbbCyn5-bRQdNPRYIglvnWdCjuKkqkRrZHEKqZVdKkd1FtYwa2D1Cx6wxRstB9T8_A"
}
}
生成使用基于密码的加密包装的 PASERK
如果要使用基于密码的加密来包装秘密 PASERK,请使用以下--password选项:
$ mkkey paserk v4 public --password mysecretpassword
{
"public": {
"paserk": "k4.public.qRUKsDFUDgi0zKuvax9fIEmaeRjyVdLqRMDli0YTDC0"
},
"secret": {
"paserk": "k4.secret-pw.62BwtRDohBqFGR-ohJau2AAAAAAA8AAAAAAAAgAAAAHToEnMr1aNWaJsfwxfjHiZkVqdfn8cuMqIburaesjyt7Un-UKE3Umdi3T2YnrNjoie_BGCFguNk_Q2C7qpKC6nehvr6oM3p-4BzrfZLzmKX7jqfgZlC9xZHe0NFfH5DphWqVfPZ5hoUv8gCYKhz7vZ1lyXNgbuCFI"
}
}
生成由另一个对称密钥包装的 PASERK
如果您想用另一个对称密钥包装一个秘密 PASERK,请使用以下--wrapping-key选项:
$ mkkey paserk v4 public --wrapping-key 123456789abcdefghi
{
"public": {
"paserk": "k4.public.Dpdjm_Dd_4t7lzePcWkFLTPBQSBRwB-XZIJnpGbQcf0"
},
"secret": {
"paserk": "k4.secret-wrap.pie.aIbROal8a-FxyTddcC8cny98i-1IuZ5UrwBD64AZDt8b6_9z0DidT7KVKoyK9mTGwtTSSUFtRT9BYdkUc4kZJy0zio12KSw3hwkLqzYPtgUtxBqwlCIb9D2ug-2eaJw67iv1sNV4ovQsutSumob-po6Bt0IwoFXX0bDOVWHHqV8"
}
}
JWK 的孩子生成方法
以下孩子生成方法可用,可以指定为--kid-type选项:
sha256:使用 DER 格式的公钥的 SHA256 哈希值作为孩子值。DER 格式必须是 SubjectPublicKeyInfo,这是典型的公钥格式,由算法标识符和公钥字节组成。none:不生成孩子 [默认]。
贡献
我们欢迎所有类型的贡献、提交问题、建议新功能或发送 PR。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。