《时间就是金钱,朋友!:Goblin攻击剖析》
立即解锁
发布时间: 2025-08-31 02:01:24 阅读量: 16 订阅数: 37 AIGC 


应用密码学与网络安全前沿
### 《时间就是金钱,朋友!:Goblin攻击剖析》
在当今的多方计算等应用领域,高效的混淆电路(GC)实现至关重要。为了提升效率,像free - XOR和半门优化等技术被广泛应用。然而,这也带来了安全隐患,Goblin攻击便是其中之一。
#### 1. Goblin攻击原理
Goblin通过聚类算法提取混淆者的输入。在获得预处理数据后,它会启动聚类算法来确定每个混淆者的输入位。由于Goblin对CPU周期数据进行了归一化处理,各类门在质心的主导地位消失了,因此无论门的类型如何,它都将CPU周期聚为对应输入0和输入1的两个簇。为了揭示输入位,Goblin会在归一化前跟踪最大值。聚类结束后,包含最大值的簇成员标记为“1”,即混淆者输入位为“1”,其他簇则对应输入位“0”。
#### 2. 性能指标
用$c_i$表示泄漏测量值,即混淆者输入$x = x_1 \cdots x_n$($n$位对应$n$条线)的CPU周期数。例如,对于128位AES设计,$n = 128$。为评估攻击的有效性,计算在单条跟踪下恢复混淆者输入的成功率(SR),其定义为:
$SR := \sum_{j\in\{0,1\}} \sum_{i = 1}^{n} Pr(c_i \in p_j | x_i = j)$
简单来说,SR表示在混淆者输入的$n$位中正确披露的位数。这里考虑的是一阶成功率,即正确密钥排名第一的概率。
#### 3. 实验设置
运行了JustGarble、TinyGarble和Obliv - C等框架,这些框架可从GitHub仓库获取。混淆者和评估者代码在两个运行Linux Ubuntu 20、拥有16GB内存和Intel Core i7 - 7700 3.60GHz CPU的系统上运行,通过局域网电缆连接。为了在最大可能的情况下迫使CPU从RAM将全局参数$R$提取到L1级缓存,在混淆过程开始时启动Junk Generator(JG),并将其分配到混淆者系统上生成混淆电路的同一核心。使用`rdtsc`捕获每个跟踪(多个时间戳),并使用Matlab 2021实现的k - means聚类算法。
#### 4. 实验结果
- **基准函数结果**:针对常用的基准函数,如128 - AES、288 - SHA3、256位乘法器、128位求和和128位汉明函数,选择1000个随机输入运行Goblin。在k - means算法中,质心选择100个不同的起始值,算法返回簇内点到质心距离之和最小的结果。
- 当free - XOR优化启用时,攻击AES基准函数的成功率比256位乘法器高。原因有三:一是只测试了1000个输入,结果可能有波动;二是256位乘法器输入层的XOR门比AES多,“1”和“0”的时钟周期差异细微,更难区分;三是Goblin是无轮廓、单跟踪攻击,输入位越多,越容易确定。
- 半门优化时,相同基准函数的成功率总体降低,这是因为要识别的门类型数量增加。不过,即使对于AES等有多种门类型的电路,Goblin的平均成功率仍超90%。
下面是不同框架和优化下部分函数的泄漏IF条件统计表格:
| Framework | Function | IF | Framework | Function | IF |
| --- | --- | --- | --- | --- | --- |
| TinyGarble(half - gate) [86] | GarbledLowMem | 0 | JustGarble [42] | createNewWire | 0 |
| | GarbledGate | 2 | | TRUNCATE | 0 |
| | ParseInitInputStr | 0 | | TRUNC_COPY | 0 |
| | RemoveGarbledCircuit | 0 | | getNextId | 0 |
| | HalfGarbleGateKnownValue | 0 | | getFreshId | 0 |
| | NumOfNonXor | 0 | | getNextWire | 0 |
| | HalfGarbleGate | 2 | | createEmptyGarbledCircuit | 0 |
| | InvertSecretValue | 0 | | removeGarbledCircuit | 0 |
| | XorSecret | 0 | | startBuilding | 0 |
| | OutputBN2StrLowMem | 0 | | finishBuilding | 2 |
| | RandomBlock | 0 | | extractLabels | 0 |
| | Total | 4 | | garbleCircuit | 8 |
| TinyGarble(free - XOR) [86] | GarbledLowMem | 2 | | blockEqual | 0 |
| | GarbledGate | 5 | | mapOutputs | 0 |
| | ParseInitInputStr | 0 | | createInputLabels | 0 |
| | RemoveGarbledCircuit | 0 | | randomBlock | 0 |
| | NumOfNonXor | 0 | | xorBlocks | 0 |
| | XorSecret | 0 | | findGatesWithMatchingInput
0
0
复制全文
相关推荐










