In the previous garbled circuit approach, to prevent generator cheating, we used cut-and-choose (circuit level / gate level). However, this overhead is relatively high.
In Authenticated Garbling, the generator only gives one circuit to the evaluator. The correctness is ensured through authenticated shares.
The sender has several boolean variables: b1 b2 b3.
We want the receiver to trust the sender when the sender tells the receiver the values of b1 b2 b3.
The approach is: an imaginary trusted party (offline protocol) first sends a global key DELTA to the receiver.
For each variable, the trusted party sends individual keys to the receiver, and sends values and corresponding MACs to the sender.
Here, both keys and MACs are k-bit binary strings.
Receiver global key: DELTA
variable key for receiver MAC for sender
b1 K_b1 K_b1 ⊕ b1*DELTA
b2 K_b2 K_b2 ⊕ b2*DELTA
b3 K_b3 K_b3 ⊕ b3*DELTA
That is to say:
If the sender wants to tell the receiver "b1 = 0", they should attach MAC K_b1.
If the sender wants to tell the receiver "b1 = 1", they should attach MAC K_b1 ⊕ DELTA.
If the sender wants to cheat, it means they need to guess a k-bit binary string correctly. This is very difficult. (This is a special case of BDOZ)
In other words, by having the sender send the value and MAC, and the receiver verify with the key, we can ensure the correctness of the value.
(Here we use the notation from the original paper)
In garbled circuit, for each wire
Then flip a coin to decide a "mask bit"
When mask bit = 0, the labels remain normal.
When mask bit = 1, the labels are reversed.
Calculate masked bit
We want:
If
If
If
If
If
If
When the evaluator receives the label, they can see the public pointer bit
Next, we create the garbled table.
Since
Since
Taking AND gate
Rows are directly ordered by pointer bits
When
At this point, the evaluator will hold
They will also hold
We want the evaluator to be able to decrypt
So we use
The remaining three rows are similar. We can get the table from page 5 of the original paper:

In previous chapters, we saw selective-failure attack: the generator corrupts part of the circuit, causing problems for the evaluator with specific inputs. If the evaluator experiences and reports a problem, it leaks the evaluator's input.
In the above example, if the generator corrupts the first row and the evaluator reports a problem, then the generator will know that
Since the generator also knows the mask bits
Can we modify the above steps so that even if the evaluator reports a problem, it won't leak information?
We can prevent the generator from seeing
We split
However, if the generator holds the entire garbled table, they can still potentially derive the mask bits from it (TODO). So we also need to split the table into shares.
How should we split it for efficient computation?
As mentioned before, when users see pointer bit
If combined with FreeXOR, then when
Similarly, if we continue looking at the first row of
Here we use a trick: Let FreeXOR global
To prevent the generator from knowing
Seeing
The left part goes to the generator, the right part goes to the evaluator.
When the generator sends the left part to the evaluator, the evaluator can reconstruct
With the help of the offline protocol (functionality
I only understand part of this protocol.
You can refer to the original author Xiao Wang's presentation.
<script> MathJax = { tex: { inlineMath: [['$', '$'], ['\\(', '\\)']] } }; </script> <script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"> </script>
