RSASSA-PKCS1v15 Quantum-vulnerable Renamed import 53 places See details
JOSE algorithm declared in configuration
An `alg` value in JSON or YAML. `none` is reported as a critical defect; HS* is an HMAC and is not quantum-vulnerable; RS*, PS*, ES* and EdDSA are.
A quantum computer of sufficient size breaks this completely. It has to be replaced, not tuned. Broken by Shor's algorithm on a cryptographically relevant quantum computer. The v1.5 signature scheme of RFC 8017 section 8.2 has no classical break of its own; RSA-PSS is preferred for new work, but the quantum exposure is the same for both.
What to do. No standardised post-quantum JOSE algorithm exists yet. Keep token lifetimes short.
-
src/main/java/com/google/crypto/tink/jwt/JwkSetConverter.java:277
case "RS256": -
src/main/java/com/google/crypto/tink/jwt/JwkSetConverter.java:280
case "RS384": -
src/main/java/com/google/crypto/tink/jwt/JwkSetConverter.java:283
case "RS512": -
src/main/java/com/google/crypto/tink/jwt/JwtRsaSsaPkcs1Parameters.java:90
public static final Algorithm RS256 = new Algorithm("RS256"); -
src/main/java/com/google/crypto/tink/jwt/JwtRsaSsaPkcs1Parameters.java:93
public static final Algorithm RS384 = new Algorithm("RS384"); -
src/main/java/com/google/crypto/tink/jwt/JwtRsaSsaPkcs1Parameters.java:96
public static final Algorithm RS512 = new Algorithm("RS512"); -
src/main/java/com/google/crypto/tink/jwt/internal/JwtFormat.java:97
case "RS256": -
src/main/java/com/google/crypto/tink/jwt/internal/JwtFormat.java:98
case "RS384": -
src/main/java/com/google/crypto/tink/jwt/internal/JwtFormat.java:99
case "RS512": -
src/main/java/com/google/crypto/tink/signature/SignatureJwkSetConverter.java:228
alg = "RS256"; -
src/main/java/com/google/crypto/tink/signature/SignatureJwkSetConverter.java:230
alg = "RS384"; -
src/main/java/com/google/crypto/tink/signature/SignatureJwkSetConverter.java:232
alg = "RS512"; -
src/main/java/com/google/crypto/tink/signature/SignatureJwkSetConverter.java:371
case "RS256": -
src/main/java/com/google/crypto/tink/signature/SignatureJwkSetConverter.java:374
case "RS384": -
src/main/java/com/google/crypto/tink/signature/SignatureJwkSetConverter.java:377
case "RS512": -
src/test/java/com/google/crypto/tink/jwt/JwkSetConverterTest.java:1066
test path
String psJwksString = jwksString.replace("RS256", "PS256"); -
src/test/java/com/google/crypto/tink/jwt/JwkSetConverterTest.java:1085
test path
String psJwksString = jwksString.replace("RS256", "PS256"); -
src/test/java/com/google/crypto/tink/jwt/JwkSetConverterTest.java:1130
test path
String psJwksString = jwksString.replace("RS256", "PS256"); -
src/test/java/com/google/crypto/tink/jwt/JwkSetConverterTest.java:1163
test path
String psJwksString = jwksString.replace("RS256", "PS256"); -
src/test/java/com/google/crypto/tink/jwt/JwkSetConverterTest.java:1177
test path
String psJwksString = jwksString.replace("RS256", "PS256"); -
src/test/java/com/google/crypto/tink/jwt/JwkSetConverterTest.java:1195
test path
String psJwksString = jwksString.replace("RS256", "PS256"); -
src/test/java/com/google/crypto/tink/jwt/JwkSetConverterTest.java:1213
test path
String psJwksString = jwksString.replace("RS256", "PS256"); -
src/test/java/com/google/crypto/tink/jwt/JwkSetConverterTest.java:1231
test path
String psJwksString = jwksString.replace("RS256", "PS256"); -
src/test/java/com/google/crypto/tink/jwt/JwkSetConverterTest.java:1249
test path
String psJwksString = jwksString.replace("RS256", "PS256"); -
src/test/java/com/google/crypto/tink/jwt/JwtHmacKeyManagerTest.java:644
test path
badAlgoHeader.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/JwtHmacKeyManagerTest.java:708
test path
headerWithBadAlg.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:42
test path
JwtFormat.decodeHeader(JwtFormat.createHeader("RS256", Optional.empty(), Optional.empty())); -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:50
test path
JwtFormat.createHeader("RS256", Optional.of("JWT"), Optional.empty())); -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:58
test path
JwtFormat.createHeader("RS256", Optional.of("JWT"), Optional.of("GsapRA"))); -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:192
test path
JwtFormat.createHeader("RS256", Optional.empty(), Optional.empty()))), -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:193
test path
"RS256", -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:207
test path
"RS256", -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:208
test path
"RS384", -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:209
test path
"RS512", -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:387
test path
String unsignedCompact = JwtFormat.createUnsignedCompact("RS256", Optional.empty(), rawJwt); -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:392
test path
JsonUtil.parseJson(parts.header), "RS256", Optional.empty(), true); -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:410
test path
String unsignedCompact = JwtFormat.createUnsignedCompact("RS256", Optional.empty(), rawJwt); -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:414
test path
JwtFormat.validateHeader(parsedHeader, "RS256", Optional.empty(), true); -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:431
test path
String unsignedCompact = JwtFormat.createUnsignedCompact("RS256", Optional.of(kid), rawJwt); -
src/test/java/com/google/crypto/tink/jwt/internal/JwtFormatTest.java:435
test path
JwtFormat.validateHeader(parsedHeader, "RS256", Optional.empty(), true); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtEcdsaPublicKeySignTest.java:165
test path
badAlgoHeader.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtHmacTest.java:487
test path
badAlgoHeader.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtHmacTest.java:550
test path
headerWithBadAlg.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtMlDsaPublicKeySignVerifyTest.java:306
test path
badAlgoHeader.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtMlDsaPublicKeySignVerifyTest.java:358
test path
headerWithBadAlg.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtRsaSsaPkcs1PublicKeySignTest.java:244
test path
goodHeader.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtRsaSsaPkcs1PublicKeySignTest.java:272
test path
unknownKidHeader.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtRsaSsaPkcs1PublicKeySignTest.java:322
test path
validHeader.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtRsaSsaPkcs1PublicKeySignTest.java:329
test path
headerWithoutKid.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtRsaSsaPkcs1PublicKeySignTest.java:351
test path
headerWithUnknownKid.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtRsaSsaPssPublicKeySignTest.java:265
test path
badAlgoHeader.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/jwt/subtle/JwtRsaSsaPssPublicKeySignTest.java:346
test path
headerWithBadAlg.addProperty("alg", "RS256"); -
src/test/java/com/google/crypto/tink/signature/SignatureJwkSetConverterTest.java:112
test path
assertThat(jsonKey.get("alg").getAsString()).isEqualTo("RS256");