kbits

信頼の信頼について

原題: Reflections on Trusting Trust
著者: Ken Thompson(AT&T Bell Laboratories)
公開日: 1984年8月(ACM Turing Award Lecture、Communications of the ACM, Vol.27 No.8)
ソースURL: Reflections on Trusting Trust(PDF)
アーカイブ日: 2026-06-11


要約

「ソースコードを読めば安全だと確信できるか?」——Ken Thompsonの1984年Turing Award受賞講演は、この問いに「否」と答える。コンパイラに自己増殖型のバックドアを仕込む手法を3段階で示し、「ソフトウェアをどこまで信頼できるか」という根源的な問いを投げかける、たった8ページの古典である。

Stage I: 自己複製プログラム

Thompsonはまず、コンパイルして実行すると自分自身の完全なコピーを出力するプログラム(いわゆるquine)を紹介する。C言語のコードで示されるこのプログラムは一見パズルだが、二つの重要な性質を持つ。(1)別のプログラムから容易に生成できる。(2)メインアルゴリズムとともに複製される「過剰な荷物(excess baggage)」を任意に含めることができる。この二つ目の性質が、後に致命的な意味を持つ。

Stage II: コンパイラの「学習」

続いて、Cコンパイラのエスケープシーケンス解釈を題材に、「コンパイラ自身が書かれた言語でコンパイラを書く」という循環の妙技が披露される。改行文字\nの文字コードを知るコンパイラが、その知識を使って自分自身を再コンパイルし、知識を永続化する——Thompsonはこれを「学習するプログラム」と呼ぶ。垂直タブ\vを新たに追加する例を通じて、まず数値(11)をハードコードしてコンパイラに「教え」、その後にポータブルな実装に置き換えるプロセスが示される。この学習段階こそが、後に悪用される仕組みの原型となる。

Stage III: Trojan Horse——ソースに痕跡を残さないバックドア

ここで本題に入る。ThompsonはCコンパイラに、特定のパターンを検出すると意図的に誤ったコードを生成する改変を加える。標的に選ばれたのはUNIXのloginコマンドだ。改変されたコンパイラは、本来の暗号化パスワードに加えて、あらかじめ仕込まれた既知のパスワードでもログインを許すコードを生成する。

しかし、これだけならソースを見れば発見できる。恐ろしいのは次の一手だ。Thompsonはさらに第二のTrojan Horseを、コンパイラ自身のソースコードを標的に仕込む。このTrojan HorseはStage Iの自己複製プログラムであり、コンパイル時に自動的に両方のTrojan Horseを再挿入する。つまり、コンパイラのソースコードからバグを取り除いても、いったん感染したバイナリが再コンパイルするたびにバグが復活する。loginコマンドのソースには一切痕跡が残らず、コンパイラのソースからもバグが「消えている」——にもかかわらず、生成されるバイナリには永遠にバックドアが残り続ける。

教訓

「自分で完全に作成したコード以外は信頼できない」——Thompsonの結論は簡潔で、かつ絶望的だ。ソースコードレベルの検証や精査では、この種の攻撃からは身を守れない。彼は強調する。アセンブラ、ローダー、ハードウェアのマイクロコード——プログラムを扱うプログラムであれば何でも標的にできる。そして「うまく仕込まれたマイクロコードのバグは、ほとんど検出不可能だろう」と述べる。

講演の後半でThompsonは、ハッカー(当時の「414ギャング」等)に対する社会の反応にも触れている。マスコミがバンダルを「天才少年」として英雄扱いする一方、法改正で厳罰化が進む二重基準を批判し、「コンピュータに侵入する行為は隣の家に侵入するのと同じ社会的スティグマを持つべきだ。隣の家のドアが施錠されていようがいまいが、それは問題ではない」と訴える。


論評

「Reflections on Trusting Trust」は、コンピュータセキュリティの歴史で最も引用される論文の一つであり、40年経った今もその妥当性を失っていない。この講演が示した「コンパイラに埋め込まれた自己複製型バックドアはソースコード検証では検出できない」という洞察は、サプライチェーン攻撃(SolarWinds事件等)やサードパーティ依存の増大した現代において、むしろ当時よりも切実な問題として立ち現れている。

この論文の特筆すべき点は、その構成にある。パズル(quine)から始め、コンパイラの「学習」という無害な観察を経て、読者を徐々に暗い洞察へと誘導する——まるで手品のタネ明かしのように、最後の瞬間にすべてのピースが合わさる。当時の会場がどれほどの衝撃を受けたかは想像に難くない。UNIXとC言語の共同作者の一人が、自らの創造物を最も深く理解したからこそ可能だったデモンストレーションである。

Thompson自身も認めているように、この攻撃のアイデア自体は彼の独創ではない(Multicsのセキュリティ批評に触発された)。しかし、それをこれほどシンプルで説得力のある形で示したことの影響は計り知れない。今日のソフトウェアサプライチェーンセキュリティ(SBOM、署名付きビルド、再現可能ビルド等)の議論の多くは、この8ページの講演にその知的ルーツを持つ。四半世紀を超えて読み継がれるべき古典である。