Spectre v1
疑似コード
Binary Hacks Rebootedより
code:c
// 処理1. xがarray1の添字として適切な範囲内にあるか確認する
if (x < array1_size) {
// 処理2. xが範囲内ならxを添字としてarray1を配列参照する
some_data = array2[array1x * 4096];
}
ある程度条件分岐が真になるように繰り返す
その状態で範囲外のxを使用して投機実行させる
array2のキャッシュが残る
array2の要素にアクセスしていってアクセスの早いインデックスにキャッシュが存在している
そのインデックスがarray1[x]の内容
疑問
基本的にプロセス内のメモリ情報しか取得できないのか?
Claude.icon 古典的なSpectre v1は同一プロセスのアドレス空間内が前提
4096を掛ける理由は?
キャッシュラインは64byte
何も掛けないとarray1[x] = 8だとしてarray2[8]がキャッシュに乗るとarray2[9..15]もキャッシュに乗る