Aller au contenu principal

8. Schéma de signature avec appendice (Signature Scheme with Appendix)

Un schéma de signature avec appendice (Signature Scheme with Appendix) est composé d'une opération de génération de signature et d'une opération de vérification de signature, où l'opération de génération de signature génère une signature à partir d'un message en utilisant la clé privée RSA du signataire, et l'opération de vérification de signature vérifie l'authenticité de la signature en utilisant la clé publique RSA du signataire.

Pour signer un message M, le signataire applique une opération d'encodage de message à M pour générer un message encodé EM, puis applique la primitive de signature pour produire une signature S. Pour vérifier une signature S, le vérificateur applique la primitive de vérification à S pour récupérer le message encodé EM, puis applique l'opération de vérification pour déterminer si la signature est valide pour le message.

Deux schémas de signature sont spécifiés dans ce document : RSASSA-PSS et RSASSA-PKCS1-v1_5.

Bien que non obligatoire, RSASSA-PSS est recommandé pour les nouvelles applications. RSASSA-PKCS1-v1_5 est inclus pour la compatibilité avec les applications existantes.

8.1. RSASSA-PSS

RSASSA-PSS combine les primitives RSASP1 et RSAVP1 (Section 5.2) avec la méthode d'encodage EMSA-PSS. Il est basé sur le schéma de signature probabiliste (Probabilistic Signature Scheme, PSS) proposé par Bellare et Rogaway [RSARABIN] [PSS].

La sécurité de PSS est basée sur la difficulté du problème RSA et le modèle d'oracle aléatoire du MGF. Il a été prouvé que sous le modèle d'oracle aléatoire, si le MGF se comporte comme un oracle aléatoire et que le problème RSA est difficile, alors le schéma de signature PSS est sécurisé contre les attaques par message choisi (Chosen Message Attack).

RSASSA-PSS n'est pas déterministe : pour un message donné, plusieurs signatures possibles peuvent être générées. Cela est dû à l'inclusion d'une valeur de sel aléatoire pendant l'opération de génération de signature.

8.1.1. Opération de génération de signature (Signature Generation Operation)

RSASSA-PSS-SIGN (K, M)

Entrée (Input):

  • K: clé privée RSA du signataire
  • M: message à signer, une chaîne d'octets de longueur arbitraire

Sortie (Output):

  • S: signature, une chaîne d'octets de longueur k, où k est la longueur en octets du module RSA n

Erreurs (Errors):

  • "message too long" (message trop long)
  • "encoding error" (erreur d'encodage)

Étapes (Steps):

  1. Encodage EMSA-PSS : Appliquer l'opération d'encodage EMSA-PSS au message M pour générer un message encodé EM de longueur ⌈(modBits-1)/8⌉ octets, où modBits est la longueur en bits du module RSA n : EM = EMSA-PSS-ENCODE(M, modBits - 1). Si l'opération d'encodage sort "message too long" ou "encoding error", sortir l'erreur correspondante et arrêter.

  2. Signature RSA :

    • Convertir le message encodé EM en un représentant de message entier m : m = OS2IP(EM)
    • Appliquer la primitive de signature RSASP1 : s = RSASP1(K, m)
    • Convertir le représentant de signature s en une signature S de longueur k : S = I2OSP(s, k)
  3. Sortir la signature S.

8.1.2. Opération de vérification de signature (Signature Verification Operation)

RSASSA-PSS-VERIFY ((n, e), M, S)

Entrée (Input):

  • (n, e): clé publique RSA du signataire
  • M: message, une chaîne d'octets de longueur arbitraire
  • S: signature à vérifier, une chaîne d'octets de longueur k

Sortie (Output):

  • "valid signature" (signature valide) ou "invalid signature" (signature invalide)

Étapes (Steps):

  1. Vérification de longueur : Si la longueur de la signature S n'est pas de k octets, sortir "invalid signature" et arrêter.

  2. Vérification RSA :

    • Convertir la signature S en un représentant de signature entier s : s = OS2IP(S)
    • Appliquer la primitive de vérification RSAVP1 : m = RSAVP1((n, e), s). Si RSAVP1 sort "signature representative out of range", sortir "invalid signature" et arrêter.
    • Convertir le représentant de message m en un message encodé EM de longueur emLen = ⌈(modBits - 1)/8⌉ : EM = I2OSP(m, emLen)
  3. Vérification EMSA-PSS : Appliquer l'opération de vérification EMSA-PSS : Result = EMSA-PSS-VERIFY(M, EM, modBits - 1). Si Result = "consistent", sortir "valid signature" ; sinon sortir "invalid signature".

8.2. RSASSA-PKCS1-v1_5

RSASSA-PKCS1-v1_5 combine les primitives RSASP1 et RSAVP1 (Section 5.2) avec la méthode d'encodage EMSA-PKCS1-v1_5. Il est compatible avec le schéma IFSSA dans IEEE 1363 [IEEE1363], où la fonction de hachage de la valeur DigestInfo est utilisée pour générer le représentant de message.

La sécurité de RSASSA-PKCS1-v1_5 dépend de la difficulté du problème RSA. Bien qu'il n'y ait pas d'attaque connue qui réussisse à casser ce schéma, il n'y a pas non plus de preuve de sécurité comme pour PSS.

8.2.1. Opération de génération de signature (Signature Generation Operation)

RSASSA-PKCS1-V1_5-SIGN (K, M)

Les étapes sont similaires à RSASSA-PSS, mais utilisent la méthode d'encodage EMSA-PKCS1-v1_5

8.2.2. Opération de vérification de signature (Signature Verification Operation)

RSASSA-PKCS1-V1_5-VERIFY ((n, e), M, S)

Les étapes sont similaires à RSASSA-PSS, mais utilisent la méthode de vérification EMSA-PKCS1-v1_5