web-dev-qa-db-ja.com

SpectreとMeltdownが保護されたデータを公開する方法を簡単に説明できますか

私はそれらについてのドキュメントに取り組んでおり、CPUのメモリキャッシュと投機的実行を利用することで、一般的に何が起こるかを理解していると思いますが、保護されたデータが実際にどのように公開されるかについて少し迷っています。

したがって、次の場合に投機的実行を正しく理解している場合:

if a == true { 
    firstFunction()
} else { 
    secondFunction()
}

cPUは、最初と2番目の関数の両方を呼び出し、?の値を知る前にそれらを実行します。それらの関数内に実際の値を格納しているのですか、それともキャッシュ内のメモリ位置だけを格納しているのですか?そして、aが解決されると、間違ったパスをたどって得たものはすべて破棄されますか?

ありがとう

1
PruitIgoe

レピュテーションの制限のためコメントできませんので、これを回答として投稿しますが、@ ThrawnCAの回答をさらに拡張したものです。私はそれが次の顧客の勘より少し悪くなるという印象を受けました(明らかに実際には次のプログラムです)。 Spectre/Meltdownについての私の理解は次のとおりです。

顧客が店に入る(今回は悪意を持って)。彼らは牛乳のカートンとウイスキーのボトルを求めます。店員(加工業者)が牛乳を渡しますが、アルコールを購入するには、顧客が18歳以上であることを示す有効なIDが必要です。彼は牛乳を持っておらず、友人が少しの間持ってくると言います。店員は大丈夫と言って、とにかく彼にボトルを扱います。購入者は、友人が迷子になって店を出ると言う前に、棚の後ろに移動してボトルを開けて飲みます(悪意のあるプログラムがアクセスを拒否される前にメモリの場所を検査する可能性があるため)。

1
sqlnoob

あなたが買い物をしていて、シリアルが必要かどうか思い出せないが、おそらく必要だと思うとしましょう。したがって、SMSをパートナーに送信して確認しますが、待っている間にシリアル通路に行き、いくつかを選びます。必要がないことが判明した場合は、あなたはそれを元に戻すでしょう。

コンピュータが同様のことをするとき、それは「投機的実行」です。

ここで、プライバシー上の理由から、一度に1人の顧客のみが店に入ることが許可され、棚が完了すると、ロボットによって棚に補充されると仮定します。したがって、次の顧客があなたが何を購入したかを知ることができないはずです。しかし、シリアルを元に戻すと、隣のシリアルをぶつけた可能性があるため、まったく同じ場所にあるわけではありません。棚にはまだ在庫があるので、補充ロボットはそれらについて何もしません。しかし、あなたの後に来る熱心な買い物客は、あなたの好みのシリアルブランドを伝えることができるかもしれません。

3
ThrawnCA