---
generated_at: 2026-02-19 13:25:00
metrics:
  claims_total: 25
  claims_with_evidence: 23
  claims_without_evidence: 2
confidence_derived: 0.92
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.92**
  - 根拠あり：23 / 25、根拠なし：2
- 優先レビュー（高）
  1. **SHA-1からSHA-256への移行推奨**: .NETランタイムの仕様確認が必要
  2. **型プロバイダーのセキュリティリスク**: 具体的な緩和策の確認が必要

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

- E-01: `src/Compiler/AbstractIL/ilsign.fs` - アセンブリ署名実装
- E-02: `src/Compiler/AbstractIL/ilsign.fsi` - アセンブリ署名インターフェース
- E-03: `src/Compiler/Facilities/Hashing.fs` - ハッシュユーティリティ
- E-04: `src/Compiler/Checking/AccessibilityLogic.fs` - アクセス制御ロジック
- E-05: `src/Compiler/Checking/AttributeChecking.fs` - 属性チェック
- E-06: `src/Compiler/Driver/CreateILModule.fs` - ILモジュール生成
- E-07: `src/Compiler/Driver/CompilerConfig.fs` - コンパイラ設定
- E-08: `src/Compiler/default.win32manifest` - Windowsマニフェスト
- E-09: `src/FSharp.Build/InternalsVisibleTo.fs` - InternalsVisibleTo属性
- E-10: `src/Compiler/FSComp.txt` - コンパイラメッセージ定義
- E-11: `README.md` - プロジェクト概要

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | RSA暗号化を使用したアセンブリ署名 | E-01 (ilsign.fs: RSA.Create(), SignHash) | ○ |
| C-02 | SHA-1ハッシュによるアセンブリ署名 | E-01 (ilsign.fs: HashAlgorithmName.SHA1) | ○ |
| C-03 | PKCS#1 v1.5パディング使用 | E-01 (ilsign.fs: RSASignaturePadding.Pkcs1) | ○ |
| C-04 | ILStrongNameSignerによる署名管理 | E-01, E-02 (ILStrongNameSigner型定義) | ○ |
| C-05 | InternalsVisibleTo属性のサポート | E-04, E-09 (canAccessFromOneOf, 公開鍵指定) | ○ |
| C-06 | AccessibleFromEverywhereドメイン | E-04 (AccessorDomain型定義) | ○ |
| C-07 | AccessibleFromSomeFSharpCodeドメイン | E-04 (AccessorDomain型定義) | ○ |
| C-08 | AccessibleFromドメイン | E-04 (AccessorDomain型定義) | ○ |
| C-09 | MD5によるキャッシュキー生成 | E-03 (Md5StringHasher, Md5Hasher モジュール) | ○ |
| C-10 | ThreadLocalによるスレッドセーフなハッシュ | E-03 (ThreadLocal<_>使用) | ○ |
| C-11 | SHA-256デフォルトチェックサム | E-07, E-10 (checksumAlgorithm = HashAlgorithm.Sha256) | ○ |
| C-12 | delaysignオプション | E-06, E-07 (delaysign: bool設定) | ○ |
| C-13 | publicsignオプション | E-06, E-07 (publicsign: bool設定) | ○ |
| C-14 | keyfileオプション | E-06 (signerAttrib, ValidateKeySigningAttributes) | ○ |
| C-15 | keycontainerオプション非推奨 | E-06 (containerDeprecated警告) | ○ |
| C-16 | SecurityCriticalAttribute検出 | E-05 (IsSecurityCriticalAttribute関数) | ○ |
| C-17 | SecuritySafeCriticalAttribute検出 | E-05 (IsSecurityCriticalAttribute関数) | ○ |
| C-18 | UnverifiableAttribute警告 | E-05 (CheckUnverifiableAttribute関数) | ○ |
| C-19 | requestedExecutionLevel asInvoker | E-08 (default.win32manifest) | ○ |
| C-20 | RSAパラメータ検証 | E-01 (validateRSAField関数) | ○ |
| C-21 | 公開鍵/秘密鍵のCLR形式変換 | E-01 (toCLRKeyBlob関数) | ○ |
| C-22 | アセンブリハッシュ計算 | E-01 (hashAssembly関数, IncrementalHash) | ○ |
| C-23 | コンパイラは管理者権限不要 | E-08 (level="asInvoker") | ○ |
| C-24 | SHA-1からSHA-256への移行推奨 | **根拠なし** | △ |
| C-25 | 型プロバイダーのセキュリティリスク | **根拠なし** | △ |

## 4) 不足情報（Unknown / Missing）
- C-24: SHA-1からSHA-256への移行推奨
  - .NETランタイムのアセンブリ署名仕様がSHA-1を要求しているかどうかの公式ドキュメント確認が必要
  - 候補：Microsoft .NET ドキュメント / ECMA-335仕様 / セキュリティベストプラクティスガイド

- C-25: 型プロバイダーのセキュリティリスク
  - 型プロバイダーのセキュリティに関する具体的なコード内コメントや設計ドキュメントが見つからない
  - 候補：TypeProviders.fs / 型プロバイダー設計ドキュメント / F#言語仕様

## 5) リスクフラグ（レビュー観点）
- 0: **アセンブリ署名実装** - コード内で明確に定義されており、低リスク
- 0: **アクセス制御ロジック** - .NET標準のアクセス修飾子に準拠、低リスク
- 1: **MD5のキャッシュ使用** - セキュリティ目的ではないが、衝突耐性の観点から中リスク
- 1: **SHA-1の継続使用** - レガシー互換性のため使用されているが、将来的な移行を検討すべき、中リスク
- 2: **型プロバイダーの外部コード実行** - 信頼できないソースからの型プロバイダー使用は高リスク

## 6) レビュアーチェックリスト（最小）
- [ ] RSA署名実装がilsign.fsの内容と一致しているか確認
- [ ] アクセス制御ドメインがAccessibilityLogic.fsの定義と一致しているか確認
- [ ] コンパイラオプション（delaysign, publicsign等）がCompilerConfig.fsの定義と一致しているか確認
- [ ] SHA-1使用の継続が.NETランタイム要件として妥当か確認
- [ ] 型プロバイダーのセキュリティに関する追加ドキュメントの必要性を判断
- [ ] InternalsVisibleToの公開鍵指定が適切に使用されているか確認
