トラスティング・トラスト
信用を信頼することについての考察
コンパイラに、ソースコードからは検知不可能な予期せぬ動作を仕込めるという問題
コンパイラプログラムのバイナリファイルを解析したら見つけられる
が、それはそれで大変 (大変じゃなかったらウイルスと解析ソフトの戦いはない)
言語$ Lのコンパイラをセルフホスティングで作成する際に、
言語$ Lで書かれたコンパイラのソースコード (e.g. compiler.l) が
言語$ Lのコンパイラ (e.g. gcl) によってコンパイルされる際に、
gcl 内部に予期せぬ動作を受け継ぐ機構を仕込んでおくと
ソースコード compiler.l 内部に何の痕跡も残さずに次のコンパイラプログラム gcl-v2 に予期せぬ動作を受け継げる
高級言語でコンパイラを作成する際に発生する
最初のコンパイラを別の言語$ Cで書く時に、何気なく書いている定数 true や false 等が具体的にどの値を用いているのかが (ドキュメントには書いてあっても) $ Cのソースコードのどこを読んでも見つからない
という問題も、これに当たる (はず)
ちなみに上の言語$ Cとは関係ない話だが、Summer498.icon
C言語 では C23 で #include<stdbool.h> 無しで true / false をコンパイルできるようになるらしいわね
この問題をより問題 (problem) として洗練させたのが、バックドア仕込み問題
ここの解説がわかりやすいと思う
Thompson が実際に UNIX の開発時に仕込んでいたっぽい
1983年 - チューリング賞。リッチーと共同受賞。
「汎用オペレーティングシステム理論の発展への貢献と、特にUNIXオペレーティングシステムの実装に対して」。
この時の受賞記念講演で述べたのが "Reflections on Trusting Trust"、
後に Thompson hack と呼ばれるようになる、
loginプログラムにバックドアを仕組むようなコンパイラを作るようコンパイラのバイナリを仕組み、その痕跡をコンパイラのソースからは消す、
という驚異的な技巧の解説で、
しかも実際にいくつかのシステムに仕込まれていたとする衝撃的なもの$ ^{[注釈 1]} であった。
この講演だけで独立したコンピュータセキュリティに対する重要な指摘
(仮にコンパイラの全ソースをチェックしても、それだけでは安全ではないかもしれない)
とされている$ ^{[注釈 2]} 。
$ ^{[注釈1]}
トンプソンはベル研の外部には、その仕掛けのあるコンパイラが配布されたことは一切無い(never distributed)と言っていると書いた後、
編者(エリック・レイモンド)は独立した2人の情報提供者から不審なログインに関する示唆を得ているとも書いており、 その他の状況も併せ実際には外部にも出ていたものとみる論もある(『Unix考古学』を参照)。
$ ^{[注釈2]}
直接の主題ではないが、
最後に警鐘として、講演した内容が示すように、原理的に、コンピュータのセキュリティには根源的な所に「信用を信用する」しかないという危うさがあるのだから、(こんにちで言うスクリプトキディに相当するような)セキュリティを脅かしている子供たちを、「天才ハッカー少年」などとマスコミがそやすことは、将来の禍いの元である、
といったことも述べている。
これは技術的な本筋とはあまり関係ないのだが、映画『ウォー・ゲーム』の公開などでコンピュータの一般への爆発的普及とセキュリティについて関心が高まっていた時期であったため、学会誌上でリチャード・ストールマンらと議論になった。 関連
言語(言語学) で使われる記号と実際のものをどのようにして対応付けるのか、という問題
話し手の中で意味が接地していなくても、
話し手が他の単語との関係に十分注意して、既知の関係と矛盾しないように発話をし、
言語の聞き手が意味を推測すると、
話し手が意味をわかっているかのようにコミュニケーションを取れる
……ということを近年GPT-4.iconが実証している気がするSummer498.icon