Hi Mark,

You might find it helpful to refer to:
https://datatracker.ietf.org/doc/draft-ietf-tls-tls13-vectors/

Which contains test vectors.


On Mon, Apr 24, 2017 at 5:21 AM, Mark Dunn <
mark.d...@objectiveintegration.uk> wrote:

> Sorry, I am having a dull moment trying to understand the Transcript-hash,
> could someone help please?
>
> From *TLS 1.3: section 4* I have:
>
>    enum {
>        client_hello(1),
>        server_hello(2),
>        new_session_ticket(4),
>        end_of_early_data(5),
>        hello_retry_request(6),
>        encrypted_extensions(8),
>        certificate(11),
>        certificate_request(13),
>        certificate_verify(15),
>        finished(20),
>        key_update(24),
>        message_hash(254),
>        (255)
>    } HandshakeType;
>
>    struct {
>        HandshakeType msg_type;    /* handshake type */
>        uint24 length;             /* bytes in message */
>        select (Handshake.msg_type) {
>            case client_hello:          ClientHello;
>            case server_hello:          ServerHello;
>            case end_of_early_data:     EndOfEarlyData;
>            case hello_retry_request:   HelloRetryRequest;
>            case encrypted_extensions:  EncryptedExtensions;
>            case certificate_request:   CertificateRequest;
>            case certificate:           Certificate;
>            case certificate_verify:    CertificateVerify;
>            case finished:              Finished;
>            case new_session_ticket:    NewSessionTicket;
>            case key_update:            KeyUpdate;
>        } body;
>    } Handshake;
>
> and from *TLS 1.3: Section 4.1* I have:
>
>    uint16 ProtocolVersion;
>    opaque Random[32];
>
>    uint8 CipherSuite[2];    /* Cryptographic suite selector */
>
>    struct {
>        ProtocolVersion legacy_version = 0x0303;    /* TLS v1.2 */
>        Random random;
>        opaque legacy_session_id<0..32>;
>        CipherSuite cipher_suites<2..2^16-2>;
>        opaque legacy_compression_methods<1..2^8-1>;
>        Extension extensions<8..2^16-1>;
>    } ClientHello;
>
> So combining the two for a ClientHello gives something like
>
>    struct {
>         HandshakeType msg_type  = 0x01;         /* handshake type
> client_hello*/
>         uint24 length           = 0x001234;     /* example of number of
> bytes in message */
>         struct {
>             ProtocolVersion legacy_version = 0x0303;    /* TLS v1.2 */
>             Random random;
>             ...
>         } ClientHello;
>     }  ClientHelloHandshake
>
> In trying to understand the transcript hash, I read in *TLS **1.3: section
> 7*
>
>     "Note that because the handshake transcript includes the random values
> in the Hello messages, any given handshake will have different traffic
> secrets"
>
> This gives me a warm fuzzy feeling but *TLS 1.3: section 7.1* states
>
>     "Messages are the concatenation of the indicated handshake messages,
> including the handshake message type and length fields, but not including
> record layer headers."
>
> I am guessing that "handshake message" is the ClientHelloHandshake I
> created above and the "record layer headers" is the ClientHello,
>

I think this is where you are going wrong. Remember that in order to be
serialized on the wire the handshake message is wrapped in a TLSPlaintext
structure (and then potentially encrypted). It's those which are the record
headers and which are excluded. What is included is what you are calling
ClientHelloHandshake.

-Ekr



Does this mean that the transcript-hash just uses the
> ClientHelloHandshake.msg_type and ClientHelloHandshake.length highlighted
> below?
>
>    struct {
> *HandshakeType msg_type = 0x01; /* handshake type client_hello*/ uint24
> length = 0x001234; /* example of number of bytes in message */*
>         struct {
>             ProtocolVersion legacy_version = 0x0303;    /* TLS v1.2 */
>             Random random;
>             ...
>         } ClientHello;
>     }  ClientHelloHandshake
>
> If so, how does ClientHelloHandshake.ClientHello.random get included in
> the handshake transcript?
>



-Ekr


>
> _______________________________________________
> TLS mailing list
> TLS@ietf.org
> https://www.ietf.org/mailman/listinfo/tls
>
_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to