9. Méthodes d'encodage pour signatures avec appendice (Encoding Methods for Signatures with Appendix)
Les méthodes d'encodage sont utilisées pour convertir un message en un message encodé, qui peut ensuite être signé par les primitives de signature RSA. Cette section spécifie deux méthodes d'encodage : EMSA-PSS et EMSA-PKCS1-v1_5.
9.1. EMSA-PSS
EMSA-PSS (Encoding Method for Signatures with Appendix - Probabilistic Signature Scheme) est une méthode d'encodage probabiliste qui contient de l'aléatoire, et peut donc générer plusieurs messages encodés différents pour un message donné.
9.1.1. Opération d'encodage (Encoding Operation)
EMSA-PSS-ENCODE (M, emBits)
Entrée (Input):
- M: message à encoder, une chaîne d'octets de longueur arbitraire
- emBits: longueur maximale en bits du message encodé, au moins 8hLen + 8sLen + 9
Sortie (Output):
- EM: message encodé, une chaîne d'octets de longueur emLen = ⌈emBits/8⌉
Étapes (Steps):
-
Si la longueur de M est supérieure à la limite d'entrée de la fonction de hachage Hash (2^61 - 1 octets pour SHA-1), sortir "message too long" et arrêter.
-
Soit mHash = Hash(M), une chaîne d'octets de longueur hLen.
-
Si emLen < hLen + sLen + 2, sortir "encoding error" et arrêter.
-
Générer une chaîne d'octets aléatoire salt de longueur sLen.
-
Soit M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt ; M' est une chaîne d'octets de longueur 8 + hLen + sLen.
-
Soit H = Hash(M'), une chaîne d'octets de longueur hLen.
-
Générer une chaîne d'octets PS composée de emLen - sLen - hLen - 2 octets zéro.
-
Soit DB = PS || 0x01 || salt ; DB est une chaîne d'octets de longueur emLen - hLen - 1.
-
Soit dbMask = MGF(H, emLen - hLen - 1).
-
Soit maskedDB = DB ⊕ dbMask.
-
Définir les 8emLen - emBits bits les plus à gauche de maskedDB à zéro.
-
Soit EM = maskedDB || H || 0xbc.
-
Sortir EM.
9.1.2. Opération de vérification (Verification Operation)
EMSA-PSS-VERIFY (M, EM, emBits)
Entrée (Input):
- M: message, une chaîne d'octets de longueur arbitraire
- EM: message encodé à vérifier, une chaîne d'octets de longueur emLen = ⌈emBits/8⌉
- emBits: longueur maximale en bits du message encodé
Sortie (Output):
- "consistent" (cohérent) ou "inconsistent" (incohérent)
Étapes : (les étapes de vérification sont l'inverse des étapes d'encodage, vérifiant toutes les contraintes)
9.2. EMSA-PKCS1-v1_5
EMSA-PKCS1-v1_5 (Encoding Method for Signatures with Appendix - PKCS #1 v1.5) est une méthode d'encodage déterministe qui génère toujours le même message encodé pour un message donné.
EMSA-PKCS1-v1_5-ENCODE (M, emLen)
Entrée (Input):
- M: message à encoder, une chaîne d'octets de longueur arbitraire
- emLen: longueur attendue du message encodé (en octets), au moins tLen + 11, où tLen est la longueur en octets de la valeur DigestInfo
Sortie (Output):
- EM: message encodé, une chaîne d'octets de longueur emLen
Étapes (Steps):
-
Appliquer la fonction de hachage au message M pour générer la valeur de hachage H : H = Hash(M). Si la fonction de hachage sort "message too long", sortir "message too long" et arrêter.
-
En utilisant la technique de la note de la Section 9.2, encoder la valeur DigestInfo comme T pour la fonction de hachage.
-
Si emLen < tLen + 11, sortir "intended encoded message length too short" et arrêter.
-
Générer une chaîne d'octets PS composée de emLen - tLen - 3 octets de valeur 0xff.
-
Concaténer PS et autres paddings pour former le message encodé EM : EM = 0x00 || 0x01 || PS || 0x00 || T
-
Sortir EM.