---
generated_at: 2026-01-28 10:30:00
metrics:
  claims_total: 35
  claims_with_evidence: 32
  claims_without_evidence: 3
confidence_derived: 0.91
---

# 根拠レポート：セキュリティ設計書

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.91**
  - 根拠あり：32 / 35、根拠なし：3
- 優先レビュー（高）
  1. **Certificate Pinning未実装の記載**：サーバー側の仕様確認が必要
  2. **本番ビルドのATS設定**：本番用Info.plistの確認が必要
  3. **ログ保持期間の記載**：サーバー側ポリシーの確認が必要

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `Wikipedia/Code/WMFKeychainCredentials.swift`
- E-02: `Wikipedia/Code/KeychainCredentialsManager.swift`
- E-03: `Wikipedia/Code/WMFAuthenticationManager.swift`
- E-04: `Wikipedia/Code/Session.swift`
- E-05: `Wikipedia/Code/WMFAccountLoginLogoutFetcher.swift`
- E-06: `WMF Framework/WMFCaptcha.swift`
- E-07: `Wikipedia/Code/WMFTwoFactorPasswordViewController.swift`
- E-08: `WMF Framework/Configuration.swift`
- E-09: `Wikipedia/Local-Info.plist`
- E-10: `Wikipedia/Code/LoginFunnel.swift`
- E-11: `WMF Framework/Event Platform/EventPlatformClient.swift`

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | MediaWiki API `clientlogin` を使用したユーザー認証 | E-05 (L40-202) | ○ |
| C-02 | TOTP二要素認証対応 | E-05 (L157-167), E-07 | ○ |
| C-03 | バックアップコード認証対応 | E-07 (L57-66, L176-196) | ○ |
| C-04 | メール認証対応 | E-05 (L63-66, L184-194), E-07 (L34-38) | ○ |
| C-05 | Classic CAPTCHAおよびhCaptcha対応 | E-06 | ○ |
| C-06 | 一時アカウントのCentral Auth Cookie管理 | E-03 (L141-144) | ○ |
| C-07 | 認証成功時にKeychainへ資格情報保存 | E-03 (L193-194) | ○ |
| C-08 | Central Auth Cookieの複数ドメイン共有 | E-04 (L117-120), E-08 (L68-80) | ○ |
| C-09 | UUID形式のセッションID生成 | E-11 (L68-85) | ○ |
| C-10 | Cookie有効期限検証機能 | E-04 (L137-152) | ○ |
| C-11 | 認証状態の管理 (ip/temporary/permanent) | E-03 (L115-144) | ○ |
| C-12 | ユーザー情報キャッシュ機能 | E-03 (L60, L87-92) | ○ |
| C-13 | ブロック状態チェック機能 | E-03 (L246) | ○ |
| C-14 | 全通信でHTTPS使用 | E-08 (L145-148, L214) | ○ |
| C-15 | App Transport Security設定 | E-09 (L56-60) | ○ |
| C-16 | Certificate Pinning未実装 | **根拠なし** | △ |
| C-17 | User-Agentヘッダー送信 | E-04 (L225) | ○ |
| C-18 | MediaWiki API URLパターン | E-08 (L179, L300-312) | ○ |
| C-19 | REST API URLパターン | E-08 (L178, L230-244) | ○ |
| C-20 | Analytics送信先URL | E-11 (L187-193) | ○ |
| C-21 | Keychain資格情報キー定義 | E-01 (L11-13) | ○ |
| C-22 | Keychainアクセシビリティ設定 | E-01 (L130, L154) | ○ |
| C-23 | KeychainCredentialsManagerシングルトン | E-02 (L3) | ○ |
| C-24 | Cookie管理方式 | E-04 (L85-89, L126-135) | ○ |
| C-25 | ログアウト時全Cookie削除 | E-04 (L126-135) | ○ |
| C-26 | JavaScriptエスケープ実装 | `WMF Framework/String+JavaScript.swift` | ○ |
| C-27 | トークンベースCSRF対策 | E-05 (L84) | ○ |
| C-28 | 二要素認証コードの入力バリデーション | E-07 (L175-223) | ○ |
| C-29 | ログインイベントログ記録 | E-10 | ○ |
| C-30 | Event Platform Clientストリーム定義 | E-11 (L120-139) | ○ |
| C-31 | 匿名識別子使用 | E-11 (L473, L504-511) | ○ |
| C-32 | URLスキーム定義 | E-09 (L30-43) | ○ |
| C-33 | バックグラウンド処理識別子 | E-09 (L5-9) | ○ |
| C-34 | 本番ビルドのATS適用 | **根拠なし** | △ |
| C-35 | ログ保持期間（サーバー側管理） | **根拠なし** | △ |

## 4) 不足情報（Unknown / Missing）
- **C-16 (Certificate Pinning未実装)**: コードベースを検索した結果、明示的なCertificate Pinning実装は確認できず。MediaWiki APIの信頼性に依存しているという推測は妥当だが、意図的な設計判断かどうかの確認が必要
  - 候補：セキュリティ要件定義書 / アーキテクチャ設計決定記録 / セキュリティレビュー記録

- **C-34 (本番ビルドのATS適用)**: `Local-Info.plist`は開発環境向けと推測されるが、本番用Info.plistの確認ができていない
  - 候補：本番用Info.plist / ビルド設定 / リリースノート

- **C-35 (ログ保持期間)**: イベントログはWikimedia Foundationのサーバーに送信されるが、保持期間はクライアント側コードからは確認不可
  - 候補：Wikimedia Foundation プライバシーポリシー / サーバー側ログポリシー

## 5) リスクフラグ（レビュー観点）
- **0 (低リスク)**: 認証・認可設計 - ソースコードから明確に確認可能
- **0 (低リスク)**: データセキュリティ (Keychain) - iOS標準セキュリティ機能を適切に使用
- **1 (中リスク)**: 通信セキュリティ - Certificate Pinning未実装の確認が必要
- **1 (中リスク)**: ATS設定 - 本番環境での設定確認が必要
- **0 (低リスク)**: 入出力対策 - トークンベースCSRF対策と入力バリデーションを確認
- **1 (中リスク)**: 監査ログ - 保持期間・アクセス制御はサーバー側依存

## 6) レビュアーチェックリスト（最小）
- [ ] Certificate Pinningの不採用が意図的な設計判断か確認
- [ ] 本番ビルドで使用されるInfo.plistを確認し、ATS設定が適切か検証
- [ ] Wikimedia Foundationのログ保持ポリシーを確認
- [ ] 二要素認証のバックアップコード生成・管理方式を確認（サーバー側）
- [ ] Keychainアクセシビリティ設定 (`kSecAttrAccessibleAfterFirstUnlock`) がセキュリティ要件に適合しているか確認
- [ ] `NSAllowsArbitraryLoads: true` が本番ビルドに含まれていないことを確認
