Sécuriser les Applications Java
Contre les Menaces Quantiques
https://bsky.app/profile/ammbra1508.bsky.social
https://mastodon.social/@ammbra1508
https://github.com/ammbra
https://twitter.com/ammbra1508
“DevOps Tools for Java Developers” autrice invité
Objectifs
Comprendre l'urgence de faire
progresser la cryptographie
quantique
Explorer les solutions et les norms
de sécurité
Utilisez la sécurité JDK pour créer
des applications résilientes
Pourquoi est la cryptographie
quantique importante aujourd’hui ?
Incident impliquant vos informations personnelles
We’re writing to inform you that some of your personal data shared with one of our
contractors was involved in a recent security incident.
The data was encrypted using industry-standard cryptographic methods. While the
encrypted files were accessed by an unauthorized party, they remain
undecipherable.
We are actively investigating and reinforcing our systems for added protection.
You do not need to take any action at this time, but we remain available for any
questions.
Les mathématiques derrière la cryptographie
moderne (ECC)
La cryptographie à courbes elliptiques (ECC) est
une approche cryptographique moderne basée sur la
structure algébrique des courbes elliptiques sur des
corps finis.
Elliptic Curve
Equation
y2=x3+ax+b mod p
where a,b∈𝐹p and
4a3+27b2≠0
Finite Fields
(Fp)
operations are
done modulo a
prime p
Point Addition
Scalar
Multiplication
La cryptographie à courbes elliptiques (ECC) est
une approche cryptographique moderne basée sur la
structure algébrique des courbes elliptiques sur des
corps finis.
Elliptic Curve
Equation
y2=x3+ax+b mod p
where a,b∈𝐹p and
4a3+27b2≠0
Finite Fields
(Fp)
operations are
done modulo a
prime p
Point Addition
given
points P and Q on
the curve,
define R=P+Q with
algebraic rules
Scalar
Multiplication
the basis of
ECC key
exchange and
signatures
Les mathématiques derrière la cryptographie
moderne (ECC)
Applications cryptographiques
Clés plus petites: 256-
bit ECC ≈ 3072-bit
RSA
Des calculs plus
rapides et une
utilisation réduite des
ressources
ECDSA
Elliptic Curve Digital
Signature Algorithm
ECDH
Elliptic Curve Diffie-Hellman for
Secure Key Exchange
Steal Now, Decrypt Later
Source: https://pixabay.com/photos/keyboard-hands-hacker-hack-4356763/
La puissance des ordinateurs quantiques
Source: https://cloudsecurityalliance.org/research/working-groups/quantum-safe-security
Source: https://www.quantamagazine.org/john-preskill-explains-quantum-supremacy-20191002
Une nouvelle approche mathématique
L={a⋅b1+b⋅b2 ∣ a,b ∈ 𝕫 }
Cryptographie basée sur les reseaux modulaires
Reseaux (lattice): est une grille discrète de points dans ℝn, définie comme des combinaisons
entières de vecteurs linéairement indépendants.
Reseaux modulaires (module lattice): généralise ceci sur des anneaux de polynômes.
Les KEM basés sur des réseaux s'appuient sur des problèmes mathématiques tels que
l'apprentissage avec erreurs ou l'apprentissage en anneau avec erreurs.
Ce sont des problèmes NP-difficiles pour les ordinateurs quantiques.
Normes de sécurité avant-gardistes
Une norme de chiffrement général,
basée sur ML-KEM
La principale norme de protection des signatures
numériques, basée sur ML-DSA
Source: https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards
Amélioration de la sécurité du JDK
JEP 452: Key Encapsulation Mechanism API
JDK 21
• JEP 478: Key Derivation Function API (Preview)
• JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism
• JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
JEP 510: Key Derivation Function API
JDK 25
JDK 24
La sécurité du système doit évoluer
Source: https://media.defense.gov/2022/Sep/07/2003071836/-1/-1/0/CSI_CNSA_2.0_FAQ_.PDF
Vers la cryptographie
(post)quantique
Hybrid Public Key Encryption (HPKE)
Une nouvelle norme de cryptage à clé
publique qui permet à un expéditeur de crypter
des messages de longueur arbitraire sous la clé
publique d’un destinataire.
Peut être utilisé pour une communication
sécurisée pré-quantique ou post-quantique.
Stratégie en couches pour la sécurité quantique
“HPKE works for any combination of an asymmetric KEM, key
derivation function (KDF), and authenticated encryption with additional
data (AEAD) encryption function.”
Source: RFC 9180 on Hybrid Public Key Encryption
Adopter HPKE en Java via KEM (1)
Receiver
Public Key
Receiver
Private Key
Sender Receiver
KeyGen
API KeyPairGenerator
Adopter HPKE en Java via KEM (2)
Encapsulation
Receiver
Public Key
Receiver
Private Key
Sender Receiver
Adopter HPKE en Java via KEM (3)
Encapsulation
Receiver
Public Key
Receiver
Private Key
Sender Receiver
Encapsulated Shared Secret
Adopter HPKE en Java via KEM (4)
Encapsulation Decapsulation
Receiver
Public Key
Receiver
Private Key
Sender Receiver
Encapsulated Shared Secret
De KEM à la fonction de dérivation de clé
Chaque fonction de dérivation de clé comporte deux opérations fondamentales.
Instanciation et initialisation via
KDF::getInstance
Dérivation, qui accepte le matériel clé, d'autres entrées et paramètres
facultatifs pour décrire la sortie, puis génère la clé dérivée
(KDF::deriveKey) ou des données(KDF::deriveData).
Key Derivation Function API (KDF) via la classe javax.crypto.KDF et trois sous-classes HKDFParameterSpec.
HPKE = KDF+KEM+AEAD
Encapsulation Decapsulation
Decrypt
Encrypt
Encrypted Message
Receiver
Public Key
Receiver
Private Key
Message Message
Shared Context
Details
Shared Context
Details
Sender Receiver
Encapsulated Shared Secret
Outils JDK utiles
Générer des paires de clés ML-KEM
1. Générer la paire de clés EC
keytool -genkeypair -alias $SERVER_ALIAS -keyalg ec 
-dname “CN=localhost, OU=Dev, O=MyOrg” -validity 365 
-keystore server.p12 -storetype PKCS12 -storepass $PWD -keypass $PWD
2. Générer la paire de clés ML-KEM et le certificat signé avec la clé EC
keytool -keystore server.p12 -storepass $PASSWORD 
-genkeypair -alias server-mlkem 
-keyalg ML-KEM-768 -dname CN=CA-ML-KEM 
-signer $SERVER_ALIAS
Générer des paires de clés ML-DSA
keytool -genkeypair -alias $SERVER_ALIAS -keyalg ML-DSA –groupname ML-DSA-87 
-dname "CN=localhost, OU=Dev, O=MyOrg, L=City, ST=State, C=US" 
-validity 365 -keystore server.p12 
-storetype PKCS12 -storepass $PASSWORD -keypass $PASSWORD
# ou fournissez le nom du jeu de paramètres, ML-DSA-87, directement via –keyalg
keytool -genkeypair -alias $SERVER_ALIAS -keyalg ML-DSA-87 
-dname "CN=localhost, OU=Dev, O=MyOrg, L=City, ST=State, C=US" 
-validity 365 -keystore server.p12 
-storetype PKCS12 -storepass $PASSWORD -keypass $PASSWORD
Inspecter les négociations TLS réussies
# démarrer un enregistrement
jcmd llvmid JFR.start duration=60s filename=/tmp/TLS.jfr
# utiliser la commande jfr print
$JAVA_HOME/bin/jfr print --events "TLS*" /tmp/TLS.jfr
jdk.TLSHandshake {
...
peerHost = "google.com"
peerPort = 8443
protocolVersion = "TLSv1.3"
cipherSuite = "TLS_AES_128_GCM_SHA256"
...
}
Informations importantes sur les certificats X.509
# activez les options dans votre fichier de configuration JFR
<event name="jdk.X509Certificate">
<setting name="enabled">true</setting>
<setting name="stackTrace">true</setting>
</event>
<event name="jdk.X509Validation">
<setting name="enabled">true</setting>
<setting name="stackTrace">true</setting>
</event>
# ou exécutez la commande jfr configure dans une fenêtre de terminal
$JAVA_HOME/bin/jfr configure jdk.X509Certificate#enabled=true
jdk.X509Validation#enabled=true
N'oubliez pas de supprimer les données sensibles
• Filtrer les données du fichier d’enregistrement spécifié.
jfr scrub [filters] [recording-file] [output-file]
• Indiquez les événements à inclure.
jfr scrub --include-events jdk.X509Certificate,jdk.X509Validation rec.jfr
• Inclure une catégorie et exclure des événements.
jfr scrub --include-categories Security --exclude-events jdk.X509Validation rec.jfr
• Supprimer tous les événements par catégorie: jfr scrub --exclude-categories Security rec.jfr
Quelle est la prochaine étape pour vous ?
Auditez vos actifs chiffrés.
Prenez soin de votre application en la mettant à jour vers un JDK
recent.
Ne présumez pas que crypté = sûr (pour toujours)
Ne manquez pas la suite!
inside.java
dev.java youtube.com/java

Sécuriser les Applications Java Contre les Menaces Quantiques

  • 1.
    Sécuriser les ApplicationsJava Contre les Menaces Quantiques
  • 2.
  • 3.
    Objectifs Comprendre l'urgence defaire progresser la cryptographie quantique Explorer les solutions et les norms de sécurité Utilisez la sécurité JDK pour créer des applications résilientes
  • 4.
    Pourquoi est lacryptographie quantique importante aujourd’hui ?
  • 5.
    Incident impliquant vosinformations personnelles We’re writing to inform you that some of your personal data shared with one of our contractors was involved in a recent security incident. The data was encrypted using industry-standard cryptographic methods. While the encrypted files were accessed by an unauthorized party, they remain undecipherable. We are actively investigating and reinforcing our systems for added protection. You do not need to take any action at this time, but we remain available for any questions.
  • 6.
    Les mathématiques derrièrela cryptographie moderne (ECC) La cryptographie à courbes elliptiques (ECC) est une approche cryptographique moderne basée sur la structure algébrique des courbes elliptiques sur des corps finis. Elliptic Curve Equation y2=x3+ax+b mod p where a,b∈𝐹p and 4a3+27b2≠0 Finite Fields (Fp) operations are done modulo a prime p Point Addition Scalar Multiplication
  • 7.
    La cryptographie àcourbes elliptiques (ECC) est une approche cryptographique moderne basée sur la structure algébrique des courbes elliptiques sur des corps finis. Elliptic Curve Equation y2=x3+ax+b mod p where a,b∈𝐹p and 4a3+27b2≠0 Finite Fields (Fp) operations are done modulo a prime p Point Addition given points P and Q on the curve, define R=P+Q with algebraic rules Scalar Multiplication the basis of ECC key exchange and signatures Les mathématiques derrière la cryptographie moderne (ECC)
  • 8.
    Applications cryptographiques Clés pluspetites: 256- bit ECC ≈ 3072-bit RSA Des calculs plus rapides et une utilisation réduite des ressources ECDSA Elliptic Curve Digital Signature Algorithm ECDH Elliptic Curve Diffie-Hellman for Secure Key Exchange
  • 9.
    Steal Now, DecryptLater Source: https://pixabay.com/photos/keyboard-hands-hacker-hack-4356763/
  • 10.
    La puissance desordinateurs quantiques Source: https://cloudsecurityalliance.org/research/working-groups/quantum-safe-security Source: https://www.quantamagazine.org/john-preskill-explains-quantum-supremacy-20191002
  • 11.
    Une nouvelle approchemathématique L={a⋅b1+b⋅b2 ∣ a,b ∈ 𝕫 }
  • 12.
    Cryptographie basée surles reseaux modulaires Reseaux (lattice): est une grille discrète de points dans ℝn, définie comme des combinaisons entières de vecteurs linéairement indépendants. Reseaux modulaires (module lattice): généralise ceci sur des anneaux de polynômes. Les KEM basés sur des réseaux s'appuient sur des problèmes mathématiques tels que l'apprentissage avec erreurs ou l'apprentissage en anneau avec erreurs. Ce sont des problèmes NP-difficiles pour les ordinateurs quantiques.
  • 13.
    Normes de sécuritéavant-gardistes Une norme de chiffrement général, basée sur ML-KEM La principale norme de protection des signatures numériques, basée sur ML-DSA Source: https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards
  • 14.
    Amélioration de lasécurité du JDK JEP 452: Key Encapsulation Mechanism API JDK 21 • JEP 478: Key Derivation Function API (Preview) • JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism • JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm JEP 510: Key Derivation Function API JDK 25 JDK 24
  • 15.
    La sécurité dusystème doit évoluer Source: https://media.defense.gov/2022/Sep/07/2003071836/-1/-1/0/CSI_CNSA_2.0_FAQ_.PDF
  • 16.
  • 17.
    Hybrid Public KeyEncryption (HPKE) Une nouvelle norme de cryptage à clé publique qui permet à un expéditeur de crypter des messages de longueur arbitraire sous la clé publique d’un destinataire. Peut être utilisé pour une communication sécurisée pré-quantique ou post-quantique.
  • 18.
    Stratégie en couchespour la sécurité quantique “HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function.” Source: RFC 9180 on Hybrid Public Key Encryption
  • 19.
    Adopter HPKE enJava via KEM (1) Receiver Public Key Receiver Private Key Sender Receiver KeyGen API KeyPairGenerator
  • 20.
    Adopter HPKE enJava via KEM (2) Encapsulation Receiver Public Key Receiver Private Key Sender Receiver
  • 21.
    Adopter HPKE enJava via KEM (3) Encapsulation Receiver Public Key Receiver Private Key Sender Receiver Encapsulated Shared Secret
  • 22.
    Adopter HPKE enJava via KEM (4) Encapsulation Decapsulation Receiver Public Key Receiver Private Key Sender Receiver Encapsulated Shared Secret
  • 23.
    De KEM àla fonction de dérivation de clé Chaque fonction de dérivation de clé comporte deux opérations fondamentales. Instanciation et initialisation via KDF::getInstance Dérivation, qui accepte le matériel clé, d'autres entrées et paramètres facultatifs pour décrire la sortie, puis génère la clé dérivée (KDF::deriveKey) ou des données(KDF::deriveData). Key Derivation Function API (KDF) via la classe javax.crypto.KDF et trois sous-classes HKDFParameterSpec.
  • 24.
    HPKE = KDF+KEM+AEAD EncapsulationDecapsulation Decrypt Encrypt Encrypted Message Receiver Public Key Receiver Private Key Message Message Shared Context Details Shared Context Details Sender Receiver Encapsulated Shared Secret
  • 25.
  • 26.
    Générer des pairesde clés ML-KEM 1. Générer la paire de clés EC keytool -genkeypair -alias $SERVER_ALIAS -keyalg ec -dname “CN=localhost, OU=Dev, O=MyOrg” -validity 365 -keystore server.p12 -storetype PKCS12 -storepass $PWD -keypass $PWD 2. Générer la paire de clés ML-KEM et le certificat signé avec la clé EC keytool -keystore server.p12 -storepass $PASSWORD -genkeypair -alias server-mlkem -keyalg ML-KEM-768 -dname CN=CA-ML-KEM -signer $SERVER_ALIAS
  • 27.
    Générer des pairesde clés ML-DSA keytool -genkeypair -alias $SERVER_ALIAS -keyalg ML-DSA –groupname ML-DSA-87 -dname "CN=localhost, OU=Dev, O=MyOrg, L=City, ST=State, C=US" -validity 365 -keystore server.p12 -storetype PKCS12 -storepass $PASSWORD -keypass $PASSWORD # ou fournissez le nom du jeu de paramètres, ML-DSA-87, directement via –keyalg keytool -genkeypair -alias $SERVER_ALIAS -keyalg ML-DSA-87 -dname "CN=localhost, OU=Dev, O=MyOrg, L=City, ST=State, C=US" -validity 365 -keystore server.p12 -storetype PKCS12 -storepass $PASSWORD -keypass $PASSWORD
  • 28.
    Inspecter les négociationsTLS réussies # démarrer un enregistrement jcmd llvmid JFR.start duration=60s filename=/tmp/TLS.jfr # utiliser la commande jfr print $JAVA_HOME/bin/jfr print --events "TLS*" /tmp/TLS.jfr jdk.TLSHandshake { ... peerHost = "google.com" peerPort = 8443 protocolVersion = "TLSv1.3" cipherSuite = "TLS_AES_128_GCM_SHA256" ... }
  • 29.
    Informations importantes surles certificats X.509 # activez les options dans votre fichier de configuration JFR <event name="jdk.X509Certificate"> <setting name="enabled">true</setting> <setting name="stackTrace">true</setting> </event> <event name="jdk.X509Validation"> <setting name="enabled">true</setting> <setting name="stackTrace">true</setting> </event> # ou exécutez la commande jfr configure dans une fenêtre de terminal $JAVA_HOME/bin/jfr configure jdk.X509Certificate#enabled=true jdk.X509Validation#enabled=true
  • 30.
    N'oubliez pas desupprimer les données sensibles • Filtrer les données du fichier d’enregistrement spécifié. jfr scrub [filters] [recording-file] [output-file] • Indiquez les événements à inclure. jfr scrub --include-events jdk.X509Certificate,jdk.X509Validation rec.jfr • Inclure une catégorie et exclure des événements. jfr scrub --include-categories Security --exclude-events jdk.X509Validation rec.jfr • Supprimer tous les événements par catégorie: jfr scrub --exclude-categories Security rec.jfr
  • 31.
    Quelle est laprochaine étape pour vous ? Auditez vos actifs chiffrés. Prenez soin de votre application en la mettant à jour vers un JDK recent. Ne présumez pas que crypté = sûr (pour toujours)
  • 32.
    Ne manquez pasla suite! inside.java dev.java youtube.com/java