Atomic secable

hardware attaque par faute FCSC 2025 résolu le

star star star

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

Neige

Instructions

  1. 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
  2. Lancez l'épreuve en exécutant dans le même dossier :
    docker compose up
  3. Dans un second terminal, accédez à l'épreuve via Netcat avec :
    nc localhost 4000
⚠️ Important : Vous devez résoudre l'épreuve en interagissant avec le conteneur Docker via le port réseau exposé. Toute autre interaction n'est pas considérée comme une résolution valide.

Si vous rencontrez des problèmes, veuillez consulter la FAQ.

Flag

Partager ma réussite sur Fediverse, Twitter, Linkedin, Facebook, ou par email.

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.