脆弱性(Spectre)と、理論的には PoC の機能を理解しています。しかし、私は PoC の部分を理解していません。86から108行の間で、キャッシュからデータを読み取ったり識別したりしています。PoCがキャッシュからデータを読み取っていることがわかります* addr(l。90から)からの読み取り時間。ただし、どのエクササイズがresults[]
なぜ mix_i
キャッシュヒットのアドレスのバイトを表すときに、キャッシュをヒットしますか?
どんな運動が結果をもたらすか[]
それは正確な芸術ではありません。キャッシュは、victim_functionによってヒットされたものではないインデックスに対してヒットする可能性があります。しきい値は境界線の結果につながる可能性があります。
そのため、コードは攻撃を999回実行し、キャッシュヒットがあると判断した場合にresults [mix_i]をインクリメントします。次に、最も高い結果値(最も期待されるキャッシュヒット)を持つ結果を選択し、それが犠牲バイトの正しい値であると想定します。
キャッシュヒットのアドレスのバイトを表すときに、mix_iがキャッシュにヒットする理由
mix_iは、iをシャッフルする方法の1つにすぎません。
for (i = 0; i < 256; i++) {
mix_i = ((i * 167) + 13) & 255;
...
}
上記の結果、mix_iは0〜255の各値として1回だけ初期化されますが、0、1、2、3の順序ではありません(iと同様)。これは、コメントに記載されている理由で行われます- ストライド予測を防ぐ ;