Алгоритмы
Каждый алгоритм, поддерживаемый Flytachi JWT, материал ключа, который каждый из них ожидает, и то, как на них отображаются типы ключей JWK. Это авторитетный список — другие страницы ссылаются сюда.
Поддерживаемые алгоритмы
Девять алгоритмов в трёх семействах. Значение в заголовке alg должно быть одним из
них, иначе encode()/decode() выбрасывает «Algorithm ‘…’ is not supported.»
alg |
Семейство | Механизм | Хеш | Материал ключа |
|---|---|---|---|---|
HS256 |
HMAC | hash_hmac |
SHA-256 | строка общего секрета |
HS384 |
HMAC | hash_hmac |
SHA-384 | строка общего секрета |
HS512 |
HMAC | hash_hmac |
SHA-512 | строка общего секрета |
RS256 |
RSA | openssl_sign |
SHA-256 | пара ключей RSA |
RS384 |
RSA | openssl_sign |
SHA-384 | пара ключей RSA |
RS512 |
RSA | openssl_sign |
SHA-512 | пара ключей RSA |
ES256 |
ECDSA | openssl_sign |
SHA-256 | пара ключей EC (P-256) |
ES384 |
ECDSA | openssl_sign |
SHA-384 | пара ключей EC (P-384) |
ES512 |
ECDSA | openssl_sign |
SHA-512 | пара ключей EC (P-521) |
Симметричные против асимметричных
HMAC (HS*) |
RSA / ECDSA (RS* / ES*) |
|
|---|---|---|
| Ключ подписи | общий секрет | приватный ключ |
| Ключ проверки | тот же общий секрет | публичный ключ |
| Выбор ключа при decode | первый ключ в списке | сопоставляется по kid |
нужен kid |
нет | да |
| Кто может подделать | любой, у кого есть секрет | только держатель приватного ключа |
Алгоритм привязан к ключу
И PrivateKey, и PublicKey несут свой алгоритм. При decode алгоритм ключа проверки
должен совпадать с alg из заголовка токена — несовпадение отвергается до
проверки. См. Модель безопасности.
Типы ключей JWK
Парсер JWK принимает три стандартных значения kty и отображает их на семейства
выше:
kty |
Обязательные поля JWK | Проверяет | Поле кривой |
|---|---|---|---|
RSA |
n, e, alg |
RS* |
— |
EC |
crv, x, y, alg |
ES* |
crv (ниже) |
oct |
k, alg |
HS* |
— |
Соответствие кривых EC
JWK crv |
Алгоритм | Размер координаты |
|---|---|---|
P-256 |
ES256 |
32 байта |
P-384 |
ES384 |
48 байт |
P-521 |
ES512 |
66 байт |
Любая другая кривая выбрасывает «Unsupported EC curve». См. Проверка через JWKS для разбора наборов ключей.
Генерация ключей по семействам
# HMAC — случайный общий секрет
openssl rand -base64 32
# RSA — пара ключей на 2048 бит
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem
# ECDSA (ES256) — пара ключей P-256
openssl ecparam -name prime256v1 -genkey -noout -out ec-private.pem
openssl ec -in ec-private.pem -pubout -out ec-public.pemДля ES384 используйте -name secp384r1; для ES512 используйте -name secp521r1.
Связанное
- Асимметричные ключи — RSA и ECDSA от начала до конца
- HMAC-токены — подпись общим секретом
- Модель безопасности — почему привязка алгоритма важна