JWK
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る(JWT)>JWT]]
--[[JWS]]
--[[JWE]]
* 目次 [#d18835c6]
#contents
*概要 [#jd402cd5]
以下の内容で最終確認済み。~
https://tools.ietf.org/html/rfc7517
-JWK : JSON Web Keyは、
--[[JWS]]や[[JWE]]などで利用する公開鍵を JSON 形式で表現...
[[FIDO]]2.0 の [[Web Authentication API]] が生成する公開...
--複数の JWK のセットである JWK Set JSON データ構造も定義...
OpenID Connect Discovery をサポートしている IdP は公開鍵...
-暗号アルゴリズムおよびその識別子は、[[JSON Web Algorithm...
**JSON Web Key (JWK) [#d905d797]
-暗号鍵を表現する JSON オブジェクト。
-このオブジェクトの各要素は、鍵の各プロパティを表現する。
**JWK Set [#j5494828]
-1セットの JWK の集合を表現する JSON オブジェクト。
-この JSON オブジェクトは必ず keys という要素を含み、その...
*詳細 [#p1b5801b]
**パラメタ(JWK) [#za196dbc]
***一覧 [#wc4698a3]
|#|キー|説明|h
|1|kty (必須)|key typeパラメタ。大文字・小文字を区別する...
|2|alg (任意)|algorithmパラメタ。大文字・小文字を区別する...
|3|kid (任意)|Key IDパラメタ。大文字・小文字を区別するが...
|4|use (任意)|public key useパラメタ。大文字・小文字を区...
|5|key_ops (任意)|key operationsパラメタ。大文字・小文字...
|6|x5u (任意)|X.509 URLパラメタ。X.509 公開鍵証明書や証明...
|7|x5c (任意)|X.509 certificate chainパラメタ。PKIX 証明...
|8|x5t (任意)|X.509 Certificate SHA-1 Thumbprintパラメタ...
|9|x5t#S256 (任意)|X.509 Certificate SHA-256 Thumbprintパ...
***alg [#z652c67f]
[[JWS]]・[[JWE]]用のalgは[[JWAのRFC>JWA]]を参照。
***use と key_ops [#e496fbe5]
-use と key_ops は同時に利用すべきではない。
-key_ops値
|#|値|説明|h
|1|sign|compute digital signature or MAC|
|2|verify|verify digital signature or MAC|
|3|encrypt|encrypt content|
|4|decrypt|decrypt content and validate decryption, if ap...
|5|wrapKey|encrypt key|
|6|unwrapKey|decrypt key and validate decryption, if appl...
|7|deriveKey|derive key|
|8|deriveBits|derive bits not to be used as a key|
***kty と kid [#uee91d10]
異なる鍵が同じ kid 値を持つケースがある。
>ktyは異なるが, アプリケーションからはそれらが~
互いに等価な代替手段であると考えられている場合。
**パラメタ(JWA) [#zb1db057]
[[パラメタ(JWK)>#za196dbc]]に含まれないパラメタは、~
[[JWAのRFC>#d88bad0f]]で、アルゴリズム毎に定義されている...
-RFC 7518 - JSON Web Algorithms (JWA) > 6. Cryptographic...
https://tools.ietf.org/html/rfc7518#section-6
***Parameters for Symmetric Keys [#r5be7fb8]
"kty"=octの場合(、合わせて、"alg"も必要)、~
"k"にbase64urlエンコードされたSymmetric Keysを保存する。
-[[サンプル - JWK Set - Symmetric Keys>#i6436458]]
***Parameters for RSA Keys [#abd89534]
-Parameters for RSA Public Keys
|#|値|説明|h
|1|n (必須)|Base64urlUIntでエンコードされたRSA公開鍵のモ...
|2|e (必須)|Base64urlUIntでエンコードされたRSA公開鍵の指...
-Parameters for RSA Private Keys
|#|値|説明|h
|1|d (必須)|Base64urlUIntでエンコードされた、RSA秘密鍵の...
|2|p (任意)|Base64urlUIntでエンコードされた、第1の素因数値|
|3|q (任意)|Base64urlUIntでエンコードされた、第2の素因数値|
|4|dp (任意)|Base64urlUIntでエンコードされた、第1のCRT指...
|5|dq (任意)|Base64urlUIntでエンコードされた、第2のCRT指...
|6|qi (任意)|Base64urlUIntでエンコードされた、第1(、第2...
|7|oth (任意)|Base64urlUIntでエンコードされた、3番目以降...
--oth~
詳しくは、RFC 3447も参照。
|#|値|説明|h
|1|r|Base64urlUIntでエンコードされた、3番目以降の素因数値|
|2|d|Base64urlUIntでエンコードされた、3番目以降のCRT指数値|
|3|t|Base64urlUIntでエンコードされた、3番目以降のCRT係数値|
*サンプル [#w3995313]
キー値の改行は掲載上の都合による。
**JWK [#q185a1f4]
***RSA [#md9069ea]
-RS256で使用するRSA-256~
[[FIDO]]2.0 の [[Web Authentication API]] が生成する公開鍵
{
"alg": "RS256",
"e": "AQAB",
"ext": false,
"kty": "RSA",
"n": "・・・"
}
-"x5c" (X.509 Certificate Chain)~
RSA 公開鍵と x5c に指定された X.509 証明書の両者で表現さ...
{
"kty":"RSA",
"use":"sig",
"kid":"1b94c",
"n":"vrjOfz9Ccdgx5nQudyhdoR17V-IubWMeOZCwX_jj0hgAsz2J_...
PLbK_PdiVGKPrqzmDIsLI7sA25VEnHU1uCLNwBuUiCO11_-7dYbsr4...
u2j8DsVyT1azpJC_NG84Ty5KKthuCaPod7iI7w0LK9orSMhBEwwZDC...
YWAchc8t-emd9qOvWtVMDC2BXksRngh6X5bUYLy6AyHKvj-nUy1wgz...
MTplCoLtU-o-8SNnZ1tmRoGE9uJkBLdh5gFENabWnU5m1ZqZPdwS-q...
VfJb6jJVWRpl2SUtCnYG2C32qvbWbjZ_jBPD5eunqsIo1vQ",
"e":"AQAB",
"x5c":
["MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGI...
gNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMR...
VQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5Ccmlhb...
wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIx...
NVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRw...
QQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5Ccmlhbi...
YmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64z...
YMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3Y...
s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7F...
SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIX...
fajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQ...
PvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW...
aZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhki...
QUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxm...
+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X...
zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fn...
2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9Ji...
4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxk...
gawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3I...
}
-Plaintext RSA Private Key~
認証付き暗号化オペレーションのための平文入力 (プレーンテ...
{
"kty":"RSA",
"kid":"juliet@capulet.lit",
"use":"enc",
"n":"t6Q8PWSi1dkJj9hTP8hNYFlvadM7DflW9mWepOJhJ66w7nyoK...
O125Gp-TEkodhWr0iujjHVx7BcV0llS4w5ACGgPrcAd6ZcSR0...
8Sjg086MwoqQU_LYywlAGZ21WSdS_PERyGFiNnj3QQlO8Yns5...
Pb1fEv45AuRIuUfVcPySBWYnDyGxvjYGDSM-AqWS9zIQ2Zilg...
OC0Cc20rgLe2ymLHjpHciCKVAbY5-L32-lSeZO-Os6U15_aXr...
_I8sLGuSiVdt3C_Fn2PZ3Z8i744FPFGGcG1qs2Wz-Q",
"e":"AQAB",
"d":"GRtbIQmhOZtyszfgKdg4u_N-R_mZGU_9k7JQ_jn1DnfTuMdSN...
NkuaAwnOEbIQVy1IQbWVV25NY3ybc_IhUJtfri7bAXYEReWaC...
vqPYGR0kIXTQRqns-dVJ7jahlI7LyckrpTmrM8dWBo4_PMaen...
ToxutRZJfJvG4Ox4ka3GORQd9CsCZ2vsUDmsXOfUENOyMqADC...
rY15k9qMSpG9OX_IJAXmxzAh_tWiZOwk2K4yxH9tS3Lq1yX8C...
hecG85-oLKQt5VEpWHKmjOi_gJSdSgqcN96X52esAQ",
"p":"2rnSOV4hKSN8sS4CgcQHFbs08XboFDqKum3sc4h3GRxrTmQdl...
QP0FkxXVrx-WE-ZEbrqivH_2iCLUS7wAl6XvARt1KkIaUxPPS...
UK96E3_OrADAYtAJs-M3JxCLfNgqh56HDnETTQhH3rCT5T3yJ...
"q":"1u_RiFDP7LBYh3N4GXLT9OpSKYP0uQZyiaZwBtOCBNJgQxaj1...
edis4S7B_coSKB0Kj9PaPaBzg-IySRvvcQuPamQu66riMhjVt...
rYl52ziqK0E_ym2QnkwsUX7eYTB7LbAHRK9GqocDE5B0f808I...
"dp":"KkMTWqBUefVwZ2_Dbj1pPQqyHSHjj90L5x_MOzqYAJMcLMZt...
tbEo3ZIcohbDtt6SbfmWzggabpQxNxuBpoOOf_a_HgMXK_lhq...
Y52IwjUn5rgRrJ-yYo1h41KR-vz2pYhEAeYrhttWtxVqLCRVi...
"dq":"AvfS0-gRxvn0bwJoMSnFxYcK1WnuEjQFluMGfwGitQBWtfZ1...
GQTB9yqpDoYaN06H7CFtrkxhJIBQaj6nkF5KKS3TQtQ5qCzkO...
mXxkb5qwUpX5ELD5xFc6FeiafWYY63TmmEAu_lRFCOJ3xDea-...
"qi":"lSQi-w9CpyUReMErP1RsBLk7wNtOvs5EQpPqmuMvqW57NBUc...
abu9V0-Py4dQ57_bapoKRu1R90bvuFnU63SHWEFglZQvJDMeA...
Yu_neotgQ0hzbI5gry7ajdYy9-2lNx_76aBZoOUu9HCJ-UsfS...
}
***Elliptic Curve DSA [#p243fb77]
P-256 Elliptic Curve の Elliptic Curve [DSS] 鍵
-x 座標と y 座標はそれぞれ base64url エンコードされている。
-またこの鍵自身の識別子 (kid) も含まれる。
{
"kty":"EC",
"crv":"P-256",
"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",
"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",
"kid":"Public key used in JWS spec Appendix A.3 example"
}
**JWK Set [#j8b14991]
***Public Keys [#od5799a4]
-2つの公開鍵
--1つ目は Elliptic Curve
---鍵が暗号化のために使用されていることを記している。
---鍵のマッチングの目的のために key ID を提供する。
--2つ目は RSA
---RS256 アルゴリズムで使用されていることを記している。
---鍵のマッチングの目的のために key ID を提供する。
{
"keys":
[
{
"kty":"EC",
"crv":"P-256",
"x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
"y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
"use":"enc",
"kid":"1"
},
{
"kty":"RSA",
"n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbW...
4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebW...
tn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h...
QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qM...
SD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr...
w0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
"e":"AQAB",
"alg":"RS256",
"kid":"2011-04-29"
}
]
}
***Private Keys [#ib0897f5]
-公開鍵と秘密鍵の値
--1つ目は Elliptic Curve
--2つ目は RSA
{
"keys":
[
{
"kty":"EC",
"crv":"P-256",
"x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
"y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
"d":"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE",
"use":"enc",
"kid":"1"
},
{
"kty":"RSA",
"n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbW...
cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWK...
n64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4...
vzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQ...
D08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3...
0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
"e":"AQAB",
"d":"X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJo...
M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv...
wp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUoh...
_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xo...
nbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2W...
me1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q",
"p":"83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWU...
nwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMj...
WlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEv...
"q":"3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCu...
qjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEio...
kIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4v...
"dp":"G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5...
YwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP...
YZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8...
"dq":"s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllET...
vMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BU...
GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18tx...
"qi":"GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQ...
UIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3...
yR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6I...
"alg":"RS256",
"kid":"2011-04-29"
}
]
}
***Symmetric Keys [#i6436458]
-2つの対象鍵
--1つ目は AES Key Wrap
--2つ目は HMAC key
{
"keys":
[
{
"kty":"oct",
"alg":"A128KW",
"k":"GawgguFyGrWKav7AX4VKUg"
},
{
"kty":"oct",
"k":"AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_...
aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow",
"kid":"HMAC key used in JWS spec Appendix A.1 ex...
]
}
*自作ライブラリ [#w4acaf5a]
**署名・暗号化アルゴリズム [#p4042a8b]
[[ココ>.NETの署名・暗号化アルゴリズム]]の署名・暗号化アル...
**RSAParameters [#r7acde95]
X.509証明書 ---> RSAParameters <---> JWK変換を考える。
***.NET [#o2fe6141]
.NETでは以下のようにできる模様。
-c# - Porting X509Certificate and CryptoConfig from .Net ...
https://stackoverflow.com/questions/43360576/porting-x509...
-ModulusとExponentを指定してRSAで暗号化/復号する(.NET) ...
http://backyard.hatenablog.com/entry/20161219/1482146423
-msdn.microsoft.com
--X509Certificate2 クラス (System.Security.Cryptography.X...
https://msdn.microsoft.com/ja-jp/library/system.security....
---RSACertificateExtensions.GetRSAPublicKey メソッド~
https://msdn.microsoft.com/ja-https://msdn.microsoft.com/...
--RSACryptoServiceProvider クラス (System.Security.Crypto...
https://msdn.microsoft.com/ja-jp/library/system.security....
---.ExportParameters Method~
https://msdn.microsoft.com/ja-jp/library/system.security....
---.ImportParameters Method~
https://msdn.microsoft.com/ja-jp/library/system.security....
--RSAParameters 構造体~
https://msdn.microsoft.com/ja-jp/library/system.security....
***他の言語 [#c5923194]
同じようなことは他の言語でも調査されている。
-How to parse a X.509 certificate and extract its public ...
https://connect2id.com/products/nimbus-jose-jwt/examples/...
-RubyでGoogleのJWKにあるmodulusとexponentからOpenSSLを使...
https://qiita.com/trysmr/items/e8d4225ff6a603e9e21a
*参考 [#d88bad0f]
-RFC 7517 - JSON Web Key (JWK)~
https://tools.ietf.org/html/rfc7517
-OAuth Revocation と JWK を翻訳しました - OAuth.jp~
http://oauth.jp/blog/2016/07/01/jwk-and-oauth-revocation-...
--JSON Web Key (JWK)~
http://openid-foundation-japan.github.io/rfc7517.ja.html
--JSON Web Key (JWK) Thumbprint~
http://openid-foundation-japan.github.io/rfc7638.ja.html
**mkjwk [#i59c77eb]
-mkjwk - JSON Web Key Generator~
https://mkjwk.org/
**Qiita [#lda1888a]
-WebCrypto APIでJSON Web Tokenの検証を試してみる~
http://qiita.com/tomoyukilabs/items/faa66805a440f4b30cfb
--Google OpenID Connectの場合、署名を検証するために必要と...
--一定時間ごとに更新されるため、署名の検証時にはその都度J...
https://www.googleapis.com/oauth2/v2/certs
**[[JWA - JWK用>JWA#y901bfc0]] [#xd6c0477]
----
Tags: [[:IT国際標準]], [[:プログラミング]], [[:通信技術]]...
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る(JWT)>JWT]]
--[[JWS]]
--[[JWE]]
* 目次 [#d18835c6]
#contents
*概要 [#jd402cd5]
以下の内容で最終確認済み。~
https://tools.ietf.org/html/rfc7517
-JWK : JSON Web Keyは、
--[[JWS]]や[[JWE]]などで利用する公開鍵を JSON 形式で表現...
[[FIDO]]2.0 の [[Web Authentication API]] が生成する公開...
--複数の JWK のセットである JWK Set JSON データ構造も定義...
OpenID Connect Discovery をサポートしている IdP は公開鍵...
-暗号アルゴリズムおよびその識別子は、[[JSON Web Algorithm...
**JSON Web Key (JWK) [#d905d797]
-暗号鍵を表現する JSON オブジェクト。
-このオブジェクトの各要素は、鍵の各プロパティを表現する。
**JWK Set [#j5494828]
-1セットの JWK の集合を表現する JSON オブジェクト。
-この JSON オブジェクトは必ず keys という要素を含み、その...
*詳細 [#p1b5801b]
**パラメタ(JWK) [#za196dbc]
***一覧 [#wc4698a3]
|#|キー|説明|h
|1|kty (必須)|key typeパラメタ。大文字・小文字を区別する...
|2|alg (任意)|algorithmパラメタ。大文字・小文字を区別する...
|3|kid (任意)|Key IDパラメタ。大文字・小文字を区別するが...
|4|use (任意)|public key useパラメタ。大文字・小文字を区...
|5|key_ops (任意)|key operationsパラメタ。大文字・小文字...
|6|x5u (任意)|X.509 URLパラメタ。X.509 公開鍵証明書や証明...
|7|x5c (任意)|X.509 certificate chainパラメタ。PKIX 証明...
|8|x5t (任意)|X.509 Certificate SHA-1 Thumbprintパラメタ...
|9|x5t#S256 (任意)|X.509 Certificate SHA-256 Thumbprintパ...
***alg [#z652c67f]
[[JWS]]・[[JWE]]用のalgは[[JWAのRFC>JWA]]を参照。
***use と key_ops [#e496fbe5]
-use と key_ops は同時に利用すべきではない。
-key_ops値
|#|値|説明|h
|1|sign|compute digital signature or MAC|
|2|verify|verify digital signature or MAC|
|3|encrypt|encrypt content|
|4|decrypt|decrypt content and validate decryption, if ap...
|5|wrapKey|encrypt key|
|6|unwrapKey|decrypt key and validate decryption, if appl...
|7|deriveKey|derive key|
|8|deriveBits|derive bits not to be used as a key|
***kty と kid [#uee91d10]
異なる鍵が同じ kid 値を持つケースがある。
>ktyは異なるが, アプリケーションからはそれらが~
互いに等価な代替手段であると考えられている場合。
**パラメタ(JWA) [#zb1db057]
[[パラメタ(JWK)>#za196dbc]]に含まれないパラメタは、~
[[JWAのRFC>#d88bad0f]]で、アルゴリズム毎に定義されている...
-RFC 7518 - JSON Web Algorithms (JWA) > 6. Cryptographic...
https://tools.ietf.org/html/rfc7518#section-6
***Parameters for Symmetric Keys [#r5be7fb8]
"kty"=octの場合(、合わせて、"alg"も必要)、~
"k"にbase64urlエンコードされたSymmetric Keysを保存する。
-[[サンプル - JWK Set - Symmetric Keys>#i6436458]]
***Parameters for RSA Keys [#abd89534]
-Parameters for RSA Public Keys
|#|値|説明|h
|1|n (必須)|Base64urlUIntでエンコードされたRSA公開鍵のモ...
|2|e (必須)|Base64urlUIntでエンコードされたRSA公開鍵の指...
-Parameters for RSA Private Keys
|#|値|説明|h
|1|d (必須)|Base64urlUIntでエンコードされた、RSA秘密鍵の...
|2|p (任意)|Base64urlUIntでエンコードされた、第1の素因数値|
|3|q (任意)|Base64urlUIntでエンコードされた、第2の素因数値|
|4|dp (任意)|Base64urlUIntでエンコードされた、第1のCRT指...
|5|dq (任意)|Base64urlUIntでエンコードされた、第2のCRT指...
|6|qi (任意)|Base64urlUIntでエンコードされた、第1(、第2...
|7|oth (任意)|Base64urlUIntでエンコードされた、3番目以降...
--oth~
詳しくは、RFC 3447も参照。
|#|値|説明|h
|1|r|Base64urlUIntでエンコードされた、3番目以降の素因数値|
|2|d|Base64urlUIntでエンコードされた、3番目以降のCRT指数値|
|3|t|Base64urlUIntでエンコードされた、3番目以降のCRT係数値|
*サンプル [#w3995313]
キー値の改行は掲載上の都合による。
**JWK [#q185a1f4]
***RSA [#md9069ea]
-RS256で使用するRSA-256~
[[FIDO]]2.0 の [[Web Authentication API]] が生成する公開鍵
{
"alg": "RS256",
"e": "AQAB",
"ext": false,
"kty": "RSA",
"n": "・・・"
}
-"x5c" (X.509 Certificate Chain)~
RSA 公開鍵と x5c に指定された X.509 証明書の両者で表現さ...
{
"kty":"RSA",
"use":"sig",
"kid":"1b94c",
"n":"vrjOfz9Ccdgx5nQudyhdoR17V-IubWMeOZCwX_jj0hgAsz2J_...
PLbK_PdiVGKPrqzmDIsLI7sA25VEnHU1uCLNwBuUiCO11_-7dYbsr4...
u2j8DsVyT1azpJC_NG84Ty5KKthuCaPod7iI7w0LK9orSMhBEwwZDC...
YWAchc8t-emd9qOvWtVMDC2BXksRngh6X5bUYLy6AyHKvj-nUy1wgz...
MTplCoLtU-o-8SNnZ1tmRoGE9uJkBLdh5gFENabWnU5m1ZqZPdwS-q...
VfJb6jJVWRpl2SUtCnYG2C32qvbWbjZ_jBPD5eunqsIo1vQ",
"e":"AQAB",
"x5c":
["MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGI...
gNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMR...
VQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5Ccmlhb...
wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIx...
NVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRw...
QQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5Ccmlhbi...
YmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64z...
YMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3Y...
s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7F...
SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIX...
fajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQ...
PvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW...
aZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhki...
QUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxm...
+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X...
zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fn...
2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9Ji...
4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxk...
gawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3I...
}
-Plaintext RSA Private Key~
認証付き暗号化オペレーションのための平文入力 (プレーンテ...
{
"kty":"RSA",
"kid":"juliet@capulet.lit",
"use":"enc",
"n":"t6Q8PWSi1dkJj9hTP8hNYFlvadM7DflW9mWepOJhJ66w7nyoK...
O125Gp-TEkodhWr0iujjHVx7BcV0llS4w5ACGgPrcAd6ZcSR0...
8Sjg086MwoqQU_LYywlAGZ21WSdS_PERyGFiNnj3QQlO8Yns5...
Pb1fEv45AuRIuUfVcPySBWYnDyGxvjYGDSM-AqWS9zIQ2Zilg...
OC0Cc20rgLe2ymLHjpHciCKVAbY5-L32-lSeZO-Os6U15_aXr...
_I8sLGuSiVdt3C_Fn2PZ3Z8i744FPFGGcG1qs2Wz-Q",
"e":"AQAB",
"d":"GRtbIQmhOZtyszfgKdg4u_N-R_mZGU_9k7JQ_jn1DnfTuMdSN...
NkuaAwnOEbIQVy1IQbWVV25NY3ybc_IhUJtfri7bAXYEReWaC...
vqPYGR0kIXTQRqns-dVJ7jahlI7LyckrpTmrM8dWBo4_PMaen...
ToxutRZJfJvG4Ox4ka3GORQd9CsCZ2vsUDmsXOfUENOyMqADC...
rY15k9qMSpG9OX_IJAXmxzAh_tWiZOwk2K4yxH9tS3Lq1yX8C...
hecG85-oLKQt5VEpWHKmjOi_gJSdSgqcN96X52esAQ",
"p":"2rnSOV4hKSN8sS4CgcQHFbs08XboFDqKum3sc4h3GRxrTmQdl...
QP0FkxXVrx-WE-ZEbrqivH_2iCLUS7wAl6XvARt1KkIaUxPPS...
UK96E3_OrADAYtAJs-M3JxCLfNgqh56HDnETTQhH3rCT5T3yJ...
"q":"1u_RiFDP7LBYh3N4GXLT9OpSKYP0uQZyiaZwBtOCBNJgQxaj1...
edis4S7B_coSKB0Kj9PaPaBzg-IySRvvcQuPamQu66riMhjVt...
rYl52ziqK0E_ym2QnkwsUX7eYTB7LbAHRK9GqocDE5B0f808I...
"dp":"KkMTWqBUefVwZ2_Dbj1pPQqyHSHjj90L5x_MOzqYAJMcLMZt...
tbEo3ZIcohbDtt6SbfmWzggabpQxNxuBpoOOf_a_HgMXK_lhq...
Y52IwjUn5rgRrJ-yYo1h41KR-vz2pYhEAeYrhttWtxVqLCRVi...
"dq":"AvfS0-gRxvn0bwJoMSnFxYcK1WnuEjQFluMGfwGitQBWtfZ1...
GQTB9yqpDoYaN06H7CFtrkxhJIBQaj6nkF5KKS3TQtQ5qCzkO...
mXxkb5qwUpX5ELD5xFc6FeiafWYY63TmmEAu_lRFCOJ3xDea-...
"qi":"lSQi-w9CpyUReMErP1RsBLk7wNtOvs5EQpPqmuMvqW57NBUc...
abu9V0-Py4dQ57_bapoKRu1R90bvuFnU63SHWEFglZQvJDMeA...
Yu_neotgQ0hzbI5gry7ajdYy9-2lNx_76aBZoOUu9HCJ-UsfS...
}
***Elliptic Curve DSA [#p243fb77]
P-256 Elliptic Curve の Elliptic Curve [DSS] 鍵
-x 座標と y 座標はそれぞれ base64url エンコードされている。
-またこの鍵自身の識別子 (kid) も含まれる。
{
"kty":"EC",
"crv":"P-256",
"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",
"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",
"kid":"Public key used in JWS spec Appendix A.3 example"
}
**JWK Set [#j8b14991]
***Public Keys [#od5799a4]
-2つの公開鍵
--1つ目は Elliptic Curve
---鍵が暗号化のために使用されていることを記している。
---鍵のマッチングの目的のために key ID を提供する。
--2つ目は RSA
---RS256 アルゴリズムで使用されていることを記している。
---鍵のマッチングの目的のために key ID を提供する。
{
"keys":
[
{
"kty":"EC",
"crv":"P-256",
"x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
"y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
"use":"enc",
"kid":"1"
},
{
"kty":"RSA",
"n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbW...
4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebW...
tn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h...
QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qM...
SD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr...
w0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
"e":"AQAB",
"alg":"RS256",
"kid":"2011-04-29"
}
]
}
***Private Keys [#ib0897f5]
-公開鍵と秘密鍵の値
--1つ目は Elliptic Curve
--2つ目は RSA
{
"keys":
[
{
"kty":"EC",
"crv":"P-256",
"x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
"y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
"d":"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE",
"use":"enc",
"kid":"1"
},
{
"kty":"RSA",
"n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbW...
cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWK...
n64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4...
vzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQ...
D08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3...
0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
"e":"AQAB",
"d":"X4cTteJY_gn4FYPsXB8rdXix5vwsg1FLN5E3EaG6RJo...
M7dx5oo7GURknchnrRweUkC7hT5fJLM0WbFAKNLWY2vv...
wp3RTzlBaCxWp4doFk5N2o8Gy_nHNKroADIkJ46pRUoh...
_cPVY3i07a3t8MN6TNwm0dSawm9v47UiCl3Sk5ZiG7xo...
nbJSzFHK66jT8bgkuqsk0GjskDJk19Z4qwjwbsnn4j2W...
me1z0HbIkfz0Y6mqnOYtqc0X4jfcKoAC8Q",
"p":"83i-7IvMGXoMXCskv73TKr8637FiO7Z27zv8oj6pbWU...
nwD20R-60eTDmD2ujnMt5PoqMrm8RfmNhVWDtjjMmCMj...
WlWEh6dN36GVZYk93N8Bc9vY41xy8B9RzzOGVQzXvNEv...
"q":"3dfOR9cuYq-0S-mkFLzgItgMEfFzB2q3hWehMuG0oCu...
qjVZQO1dIrdwgTnCdpYzBcOfW5r370AFXjiWft_NGEio...
kIdrecRezsZ-1kYd_s1qDbxtkDEgfAITAG9LUnADun4v...
"dp":"G4sPXkc6Ya9y8oJW9_ILj4xuppu0lzi_H7VTkS8xj5...
YwxIi2emTAue0UOa5dpgFGyBJ4c8tQ2VF402XRugKDTP...
YZc3C3m3I24G2GvR5sSDxUyAN2zq8Lfn9EUms6rY3Ob8...
"dq":"s9lAH9fggBsoFR8Oac2R_E2gw282rT2kGOAhvIllET...
vMfBcMpn8lqeW6vzznYY5SSQF7pMdC_agI3nG8Ibp1BU...
GF4Dh7e74WbRsobRonujTYN1xCaP6TO61jvWrX-L18tx...
"qi":"GyM_p6JrXySiz1toFgKbWV-JdI3jQ4ypu9rbMWx3rQ...
UIZEVFEcOqwemRN81zoDAaa-Bk0KWNGDjJHZDdDmFhW3...
yR8O55XLSe3SPmRfKwZI6yU24ZxvQKFYItdldUKGzO6I...
"alg":"RS256",
"kid":"2011-04-29"
}
]
}
***Symmetric Keys [#i6436458]
-2つの対象鍵
--1つ目は AES Key Wrap
--2つ目は HMAC key
{
"keys":
[
{
"kty":"oct",
"alg":"A128KW",
"k":"GawgguFyGrWKav7AX4VKUg"
},
{
"kty":"oct",
"k":"AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_...
aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow",
"kid":"HMAC key used in JWS spec Appendix A.1 ex...
]
}
*自作ライブラリ [#w4acaf5a]
**署名・暗号化アルゴリズム [#p4042a8b]
[[ココ>.NETの署名・暗号化アルゴリズム]]の署名・暗号化アル...
**RSAParameters [#r7acde95]
X.509証明書 ---> RSAParameters <---> JWK変換を考える。
***.NET [#o2fe6141]
.NETでは以下のようにできる模様。
-c# - Porting X509Certificate and CryptoConfig from .Net ...
https://stackoverflow.com/questions/43360576/porting-x509...
-ModulusとExponentを指定してRSAで暗号化/復号する(.NET) ...
http://backyard.hatenablog.com/entry/20161219/1482146423
-msdn.microsoft.com
--X509Certificate2 クラス (System.Security.Cryptography.X...
https://msdn.microsoft.com/ja-jp/library/system.security....
---RSACertificateExtensions.GetRSAPublicKey メソッド~
https://msdn.microsoft.com/ja-https://msdn.microsoft.com/...
--RSACryptoServiceProvider クラス (System.Security.Crypto...
https://msdn.microsoft.com/ja-jp/library/system.security....
---.ExportParameters Method~
https://msdn.microsoft.com/ja-jp/library/system.security....
---.ImportParameters Method~
https://msdn.microsoft.com/ja-jp/library/system.security....
--RSAParameters 構造体~
https://msdn.microsoft.com/ja-jp/library/system.security....
***他の言語 [#c5923194]
同じようなことは他の言語でも調査されている。
-How to parse a X.509 certificate and extract its public ...
https://connect2id.com/products/nimbus-jose-jwt/examples/...
-RubyでGoogleのJWKにあるmodulusとexponentからOpenSSLを使...
https://qiita.com/trysmr/items/e8d4225ff6a603e9e21a
*参考 [#d88bad0f]
-RFC 7517 - JSON Web Key (JWK)~
https://tools.ietf.org/html/rfc7517
-OAuth Revocation と JWK を翻訳しました - OAuth.jp~
http://oauth.jp/blog/2016/07/01/jwk-and-oauth-revocation-...
--JSON Web Key (JWK)~
http://openid-foundation-japan.github.io/rfc7517.ja.html
--JSON Web Key (JWK) Thumbprint~
http://openid-foundation-japan.github.io/rfc7638.ja.html
**mkjwk [#i59c77eb]
-mkjwk - JSON Web Key Generator~
https://mkjwk.org/
**Qiita [#lda1888a]
-WebCrypto APIでJSON Web Tokenの検証を試してみる~
http://qiita.com/tomoyukilabs/items/faa66805a440f4b30cfb
--Google OpenID Connectの場合、署名を検証するために必要と...
--一定時間ごとに更新されるため、署名の検証時にはその都度J...
https://www.googleapis.com/oauth2/v2/certs
**[[JWA - JWK用>JWA#y901bfc0]] [#xd6c0477]
----
Tags: [[:IT国際標準]], [[:プログラミング]], [[:通信技術]]...
ページ名: