JWK (JSON Web Key) представляет собой стандартизированное JSON-представление криптографического ключа, используемое в экосистеме JOSE (JSON Object Signing and Encryption). В контексте JavaScript-библиотеки jose работа с JWK является базовым механизмом для описания, хранения и передачи ключей, применяемых в операциях подписи, шифрования и верификации.
Структура JWK строго определена спецификацией и включает набор обязательных и опциональных параметров, определяющих тип ключа, его назначение, алгоритмические ограничения и метаданные.
Поле kty определяет криптографическую природу ключа и
является обязательным.
Основные значения:
RSA — RSA ключи (широко используются в JWT подписи и
TLS)EC — эллиптические кривые (ECDSA, ECDH)oct — симметричные ключи (HMAC, AES)OKP — кривые Ed25519 / X25519Библиотека jose использует kty для выбора
алгоритмической стратегии обработки ключа. Например:
{
"kty": "RSA"
}
Поле use определяет предполагаемое использование ключа
на высоком уровне.
Основные значения:
sig — подпись (signature)enc — шифрование (encryption)use не является строгим ограничением, но служит
декларативным маркером для систем, проверяющих соответствие ключа
операции.
Пример:
use: "sig" применяется для JWT подписиuse: "enc" применяется для JWE шифрования{
"use": "sig"
}
Поле key_ops задаёт детализированный список операций,
которые разрешены для конкретного ключа. В отличие от use,
оно более строгое и функционально ориентированное.
sign — создание подписиverify — проверка подписиencrypt — шифрованиеdecrypt — расшифрованиеwrapKey — обёртка ключаunwrapKey — развёртка ключаderiveKey — вывод ключаderiveBits — вывод битового материалаuse — общее назначениеkey_ops — конкретные разрешённые действияВ jose библиотеке key_ops часто используется для
строгого контроля безопасности, особенно в мультиключевых системах.
{
"key_ops": ["sign", "verify"]
}
Поле alg фиксирует алгоритм, для которого предназначен
ключ. Это ограничивает использование ключа только указанным
криптографическим алгоритмом.
RS256 — RSA + SHA-256ES256 — ECDSA P-256 + SHA-256HS256 — HMAC + SHA-256EdDSA — Ed25519При наличии alg библиотека jose может:
{
"alg": "RS256"
}
Поле kid (Key ID) используется для идентификации ключа в
наборе ключей (JWKS — JSON Web Key Set).
При верификации токена библиотека jose использует kid из
заголовка JWT для выбора соответствующего ключа из JWKS.
{
"kid": "2026-01-signing-key"
}
Поле x5c содержит массив сертификатов X.509,
соответствующих ключу.
Библиотека jose может извлекать публичный ключ из x5c,
если он отсутствует в явном виде.
{
"x5c": [
"MIID...AB",
"MIIF...CD"
]
}
Поле x5t содержит SHA-1 хеш (отпечаток) сертификата
X.509.
x5c{
"x5t": "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"
}
В реальных системах параметры JWK не используются изолированно. Их комбинации формируют строгую модель безопасности:
{
"kty": "RSA",
"use": "sig",
"alg": "RS256",
"kid": "key-1",
"key_ops": ["sign", "verify"]
}
{
"kty": "RSA",
"use": "sig",
"alg": "RS256",
"kid": "cert-key",
"x5c": [
"MIID..."
],
"x5t": "abc123..."
}
В экосистеме jose JWK является центральной структурой, через которую проходят:
importJWK)exportJWK)jwtVerify)SignJWT)createRemoteJWKSet)Каждое поле JWK участвует в принятии решений о:
RSA ключ с alg: ES256 приведёт к ошибке
несовместимости.
Отсутствие key_ops приводит к неявному разрешению всех
операций, что снижает контроль безопасности.
Одинаковые kid в разных ключах создают неоднозначность
при выборе ключа.
SHA-1 отпечатки считаются криптографически устаревшими и могут быть отключены в современных политиках безопасности.
JWK представляет не просто контейнер для ключа, а декларативную модель ограничений и контекста:
kty)use)key_ops)alg)kid)x5c, x5t)Библиотека jose опирается на эти поля для построения строгой, предсказуемой и проверяемой модели криптографических операций в JavaScript-среде.