Passa al contenuto principale

7.3.7. Firma dei valori di firma (Signing Signature Values)

7.3.7. Firma dei valori di firma (Signing Signature Values)

Applicando il parametro req (Sezione 2.4) o firme multiple (Sezione 4.3) a un messaggio, è possibile firmare il valore di un campo Signature esistente, coprendo così i byte dell'output della firma esistente nel valore della nuova firma. Sebbene possa sembrare che questa pratica copra in modo transitivo e verificabile i componenti sotto la firma originale, gli attacchi descritti in [JACKSON2019] possono essere usati per impersonare un valore di output della firma su un messaggio non correlato.

In questo esempio, Alice intende inviare una richiesta firmata a Bob, e Bob vuole fornire una risposta firmata ad Alice che includa una prova crittografica che Bob stia rispondendo al messaggio in arrivo di Alice. Mallory vuole intercettare questo traffico e sostituire il messaggio di Alice con il proprio, senza che Alice sia consapevole dell'intercettazione.

  1. Alice crea un messaggio Req_A e applica una firma Sig_A usando la sua chiave privata Key_A_Sign.

  2. Alice crede di inviare Req_A a Bob.

  3. Mallory intercetta Req_A e legge il valore Sig_A da questo messaggio.

  4. Mallory genera un messaggio diverso Req_M da inviare a Bob al posto suo.

  5. Mallory costruisce una chiave di firma Key_M_Sign tale da poter creare una firma valida Sig_M sulla sua richiesta Req_M usando questa chiave, ma il valore in byte di Sig_M sia esattamente uguale a quello di Sig_A.

  6. Mallory invia Req_M con Sig_M a Bob.

  7. Bob convalida Sig_M rispetto alla chiave di verifica di Mallory Key_M_Verify. A nessun momento Bob pensa di rispondere ad Alice.

  8. Bob risponde con il messaggio di risposta Res_B a Req_M e crea la firma Sig_B su questo messaggio usando la sua chiave Key_B_Sign. Bob include il valore di Sig_M tra i componenti coperti di Sig_B ma non include altro dal messaggio di richiesta.

  9. Mallory riceve la risposta Res_B da Bob, incluso il valore della firma Sig_B. Mallory riproduce questa risposta ad Alice.

  10. Alice legge Res_B da Mallory e verifica Sig_B usando la chiave di verifica di Bob Key_B_Verify. Alice include i byte della sua firma originale Sig_A nella base della firma, e la firma verifica.

  11. Alice è indotta a credere che Bob abbia risposto al suo messaggio e crede di avere prova crittografica che ciò sia avvenuto, ma in realtà Bob ha risposto alla richiesta malevola di Mallory e Alice non se ne accorge.

Per mitigare ciò, Bob può firmare più porzioni del messaggio di richiesta oltre al solo campo Signature, per differenziare più pienamente il messaggio di Alice da quello di Mallory. Le applicazioni che usano questa funzionalità, in particolare per scopi di non ripudio, possono stipulare che qualsiasi componente richiesto nella firma originale sia coperto separatamente anche nella seconda firma. Per messaggi firmati, richiedere la copertura del corrispondente campo Signature-Input della prima firma garantisce che elementi unici come nonce e timestamp siano coperti sufficientemente anche dalla seconda firma.