Su quali dati sono calcolati i dati di verifica nel messaggio di handshake finito DTLS?

1

Attualmente sto cercando di implementare DTLS 1.0 e sono bloccato al messaggio finito dell'handshake. Sembra che il mio calcolo del parametro verify_data sia sbagliato.

RFC 4347 dice in 4.2.6.

Finished messages have the same format as in TLS.  However, in order
to remove sensitivity to fragmentation, the Finished MAC MUST be
computed as if each handshake message had been sent as a single
fragment.

Significa che i messaggi di handshake ricomposti vengono sottoposti a hash come se fossero i messaggi di handshake TLS? Cioè con intestazione ma senza i campi message_seq, fragment_offset e fragment_length? Oppure hanno un hash senza l'intestazione di handshake? O ogni messaggio di handshake contiene un frammento concatenato?

PS: non posso etichettarlo DTLS perché non ho abbastanza reputazione: /

    
posta maufl 12.11.2016 - 19:46
fonte

1 risposta

0

Ho letto as if ... a single fragment per indicare che formatti ciascun messaggio come un frammento che contiene l'intero messaggio, ovvero fragoff = 0 fraglen = totlen. Implementazione di BouncyCastle Java (a partire da 1.55) è d'accordo con questo, e penso che qualcuno avrebbe notato se non interagisse:

package org.bouncycastle.crypto.tls;
...
class DTLSReliableHandshake {
...
private Message updateHandshakeMessagesDigest(Message message)
    throws IOException
{
    if (message.getType() != HandshakeType.hello_request)
    {
        byte[] body = message.getBody();
        byte[] buf = new byte[12];
        TlsUtils.writeUint8(message.getType(), buf, 0);
        TlsUtils.writeUint24(body.length, buf, 1);
        TlsUtils.writeUint16(message.getSeq(), buf, 4);
        TlsUtils.writeUint24(0, buf, 6);
        TlsUtils.writeUint24(body.length, buf, 9);
        handshakeHash.update(buf, 0, buf.length);
        handshakeHash.update(body, 0, body.length);
    }
    return message;
}
    
risposta data 13.11.2016 - 08:39
fonte

Leggi altre domande sui tag