2018年1月20日土曜日

投機的実行と脆弱性

新年早々、CPUの脆弱性が明らかになった。投機的実行に対する一連のプロセスで、情報が漏れてしまうというわけです。

なんだそりゃ?一般教養として、僕なりに(まあ僕もわかってはないけど)備忘録で書いておきます。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
CPUってのは人間で言うと「頭脳」です。計算したり、判断したりするのが仕事。
基本的には二進法で動いてて、計算を繰り返します。
高性能化を図るためには「速度を早くする」というのが基本ですが、速度を単純に早くするためにはその時時の半導体製品の性能にかかっています。

(微細化とか、低電力化とかです。微細化が進むと低電力化が進んで熱も出なくなります。逆にねつが出るとそれがボトルネックになったりします)

そこで、CPUには、単純な計算スピード(CPUのクロック数)アップだけでなく、いろんな仕組みが考案され、導入されてきました。

インテルやAMDなどがこれらの仕組みを使って競争してきたのが80年台から現在に至るCPUの高性能化に貢献してきたわけです。


その一つが分岐予測と「投機実行」です。

例えば
プログラムがCPUにAという計算をしなさい、という命令を出したとします。結果、その計算結果が0ならば、Bという計算をしなさい、と。

ここでAという計算をして0という答えを出し、さらにBというという計算をしてその結果を待っているとまるまる時間がかかってしまいます。

そこで
Aという計算をした場合、0という結果が出る確率が高いよね、ということが予めわかっている場合、CPUは予めBという計算をしておくのです。
実際に0という結果が出ると、Bという計算を改めて行うのではなく、予め計算しておいた値を利用します。こうすることで実際の演算速度をあげているのです。

これを分岐予測と投機実行と言います。
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
さて、予測通りAの計算結果が0になればいいのですが。実際には0では無かったとします。
その場合、Bという計算は無駄になります。なのでCPUはBというという計算や結果のデータを捨てることになります。

まあ、それはそれでしょうがない話なんですが、問題はこの「捨てるデータ」
計算を行った時に、様々なパスワードなどセキュリティも使用されたりすることがあるのですが、これもまとめて捨てられ、さらにこのデータに不正にアクセス出来る可能性が指摘されたのです。
僕の理解でざっくりいうと、これが今回騒ぎになった脆弱性の問題。

取り合えす、この辺にパッチをあてているようですがどうしても処理速度はオチてしまうでしょうね。
なかなか難しい問題です。

0 件のコメント: