世界を動かす技術を、日本語で。

ジェーンストリートのリバースエンジニアリングチャレンジを解決する

2026年9月4日原文(jestoph.com)

概要

  • Jane StreetのASICリバースエンジニアリングチャレンジへの挑戦記
  • GDSファイル解析から回路抽出までの試行錯誤
  • 独自ツール開発や多くの遠回りを経て解決への道筋を記録
  • 回路要素の特定とシミュレーションによる動作検証
  • バリデーション問題やバグ対応の苦労も詳細に記述

Jane StreetのASICチャレンジに挑戦した話

  • Jane Streetが定期的に出す 技術チャレンジ への参加記録
  • 今回は ASIC(Application-Specific Integrated Circuit) のリバースエンジニアリング課題
  • GDSファイルから チップ動作の解析 を目指す内容
  • ウォームアップ課題と本番課題の2部構成

ファイル構造と初期調査

  • GDSファイルには 回路設計情報 が記録
  • ‘clk’(クロック)、‘rst’(リセット)、‘VGND’(グランド)、‘VPWR’(電源)などの 基本信号名 を確認
  • sky130_fd_sc_hd__などの セル名 から論理素子を推測
  • Pythonの gdstkライブラリ でGDSファイルを解析し、ウォームアップ課題で27要素を検出

シミュレーションデータの発見

  • メイン課題には VCDファイル (シミュレーション入出力)が付属
  • ASCII文字列らしき出力(例:‘TRY AGAIN’)をC言語で抽出
  • 回路に メッセージ埋め込み があることを発見

独自ツール開発の遠回り

  • 独自の 回路シミュレータ をsqlite3で作成
  • Pythonでの回路設計の難しさに気付き、 専用ハードウェア記述言語 のパーサーも自作
  • テスト用ハーネスやGDSビューアも自作したが、結局公式GDS Viewerを利用
  • 多くの 遠回りと時間消費 を経験

回路構造の理解と抽出

  • GDSファイルは 多層構造 で、各層に素材や配線情報が記録
  • gdstkで SVG出力 し、セルのI/O位置を特定
  • sky130の 公式ドキュメント で各素子の機能を確認、I/Oマッピングに活用
  • セルの重なり判定で 回路接続グラフ を構築

回路抽出とシミュレーション

  • 約1,000本の配線と17,000ポリゴンから 接続判定アルゴリズム を作成
  • 配線の 統合・簡略化 で処理効率化
  • Verilog形式 で回路記述を出力し、シミュレーションで動作検証
  • ウォームアップ課題では シフトレジスタ、加算器、比較器 など主要素を特定
  • 入力値を調整し、比較器の条件(合計496)を満たすことで出力を確認

本番課題への挑戦

  • 本番は 要素数・種類ともに大幅増加 (約10,000要素、81種類)
  • ウォームアップのスクリプトを流用しつつ、 新規素子の実装 を手動で追加
  • 配線収集処理の 高速化 で効率向上
  • バリデーション(検証)機能 の一時無効化で進捗優先

バグ対応と検証

  • バリデーション再開時に 未接続ワイヤ の存在を検出
  • シミュレーション上で値が不定となるワイヤの調査
  • ピン検出ロジックの見直し と視覚的な回路確認

ASICリバースエンジニアリングの教訓

  • 独自ツール開発 は学びが多いが、効率面では公式ツール活用が有効
  • ドキュメントや既存ライブラリの 積極活用 が重要
  • 回路抽出やシミュレーションには 地道なバグ修正 が不可欠
  • 複雑な回路 でも分解・可視化・シミュレーションで理解が進む
  • 最終的には 粘り強さと細かい検証作業 が成果に繋がる

まとめ

  • Jane StreetのASICチャレンジは 技術的好奇心忍耐力 が試される課題
  • 遠回りや失敗も含めて、 実践的な学びと達成感 を得られる貴重な体験