7.3.7. Signer les valeurs de signature
7.3.7. Signer les valeurs de signature
Lorsqu’on applique le paramètre req (section 2.4) ou plusieurs signatures (section 4.3) à un message, il est possible de signer la valeur d’un champ Signature existant, couvrant ainsi les octets de la sortie de signature existante dans la valeur de la nouvelle signature. Bien qu’il semblerait que cette pratique couvre transitivement les composants de la signature d’origine de façon vérifiable, les attaques décrites dans [JACKSON2019] peuvent servir à usurper une valeur de sortie de signature sur un message sans rapport.
Dans cet exemple, Alice entend envoyer une requête signée à Bob, et Bob veut fournir une réponse signée à Alice incluant une preuve cryptographique qu’il répond au message entrant d’Alice. Mallory veut intercepter ce trafic et remplacer le message d’Alice par le sien, sans qu’Alice sache que l’interception a eu lieu.
-
Alice crée un message Req_A et applique une signature Sig_A avec sa clé privée Key_A_Sign.
-
Alice croit envoyer Req_A à Bob.
-
Mallory intercepte Req_A et lit la valeur Sig_A de ce message.
-
Mallory génère un message différent Req_M à envoyer à Bob à la place.
-
Mallory fabrique une clé de signature Key_M_Sign telle qu’elle peut créer une signature valide Sig_M sur sa requête Req_M avec cette clé, mais telle que la valeur en octets de Sig_M soit exactement égale à celle de Sig_A.
-
Mallory envoie Req_M avec Sig_M à Bob.
-
Bob valide Sig_M par rapport à la clé de vérification de Mallory Key_M_Verify. À aucun moment Bob ne pense répondre à Alice.
-
Bob répond avec le message de réponse Res_B à Req_M et crée la signature Sig_B sur ce message avec sa clé Key_B_Sign. Bob inclut la valeur de Sig_M parmi les composants couverts de Sig_B, sans inclure autre chose de la requête.
-
Mallory reçoit la réponse Res_B de Bob, y compris la valeur de signature Sig_B. Mallory rejoue cette réponse vers Alice.
-
Alice lit Res_B de Mallory et vérifie Sig_B avec la clé de vérification de Bob Key_B_Verify. Alice inclut les octets de sa signature d’origine Sig_A dans la base de signature, et la signature vérifie.
-
Alice en conclut que Bob a répondu à son message et croit disposer d’une preuve cryptographique, alors qu’en réalité Bob a répondu à la requête malveillante de Mallory, sans qu’Alice s’en aperçoive.
Pour atténuer cela, Bob peut signer davantage de parties de la requête que seul le champ Signature, afin de mieux distinguer le message d’Alice de celui de Mallory. Les applications qui utilisent cette fonctionnalité, notamment à des fins de non-répudiation, peuvent stipuler que tout composant exigé dans la signature d’origine soit aussi couvert séparément par la seconde signature. Pour les messages signés, exiger la couverture du champ Signature-Input correspondant de la première signature garantit que des éléments uniques tels que les nonces et les horodatages sont aussi suffisamment couverts par la seconde signature.