「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る(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 のセットである JWK Set JSON データ構造も定義する。~ OpenID Connect Discovery をサポートしている IdP は公開鍵を JWK Set 形式で公開していることが多い。 -暗号アルゴリズムおよびその識別子は、[[JSON Web Algorithms (JWA) のRFC>JWA]]に記載 **JSON Web Key (JWK) [#d905d797] -暗号鍵を表現する JSON オブジェクト。 -このオブジェクトの各要素は、鍵の各プロパティを表現する。 **JWK Set [#j5494828] -1セットの JWK の集合を表現する JSON オブジェクト。 -この JSON オブジェクトは必ず keys という要素を含み、その要素は JWK の配列となる。 *詳細 [#p1b5801b] **パラメタ(JWK) [#za196dbc] ***一覧 [#wc4698a3] |#|キー|説明|h |1|kty (必須)|key typeパラメタ。大文字・小文字を区別する。&br;RSA や EC といった暗号アルゴリズムファミリを示す。| |2|alg (任意)|algorithmパラメタ。大文字・小文字を区別するASCII 文字列。&br;鍵で利用されるアルゴリズムを示す。| |3|kid (任意)|Key IDパラメタ。大文字・小文字を区別するが、値の構造は未定義。&br;鍵のロールオーバー時に JWK Set の中から必要な鍵を特定するなど、特定の鍵を識別するために用いられる。&br;[[JWS]] や [[JWE]] とともに利用する場合, Header に含まれる kid 値と一致させる。&br;kidの生成には、[[JWK Thumbprint>#d88bad0f]]という仕様が使用されることが多い。| |4|use (任意)|public key useパラメタ。大文字・小文字を区別する。&br;当該公開鍵の用途を示す。暗号化目的 (sig) or 署名検証目的 (enc) or その他| |5|key_ops (任意)|key operationsパラメタ。大文字・小文字を区別する。&br;公開鍵, 暗号鍵, 共通鍵のいずれのユースケースを想定した鍵のオペレーションを示す。| |6|x5u (任意)|X.509 URLパラメタ。X.509 公開鍵証明書や証明書チェーンといったリソースを指し示す URI。&br;リソースは、PEM エンコード形式で、チェーンの先頭の証明書と一致させ、HTTPSのGETで取得する。| |7|x5c (任意)|X.509 certificate chainパラメタ。PKIX 証明書(base64 エンコードされた DER 形式)のJSON 配列。&br;配列の先頭は、チェーンの先頭のPKIX 証明書で、その後に証明書を続けることもできる。| |8|x5t (任意)|X.509 Certificate SHA-1 Thumbprintパラメタ。&br;DER エンコードされた X.509 証明書 の SHA-1 thumbprint (a.k.a. digest) の base64url エンコード値。| |9|x5t#S256 (任意)|X.509 Certificate SHA-256 Thumbprintパラメタ。&br;DER エンコードされた X.509 証明書 の SHA-256 thumbprint (a.k.a. digest) の base64url エンコード値。| ***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 applicable| |5|wrapKey|encrypt key| |6|unwrapKey|decrypt key and validate decryption, if applicable| |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 Algorithms for Keys~ 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公開鍵の指数値(65537="AQAB")| -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)のCRT係数値。| |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 証明書の両者で表現される RSA 署名鍵の JWK 表現 { "kty":"RSA", "use":"sig", "kid":"1b94c", "n":"vrjOfz9Ccdgx5nQudyhdoR17V-IubWMeOZCwX_jj0hgAsz2J_pqYW08 PLbK_PdiVGKPrqzmDIsLI7sA25VEnHU1uCLNwBuUiCO11_-7dYbsr4iJmG0Q u2j8DsVyT1azpJC_NG84Ty5KKthuCaPod7iI7w0LK9orSMhBEwwZDCxTWq4a YWAchc8t-emd9qOvWtVMDC2BXksRngh6X5bUYLy6AyHKvj-nUy1wgzjYQDwH MTplCoLtU-o-8SNnZ1tmRoGE9uJkBLdh5gFENabWnU5m1ZqZPdwS-qo-meMv VfJb6jJVWRpl2SUtCnYG2C32qvbWbjZ_jBPD5eunqsIo1vQ", "e":"AQAB", "x5c": ["MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGIxCzAJB gNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYD VQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1 wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIxCzAJBg NVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDV QQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1w YmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64zn8/QnH YMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3YlRij66 s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7Fck9Ws6 SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIXPLfnpn fajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQqC7VPq PvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW+oyVVk aZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhkiG9w0BA QUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxmXl9KUL +9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X5CpOe1 zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fnk+fbEL 2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9JiSlYhzo 4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxkumGmTq gawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3IVfOWA=="] } -Plaintext RSA Private Key~ 認証付き暗号化オペレーションのための平文入力 (プレーンテキスト) { "kty":"RSA", "kid":"juliet@capulet.lit", "use":"enc", "n":"t6Q8PWSi1dkJj9hTP8hNYFlvadM7DflW9mWepOJhJ66w7nyoK1gPNqFMSQRy O125Gp-TEkodhWr0iujjHVx7BcV0llS4w5ACGgPrcAd6ZcSR0-Iqom-QFcNP 8Sjg086MwoqQU_LYywlAGZ21WSdS_PERyGFiNnj3QQlO8Yns5jCtLCRwLHL0 Pb1fEv45AuRIuUfVcPySBWYnDyGxvjYGDSM-AqWS9zIQ2ZilgT-GqUmipg0X OC0Cc20rgLe2ymLHjpHciCKVAbY5-L32-lSeZO-Os6U15_aXrk9Gw8cPUaX1 _I8sLGuSiVdt3C_Fn2PZ3Z8i744FPFGGcG1qs2Wz-Q", "e":"AQAB", "d":"GRtbIQmhOZtyszfgKdg4u_N-R_mZGU_9k7JQ_jn1DnfTuMdSNprTeaSTyWfS NkuaAwnOEbIQVy1IQbWVV25NY3ybc_IhUJtfri7bAXYEReWaCl3hdlPKXy9U vqPYGR0kIXTQRqns-dVJ7jahlI7LyckrpTmrM8dWBo4_PMaenNnPiQgO0xnu ToxutRZJfJvG4Ox4ka3GORQd9CsCZ2vsUDmsXOfUENOyMqADC6p1M3h33tsu rY15k9qMSpG9OX_IJAXmxzAh_tWiZOwk2K4yxH9tS3Lq1yX8C1EWmeRDkK2a hecG85-oLKQt5VEpWHKmjOi_gJSdSgqcN96X52esAQ", "p":"2rnSOV4hKSN8sS4CgcQHFbs08XboFDqKum3sc4h3GRxrTmQdl1ZK9uw-PIHf QP0FkxXVrx-WE-ZEbrqivH_2iCLUS7wAl6XvARt1KkIaUxPPSYB9yk31s0Q8 UK96E3_OrADAYtAJs-M3JxCLfNgqh56HDnETTQhH3rCT5T3yJws", "q":"1u_RiFDP7LBYh3N4GXLT9OpSKYP0uQZyiaZwBtOCBNJgQxaj10RWjsZu0c6I edis4S7B_coSKB0Kj9PaPaBzg-IySRvvcQuPamQu66riMhjVtG6TlV8CLCYK rYl52ziqK0E_ym2QnkwsUX7eYTB7LbAHRK9GqocDE5B0f808I4s", "dp":"KkMTWqBUefVwZ2_Dbj1pPQqyHSHjj90L5x_MOzqYAJMcLMZtbUtwKqvVDq3 tbEo3ZIcohbDtt6SbfmWzggabpQxNxuBpoOOf_a_HgMXK_lhqigI4y_kqS1w Y52IwjUn5rgRrJ-yYo1h41KR-vz2pYhEAeYrhttWtxVqLCRViD6c", "dq":"AvfS0-gRxvn0bwJoMSnFxYcK1WnuEjQFluMGfwGitQBWtfZ1Er7t1xDkbN9 GQTB9yqpDoYaN06H7CFtrkxhJIBQaj6nkF5KKS3TQtQ5qCzkOkmxIe3KRbBy mXxkb5qwUpX5ELD5xFc6FeiafWYY63TmmEAu_lRFCOJ3xDea-ots", "qi":"lSQi-w9CpyUReMErP1RsBLk7wNtOvs5EQpPqmuMvqW57NBUczScEoPwmUqq abu9V0-Py4dQ57_bapoKRu1R90bvuFnU63SHWEFglZQvJDMeAvmj4sm-Fp0o Yu_neotgQ0hzbI5gry7ajdYy9-2lNx_76aBZoOUu9HCJ-UsfSOI8" } ***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":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx 4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMs tn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2 QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbI SD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqb 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":"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" } ] } ***Symmetric Keys [#i6436458] -2つの対象鍵 --1つ目は AES Key Wrap --2つ目は HMAC key { "keys": [ { "kty":"oct", "alg":"A128KW", "k":"GawgguFyGrWKav7AX4VKUg" }, { "kty":"oct", "k":"AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75 aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow", "kid":"HMAC key used in JWS spec Appendix A.1 example"} ] } *自作ライブラリ [#w4acaf5a] **署名・暗号化アルゴリズム [#p4042a8b] [[ココ>.NETの署名・暗号化アルゴリズム]]の署名・暗号化アルゴリズムを使用すると良い。 **RSAParameters [#r7acde95] X.509証明書 ---> RSAParameters <---> JWK変換を考える。 ***.NET [#o2fe6141] .NETでは以下のようにできる模様。 -c# - Porting X509Certificate and CryptoConfig from .Net 4.5 to .Net Core - Stack Overflow~ https://stackoverflow.com/questions/43360576/porting-x509certificate-and-cryptoconfig-from-net-4-5-to-net-core -ModulusとExponentを指定してRSAで暗号化/復号する(.NET) - misc.log~ http://backyard.hatenablog.com/entry/20161219/1482146423 -msdn.microsoft.com --X509Certificate2 クラス (System.Security.Cryptography.X509Certificates)~ https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.x509certificates.x509certificate2.aspx ---RSACertificateExtensions.GetRSAPublicKey メソッド~ https://msdn.microsoft.com/ja-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.x509certificates.rsacertificateextensions.getrsapublickey.aspx --RSACryptoServiceProvider クラス (System.Security.Cryptography)~ https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rsacryptoserviceprovider.aspx ---.ExportParameters Method~ https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rsacryptoserviceprovider.exportparameters.aspx ---.ImportParameters Method~ https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rsacryptoserviceprovider.importparameters.aspx --RSAParameters 構造体~ https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rsaparameters.aspx ***他の言語 [#c5923194] 同じようなことは他の言語でも調査されている。 -How to parse a X.509 certificate and extract its public key | Connect2id~ https://connect2id.com/products/nimbus-jose-jwt/examples/parse-x509-certificate-extract-keys -RubyでGoogleのJWKにあるmodulusとexponentからOpenSSLを使って公開鍵を生成する - Qiita~ 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-translated/ --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 -WebCrypto APIでJSON Web Tokenの検証を試してみる - Qiita~ http://qiita.com/tomoyukilabs/items/faa66805a440f4b30cfb --Google OpenID Connectの場合、署名を検証するために必要となるJWKがWebサイト上で公開されている。 --一定時間ごとに更新されるため、署名の検証時にはその都度JWKの内容をWebサイトから取得する。~ https://www.googleapis.com/oauth2/v2/certs **[[JWA - JWK用>JWA#y901bfc0]] [#xd6c0477] ---- Tags: [[:IT国際標準]], [[:プログラミング]], [[:通信技術]], [[:認証基盤]], [[:クレームベース認証]], [[:暗号化]]