Commit Graph
101 Commits
Author SHA1 Message Date
tkgstratorandClaude Sonnet 4.6 455de1ebee feat(crypto): implement build_session_region() with TFIT-WB-AES DH key encryption
Add session_region builder for key 33.6 scheme_data (plaintext[128:300] = 172B).
Emits 7B constant CBOR prefix + 128B TFIT-WB-AES-ECB(DH_pub_key) + 37B zero-filled
MGK tail (CBOR encoding TBD). Falls back to bytes(172) if NFWebCrypto binary absent.
Update test_appboot_e2e.py to call build_session_region() instead of hardcoded zeros.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 15:47:05 +00:00
tkgstratorandClaude Sonnet 4.6 9be376736d feat(appboot): add e2e test script and simplify iOSMslClient architecture
Corrects entity_auth_data CBOR structure based on 243 captured requests:
- scheme name is "MGK_APPID" (not "FAIRPLAY_MGK_APPID")
- apphmac is device_id_token UTF-8 bytes, not a computed HMAC
- devicetoken is base64.b64decode(device_id_token) raw bytes
- integer key 3 for ESN (not string key); no device_key_data or esn_prefix
- identity (key 33.8) is full ESN without "_3" suffix
- signature = HMAC-SHA256(sign_key_0, key_request_data_bytes) only

iOSAppbootParams simplified: removes device_key_data, apphmac, devicetoken,
renewable, capabilities, esn_prefix. Adds optional device_id_token for
subsequent sessions. CBOR building moved inline into iOSMslClient.

New tools/test_appboot_e2e.py performs the full chain: TFIT emulation ->
Phase 3 KDF -> DH keygen -> CBOR build -> POST appboot.netflix.com ->
response parse. Handles both CBOR success and JSON MSL error responses.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 15:24:01 +00:00
tkgstratorandClaude Opus 4.6 70fb7279d0 docs(spec): devicetoken = deviceIdToken の Base64 デコードと判明 — ESN のみで Python 実行可能
- CBOR "devicetoken" (216B) と "apphmac" (32B) は同一の DEVICE_ID_TOKEN の異なる表現
- 両方とも x-netflix-deviceidtoken HTTP レスポンスヘッダから取得
- NFSharedStore App Group コンテナに DEVICE_ID_TOKEN キーで永続化
- getAuthData() 内で: apphmac = UTF8 bytes, devicetoken = Base64.decode()
- Tweak キャプチャは ESN のみで Python 単体で appboot→MSL認証が実行可能

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 15:14:07 +00:00
tkgstratorandClaude Opus 4.6 f17ed6fc60 docs(spec): deviceIdToken はサーバー発行 (x-netflix-deviceidtoken ヘッダ) と確定
- deviceIdToken は暗号計算ではなく Netflix サーバーが HTTP レスポンスヘッダで配信
- 永続化先は NFSharedStore App Group コンテナ (Keychain 外)
- 初回 appboot では nil で送信可能、レスポンスから取得してキャッシュ
- Python 単体で取得可能 — Tweak でのキャプチャ不要
- 必要なキャプチャ値は ESN + devicetoken (216B) の 2 つのみに削減

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 14:45:20 +00:00
tkgstratorandClaude Opus 4.6 87333975f6 docs(spec): トークンは DRM 層永続化と確定、Phase 2 48B key 検証済み
- Keychain 全削除 (18件) + アプリデータ全削除後も同一トークンが使用された
- devicetoken/deviceIdToken は Keychain より深い層 (Secure Enclave/CDM) に永続化
- getNRMCookieWithESN: コールバックは Keychain 削除後も発火せず
- HTTP エンドポイントも存在しない (mitmproxy 確認済み)
- → 一度 Tweak でキャプチャすれば長期間再利用可能
- Phase 2 KDF: SHA384(session_bind[:16]) = 48B key の一致を確認

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 13:52:59 +00:00
tkgstratorandClaude Opus 4.6 bb4fb1d2ce docs(spec): entity_auth_data 構造と devicetoken/deviceIdToken の取得元を追記
msl_key_relationship.md に Section 9 追加:
- entity_auth_data (MGK_APPID) の CBOR 構造を記載
- deviceIdToken (apphmac): CDM/Secure Enclave 由来、HTTP API なし
- devicetoken (NRM): Nbp.framework 内部 SDK コール、HTTP API なし
- プロキシログで NRM 専用エンドポイント不在を確認
- Python 実装での扱い方 (コンストラクタパラメータ) を記載

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 13:45:00 +00:00
tkgstratorandClaude Opus 4.6 65bb5a213e docs(spec): apphmac = deviceIdToken と確定 — 全未知値が解明完了
- apphmac は HMAC/SHA/HKDF ではなく [device deviceIdToken] (CDM由来の不透明トークン)
- MslClient getAuthData() (0x284bc) の静的解析で this+0xe8 → CBOR "apphmac" の流れを確認
- setApphmac() (0x29930), 3つのコードパス (A/B/C) を特定
- HKDF(MGK, PSK, Nonce) は apphmac とは無関係 (Phase 3 KDF 初期化用)
- entity_auth_data の全フィールド構造を確定

全未知値の解明が完了:
- apphmac: deviceIdToken (キャプチャ必要)
- appboot sign key: Keychain キャッシュ (初回は sign_key_1)
- devicetoken: NRM トークン (キャプチャ必要)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 13:27:22 +00:00
tkgstratorandClaude Opus 4.6 84ff134874 docs(spec): apphmac は毎リクエスト可変 (67/243 ユニーク) — HKDF 仮説を否定
- CBOR 直接照合で HKDF(MGK, PSK, Nonce) 出力と不一致を確認
- 243 appboot リクエスト中 67 個のユニーク apphmac 値を観測
- ランダムノンスまたはタイムスタンプ依存の値
- entity_auth_data の CBOR 構造を完全に記載 (key 35 + key 30)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 12:55:17 +00:00
tkgstratorandClaude Opus 4.6 42a7eadfce feat(tweak): FpsMgkAppIdAuthData キャプチャ成功 — x5は devicetoken と判明
- FpsMgkAppIdAuthData (0x28038) フック発火確認
- RE で apphmac と名付けられたx5引数は実際には devicetoken (216B protobuf)
- apphmac はコンストラクタ引数ではなく getAuthData() 内部で計算される
- HKDF hook を無効化 (sret 呼び出し規約でクラッシュ)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 12:47:32 +00:00
tkgstratorandClaude Opus 4.6 aa9ec14bde feat(tweak): FpsMgkAppIdAuthData (0x28038) をフック — レガシー IosMGKAuthData から移行
- IosMGKAuthenticationData (0xd45c) は LEGACY で appboot 時に呼ばれないことを確認
- 実際のアクティブクラスは FpsMgkAppIdAuthData (MslClient @ 0x28038)
- コンストラクタ引数: mgkid, devtype, appid, appkeyversion, apphmac
- libc++ std::string SSO レイアウト対応の readStdString() ヘルパー追加
- ログイン後の appboot で apphmac 値を直接キャプチャ可能

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 12:19:53 +00:00
tkgstratorandClaude Sonnet 4.6 7ca4183a08 feat(crypto): add compute_apphmac() and IOS_APPID/IOS_APPKEYVERSION constants
AppleWebCrypto::HKDF を再実装した compute_apphmac() を NetflixCrypto に追加。
  Extract: prk = HMAC-SHA256(key=MGK, data=PSK)
  Expand:  okm = HMAC-SHA256(key=prk, data=Nonce)

- crypto.py: NetflixCrypto.compute_apphmac(enc_key_0, sign_key_0) → 32B apphmac
- constants.py: IOS_APPID, IOS_APPKEYVERSION を追加
- ios_client.py: apphmac フィールドのドキュメントを更新、IOS_APPKEYVERSION をデフォルト値に使用
- tools/verify_full_key_chain.py: apphmac テストベクタを追加 (9/9 PASS)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 12:11:40 +00:00
tkgstratorandClaude Opus 4.6 7cd95f6631 feat(re): apphmac 導出式を特定 — HKDF(MGK, PSK, Nonce) が最有力候補
- AppleWebCrypto::HKDF (NFWebCrypto+0x11900) フックで入力を完全キャプチャ:
  key=MGK(48B), ikm=PSK(16B), info=Nonce(16B)
- 導出式: HMAC-SHA256(HMAC-SHA256(MGK, PSK), Nonce)
- 全入力が既知定数/導出可能値のため Python で再現可能
- HKDF の key パラメータ読み取りを修正 (obj+8 offset で KeyByteArray データ発見)
- これにより appboot→MSL認証に必要な全値の導出式が技術的に揃った
- IosMGKAuthData での最終照合が残る (コンストラクタオフセット要再検証)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 10:53:59 +00:00
tkgstratorandClaude Opus 4.6 69603736d7 docs(spec): appboot sign key は Keychain キャッシュと判明 — ブロッカー1つ解消
- 全アプリデータ削除後のクリーン起動で 38b2030d / 8887ddf1 が出現しないことを確認
- これらは前回セッションの Phase 2 sign key が Keychain にキャッシュされたもの
- フレッシュ appboot では sign_key_1 (Phase 3 KDF) で署名すれば良い
- 残るブロッカーは apphmac の導出ロジックのみ
- Tweak に HKDF (AppleWebCrypto::HKDF @ +0x11900) フックを追加

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 10:16:33 +00:00
tkgstratorandClaude Sonnet 4.6 07a88cd808 feat(tweak): hook AppleWebCrypto::HKDF at offset 0x11900 to capture appboot sign key derivation
Static analysis of NFWebCrypto confirms that offsets 0x11990/0x119b8 are HMAC
call sites within a single C++ method at 0x11900 (netflix::AppleWebCrypto::HKDF).
Replace placeholder offset logging with a working MSHookFunction hook using the
correct struct-return calling convention (x8 sret). The hook logs ikm, info, key,
and okm to correlate HKDF output against the target 38b2030d sign key.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 10:11:28 +00:00
tkgstratorandClaude Sonnet 4.6 6a0b085d48 feat(tweak): add HMAC_CTX/SHA384/EVP_Digest hooks to trace appboot sign key derivation
Add incremental HMAC hooks (HMAC_CTX_new, HMAC_Init_ex, HMAC_Update, HMAC_Final),
one-shot SHA384, and EVP_DigestInit_ex/Update/Final_ex hooks in NFWebCrypto to
correlate full key material across multi-step HMAC sequences.

HKDF offset hooks are logged as candidate addresses but not installed (prototype
unverified) to avoid crashes. Log reveals 38b2030d and 8887ddf1 appear first in
HMAC_Init_ex and are not produced by any HMAC operation, pointing to an upstream
derivation path (HKDF, AES whitebox, or DH derive) not yet captured.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 09:49:14 +00:00
tkgstratorandClaude Opus 4.6 e1f68dca27 docs(spec): 全値の固定/可変・再利用可否・Python再現可否を明記
unknown_values_report.md を全面改訂:
- 全値を「バイナリ固定」「デバイス固有」「ランタイム可変」に分類
- 各値に固定/可変、再利用可否、Python再現可否を明記
- 最大のブロッカー: apphmac導出ロジック、appboot sign key導出元
- HMAC署名チェーンの実行順序を記載
- appboot blob (8549B) の構造を記載

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 09:34:07 +00:00
tkgstratorandClaude Opus 4.6 6968207fd3 feat(tweak): NetflixEntityAuth で appboot blob をキャプチャ、devicetoken 抽出
- NetflixEntityAuth Tweak: HMAC/IosMGKAuthData/MslRegistration フック
- 大容量 HMAC データ (>1KB) を自動ファイルダンプする機能追加
- 8549B appboot blob から以下を抽出:
  - Full ESN: NFAPPL-02-IPHONE9=1-AD0455EF27...
  - AppID: a2becfec-b286-535c-b884-903a384caee6
  - DeviceToken: 216B protobuf
  - AppKeyVersion: 1
- Phase 3 KDF チェーン全体をライブ検証 (Python 実装と完全一致)
- unknown_values_report.md を実測結果で更新

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 09:30:21 +00:00
tkgstrator 6917ab3b71 feat(auth): dump large HMAC inputs and keys for analysis
Adds logic to save data, key, and signature blobs to temporary files
when HMAC is invoked with inputs larger than 1KB. Facilitates
debugging and inspection of large authentication payloads,
such as app boot requests.
2026-04-09 09:29:10 +00:00
tkgstratorandClaude Sonnet 4.6 8b497e0c08 feat(tweak): add NetflixEntityAuth tweak to capture entity_auth_data values
Hooks IosMGKAuthData constructor (MslClient offset 0xd45c), NFWebCrypto HMAC
one-shot, NSData file reads, and MslRegistration getDeviceTokensWithCallback:
to capture identity (ESN), appid, appkeyversion, apphmac, and devicetoken at
appboot time. Logs to NSTemporaryDirectory() and /var/tmp via dual file_log.
Verified loading and HMAC capture on device (iOS 15.8.3 Dopamine rootless).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 09:13:26 +00:00
tkgstratorandClaude Opus 4.6 2a23b7723a feat(re): appboot署名検証鍵を抽出し未知の値の調査レポートを作成
- kAppBootKey (RSA-4096) / kAppBootEccKey (P-256) / kSharkBootKey を
  NFWebCrypto.framework から静的抽出し constants.py に追加
- DH prime p は MslClient.framework @ 0x001265a0 で確認済み
- apphmac / devicetoken / device_key_data はランタイム生成と判明
- docs/spec/unknown_values_report.md に全調査結果を記載

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 08:43:08 +00:00
tkgstratorandClaude Sonnet 4.6 153dc722e8 feat(ios): implement appboot-to-MSL auth flow in Python
- crypto.py: add DH key operations (generate_dh_keypair,
  compute_dh_shared_secret) and derive_full_key_chain orchestrator
  that runs Phase 3 KDF → 48B key → Phase 2 DH in sequence;
  add SessionKeys dataclass for typed output
- constants.py: add IOS_DH_P, IOS_DH_G (Netflix 1024-bit group),
  IOS_APPBOOT_ENDPOINT
- cbor_encoder.py: add build_appboot_request high-level builder
  that wires entity_auth_data + key 33.6 scheme_data + header
- cbor_decoder.py: add parse_appboot_response to extract
  server_scheme_data (key 33.6), server_nonce (key 33.9),
  scheme_id, and cookies from appboot response
- ios_client.py: new iOSMslClient class with perform_appboot()
  end-to-end orchestrator and build_encrypted_msl_request();
  TODO comments mark Frida-capture-required values
- verify_full_key_chain.py: extend with DH round-trip tests
  using raws/msl_keys.json vectors (4 new assertions, 12 total PASS)
- __init__.py: export iOSMslClient, iOSAppbootParams, iOSSessionState,
  SessionKeys

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 08:36:10 +00:00
tkgstratorandClaude Sonnet 4.6 0d73df8249 feat(frida): add entity_auth_data / NFWebCrypto key capture hooks
- hook_entityauth_capture.js: runtime capture of devicetoken (216B),
  apphmac (32B HMAC-SHA256), and device_key_data (~6576B) via Nbp
  symbol enumeration, ObjC method scanning, NSData file hooks,
  NSUserDefaults, and sqlite3_step BLOB filter
- hook_nfwebcrypto_keys.js: dump kAppBootKey (RSA-4096 SPKI) and
  kAppBootEccKey (ECDSA P-256 SPKI) via NFWebCrypto memory scan +
  d2i_PUBKEY / EVP_DigestVerifyInit hooks; also scans for ABKP /
  ABECCKP handle strings
- hook_appboot_dh.js: extend DH prime p log from first 16B to full
  128B; extend BN_mod_exp base/exp/mod and result dumps to full bytes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 08:33:44 +00:00
tkgstratorandClaude Opus 4.6 e82544e0cd feat(re): MslClient.framework の key 33.6 構築ロジックとCBORシンボルテーブルを解析
IosAdhKeyRequestData::getKeydata() の逆アセンブリから、key 33.6 が
CBOR tag(55799) + map{scheme, keydata{mechanism, parametersid, publickey}}
構造であることを確認。CborMslSymbolTable の96エントリ完全マッピングを抽出。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 07:37:03 +00:00
tkgstratorandClaude Sonnet 4.6 b24b84efb2 feat(crypto): key 33.6 scheme_data 構築関数を追加
iOS appboot の 352B key 33.6 plaintext を組み立て XOR 暗号化する
NetflixCrypto.build_key336_scheme_data() を実装。165 サンプルで
ラウンドトリップ検証済み。

- constants.py: IOS_KEY336_DEVICE_HEADER (128B 固定デバイスヘッダー) を追加
- crypto.py: build_key336_scheme_data() を追加
  - nonce 変形マスク (n2: f41b×2B, n3: f41b+181b×2B, tail: f31c071f×4B)
  - XOR 暗号化 (key 33.9 repeating 16B)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 07:12:36 +00:00
tkgstratorandClaude Opus 4.6 88f8af71b5 docs(spec): key 33.6 平文の詳細構造を解明 — CBOR ヘッダ固定、7B nonce ランダム
352B: ヘッダ全セッション固定(128B) + TFIT+MGK(160B) + 7Bランダムnonce×3(64B)
144B: map(6)軽量版、セッション領域なし、DH認証なしの軽量リクエスト
kAppBootKey/kAppBootEccKeyは署名検証用(確定済み)
全未解明ポイントを解消

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 02:46:02 +00:00
tkgstratorandClaude Sonnet 4.6 2156252976 feat(tools): add key 33.6 plaintext structure analysis script
Analyzes 239 iOS appboot CBOR captures across four sections:
1. Static header: bytes 0-127 confirmed identical across all 165 standard-
   prefix 352B samples; CBOR tag 55799 + map(7) + 2.5 key-value pairs.
2. Per-request tail: 64-byte region contains a 7-byte random nonce encoded
   3× with constant XOR (f41b...) between copies; not a counter/timestamp.
3. 144B variant: map(6) vs map(7), static header 0-88 only, no session
   region, scattered throughout capture (not session-boundary-clustered).
4. Full hex dump and CBOR structure walkthrough for representative samples.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 02:45:08 +00:00
tkgstratorandClaude Opus 4.6 78f14cfdf3 docs(spec): kAppBootKey/kAppBootEccKey は署名検証用と確定
- Phase 1 図: 点線→実線に変更 (RSA verify + ECDSA verify)
- kAppBootKey も図に追加
- 鍵一覧テーブル: 「用途未確認」→「署名検証」に更新
- 未解明ポイントから削除、解決済みに移動
- kSharkBootKey/kSharkBootKey_Test も新発見

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 02:40:54 +00:00
tkgstratorandClaude Opus 4.6 34e94e4485 feat(re): kAppBootKey/kAppBootEccKeyの用途を静的解析で確定(署名検証)
radare2でNFWebCrypto.frameworkを解析し、両鍵がimportKey(usage=VERIFY)で
インポートされ、RSA_verify/ECDSA_verifyで使用されることを確認。
従来のRSA暗号化仮説を署名検証モデルに修正。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 02:39:21 +00:00
tkgstratorandClaude Opus 4.6 9cfc1e3141 test: ESN → 全鍵導出チェーンの統合テストを追加
Phase 0 (MGK/Unicorn) → Phase 3 (KDF) → 48B Key (SHA384)
→ Phase 2 (DH/HMAC-SHA384) → bootstrap_key を一気通貫で検証。
8/8 テスト通過。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 02:26:31 +00:00
tkgstratorandClaude Opus 4.6 49933202e7 docs(spec): ライフサイクル図を実行順に再構成、全ステップの操作を明記
- 実行順 (0→3→1→2→4→5) でシーケンスを並べ直し
- Phase 3 が Phase 1 の前に実行されることを図上で明確化
- 各 Phase の具体的な暗号操作と入出力を英語で記述
- Phase 1: TFIT エンコード + XOR + サーバー応答の PubKey 抽出を追加
- Phase 2: bootstrap_key = [16:48] を明記
- ラベルを英語に統一

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 02:11:40 +00:00
tkgstratorandClaude Opus 4.6 d52eda821e docs(spec): Phase 1 で key 33.6 → Server DH PubKey 抽出を明示
key 33.6 (96B) から Server DH PubKey (128B) を取り出すステップを追加。
Phase 2 には PubKey のみが渡されることを図で明確化。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 02:09:47 +00:00
tkgstratorandClaude Opus 4.6 4d71d902e2 docs(spec): appboot Response を key 33.6 / 33.9 に分解
appboot Response key 33 を Server DH PubKey と省略していた問題を修正。
key 33.6 (Server DH Response 96B) と key 33.9 (Server nonce 16B) に分離。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 02:07:59 +00:00
tkgstratorandClaude Opus 4.6 97f2abe248 docs(spec): Phase 1 の from Phase 0 参照を enc_key_0/sign_key_0 に修正
存在しない「MGK Pair」ラベルを削除し、Phase 0 の実際の出力名で参照。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 02:06:31 +00:00
tkgstratorandClaude Opus 4.6 a600923cb2 docs(spec): to Phase N をノードに統一、全Phase間参照を明示
- エッジラベルの to Phase X を削除し [/"to Phase N"/] ノードに統一
- Phase 0: enc_key_0/sign_key_0 → to Phase 1, 3
- Phase 1: DH PrivKey → to Phase 2, DH Resp → to Phase 2
- Phase 2: bootstrap_key → to Phase 5
- Phase 3: session_bind → to Phase 2, enc_key_1 → to Phase 4
- Phase 4: enc_key_2/sign_key_2 → to Phase 5
- Phase 5: 操作の役割をエッジラベルから出力側に移動

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 02:05:33 +00:00
tkgstratorandClaude Opus 4.6 8ec330b4b6 docs(spec): Phase 1 に DH PrivKey 出力を追加、Phase 2 の参照を統一
- Phase 1: DH_generate_key から PrivKey 出力 + to Phase 2 参照を追加
- Phase 2: Client DH PrivKey を from Phase 1 参照ノードに変更

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 02:03:47 +00:00
tkgstratorandClaude Opus 4.6 17613f5548 docs(spec): Mermaid 図の記法を統一
- 四角 [""] → データ, 角丸 ([""]) → 暗号操作, 平行四辺形 [/""/] → Phase 間参照
- エッジラベルはデータの役割 (HMAC key, decrypt key 等)
- Phase 間参照を from/to Phase N ノードで統一 (グレー)
- 凡例にノード形状・色・線種の定義を追加

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 02:01:07 +00:00
tkgstratorandClaude Opus 4.6 b863ed1d40 docs(spec): 実行順序の注釈を追加 (Phase 3 → Phase 1-2 の順序を明示)
Phase 番号と実行順が異なることによる循環参照の誤解を防ぐため、
実行順序 (0→3→1→2→4→5) を明記。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 01:58:01 +00:00
tkgstratorandClaude Opus 4.6 5f2e6829b2 docs(spec): Mermaid 図のラベルを全て英語に変更
日本語ラベルは図中で読みにくいため、全ノード・エッジラベルを英語化。
見出しとコメントは日本語のまま。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 01:55:44 +00:00
tkgstratorandClaude Opus 4.6 965ae9bae7 docs(spec): Phase 1 図に key 33.9 nonce → XOR の入力矢印を追加
key 33.6 の XOR エンコードに使う nonce (key 33.9) が
図に入力として示されていなかった問題を修正。
ハードコード nonce (0x1AC905) との混同を避ける注釈も追加。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 01:54:31 +00:00
tkgstratorandClaude Opus 4.6 99a316d64e docs(spec): 鍵関係図を全面更新 — key 33.6 構造図追加、全ノード解明済み
- Phase 1 図: key 33.6 を解明済み(緑)に変更、TFIT→XOR→送信フロー追加
- Section 3: enc_key_0/sign_key_0 を緑(Phase 0出力)に修正
- Section 4: enc_key_1 を緑に修正
- Section 8: key 33.6 の平文構造図 (352B) を追加
- kAppBootKey を「用途未確認」に修正 (RSA未使用確認済み)
- Tweak フック一覧を最新状態に更新
- 凡例を簡素化 (黄/オレンジ削除)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 01:53:04 +00:00
tkgstratorandClaude Opus 4.6 2db7d0da91 docs(spec): 全鍵導出チェーン解明 — key 33.6 構造も解明済みに
- bootstrap_key, key 33.6 構成を解決済みに移動
- key 33.6 平文構造: CBORヘッダ(128B) + TFIT(DH_pub)(128B) + MGK(32B) + 固有(64B)
- 残りの未解明はArgoバイナリ内のCBOR構築ロジックのみ
- Phase 0-5 の全鍵がPython (+ Unicorn) で導出可能

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 01:30:12 +00:00
tkgstratorandClaude Opus 4.6 c86999fd8b feat(re): key 33.6 builder静的解析スクリプト追加
NFWebCrypto.frameworkのDH鍵生成・MGK・TFIT関連関数を
r2pipeで解析し、key 33.6の構成を特定した。
CBOR構造構築とXOR nonce適用はArgoバイナリ側で行われる。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 01:28:18 +00:00
tkgstratorandClaude Opus 4.6 104ce6d167 docs(spec): 鍵関係図をフェーズ別に分割 — 1枚の巨大図から Phase 0〜5 の個別図へ
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 01:25:10 +00:00
tkgstratorandClaude Opus 4.6 ae7add1d7c docs(spec): bootstrap_key 解明 — Phase 2 sign_key (dh_kdf_out[16:48]) と同一
bootstrap_key は新規の鍵ではなく、Phase 2 KDF の HMAC-SHA384 出力の
[16:48] = sign_key そのもの。全オレンジ(由来不明)鍵を解消。
残る未解明は key 33.6 の TFIT エンコードのみ。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 01:23:42 +00:00
tkgstratorandClaude Opus 4.6 3375ebb954 docs(spec): 鍵関係図を全面更新 — Phase 0 (MGK) 追加、全鍵を緑(解明済み)に
- Phase 0 (ESN → MGK = enc_key_0/sign_key_0) を図に追加
- TFIT テーブル (199KB) をバイナリ埋め込み定数として追加
- enc_key_0/sign_key_0 を「Unicorn で計算可能」に更新
- 大部分の鍵ノードを緑色(解明済み)に変更
- シーケンス図に Phase 0 と 48B 鍵導出フローを追加
- 鍵一覧にESN, TFITテーブルを追加

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 01:19:09 +00:00
tkgstratorandClaude Opus 4.6 8fbd908eb9 docs(spec): 初回セッション鍵 = MGK (TFIT-WB-AES-128-ECB of ESN) を文書化
enc_key_0/sign_key_0 は genModelGroupKeys の出力 (= MGK) であることが
Unicorn エミュレーションで実証された。
ESN + TFIT テーブルから全鍵チェーンを Python のみで導出可能。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 01:07:01 +00:00
tkgstratorandClaude Sonnet 4.6 156c855521 feat(tools): TFIT whitebox AES-128-ECB emulator using Unicorn Engine
Unicorn Engine でNFWebCrypto.framework の TFIT_op_iAES11 (0x25CB0) を
エミュレートし、genModelGroupKeys(MGKType, ESN) を Python で再現する
ツールを追加。

- Mach-O の全セグメント (TEXT/DATA_CONST/DATA/LINKEDIT) を仮想アドレス
  通りに Unicorn にマッピング
- memset/memcpy スタブを GOT 経由でフックし TFIT_r9_op 内の外部呼び出しを
  処理
- __stack_chk_guard を偽ポインタで提供しスタックカナリー検証を回避
- 自己整合テストベクタ (zero KS × 6 + iPhone KS × 2) で動作を確認
- CLI: --test でベクタ検証、引数に ESN を渡して MGK ペアを計算

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 01:05:27 +00:00
tkgstratorandClaude Opus 4.6 f3a2ec8ac7 docs(spec): Phase 2 KDF ドキュメントを最新の解析結果で更新
- 48B鍵の説明を「TFIT出力」→「SHA384(session_bind[:16])」に修正
- Mermaid図にPSK/nonce→KDF→SHA384→48B鍵のフローを追加
- 未解明事項を更新 (48B鍵は解明済み、残りはTFITエンコードのみ)
- nflxDhDerive 静的解析結果のアドレスを追記

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 00:46:51 +00:00
tkgstratorandClaude Opus 4.6 8066fb16b4 docs(plans): TFIT/48B鍵調査プランを追加
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 18:10:07 +00:00
tkgstratorandClaude Opus 4.6 0326fbb9c4 docs(spec): nflxDhDerive静的解析で48B HMAC鍵の導出チェーンを特定
SHA384(native_key_bytes) → 48B鍵 → HMAC-SHA384(key, 0x00||DH_shared) → enc/sign/wrap鍵分割

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 18:09:29 +00:00