mthiim/dilithium-java - Implémentation en Java d’un algorithme cryptographique résistant à l’informatique quantique
(github.com/mthiim)- Implémentation de Dilithium 3.1 en Java, avec les opérations primitives encapsulées dans un JCE provider, permettant d’utiliser la génération de clés, la signature et la vérification via les interfaces de chiffrement Java standardisées
- Dans le contexte où RSA et ECC sont vulnérables aux attaques par ordinateurs quantiques utilisant l’algorithme de Shor, il s’agit d’une implémentation destinée à expérimenter et apprendre Dilithium, l’un des schémas de signature numérique post-quantique sélectionnés par le NIST
- Dilithium appartient à la famille d’algorithmes CRYSTALS ; cette implémentation, basée sur des réseaux algébriques, a été réalisée à partir de l’implémentation de référence en C et de la documentation, tandis que SHAKE128/256, utilisés en interne, sont fournis via une dépendance à Bouncy Castle
- Prend en charge les trois niveaux de sécurité documentés 2, 3 et 5 ; les trois niveaux utilisent un deterministic signature scheme et passent les tests KAT du package officiel
- Le flux d’utilisation avec JCE consiste à enregistrer
DilithiumProvider, puis à effectuer la génération de clés, la signature, la vérification et la reconstruction de clés avecKeyPairGenerator.getInstance("Dilithium"),Signature.getInstance("Dilithium")etKeyFactory.getInstance("Dilithium")- Le niveau de sécurité se spécifie avec
DilithiumParameterSpec.LEVEL2,LEVEL3,LEVEL5ougetSpecForSecurityLevel() - Les clés publiques et privées obtiennent leur représentation en octets via
.getEncoded(), puis sont sérialisées et désérialisées dans un format compatible avec l’implémentation de référence - La représentation en octets n’encode pas le parameter spec ; lors de la reconstruction d’une clé, il faut donc préciser le parameter spec dans
DilithiumPublicKeySpecouDilithiumPrivateKeySpec
- Le niveau de sécurité se spécifie avec
- Fournit l’utilitaire
KAT.java, qui lit les fichiers de requêtes des known-answer tests du package Dilithium officiel et génère des fichiers de réponse ; ses arguments d’exécution sont au format<input-request-file> <output-response-file> <level> - L’implémentation actuelle reflète Dilithium 3.1 et diffère de FIPS 204 ou de la version ML-DSA en cours de standardisation
- Implémentation écrite « for fun » en quelques jours : ce n’est pas du production-grade code, elle n’a pas fait l’objet d’un audit de vulnérabilités par un tiers, et aucune garantie ni aucun support ne sont fournis
- Distribué sous licence Apache 2.0
1 commentaires
Commentaires Hacker News
Je suis ravi de voir que mon projet attire l’attention sur Hacker News. C’est une implémentation purement ludique, inspirée de l’article et de l’implémentation de référence
Tous les cas de test fournis passent, mais je l’ai surtout faite pour le plaisir et pour voir si elle s’intégrait naturellement à l’interface JCE standard. N’hésitez pas à poser des questions ou à faire des retours
L’essentiel des parties centrales de cette implémentation ludique de Dilithium se trouve ici : https://github.com/mthiim/dilithium-java/blob/main/src/main/...
Je me demande si c’est une bonne idée d’utiliser des algorithmes de cryptographie post-quantique en surcouche d’algorithmes plus établis et largement utilisés comme RSA/ECDSA
La cryptographie post-quantique reste encore trop de pointe pour être vraiment pratique à l’usage
Cloudflare a récemment activé la cryptographie post-quantique et utilise X25519+Kyber [0]. La cryptographie post-quantique de Signal repose sur la même approche [1].
Cette tendance semble venir du fait qu’il y a quelques années, un algorithme post-quantique a été cassé sur un ordinateur classique [2].
Désormais, un attaquant doit casser à la fois l’algorithme classique et l’algorithme post-quantique
[0] https://blog.cloudflare.com/post-quantum-to-origins/
[1] https://signal.org/blog/pqxdh/
[2] https://www.quantamagazine.org/post-quantum-cryptography-sch...
Il en faudrait des millions, alors que les appareils les plus avancés n’en ont aujourd’hui au mieux que quelques centaines. Pendant les prochaines années, voire les prochaines décennies, je ne pense pas qu’on doive trop s’inquiéter des algorithmes post-quantiques dans le code en production
Cette approche garantit qu’il faut casser à la fois l’algorithme classique et l’algorithme post-quantique pour accéder au texte en clair. Savoir s’il suffit d’envelopper simplement le chiffrement, ou s’il faut utiliser un combinateur KEM hybride comme dans l’exemple de Campagna et Petcher, est une question plus subtile qui demande un jugement plus pointu que le mien
Dans tous les cas, cela semble plus plausible que de casser par force brute les clés de chiffrement des standards modernes, donc il y a de bonnes raisons de donner la priorité dès aujourd’hui à la sécurité post-quantique.
Cela dit, il faut aussi rester prudent. Si les algorithmes PQ présentent des vulnérabilités de canal auxiliaire ou d’implémentation, cela peut être bien pire. Il suffit d’imaginer, dans le pire des cas, une faille d’exécution de code à distance dans une implémentation PQ. Mieux vaut donc avancer avec prudence et soumettre le code à une revue stricte
Pour l’échange de clés, c’est relativement simple, et selon la méthode il suffit de faire un XOR des sorties ou de les concaténer
Le README mentionne une dépendance à Bouncy Castle, et BC inclut déjà plusieurs schémas de signature PQC en Java. Voir https://doc.primekey.com/bouncycastle/interoperability#Inter... et https://github.com/bcgit/bc-java
Il y a quelques jours, Daniel Bernstein a averti que la NSA cherchait à diffuser des implémentations de cryptographie post-quantique défectueuses. Je n’arrive pas à retrouver le lien
https://news.ycombinator.com/item?id=37756656
Voici aussi une implémentation Java en fichier unique de sphincs+, un autre schéma de signature post-quantique, que quelqu’un a écrite/portée
https://github.com/Peergos/sphincsplus
« On sait depuis longtemps que les algorithmes cryptographiques RSA et ECC sont vulnérables aux attaques d’ordinateurs quantiques utilisant l’algorithme de Shor. »
Si c’est vrai et qu’un ordinateur quantique de cette ampleur apparaît réellement, je me demande quel serait l’impact sur Bitcoin
« Il s’agit d’une implémentation écrite pour le plaisir en quelques jours. Elle n’est pas destinée à du code de niveau production. Aucune garantie ni aucun support d’aucune sorte ne sont fournis. En revanche, elle peut être utile pour examiner et expérimenter des algorithmes post-quantiques. Vous l’utilisez à vos risques et périls. Si ces conditions ne vous conviennent pas, vous ne devez pas utiliser ce logiciel »