В спецификации JOSE (JSON Object Signing and Encryption),
используемой в JavaScript-библиотеке jose, тип ключа OKP
(Octet Key Pair) предназначен для современных эллиптических алгоритмов
на основе кривых в форме Монта/Эдвардса.
OKP объединяет несколько алгоритмов, каждый из которых решает отдельную задачу:
В JWK (JSON Web Key) такие ключи выглядят компактно и строго типизировано:
{
"kty": "OKP",
"crv": "Ed25519",
"x": "...",
"d": "..."
}
или для публичного ключа:
{
"kty": "OKP",
"crv": "X25519",
"x": "..."
}
Поле crv определяет конкретный алгоритм, а
x и d содержат координаты ключей в
base64url.
Ed25519 используется для криптографической подписи сообщений. Это реализация схемы EdDSA (Edwards-curve Digital Signature Algorithm) на кривой Curve25519.
import { generateKeyPair, SignJWT, jwtVerify } from 'jose'
const { publicKey, privateKey } = await generateKeyPair('Ed25519')
// подпись JWT
const jwt = await new SignJWT({ sub: '123' })
.setProtectedHeader({ alg: 'EdDSA' })
.sign(privateKey)
// проверка
const { payload } = await jwtVerify(jwt, publicKey)
alg: "EdDSA"crv: "Ed25519"Ed448 — более современная и криптографически «запасная» версия Ed25519, основанная на кривой Curve448.
Используется также для цифровых подписей, но с повышенным уровнем безопасности.
import { generateKeyPair, SignJWT, jwtVerify } from 'jose'
const { publicKey, privateKey } = await generateKeyPair('Ed448')
const jwt = await new SignJWT({ role: 'admin' })
.setProtectedHeader({ alg: 'EdDSA' })
.sign(privateKey)
const { payload } = await jwtVerify(jwt, publicKey)
EdDSAcrv: "Ed448"X25519 применяется для обмена ключами (Diffie–Hellman). Он используется для безопасного согласования общего секрета между двумя сторонами.
import { generateKeyPair, deriveKey } from 'jose'
const alice = await generateKeyPair('X25519')
const bob = await generateKeyPair('X25519')
// общий секрет со стороны Alice
const secretAlice = await deriveKey({
privateKey: alice.privateKey,
publicKey: bob.publicKey
})
crv: "X25519"X448 — расширенная версия X25519 с повышенным уровнем криптографической стойкости.
Используется для Diffie-Hellman обмена ключами, когда требуется более высокий запас безопасности.
import { generateKeyPair, deriveKey } from 'jose'
const alice = await generateKeyPair('X448')
const bob = await generateKeyPair('X448')
const shared = await deriveKey({
privateKey: alice.privateKey,
publicKey: bob.publicKey
})
crv: "X448"| Алгоритм | Назначение | Скорость | Уровень безопасности |
|---|---|---|---|
| Ed25519 | Подпись | Очень высокая | 128-bit |
| Ed448 | Подпись | Средняя | 224-bit |
| Алгоритм | Назначение | Скорость | Уровень безопасности |
|---|---|---|---|
| X25519 | ECDH | Очень высокая | 128-bit |
| X448 | ECDH | Средняя | 224-bit |
В библиотеке jose алгоритмы OKP интегрированы через стандартизированные JWK и JWS/JWE механизмы.
{
"kty": "OKP",
"crv": "Ed25519",
"x": "publicKey",
"d": "privateKey"
}
alg: "EdDSA"X25519 или X448