- Необходим ресурс, который обеспечивает и показывает, как использовать эллиптическую кривую под названием Ed25519/Curve25519 вместе с сервером авторизации Spring-Boot.
- < br />
- Использование криптографии эллиптической кривой (EC), предоставляемой Spring-Boot
- Использование Ed25519 / Curve25519, поскольку он используется «заслуживающими доверия» организациями
Википедия – Curve25519 - Вещи, которые используют Ed25519
Открытый международный проект безопасности приложений (OWASP) – алгоритмы
- Генерация ключей -> JWK
- Шифрование (и дешифрование) -> JWE
- Подписание -> JWS
- Генерация токена -> JWT
Настройка
- Java: 21
- Spring Boot: v3.2.x< br />
- spring-security-oauth2-authorization-server: 1.2.x
< ul>
[*]Spring-Boot внутренне использует библиотеку com.nimbusds.jose (начиная с ~2020 г., ~v5.1).
- Аналогично вопросы задавались «до 2018 года» (наверное)
- Поддерживается RSA
- Эллиптические кривые поддерживаются (как правило)
Использование «Ed25519 / Curve25519» – неизвестно
Тем не менее, существует несколько классов, которые предлагают EC-функциональность вокруг Ed25519 / Curve25519.
Генерация ключей , совместимо с java.security.KeyPair
Код: Выделить всё
static KeyPair generateEcKeyPairUsingEd25519() {
KeyPair keyPair;
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("Ed25519");
keyPair = keyPairGenerator.generateKeyPair();
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException("JVM does not support Ed25519 algorithm", e);
}
return keyPair;
}
Код: Выделить всё
import java.security.interfaces.EdECPrivateKey;
import java.security.interfaces.EdECPublicKey;
KeyPair ecKeyPair = generateEcKeyPairUsingEd25519()
EdECPublicKey edEcPublicKey = (EdECPublicKey) ecKeyPair.getPublic();
EdECPrivateKey edEcPrivateKey = (EdECPrivateKey) ecKeyPair.getPrivate();
- Это уже слишком глубоко в кроличьей норе?
- Использует ли Spring-Boot Ed25519 для JWK, JWE, JWS и JWT без моего ведома?
- Есть ли подходящий Ed25519/Curve25519 эталонная реализация?
Spring Boot: v3.2.x
Код: Выделить всё
org.springframework.boot
spring-boot-starter-oauth2-resource-server
${spring-boot.version}
Пары ключей, показанные выше, могут быть сгенерированы, но, насколько мне известно, их нельзя использовать в приведенном ниже примере.
Пример
Код: Выделить всё
@Bean
public JwtDecoder jwtDecoder() {
KeyPair keyPair = this.getKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
return NimbusJwtDecoder.withPublicKey(rsaPublicKey).build();
}
@Bean
JwtEncoder jwtEncoder() {
KeyPair keyPair = this.getKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
JWK jwk = new RSAKey.Builder(rsaPublicKey)
.privateKey(rsaPrivateKey).build();
JWKSource jwks = new ImmutableJWKSet(new JWKSet(jwk));
return new NimbusJwtEncoder(jwks);
}
- How to use Ed25519 / Curve25519 with SpringBoot for JWK, JWE, JWS and JWT security?
Источник: https://stackoverflow.com/questions/781 ... jwt-securi