RSA JWK 格式及参数含义

信息安全 jwt
2021-09-06 17:23:32

RFC 7571中,我发现 RSA JWK 应该是这样的:

         {"kty":"RSA",
      "n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4
 cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMst
 n64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2Q
 vzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbIS
 D08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw
 0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
      "e":"AQAB",
      "d":"X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJoVH-HLLKD9
 M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv7B6NqXSzUvxT0_YSfqij
 wp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUohsXywbReAdYaMwFs9tv8d
 _cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xojPLu4sbg1U2jx4IBTNBz
 nbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2WBii3RL-Us2lGVkY8fkFz
 me1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q",
      "p":"83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWUQyLPQBQxtPV
 nwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMjOpSXicFHj7XOuVIYQyqV
 WlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEvn7O0nVbfs",
      "q":"3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCuqnb3vobLyum
 qjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEiovonizhKpo9VVS78TzFgx
 kIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4vIcb6yelxk",
      "dp":"G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5SdX3coE0oim
 YwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP8akYhFo5tAA77Qe_Nmtu
 YZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8YeiKkTiBj0",
      "dq":"s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllETE1efrA6huUU
 vMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BUb0JUiraRNqUfLhcQb_d9
 GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18txXw494Q_cgk",
      "qi":"GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQJBfmt0FoYzg
 UIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3AN7lI-puxk_mHZGJ11rx
 yR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6Ia6zTKhAVRU",
      "alg":"RS256",
      "kid":"2011-04-29"}

但问题是,我无法在任何地方找到所有这些参数的含义,例如ne。那么,所有这些参数是什么意思?

2个回答

这些可能是 RSA 密钥的参数,您可以在此处看到:https ://www.gnupg.org/documentation/manuals/gcrypt-devel/RSA-key-parameters.html

命名约定与 JWK 中使用的匹配:

n-mpi
    RSA public modulus n. 
e-mpi
    RSA public exponent e. 
d-mpi
    RSA secret exponent d = e^-1 \bmod (p-1)(q-1). 
p-mpi
    RSA secret prime p. 
q-mpi
    RSA secret prime q with p < q. 
u-mpi
    Multiplicative inverse u = p^-1 \bmod q.

干杯!

它们在 JWA 规范,RFC 7518 第 6 节中定义

6.3.1. RSA 公钥的参数

RSA 公钥必须存在以下成员。

6.3.1.1。“n”(模数)参数

“n”(模数)参数包含 RSA 公钥的模值。它表示为 Base64urlUInt 编码的值。

请注意,实现者发现一些密码库在它们返回的模数表示之前添加了一个额外的零值八位字节,例如,为 2048 位密钥返回 257 个八位字节,而不是 256。使用此类库的实现需要
注意从 base64url 编码的
表示中省略额外的八位字节。

6.3.1.2。“e”(指数)参数

“e”(指数)参数包含 RSA 公钥的指数值。它表示为 Base64urlUInt 编码的值。

例如,当表示值 65537 时,要进行 base64url 编码的八位字节序列必须由三个八位字节 [1, 0, 1] 组成;
该值的结果表示为“AQAB”。

本节的其余部分继续详细介绍私钥:

6.3.2. RSA 私钥的参数

除了用于表示 RSA 公钥的成员外,还有
以下成员用于表示 RSA 私钥。
RSA 私钥需要参数“d” 其他的可以进行
优化,并且应该包含在
代表 RSA 私钥的 JWK 的生产者中。如果生产者包含任何
其他私钥参数,则必须存在所有其他私钥参数,但“oth”除外,它必须仅在
使用两个以上素数时才存在。

6.3.2.1。“d”(私人指数)参数

“d”(私有指数)参数包含 RSA 私有密钥的私有指数值。它表示为 Base64urlUInt 编码的值。

琼斯标准跟踪 [第 30 页]

RFC 7518 JSON Web 算法 (JWA) 2015 年 5 月

6.3.2.2。“p”(第一素因子)参数

“p”(第一素因子)参数包含第一素
因子。它表示为 Base64urlUInt 编码的值。

6.3.2.3。“q”(第二素数)参数

“q”(第二个主要因素)参数包含第二个主要
因素。它表示为 Base64urlUInt 编码的值。

6.3.2.4。“dp”(第一因子 CRT 指数)参数

“dp”(第一因子 CRT 指数)参数包含第一因子的中国剩余定理 (CRT) 指数。
表示为 Base64urlUInt 编码的值。

6.3.2.5。“dq”(第二因子 CRT 指数)参数

“dq”(第二因子 CRT 指数)参数包含第二因子的 CRT
指数。它表示为 Base64urlUInt 编码的值。

6.3.2.6。“qi”(第一 CRT 系数)参数

“qi”(第一个 CRT 系数)参数包含
第二个因子的 CRT 系数。它表示为
Base64urlUInt 编码的值。

6.3.2.7。“oth”(其他素数信息)参数


“oth”(其他素数信息)参数包含有关任何第三个和后续素数的信息数组,如果它们存在的话。当只使用了两个素数时(正常情况),这个参数必须被省略。当使用了三个或更多素
数时,数组元素的数量必须是使用的素数减去 2。有关这种情况的更多信息,请参阅
RFC 3447 [RFC3447] 的附录 A.1.2 中的 OtherPrimeInfo 参数的描述,
以下参数是根据该描述建模的。如果 JWK 的使用者
不支持具有两个以上素数
的私钥,并且遇到包含“oth”参数的私钥,则它不得
使用该密钥。每个数组元素必须是一个对象
以下成员。

6.3.2.7.1。“r”(质因数)

“oth”数组成员中的“r”(素因子)参数
表示后续素因子的值。它表示为 Base64urlUInt 编码的值。

6.3.2.7.2。“d”(因子 CRT 指数)

“oth”数组成员中的“d”(因子 CRT 指数)参数表示相应素因子的 CRT 指数。它表示为 Base64urlUInt 编码的值。

6.3.2.7.3。“t”(因子 CRT 系数)

“oth”数组
成员中的“t”(因子 CRT 系数)参数表示相应素
因子的 CRT 系数。它表示为 Base64urlUInt 编码的值。

第 6.2 节详细介绍了椭圆曲线键使用的值,但我将在此省略引用。