Jane Street ASIC リバースエンジニアリング チャレンジを解く
TL;DR: Jestoph は Jane Street のチャレンジで、GDS ファイルで記述された ASIC を逆解析し、120 ビットの入力に対する正しい出力を生成する仕組みを解き明かした。約 1 ヶ月間、カスタムツール、シミュレータ、制約ソルバーを用いて問題を解決した。
Jestoph は Jane Street が設計した ASIC のリバースエンジニアリング チャレンジに約 1 ヶ月間取り組み、これを解き明かした。チャレンジは GDS ファイル(チップの設計を記述するファイル)を分析して、その機能を理解し、隠されたパスワードを発見することだった。
ウォームアップと本チャレンジの規模
ウォームアップ用パズルは 27 個の要素から構成され、約 20 種類のコンポーネントを含んでいた。これに対し、本チャレンジではコンポーネント数が 81 種類に増え、全体で約 1 万個のコンポーネントを扱うことになった(ウォームアップは約 1,000 個)。

開発したツールと手法
Jestoph は Python の gdstk ライブラリを使用して GDS ファイルを読み込んだ。その後、sqlite3 を用いた回路シミュレータ、ハードウェア記述言語のパーサ、raylib で実装した基本的な GDS ビューアを構築した。最終的には制約ソルバー z3 を用いて問題を解決した。
VCD(波形ファイル)内の不審なエントリから ASCII 文字を発見し、初期の試みでは「TRY AGAIN」という出力を得た。チャレンジには他にも「Wrong Answer」「All 0's」「EMPTY SKY」「All 1's」「BIG BANG」「Correct Answer」など複数の出力メッセージが存在した。

主要な発見と困難
回路の「成功」信号に接続する 6 本のワイヤーを特定した。その後、全体シミュレーションが 2~3 日間機能しなかったが、これはリセットピンの設定を忘れていたためだった。Jestoph の作業ログには 「By beating my bloodied face against the keyboard for several hours and cursing how long I've already spent on this, I've managed to nail down a tricky bug」と記録されている。
別の問題では、ピン検出ロジックにバグが存在し、駆動されていないワイヤーが入力ピンのみに接続されていた。これを Jane Street に報告したところ、翌日メール確認を受けた。
最終的な解法
回路は 120 ビットの入力を必要とし、120~121 クロックサイクル後に出力が高くなる。Jestoph は 24 本のワイヤーを同時に高くする必要があることを発見し、うち 22 本は比較的簡単に動作させることができた。残る 4 本のワイヤーについて、z3 制約ソルバーを用いて正しい 120 ビット入力シーケンスを決定した。最終的な答えは 2 つ星で表示された。
筆者の見立て
- Jane Street のような企業がカスタム ASIC を設計するのは、通常のメーカー製機器と比べて追加のパフォーマンスを得るためと推測されている
- 回路を十分に詳しく観察することで、パターンが浮かび上がってくる可能性を指摘している
- パスワードが信号生成要素の構造内に隠されている可能性を示唆している
- 事前に調査せず、ファイルを探索し始めたのは、難しい方法をやることにしたからだと解釈している
この記事は元記事の事実のみに基づいて自動生成されました。
出典
jestoph's tech blog 「On solving the Jane Street Reverse Engineering Challenge」 https://jestoph.com/2026/09/04/jane-street-challenge.html (Jane Street blog の報道による)