<?xml version="1.0" encoding="utf-8"?>
<rfcdesc title="Hash-based Signatures: State and Backup Management"
	 num="10033" status="informational" wg="pquip">
  <authors><author>T. Wiggers (PQShield)</author><author>K. Bashiri
  (BSI)</author><author>S. Kölbl (Google)</author><author>J. Goodman
  (Crypto4A Technologies)</author><author>S. Kousidis
  (BSI)</author></authors>
  <rfcdate><month>September</month><year>2026</year></rfcdate>
  <date>2026-09-15</date>
<content>
  <p>Certains algorithmes de <wikipedia>cryptographie</wikipedia> sont
  <emphasis>à état</emphasis>, c'est-à-dire que les programmes qui les
  utilisent doivent se souvenir des exécutions précédentes de
  l'algorithme ; refaire tourner l'algorithme dans les mêmes
  conditions serait une faille de sécurité. Cette nécessité de
  mémoriser un état complique évidemment leur utilisation. Ce nouveau
  <wikipedia name="Request for comments">RFC</wikipedia> documente les
  bonnes pratiques à ce sujet.</p>
  <p>La question des algorithmes à état est particulièrement cruciale
  dans le contexte de la <wikipedia name="Cryptographie post-quantique">cryptographie
  post-quantique</wikipedia>. Un problème de beaucoup d'algorithmes
  post-quantiques est la grande taille de leurs clés et de leurs
  signatures, ce qui pose problème pour certaines applications sur
  l'Internet. Une solution possible serait d'utiliser des algorithmes
  comme ceux <wikipedia name="Fonction de hachage cryptographique">fondés sur la condensation</wikipedia>, qui
  ont des clés et des signatures de taille plus raisonnable, et
  reposent sur des algorithmes de <wikipedia name="Fonction de hachage">condensation</wikipedia>
  bien connus. Mais ces algorithmes sont à état, ce qui est vraiment
  pénible à gérer.</p>
  <p>Il existe plusieurs algorithmes dans cette famille
  <wikipedia name="Fonction de hachage cryptographique">fondée sur la condensation</wikipedia> :
  LMS (<foreign>Leighton–Micali Signatures</foreign>), HSS (<foreign>Hierarchical Signature
   System</foreign>),
  XMSS (<foreign>eXtended Merkle Signature Scheme</foreign>), etc. Tous résistent aux futurs
  <wikipedia name="Calculateur quantique">calculateurs quantiques</wikipedia> mais tous ont un
  défaut : <wikipedia name="Signature">signer</wikipedia> deux fois
  avec la même clé permet à la <wikipedia>cryptanalyse</wikipedia> de
  découvrir la clé privée. Il faut donc dériver une nouvelle clé à
  chaque signature et se souvenir des clés précédentes, pour ne pas
  risquer de réutilisation. C'est évidemment très contraignant et cela
  explique pourquoi, par exemple, ces algorithmes n'ont pas été
  sérieusement envisagés pour <wikipedia name="Domain Name System
  Security Extensions">DNSSEC</wikipedia><!-- draft-afrvrd-dnsop-stateful-hbs-for-dnssec -->.</p>
  <p>Si vous voulez vous instruire sur ces algorithmes utilisant la
  <wikipedia name="Fonction de hachage cryptographique">condensation</wikipedia>, lisez les <rfc num="8391"
  local="false"/> (sur XMSS), <rfc num="8554" local="false"/> (sur
  LMS) et la norme <link
  url="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-208.pdf">NIST
  SP 800-208</link>. Dans ces algorithmes, la clé privée est en fait
  une série de clés, partant d'une graine et créées par dérivations
  successives. L'état est simplement un index vers cette liste,
  indiquant la dernière clé utilisée. Si on réutilise une clé, on
  dévoile la graine. Il est donc très important de garder trace de
  l'index, de l'état. À chaque signature effectuée, il faut le mettre
  à jour. Imaginez par exemple un dispositif de signature qui
  signerait, diffuserait le message signé mais subirait ensuite une
  coupure de courant qui l'empêcherait de mettre à jour l'état. Une
  fois le courant revenu, la signature suivante utilisera le même
  index, donc la même clé et paf, le ou la cryptanalyste qui lira les
  deux signatures et connait la clé publique pourra trouver la graine,
  donc la clé privée. (Si ça vous semble magique, lisez
  « <foreign><link url="https://eprint.iacr.org/2016/357.pdf">State
  Management for Hash- Based Signatures</link></foreign> »,
  « <foreign><link
  url="https://www.etsi.org/deliver/etsi_tr/103600_103699/103692/01.01.01_60/tr_103692v010101p.pdf">State
  management for stateful authentication
  mechanisms</link></foreign> », « <foreign><link
  url="https://eprint.iacr.org/2016/1042.pdf">Oops, I did it again –
  Security of One-Time Signatures under Two-Message
  Attacks</link></foreign> » et « <foreign><link
  url="https://eprint.iacr.org/2023/1905">Oops, I did it again
  revisited: another look at reusing one-time
  signatures</link></foreign> ».  Notre <wikipedia name="Request for
  comments">RFC</wikipedia> est donc consacré à décrire les mesures
  qui peuvent empêcher cette situation. Il faut s'assurer que l'état
  est bien mis à jour à chaque signature, que, dans le cas où il y a
  plusieurs signeurs, qu'ils ne puissent jamais utiliser la même clé
  et que si on restaure les sauvegardes, on ne se trouve pas à
  réutiliser une clé. C'est compliqué ? Oui, et c'est pour cela que
  les algorithmes à état sont peu populaires. (Ils avaient été
  envisagés pour <wikipedia name="Domain Name System Security
  Extensions">DNSSEC</wikipedia> mais avaient fait peur à tout le
  monde.) Comme le note la section 1.1 du RFC, ces algorithmes ne
  conviennent pas pour un usage généraliste, il faut les réserver à
  des cas bien précis.</p>
  <p>On peut même se demander pourquoi ces algorithmes n'ont pas été
  jetés à la poubelle tout de suite. C'est parce qu'ils ont quand même
  certains avantages, comme des tailles de clés et de signatures
  raisonnables. (<wikipedia name="Domain Name System Security
  Extensions">DNSSEC</wikipedia>, cité plus haut, ne peut pas
  envisager les énormes clés et signatures de
  <wikipedia xml:lang="en" name="Lattice-based cryptography" anchor="CRYSTALS-Dilithium">ML-DSA</wikipedia>.) Un exemple d'utilisation des
  systèmes à état est donné dans le <rfc num="9802"
  local="false"/>.</p>
  <p>La section 2 du RFC rappelle la terminologie utilisée. La
  <emphasis>clé privée</emphasis> à proprement parler est la graine
  dont dérivent les clés de signature. Elle-même est sans état et a
  potentiellement une longue durée de vie. Elle se gère comme
  n'importe quelle clé privée (donc, vous ne la mettez pas sur
  <wikipedia>GitHub</wikipedia>). L'<emphasis>état</emphasis> est au
  contraire à courte durée de vie et est mis à jour à
  <emphasis>chaque</emphasis> signature. Sa gestion (le mettre à jour,
  le sauvegarder, le distribuer…) est toute la difficulté des
  algorithmes de cryptographie à état.</p>
  <p>Place à la pratique en section 3. Par exemple, les
  sauvegardes. Sauvegarder une clé qui peut servir pendant 10 ou 20
  ans est une chose. Mais, ici, il faut sauvegarder du matériel
  cryptographique qui change tout le temps, puisque sauvegarder l'état
  est indispensable. La section 3.2 est une bonne lecture si vous vous
  intéressez aux questions de préservation de contenu numérique.</p>
  <p>Mais il y a aussi le problème des procédures à suivre. Gérer des
  clés avec état est plus complexe et nécessite du personnel qualifié
  et consciencieux. Cela a des conséquences lorsqu'on calcule le coût
  total d'une solution cryptographique. D'autant plus que la sécurité
  peut nécessiter davantage de personnel, par exemple lorsqu'on
  déploie une solution <wikipedia name="Secret
  réparti">M-sur-N</wikipedia><!-- https://www.examcollection.com/blog/cissp-explained-what-is-the-m-of-n-control-policy/ --> pour contrer le
  risque d'une attaque menée de l'intérieur.</p>
  <p>La section 4 liste les conséquences de ces exigences sous forme
  d'exigences <wikipedia name="Propriétés ACID">ACID</wikipedia> : la solution déployée doit
  permettre des transactions tout-ou-rien : l'utilisation de la
  signature et la mise à jour de l'état doivent être dans la même
  transaction (<wikipedia name="Atomicité (informatique)">atomicité</wikipedia>).</p>
  <p>Suivre ces exigences en logiciel va être difficile : il peut y
  avoir une mémorisation de certaines informations, ce qui signifie
  que la version stockée sur un support stable n'a pas été lise à
  jour, il peut y avoir copie d'une machine virtuelle vers une autre,
  l'état étant alors dupliqué, etc. Le RFC conseille de plutôt
  utiliser un composant matériel dédié pour cette tâche délicate de
  maintien de l'état. Mais si vous voulez vraiment étudier la question
  en détail, et notamment les différents moyens d'atteindres nos
  objectifs, la section 5 discute de nombreuses solutions
  possibles.</p>
  <p>Le RFC note aussi que ces exigences ne s'appliquent qu'au
  signeur. Le vérificateur des signatures, lui, peut complètement
  ignorer le problème et ne pas connaitre l'état.</p>
</content>
</rfcdesc>
