3.0 KiB
sidebar_position
| sidebar_position |
|---|
| 1 |
Key Exchange
In TLS, the first step towards obtaining TLS session keys is to compute a shared secret between the client and the server by running the ECDH protocol. The resulting shared secret in TLS terms is called the pre-master secret PMS.
With TLSNotary, at the end of the key exchange, the Server gets the PMS as usual. The Prover and the Verifier, jointly operating as the TLS client, compute additive shares of the PMS. This prevents either party from unilaterally sending or receiving messages with the Server. Subsequently, the authenticity and integrity of the messages are guaranteed to both the Prover and Verifier, while also keeping the plaintext hidden from the Verifier.
The 3-party ECDH protocol between the Server the Prover and the Verifier works as follows:
Serversends its public keyQ_btoProver, andProverforwards it toVerifierProverpicks a random private key shared_cand computes a public key shareQ_c = d_c * GVerifierpicks a random private key shared_nand computes a public key shareQ_n = d_n * GVerifiersendsQ_ntoProverwho computesQ_a = Q_c + Q_nand sendsQ_atoServerProvercomputes an EC point(x_p, y_p) = d_c * Q_bVerifiercomputes an EC point(x_q, y_q) = d_n * Q_b- Addition of points
(x_p, y_p)and(x_q, y_q)results in the coordinatex_r, which isPMS. (The coordinatey_ris not used in TLS)
Using the notation from here, our goal is to compute
x_r = (\frac{y_q-y_p}{x_q-x_p})^2 - x_p - x_q
in such a way that
- Neither party learns the other party's
xvalue - Neither party learns
x_r, only their respective shares ofx_r.
We will use two maliciously secure protocols described on p.25 in the paper Efficient Secure Two-Party Exponentiation:
A2Mprotocol, which converts additive shares into multiplicative shares, i.e. given sharesaandbsuch thata + b = c, it converts them into sharesdandesuch thatd * e = cM2Aprotocol, which converts multiplicative shares into additive shares
We apply A2M to y_q + (-y_p) to get A_q * A_p and also we apply A2M to x_q + (-x_p) to get B_q * B_p. Then the above can be rewritten as:
x_r = (\frac{A_q}{B_q})^2 * (\frac{A_p}{B_p})^2 - x_p - x_q
Then the first party locally computes the first factor and gets C_q, the second party locally computes the second factor and gets C_p. Then we can again rewrite as:
x_r = C_q * C_p - x_p - x_q
Now we apply M2A to C_q * C_p to get D_q + D_p, which leads us to two final terms each of which is the share of x_r of the respective party:
x_r = (D_q - x_q) + (D_p - x_p)