Description
Mr Performances cherche un algorithme efficace pour évaluer la multiplication sur une courbe elliptique tout en se protégeant des attaques physiques.
Il a opté pour une implémentation de la loi d’addition sur la courbe en respectant le principe d’atomicité. Ce principe repose sur une séquence unique d’opérations pour calculer le doublement d’un point, ou l’addition de deux points différents ; ce qui assure une très bonne protection contre les attaques par analyse de temps d’exécution ou même de la forme de la trace de fuite (par canaux auxiliaires). Cette protection est en effet nécessaire, puisque la distinction de l’opération effectuée (doublement ou addition) permet de retrouver de l’information sur les bits du scalaire, qui est censé rester secret.
En ajoutant des opérations factices, il est assez facile d’obtenir deux séquences identiques pour l’évaluation d’un doublement ou d’une addition de points, mais cela serait au détriment des performances.
Mr Performances, fidèle à ses principes, utilise une séquence sans perte de
performances ! Sa séquence est adaptée aux courbes de la forme y^2 = x^3 + b
et ne contient que 9 multiplications modulaires. Il
vous met au défi de casser son implémentation pour la courbe standard secp192k1
(qui a la bonne forme) à l’aide d’une attaque par fautes. Cependant, il a mis en place
des contremesures pour limiter une telle attaque :
- les bits du scalaire sont lus deux fois (et comparés) avant de lancer une séquence ;
- les coordonées finales
(x, y)
doivent former un point de la courbe.
Pour cela, il fournit son code assembleur commenté permettant d’évaluer une
multiplication avec le générateur sur la courbe.
Dans le cadre de l’épreuve, le code est exécuté dans une machine virtuelle
et il est possible d’indiquer les instructions à perturber. Il n’y a pas de
limite sur le nombre d’instructions à perturber, mais le modèle de faute
consiste uniquement en l’attribution d’une valeur aléatoire au registre
de destination de l’opération. Par exemple, pour fauter les trois premières instructions
il faut entrer, après les chevrons, 0 1 2
(séparés par des espaces).
Fichiers
- docker-compose.yml
-
assembly.py
20.84 KiB – db186ab7dfb5f5e7f4790f1afc951deda349a8a9565a57b6328da2ba89965525 -
atomic-secable.py
2.15 KiB – cd9a4fb4c8a96f26ab124caf62f1af2c1ea1389b5c88b8515a9017094f9d3fd2 -
crypto_accelerator.py
5.14 KiB – 4c1f070435b6e4eace3fa19e5a4b661800ec8ad61895e378dab5d892aa89e2a7 -
ecdsa_keygen.asm
7.65 KiB – 21c9ee1a66c1f8cc81db939a5269e411c3f2694288e9070e2d3553a957cf8848 -
machine_faulted.py
381 B – fff04c758a8017e0ef27e19c5264435d081446779d52acb3d0e01724c7e5d34c -
machine.py
19.93 KiB – 434c28dbb07383d2c756dbd55e7560b2c51eae1f982cd251a97287b61c7ac0cb -
vm.md
27.75 KiB – 0d241df97205c1ea035561b006926949e768e749d997f43f50569e416ee11cdc
Auteur

Instructions
- Pour commencer, téléchargez le fichier docker-compose.yml :
curl https://hackropole.fr/challenges/fcsc2025-hardware-atomic-secable/docker-compose.public.yml -o docker-compose.yml
- Lancez l'épreuve en exécutant dans le même dossier :
docker compose up
- Dans un second terminal, accédez à l'épreuve via Netcat avec :
nc localhost 4000
Si vous rencontrez des problèmes, veuillez consulter la FAQ.
Flag
Soumettez votre solution
Vous pouvez envoyer votre solution rédigée pour cette épreuve. La FAQ contient la marche à suivre.
Vous avez besoin d'être identifié(e) pour soumettre une solution.
Solutions
Il n'y a pas encore de solutions pour cette épreuve, mais vous pouvez soumettre la vôtre après avoir trouvé le flag.