3.6. Variants (Variantes)
3.6. Variants (Variantes)
De nombreuses parties de la spécification de (EC)DSA déterministe sont assez arbitraires, mais le choix a été fait pour des raisons d'interopérabilité. Cette section discute de certaines variantes possibles.
La fonction de hachage H utilisée est employée dans le processus de génération de signature pour deux objectifs différents: d'abord pour traiter le message d'entrée, puis comme base pour HMAC (qui est lui-même aussi une fonction de hachage). Dans ce document, nous spécifions l'utilisation de la même fonction de hachage pour les deux usages. Cependant, cela n'est pas obligatoire; il est possible d'utiliser différentes fonctions pour ces deux rôles. Le principal inconvénient est que les vecteurs de test ne peuvent pas couvrir toutes les combinaisons; l'utilisation d'une seule fonction de hachage simplifie les tests d'interopérabilité.
Les définitions de int2octets et bits2octets conduisent à une sortie de rlen bits (c'est-à-dire qlen arrondi au multiple de 8 suivant), et elles produisent effectivement au plus qlen bits d'entropie lors de leur utilisation. Il serait possible de définir les mêmes fonctions pour qu'elles produisent exactement qlen bits; cependant, cela rendrait l'implémentation légèrement plus complexe, car de nombreux langages de programmation et frameworks tendent à travailler avec des séquences d'octets plutôt que des séquences de bits. D'un autre côté, l'arrondi de qlen ajoute au plus 7 bits, ce qui est négligeable dans le contexte d'une graine PRNG.
Dans cette spécification, nous stipulons un processus qui boucle dans des cas spéciaux où k (obtenu à partir de T via bits2int) n'est pas dans la plage appropriée, ou conduirait à générer une valeur nulle pour r. Cependant, ces deux cas ne se produisent pratiquement jamais. Le dernier cas (un r calculé de zéro) ne peut se produire qu'en raison d'un bug logiciel (par exemple, les paramètres de courbe elliptique sont corrompus pendant l'exécution du programme). Les implémentations peuvent donc choisir de traiter simplement de tels cas comme des erreurs irrécupérables et simplement d'abandonner le calcul de la signature, plutôt que de boucler.