なぜ FIA を考えるのか
セキュリティについて
セキュリティと聞いて思い浮かべるのは,攻撃手法,対策手法などだと思います. これは間違いではありませんが,正確に理解すべき定義は異なると考えています. 立場や思想によって意見が異なるかもしれませんが,自分は以下のように理解しています
セキュリティは,ある仮定の下で,ある性質が成り立つことを保証すること
例えば,「AES-256 は安全である」という主張は,それ単体では意味を持ちません. 正しくは,「鍵が一様ランダムに選ばれ,リークせず,実装が仕様通り動作し,ハードウェアが実装通り動作し,...という仮定のもとで,現在知られている計算能力では,暗号文から平文を復元することが現実時間内には不可能である」という主張になると考えています.
セキュリティを考えるときは,この仮定,性質,保証を見抜く必要があり, 攻撃者はこの 3 つのうちどこかを壊す必要があります. 仮定と実際の実装が整合しなければその性質や保証は成立しなくなります.
ハードウェアは常に正気か
ハードウェアの上には論理層があります. この論理層は当然ハードウェアを信頼して動作しています. つまり,論理層のセキュリティは「ハードウェアは仕様通り動作する」という,検証され得ない巨大な仮定の上で成立しているということになります.
ソフトウェアの世界では,CPU は加算命令を出せば加算してくれて,メモリは書き込んだ値を保持して,条件分岐は条件式の真偽の通りに分岐してくれるというふるまいを, 私たちは一切疑わずに前提として受け取っています. こういった約束は,数学的に保証されているものではありません. どういうことかというと, 論理ゲートの正体はトランジスタであり,電荷であり,電圧の遷移であり,タイミングです. 「0」「1」や「加算」というデジタルな抽象表現は, 供給電圧や温度,クロックのマージンといった動作条件が満たされている限りにおいてのみ保証されます. つまり,この抽象表現は無条件に成立するわけではなく,動作範囲という条件付きで成立しているに過ぎないと考えています. つまり,以下のような条件が成立します.
決められた動作範囲の中にいるときだけハードウェアは正しく動く
これを満たさなくなたっとき,ハードウェアを抽象化する表現は成立しなくなり舞うs. 信号が確定する前にクロックエッジが来ると,フリップフロップは間違った値をラッチします. 計算の途中で電圧が落ち込めば,加算器の出力は変化します. 論理層が信じている約束事は,物理的な条件が動作範囲を外れた瞬間に突然反故にされます.
FIA
FIA は,意図的に動作範囲外にさせ,故障を誘発する試みです. クロックグリッチ,電圧グリッチ,電磁波,レーザーなど手段は様々ですが,狙いは一つで,「デバイスに仕様とは異なる計算をさせること」にあります. Rowhammer にように物理接触すら不要で SW から fault を入れる仕組みもあり, 「物理攻撃には物理アクセスが必要」という直感すら安全な仮定ではなくなりつつあります.
AES という論理的な概念が,正しく(正しいとは何かという議論もありますが)ハードウェアやソフトウェアに反映されるという保証もありません. さらに,AES そのものに瑕疵があるわけではありませんが,それでも「ハードウェアは思った通りに動作する」という仮定は,動作範囲という条件付きでしか成立しません. そして物理アクセス(あるいは Rowhammer などの間接的な手段)を持つ攻撃者は,この前提条件そのものを掌握しています.
FIA およびハードウェアに対する攻撃は,証明や常識によって理想化された空間と,実際に計算が発生する空間のちょうど境界に立っています. このようなハードウェアセキュリティを知る理由は,「ハードウェアは仕様通り動作する」といった,改めて向き合ったり,当然のこととして意識外に置くような仮定が本当に成立するのかと問い直すことにあると考えています.