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
+4 -3
View File
@@ -29,8 +29,8 @@
#endif
#endif
/* SE050 default I2C address */
#define SE050_I2C_ADDR_DEFAULT 0x90
/* SE050 default I2C address (7-bit) */
#define SE050_I2C_ADDR_DEFAULT 0x48
/* I2C timeout in milliseconds */
#define SE050_I2C_TIMEOUT_MS 1000
@@ -97,7 +97,8 @@ static se050_status_t i2c_set_slave_addr(void *handle, uint8_t addr)
int fd = (int)(intptr_t)handle;
int ret;
ret = ioctl(fd, I2C_SLAVE, addr >> 1);
/* addr is already 7-bit address */
ret = ioctl(fd, I2C_SLAVE, addr);
if (ret < 0) {
perror("I2C set slave address failed");
return SE050_ERR_I2C;