Paul FOLTZERSystèmes embarqués · IA
EN
Tous les projets
Projet écoleTerminéSeptembre – Octobre 2026

ASCON sur FPGA — du SystemVerilog à la ZedBoard

Implémentation matérielle du chiffrement authentifié ASCON, standard NIST, puis intégration complète sur une carte Zynq-7020.

Projet de la majeure Systèmes embarqués : concevoir en SystemVerilog le cœur matériel du chiffrement authentifié ASCON-128, le valider en simulation, puis construire autour de lui la couche d'intégration qui le fait tourner et s'afficher sur une carte FPGA réelle.

ASCON est le chiffrement authentifié retenu par le NIST en 2023 pour la cryptographie légère — celle des objets contraints, capteurs et cartes à puce. Son principe tient en un état de 320 bits que l'on malaxe par une permutation, et dont seuls 64 bits (le « rate ») sont exposés à la donnée : le reste, la capacité, ne sort jamais. Quatre phases s'enchaînent sur ce même état — initialisation, absorption des données associées, chiffrement bloc par bloc, finalisation — et le même passage produit à la fois le texte chiffré et un tag d'authentification de 128 bits.

ASCON-128 — les quatre phases UN ÉTAT DE 320 BITS, TRAVERSÉ PAR QUATRE PHASES rate — 64 bits capacity — 256 bits la donnée n'entre que par le rate ; la capacité reste secrète 1 — INITIALISATION p¹² état ← IV ‖ clé ‖ nonce 12 tours de permutation puis XOR de la clé en fin 2 — DONNÉES ASSOCIÉES p⁶ XOR du bloc dans le rate 6 tours par bloc authentifié, non chiffré 3 — CHIFFREMENT p⁶ C = P ⊕ rate le rate devient le bloc chiffré 6 tours par bloc 4 — FINALISATION p¹² XOR de la clé 12 tours de permutation tag ← 128 bits de sortie clé 128 b · nonce 128 b entrées secrètes et publiques données associées en-têtes, métadonnées… texte clair, bloc par bloc 64 bits à la fois texte chiffré tag d'authentification — 128 bits Chiffrement authentifié : un seul passage produit à la fois le chiffré et le tag. Modifier un bit du message ou des données associées change le tag — l'altération est détectée.
Les quatre phases d'ASCON-128. Tout se joue sur un seul état de 320 bits : la donnée n'entre que par les 64 bits du rate, la capacité reste secrète, et c'est ce même état qui finit par livrer le tag.

Le cœur de l'implémentation est la permutation. Un tour enchaîne trois couches purement combinatoires : l'addition d'une constante de tour, une couche de substitution faite de 64 boîtes-S de 5 bits instanciées en parallèle par un bloc generate — chacune prenant une tranche verticale de bits à travers les cinq mots de l'état — puis une diffusion linéaire où chaque mot est XORé avec deux copies de lui-même décalées circulairement. J'avais déjà implémenté ASCON intégralement de zéro l'année précédente, dans un autre projet académique ; cette version-ci repart de la base de code distribuée avec le sujet — registres à enable, multiplexeur d'état et compteur fournis — pour concentrer l'effort sur la permutation, sa machine à états, et surtout l'intégration matérielle qui suit.

Le choix d'architecture structurant est de replier ce tour sur lui-même : une seule instance combinatoire, bouclée sur un registre d'état de 320 bits, exécute un tour par coup d'horloge. C'est le compromis classique surface contre débit — déplier les douze tours aurait divisé la latence mais multiplié la logique d'autant. Une machine à états de Moore à vingt-six états séquence les phases et pilote tous les signaux d'activation, pendant qu'un compteur de tours à double initialisation distingue les douze tours de l'initialisation des six tours du traitement des données.

ASCON — un tour de permutation, et son implémentation UN TOUR DE PERMUTATION — TROIS COUCHES SUCCESSIVES Pc — addition de constante Une constante de tour (F0, E1, D2 … 4B) est XORée dans l'octet de poids faible du mot X2. Rôle : casser la symétrie entre les tours, pour qu'aucun tour ne ressemble au suivant. Ps — substitution 64 boîtes-S de 5 bits en parallèle. La i-ème boîte prend le bit i de chacun des 5 mots : une tranche verticale. Rôle : la non-linéarité. C'est la seule couche que l'on ne peut pas « défaire » par XOR. Pl — diffusion linéaire Chaque mot est XORé avec deux copies de lui-même, décalées circulairement : X0 : 19 et 28 · X1 : 61 et 39 · X2 : 1 et 6 … Rôle : propager l'influence d'un bit à tout le mot en quelques tours. EN MATÉRIEL — UN TOUR PAR COUP D'HORLOGE mux init / boucle XOR entrée donnée · clé Pc Ps Pl XOR sortie clé registre d'état 320 bits la sortie du registre revient au mux : 12 tours (p¹²) ou 6 tours (p⁶) selon la phase registres chiffré · tag Les trois couches sont purement combinatoires : la profondeur logique d'un tour fixe la fréquence maximale, et le nombre de tours fixe la latence. Une FSM de Moore à 26 états séquence les phases et pilote les signaux d'activation ; un compteur de tours à double initialisation distingue p¹² de p⁶.
Un tour de permutation et sa traduction matérielle. Les trois couches sont combinatoires : leur profondeur logique fixe la fréquence maximale, le nombre de tours fixe la latence.

La validation s'est faite en simulation sur un banc de test fourni avec le sujet, avec une clé et un nonce de 128 bits et plusieurs blocs de données. Le chronogramme se lit comme la spécification : les signaux de fin de phase s'allument l'un après l'autre, le bloc chiffré apparaît quand cipher_valid passe à 1, et le tag se fige en fin de finalisation.

Chronogramme de simulation du chiffrement ASCON sous Vivado
Simulation du chiffrement complet. On suit l'enchaînement des phases dans les signaux de fin — initialisation, données associées, chiffrement — puis l'apparition du bloc chiffré quand cipher_valid passe à 1.

La seconde partie du projet consistait à rendre tout cela visible sur une carte réelle, une ZedBoard à Zynq-7020. J'ai écrit autour du cœur une couche d'intégration : un MMCM qui porte l'horloge de carte de 100 à 150 MHz, une mémoire bloc contenant les blocs à chiffrer, un compteur d'adresse, et une seconde machine à états — dix états cette fois — qui orchestre le tout : lire un bloc, le présenter, attendre l'accusé du cœur, incrémenter, recommencer, puis déclencher la finalisation.

ASCON sur ZedBoard — la couche d'intégration ZEDBOARD — ZYNQ-7020 (xc7z020) ENTRÉES CARTE horloge 100 MHz oscillateur de la carte bouton start · reset 5 interrupteurs sel_val · sel_bits MMCM 100 → 150 MHz FSM pilote 10 états lit, présente, attend, incrémente mémoire bloc blocs de 64 bits donnée associée + texte clair compteur adresse de lecture CŒUR ASCON RTL SystemVerilog FSM de Moore à 26 états permutation 320 bits 1 tour par cycle sorties : chiffré 64 b tag 128 b data init · associate_data · finalisation · data_valid end_initialisation · end_associate · cipher_valid · end_tag — la FSM attend ces accusés deux multiplexeurs chiffré ou tag, puis 1 octet parmi 16 8 LEDs 1 octet affiché les interrupteurs choisissent l'octet à lire Résultat d'implémentation : 857 LUT (1,6 %), 573 bascules, 1 bloc RAM, timing respecté à 150 MHz avec 0,182 ns de marge.
La couche d'intégration sur ZedBoard : horloge, mémoire, FSM pilote et chaîne d'affichage. Le cœur ASCON n'est qu'un bloc parmi d'autres — tout le reste existe pour l'alimenter et rendre son résultat lisible.

Restait le problème d'affichage : comment montrer un chiffré de 64 bits et un tag de 128 bits sur huit LEDs ? La réponse est une cascade de deux multiplexeurs pilotés par les interrupteurs de la carte — le premier choisit entre chiffré et tag, le second sélectionne un octet parmi seize. On parcourt ainsi le résultat octet par octet. L'implémentation tient dans 857 LUT, soit 1,6 % du composant, avec 573 bascules et un seul bloc RAM, et respecte le timing à 150 MHz avec 0,182 ns de marge.

Vue d'implémentation du design placé-routé sur le Zynq-7020
Le design placé-routé sur le Zynq-7020. La logique occupée (en clair) tient dans une fraction d'une seule région d'horloge — 1,6 % des LUT du composant.

Points clés

  • Permutation ASCON en SystemVerilog : trois couches combinatoires, 64 boîtes-S en parallèle, un tour par cycle
  • Machine à états de Moore à 26 états séquençant les quatre phases du chiffrement authentifié
  • Couche d'intégration FPGA complète : MMCM, mémoire bloc, FSM pilote, affichage par multiplexeurs sur 8 LEDs
  • Implémenté sur Zynq-7020 : 857 LUT (1,6 %), timing respecté à 150 MHz