Skip to main content

应用层密钥 (JWK/PASERK) 生成器

项目描述

mkkey - 应用层密钥 (JWK/PASERK) 生成器

PyPI 版本 PyPI - Python 版本 Github CI 编解码器

mkkey 是一个 CLI 工具,用于生成以下应用层密钥:

到目前为止,为了创建 JWK,您必须使用诸如 之类的命令创建 PEM 格式的密钥对openssl,然后加载它并将其转换为 JWK。使用mkkey,您可以直接轻松地创建可在应用程序中使用的 JWK 和 PASERK,如下所示,无需生成中间密钥(PEM 格式的密钥):

密钥

指数

安装

您可以使用 pip 安装 mkkey:

$ pip install mkkey

如果您使用的 shell 是bash,zshfish,您可以按照以下步骤激活制表符补全:

  1. 运行mkkey --install
  2. 按照输出中描述的步骤进行操作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,rsaokp(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。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

mkkey-0.6.2.tar.gz (16.1 kB 查看哈希

已上传 source

内置分布

mkkey-0.6.2-py3-none-any.whl (15.5 kB 查看哈希

已上传 py3