mirror of
https://github.com/tlsnotary/website.git
synced 2026-01-06 20:53:56 -05:00
204 lines
7.5 KiB
Typst
204 lines
7.5 KiB
Typst
#set page(paper: "a4")
|
|
#set par(justify: true)
|
|
#set text(size: 12pt)
|
|
#show link: underline
|
|
|
|
|
|
= GHASH
|
|
We want to compute GHASH MAC in 2PC which is of the form $sum_(k=1)^l H^k dot
|
|
b_k$, where $H^k, b_k in "GF"(2^128)$. $H$ is split into additive shares for
|
|
parties $P_A$ and $P_B$, such that $P_A$ knows $H_1$ and $P_B$ knows $H_2$ and
|
|
$H = H_1 + H_2$. We now need to compute additive shares of powers of $H$.
|
|
|
|
|
|
== Functionality $cal(F)_(H^l)$
|
|
On input $(H_1)$ from $P_A$ and $H_2$ from $P_B$, the functionality returns
|
|
all the $H_(1,k)$ to $P_A$ and $H_(2,k)$ to $P_B$ for $k = 2...l$, such that
|
|
$H_(1,k) + H_(2,k) = (H_1 + H_2)^k$.
|
|
|
|
|
|
== Protocols
|
|
The following protocols all implement the functionality $cal(F)_(H^l)$. All
|
|
protocols guarantee privacy for $H_1$ and $H_2$, i.e. there is no leakage to the
|
|
other party. All protocols are implementations with unpredictable errors, that
|
|
means correctness is *not* guaranteed in the presence of a malicious adversary
|
|
deviating from the protocol. This is tolerable in the context of TLSNotary.
|
|
|
|
We will assume that $l$, which determines the highest power $H^l$ both parties want
|
|
to compute is a compile-time constant, so that it does not complicate protocol
|
|
and performance analysis.
|
|
|
|
When computing bandwidths of protocols, we assume that both parties have access
|
|
to a sufficient number of pre-distributed random OTs. In order to simplify the
|
|
computation of rounds, we assume that there is a sufficient number of
|
|
pre-distributed ROLEs available. This means we ignore rounds for setting up
|
|
ROLEs, because this can be batched and is needed for every protocol discussed
|
|
here.
|
|
|
|
The following table gives an overview about the different protocols:
|
|
#align(center)[
|
|
#table(
|
|
columns: (auto, auto, auto, auto),
|
|
inset: 10pt,
|
|
align: horizon + center,
|
|
[*Protocol*], [*0 Issue*], [*Rounds*], [*Bandwidth*],
|
|
|
|
$Pi_"A2M"$,
|
|
"yes",
|
|
[
|
|
Off: 0\
|
|
On: 1.5\
|
|
],
|
|
[
|
|
Off: 0\
|
|
On: 2.1 MB\
|
|
],
|
|
|
|
$Pi_"ROLE + OLE"$,
|
|
"yes",
|
|
[
|
|
Off: 0.5\
|
|
On: 0.5\
|
|
],
|
|
[
|
|
Off: 2.1 MB\
|
|
On: 128 bit\
|
|
],
|
|
|
|
$Pi_"ROLE + OLE + Zero"$,
|
|
"no",
|
|
[
|
|
Off: 0.5\
|
|
On: 0.5\
|
|
],
|
|
[
|
|
Off: 6.3 MB\
|
|
On: 256 bit\
|
|
],
|
|
|
|
$Pi_"Beaver"$,
|
|
"no",
|
|
[
|
|
Off: 2\
|
|
On: 0.5\
|
|
],
|
|
[
|
|
Off: 4.2 MB\
|
|
On: 128 bit\
|
|
],
|
|
)
|
|
]
|
|
|
|
=== A2M Protocol
|
|
This protocol converts the additive shares $H_"1/2"$ into multiplicative shares
|
|
$H_"1/2"^*$. Then both parties can locally computer higher powers
|
|
$H_(1"/"2)^k^*$. Afterwards they convert these higher powers back into additive
|
|
shares $H_("1/2", k)$.
|
|
|
|
|
|
==== Protocol $Pi_"A2M"^l$
|
|
+ $P_A$ samples a random field element $r arrow.l "GF"(2^128)$.
|
|
+ Both parties call $cal(F)_"OLE" (r, H_2) -> (x, y)$. So $P_A$ knows $(r,
|
|
x)$ and $P_B$ knows $(H_2, y)$ and it holds that $r dot H_2 = x + y$.
|
|
+ $P_A$ defines $m = r dot H_1 + x$ and sends $m$ to $P_B$.
|
|
+ $P_A$ defines $H_1^* = r^(-1)$ and $P_B$ defines $H_2^* = m + y$.
|
|
+ Both parties locally compute $H_"1/2"^k^*$ for $k = 2...l$.
|
|
+ Both parties call $cal(F)_"OLE" (H_1^k^*, H_2^k^*) arrow.r (H_"1,k",
|
|
H_"2,k")$ for $k = 2...l$.
|
|
+ $P_A$ outputs $H_"1,k"$ and $P_B$ outputs $H_"2,k"$.
|
|
|
|
|
|
==== Performance Analysis
|
|
The protocol has no offline communication, all the communication takes place
|
|
online with 1.5 rounds (steps 2, 3, 6). The bandwidth of the protocol is $1026
|
|
dot (128 + 128^2) + 1026 dot 128 + 128 approx 2.1 "MB"$.
|
|
|
|
|
|
=== ROLE + OLE Protocol
|
|
This protocol is nearly identical to the original GHASH construction from
|
|
#link("https://eprint.iacr.org/2023/964")[XYWY23]. It only addresses the leakage
|
|
of $H_(1"/"2)$ in the presence of a malicious adversary using $0$ as an input
|
|
for $cal(F)_"OLE"$. Instead of using $cal(F)_"OLE"$ for all powers $k = 1...l$,
|
|
we replace the first invocation of $cal(F)_"OLE"$ with $cal(F)_"ROLE"$ and then
|
|
only use $cal(F)_"OLE"$ for $k = 2...l$. The 0 issue is still present for higher
|
|
powers of $H$, but it can be fixed with the zero check.
|
|
|
|
|
|
==== Protocol $Pi_"ROLE + OLE"^l$
|
|
+ Both parties call $cal(F)_"ROLE"$, so that $P_A$ gets $(a_1, x_1)$ and $P_B$
|
|
gets $(b_1, y_1)$.
|
|
+ $P_A$ defines $(r_A, r_1) := (a_1, x_1)$ and $P_B$ defines
|
|
$(r_B, r_2) := (b_1, y_1)$.
|
|
+ $P_A$ locally computes $r_A^k$ and $P_B$ locally computes $r_B^k$, for
|
|
$k=2...l$.
|
|
+ Both parties call $cal(F)_"OLE" (r_A^k, r_B^k) arrow.r (r_(1,k), r_(2,k))$, so
|
|
that $P_A$ gets $r_(1,k)$ and $P_B$ gets $r_(2,k)$ for $k = 2...l$.
|
|
+ $P_A$ opens $d_1 = H_1 - r_1$ and $P_B$ opens $d_2 = H_2 - r_2$, so that both
|
|
parties know $d = d_1 + d_2 = (H_1 + H_2) - (r_1 +r_2)$.
|
|
+ Define the polynomials $f_k$ over $"GF"(2^128)$, with
|
|
$f_k (x) := (d + x)^k = sum_(j=0)^k f_(j,k) dot x^j$. $P_A$ locally evaluates
|
|
and outputs $H_(1,k) = f_k (r_(1,k))$ and $P_B$ locally evaluates and outputs
|
|
$H_(2,k) = f_k (r_(2,k))$ for $k = 1...l$.
|
|
|
|
==== Analysis of 0 issue
|
|
The OLEs of step 4 are still vulnerable to the 0 issue. This allows a malicious
|
|
$P_A$ to learn all the $r_(2,k), k = 2...l$ and by that also all the $H_(2,k)$.
|
|
$P_A$ can then output some arbitrary $s_k in bb(F)$ in step 6, which allows him to
|
|
completely set all the $H^k$ for $k = 2...l$.
|
|
|
|
However, he will not be able to set $r_(2,1)$, which means he cannot set $H^1$. He
|
|
is also not able to remove it from $"MAC" = sum_(k=1)^l H^k dot b_k$, if for example
|
|
some $b_k = b_(k')$, because he would need to know $r_(2,1)$ for that. So in
|
|
other words if $"MAC" = "MAC"_1 + "MAC"_2$, then $"MAC"_2$ always contains some private,
|
|
uncontrollable mask $H_2^1 dot b_1$, which prevents $P_A$ from completely
|
|
controlling the $"MAC"$. Thus, fixing the 0 issue is optional.
|
|
|
|
==== Performance Analysis
|
|
|
|
- The protocol only needs 0.5 offline round (step 4) and 0.5 online round
|
|
(step 5). This holds even if the zero-check is applied.
|
|
- The protocol has an upload/download size of
|
|
- *Offline*:
|
|
- *Without zero-check*: $1026 dot (128 + 128^2) + 1025 dot 128 approx 2.1 "MB"$
|
|
- *With zero-check*: Approximately 2-times overhead, so $approx 6.3 "MB"$
|
|
- *Online*:
|
|
- *Without zero-check*: $128 "bit"$
|
|
- *With zero-check*: $256 "bit"$
|
|
|
|
|
|
=== Beaver Protocol
|
|
This protocol is nearly identical to the original GHASH construction from
|
|
#link("https://eprint.iacr.org/2023/964")[XYWY23]. It only addresses the leakage
|
|
of $H_(1"/"2)$ in the presence of a malicious adversary using $0$ as an input
|
|
for $cal(F)_"OLE"$. Instead of using $cal(F)_"OLE"$ , we sample $r = r_1 + r_2$
|
|
randomly and compute the higher powers of additive shares with
|
|
$cal(F)_"Beaver"$. This protocol does not suffer from the 0 issue.
|
|
|
|
|
|
==== Protocol $Pi_"Beaver"^l$
|
|
|
|
+ Both parties sample a random field element. $P_A$ samples $r_1 arrow.l
|
|
"GF"(2^128)$ and $P_B$ samples $r_1 arrow.l "GF"(2^128)$.
|
|
+ Both parties repeatedly call $cal(F)_"Beaver" (r_(1,k - 1), r_1, r_(2,k - 1),
|
|
r_2) -> (r_(1, k), r_(2, k))$ for $k = 2...l$.
|
|
+ $P_A$ opens $d_1 = H_1 - r_1$ and $P_B$ opens $d_2 = H_2 - r_2$, so that both
|
|
parties know $d = d_1 + d_2 = (H_1 + H_2) - (r_1 +r_2)$.
|
|
+ Define the polynomials $f_k$ over $"GF"(2^128)$, with
|
|
$f_k (x) := (d + x)^k = sum_(j=0)^k f_(j,k) dot x^j$. $P_A$ locally evaluates
|
|
and outputs $H_(1,k) = f_k (r_(1,k))$ and $P_B$ locally evaluates and outputs
|
|
$H_(2,k) = f_k (r_(2,k))$ for $k = 1...l$.
|
|
|
|
|
|
==== Performance Analysis
|
|
|
|
- By using free-squaring in $"GF"(2^128)$ and batching calls to $cal(F)_"Beaver"$
|
|
the protocol needs 2 offline rounds (repeatedly step 2) and 0.5 online round
|
|
(step 3).
|
|
- The protocol has an upload/download size of
|
|
- *Offline*: $1025 dot (128 + 128^2) + 1025 dot 128 approx 2.1 "MB"$
|
|
- *Online*: $128 "bit"$
|
|
|
|
|
|
|
|
|