# セキュリティ設計書

## 概要

本ドキュメントは、K-Shoot MANIA v1.xx（HSP 3.51 + C++ DLLベースのWindowsスタンドアロン音楽ゲームアプリケーション）のセキュリティ設計を記載する。本アプリケーションはスタンドアロンのデスクトップゲームであり、公開版ではインターネットランキング（IR）機能が削除されているため、ネットワーク通信によるリスクは限定的である。主なセキュリティ対象は、ファイル入出力の安全性、暗号化アルゴリズムの選定、設定情報の保護である。

## 認証設計

### 認証方式

本アプリケーションはスタンドアロンゲームであり、ユーザー認証機能は実装されていない。

かつてインターネットランキング（IR）機能としてログイン処理が存在していたが、ソースコード公開時に削除されている（`src/ir.hsp:26-36`）。サーバーアドレスも空文字列に設定されており（`kshootmania.hsp:183` `hosts=""`）、IR関連の通信処理は無効化されている。

また、Twitter連携（OAuth認証）機能も同様に削除済みである。DLL側にHMAC-SHA1の関数定義（`src/kshlib.as:11`）が残存するが、呼び出し元は削除されている。

### セッション管理

| 項目 | 設定値 | 備考 |
| --- | --- | --- |
| セッション有効期限 | 該当なし | スタンドアロンアプリケーションのためセッション管理なし |
| セッション固定化対策 | 該当なし | 同上 |

## 認可設計

### 権限体系

| ロール | 権限 | 説明 |
| --- | --- | --- |
| 一般ユーザー | 全機能 | スタンドアロンアプリケーションのため、実行ユーザーが全機能を利用可能 |

ロールベースのアクセス制御は実装されていない。すべての処理はグローバルスコープで実行され、権限チェックは行われない。

### アクセス制御

OSレベルのファイルシステムアクセス制御（NTFS権限）に依存する。アプリケーション内部での独自のアクセス制御機構は実装されていない。

ファイルシステム操作に関しては、`src/filesystem_utils.as:42-74` にて安全なディレクトリ変更処理（`safeChdir()`）と存在確認処理（`dirExists()`、`fileExists()`）が実装されている。

## 通信セキュリティ

| 項目 | 対策 |
| --- | --- |
| HTTPS | 外部サイトへのリンクはHTTPSを使用（`kshootmania.hsp:73` `https://www.kshootmania.com/`、`src/scene/select.hsp:308`、`src/scene/result.hsp:840`） |
| HSTS | 該当なし（クライアントアプリケーションのため、HSTS設定は不要） |
| CORS | 該当なし（クライアントアプリケーションのため、CORS設定は不要） |
| CSP | 該当なし（クライアントアプリケーションのため、CSP設定は不要） |
| プロキシ | プロキシ対応あり。`config.ini`からホスト・ポートを読み込み（`kshootmania.hsp:675-680`）、`netproxy`で設定（`kshootmania.hsp:833`） |

## データセキュリティ

### 暗号化

| 対象 | 暗号化方式 |
| --- | --- |
| 通信 | HTTPS（外部ブラウザ経由のリンクのみ） |
| チャートファイルハッシュ | MD5（`src/kshlib.as:18` `KSHLib_GetChartMD5Hash`、`src/ir.hsp:51-68` `getChartIRHash()`） |
| データ暗号化 | RC4ストリーム暗号（`third_party/rc4_crypt.hsp:3-50`） |
| エンコーディング | Base64（`third_party/mbase64.as:1-44`、x86マシンコードによる実装） |
| HMAC | HMAC-SHA1（`src/kshlib.as:11` `KSHLib_GetHMACSHA1`、削除済みTwitter OAuth用） |

**セキュリティ上の注意事項**:
- RC4は暗号化強度が不十分なアルゴリズムであり、IETF RFC 7465で非推奨とされている
- MD5は衝突脆弱性が確認されており、セキュリティ用途では非推奨

### 機密情報管理

設定情報は `config.ini` にプレーンテキストで保存される（`kshootmania.hsp:390-416`）。

```
notesel confs
noteload "config.ini"
```

プロキシ設定（ホスト名・ポート番号）を含む設定値がプレーンテキストで保存されるため、機密性の高い情報が含まれる場合は情報漏洩のリスクがある。

ソースコード公開時にIR機能およびTwitter API連携が削除されたことにより、APIキーやシークレットトークンなどの機密情報はソースコード上に残存していない（`README.md:19-22`）。

## 入出力対策

| 脅威 | 対策 |
| --- | --- |
| XSS | 該当なし（デスクトップアプリケーションのため、Webベースの脅威は対象外） |
| SQLインジェクション | 該当なし（データベースを使用していない。データはファイルシステム上のファイルで管理） |
| CSRF | 該当なし（ステートレスなクライアントアプリケーションのため） |
| バッファオーバーフロー | HSPの可変長文字列処理による緩和。`instr`関数のオーバーフロー対策として修正版を実装（`kshootmania.hsp:129-137`） |
| ファイル改ざん | チャートファイルのMD5ハッシュ検証あり（`src/ir.hsp:51-68`）。ただし、IR機能削除に伴い実質的に未使用 |
| 不正ファイル読込 | ファイル存在確認（`src/filesystem_utils.as:9-34` `fileExists()`、`dirExists()`）。`safeChdir()`による安全なディレクトリ変更（`src/filesystem_utils.as:42-74`） |
| 設定値インジェクション | `config.ini`読込時に`StartsWith()`による設定キー前置チェックと`strmid()`による値抽出で形式検証（`kshootmania.hsp:435-680`）。型変換（`int()`）による数値チェック |

## 監査ログ

| ログ種別 | 記録内容 | 保持期間 |
| --- | --- | --- |
| 該当なし | 監査ログ機能は未実装 | - |

本アプリケーションにはログ記録機能が実装されていない。エラーログ、操作ログ、監査ログのいずれも記録されない。スタンドアロンゲームアプリケーションとしてはログ記録の優先度は低いが、デバッグやトラブルシューティングの観点からはエラーログの実装が推奨される。

## 備考

### DLLファイルとセキュリティ関連機能

| DLLファイル | 用途 | セキュリティ関連機能 |
| --- | --- | --- |
| kshlib.dll | チャート処理・Twitter連携 | MD5ハッシュ、HMAC-SHA1 |
| ksmcore.dll | 視点変更・キー音管理 | なし |
| kson.dll | チャート解析 | ファイル解析処理 |
| hspinet.dll | ネットワーク通信 | HTTP/HTTPS通信 |
| bass.dll | オーディオ再生 | なし |

### HSPフレームワーク固有のセキュリティ特性

- HSP 3.51はANSI版であり、Unicode対応ではない
- 文字列処理は可変長であり、固定長バッファによるオーバーフローリスクは低い
- `instr`関数にオーバーフロー対策の修正が適用されている（`kshootmania.hsp:129-137`）
- DLL呼び出し（C++）部分はネイティブコード実行のため、DLLの改ざんによるコード実行リスクが存在する

### セキュリティリスクサマリ

| リスクレベル | 対象 | 内容 |
| --- | --- | --- |
| 高 | RC4暗号化 | `third_party/rc4_crypt.hsp` - 暗号化強度が不十分（RFC 7465非推奨） |
| 高 | MD5ハッシュ | `src/ir.hsp:67` - 衝突脆弱性あり |
| 中 | 設定ファイル | `kshootmania.hsp:416` - プレーンテキスト保存 |
| 中 | チャートファイル検証 | `src/scene/play/play_chart_load.hsp:256` - 読込時の検証不足 |
| 低 | グローバル変数 | モジュール化が不十分（保守性の課題） |
