Linux メモリ保護機能の実装 (mlock, MADV_DONTDUMP, MADV_WIPEONFORK)

セキュリティ強化のため、Linux 固有のメモリ保護機能を追加:

### 実装した保護機能

1. **mlock()** - スワップ防止
   - センシティブなメモリをディスクへのスワップから保護
   - 権限不足の場合は警告出力の上継続(フォールバック)

2. **MADV_DONTDUMP** - コアダンプ漏洩防止
   - コアダンプ生成時にメモリ内容を除外
   - プライベート鍵がダンプに含まれないようにする

3. **MADV_WIPEONFORK** - fork() 子プロセス漏洩防止
   - fork() 後の子プロセスからメモリ内容を消去
   - 子プロセスへの鍵漏洩を防止

### 変更ファイル

- src/se050_scp03.c - SCP03 コンテキストのメモリ保護
- src/se050_keystore.c - キーストアコンテキストのメモリ保護

### 実装詳細

- Linux 環境でのみ有効(#ifdef __linux__)
- 非 Linux プラットフォームではフォールバック
- mlock 失敗時は警告のみ出力(処理継続)
- madvise 失敗時はエラーログ出力(非致命的)

### 注意事項

- mlock には CAP_IPC_LOCK 権限または RLIMIT_MEMLOCK クォータが必要
- 権限不足の場合でも機能は動作(保護なしで継続)
- 本番環境では適切な権限設定を推奨
This commit is contained in:
km
2026-03-26 11:04:14 +09:00
parent eb468c1ba1
commit aff6c301e6
7 changed files with 172 additions and 7 deletions
+3 -3
View File
@@ -42,19 +42,19 @@
#if SE050_CHIP == CHIP_SE050C0
#define CHIP_NAME "SE050C0"
#define SE050_DEFAULT_I2C_ADDR 0x90
#define SE050_DEFAULT_I2C_ADDR 0x48 /* 7-bit address */
#define ENC_KEY SE050C0_ENC_KEY
#define MAC_KEY SE050C0_MAC_KEY
#define DEK_KEY SE050C0_DEK_KEY
#elif SE050_CHIP == CHIP_SE050C1
#define CHIP_NAME "SE050C1"
#define SE050_DEFAULT_I2C_ADDR 0x90
#define SE050_DEFAULT_I2C_ADDR 0x48 /* 7-bit address */
#define ENC_KEY SE050C1_ENC_KEY
#define MAC_KEY SE050C1_MAC_KEY
#define DEK_KEY SE050C1_DEK_KEY
#elif SE050_CHIP == CHIP_SE050E2
#define CHIP_NAME "SE050E2"
#define SE050_DEFAULT_I2C_ADDR 0x90
#define SE050_DEFAULT_I2C_ADDR 0x48 /* 7-bit address */
#define ENC_KEY SE050E2_ENC_KEY
#define MAC_KEY SE050E2_MAC_KEY
#define DEK_KEY SE050E2_DEK_KEY