DTLS Registra con testo cifrato strano

1

Sto utilizzando TLS mbed per distribuire ciascuno un server DTLS e un'applicazione client DTLS. Dopo l'handshake DTLS, il client invia "Ciao, server" e quindi il server risponde "Hi Client". La connessione funziona correttamente e funziona. (La Cipher Suite negoziata è TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 )

Tuttavia, quando analizzo i pacchetti di dati dell'applicazione crittografati usando Wireshark, vedo un testo cifrato strano. I dati delle applicazioni crittografati sembrano sempre iniziare con 00 01 00 00 00 00 00 01 . Non dovrebbe essere pseudocasuale? Potrebbe essere questo padding (e se, perché questa sequenza)?

Primo messaggio ("Ciao server"):

0000 17 fe fd 00 01 00 00 00 00 00 01 00 21 00 01 00 ............!...
0010 00 00 00 00 01 f3 5f 8c 78 0f cf 25 08 54 ed 1c ......_.x..%.T..
0020 60 ec b2 fe 05 bc ce e9 fe b5 f6 28 e6 e4 '..........(..

       17                    Content Type:    Application Data
       fe fd                 Version:         DTLS 1.2
       00 01                 Epoch:           1
       00 00 00 00 00 01     Sequence Number: 1
       00 21                 Length:          33
       00 ... e4             Encrypted Application Data

Secondo messaggio ("Ciao cliente"):

0000 17 fe fd 00 01 00 00 00 00 00 01 00 21 00 01 00 ............!...
0010 00 00 00 00 01 74 9d 2b 3f f4 6d 75 f1 47 a6 12 .....t.+?.mu.G..
0020 7c c1 7d 5e 49 13 69 c9 57 72 60 df 90 56 |.}^I.i.Wr'..V

       17                    Content Type:    Application Data
       fe fd                 Version:         DTLS 1.2
       00 01                 Epoch:           1
       00 00 00 00 00 01     Sequence Number: 1
       00 21                 Length:          33
       00 ... 56             Encrypted Application Data
    
posta MemAllox 27.02.2018 - 13:48
fonte

1 risposta

2

Come suggerito da dave_thompson_085, la sequenza all'inizio dei dati delle applicazioni crittografate è il nonce esplicito utilizzato dal GCM (Modalità contatore di Galois). Apparentemente, questo è un tipo di vettore di inizializzazione condiviso con il pari. Nota che potrebbe esserci una parte implicita del nonce che non è inviata su filo.

Protocollo TLS (Transport Layer Security) (RFC5246), 6.2.3.3. Ciprogrammi AEAD :

For AEAD [...] ciphers (such as [CCM] or [GCM]), the AEAD function
converts TLSCompressed.fragment structures to and from AEAD
TLSCiphertext.fragment structures.

  struct {
     opaque nonce_explicit[SecurityParameters.record_iv_length];
     aead-ciphered struct {
         opaque content[TLSCompressed.length];
     };
  } GenericAEADCipher;

Puoi chiaramente vedere qui che il testo cifrato è preceduto da nonce_explicit .

Dopo alcuni test, ho notato che questi byte sembrano implicare un contatore che incrementa con ogni messaggio inviato. Ora mi sono chiesto che tipo di informazioni sono state inviate lì?

RFC5246, 6.2.3.3. Ciprogrammi AEAD :

Each AEAD cipher suite MUST specify how the nonce supplied to the AEAD operation is constructed, and what is the length of the GenericAEADCipher.nonce_explicit part

Ciò significa che devo trovare la RFC in cui è specificato l'AES con GCM per TLS. Anche in questo caso, dave_thompson_085 mi ha portato anche a questa risposta.

Suite di cifratura in modalità contatore AES Galois (GCM) per TLS (RFC5288), 3. Suite di cifratura AES-GCM :

Each value of the nonce_explicit MUST be distinct for each distinct
invocation of the GCM encrypt function for any fixed key. Failure to meet this uniqueness requirement can significantly degrade security.
The nonce_explicit MAY be the 64-bit sequence number.

Quindi questi byte sono la parte esplicita del nonce come specificato in TLS. L'implemtation (mbedTLS) ha usato il numero di sequenza per esso. Grazie ancora a dave_thompson_085!

    
risposta data 01.03.2018 - 13:08
fonte

Leggi altre domande sui tag