在幽灵漏洞描述文件中,我们可以看到它谈到了这个特定的漏洞。
if (x < array1_size)
y = array2[array1[x] * 256];
根据论文,在幽灵漏洞中,他们首先为 x 传递许多合法值,以便分支预测器得到训练并开始推测下一条语句,即开始执行y = array2[array1[x] * 256];
。并且经过足够长的迭代,当分支预测器被训练时,x 的恶意值被传递,在这种情况下,处理器开始推测执行y = array2[array1[x] * 256];
,这一次它加载array1[x]
到缓存中,目前无法恢复,可以被攻击者使用。通道攻击。
所以我的问题是为什么我们也需要有这个if
声明。如果只有这句话
y = array2[array1[x] * 256];
上面的这个语句(没有if
)是否应该足以将其加载array1[x]
到缓存中。为什么我们甚至需要这个if
声明?