- ホーム
- Documentation
- 設定
- シークレットの難読化
シークレットの難読化
機密値(APIキー、トークン、パスワード)がLLMプロバイダーに送信されるのを防ぎます。有効にすると、シークレットはプロセスを離れる前に決定論的なプレースホルダーに置換され、モデルが返すツール呼び出し引数では元の値に復元されます。
デフォルトで有効です。/settings UIまたは config.yml で直接切り替えできます:
secrets: enabled: false-
セッション開始時に、2つのソースからシークレットが収集されます:
- 環境変数 — 一般的なシークレットパターン(
*_KEY、*_SECRET、*_TOKEN、*_PASSWORDなど)に一致し、値が8文字以上のもの secrets.ymlファイル(下記参照)
- 環境変数 — 一般的なシークレットパターン(
-
LLMへの送信メッセージでは、すべてのシークレット値が
<<$env:S0>>、<<$env:S1>>などのプレースホルダーに置換されます。 -
モデルが返すツール呼び出し引数は深く走査され、実行前にプレースホルダーが元の値に復元されます。
各シークレットの処理方法を制御する2つのモードがあります:
| モード | 動作 | 可逆性 |
|---|---|---|
obfuscate(デフォルト) | インデックス付きプレースホルダー <<$env:SN>> に置換 | あり(ツール引数で難読化解除) |
replace | 決定論的な同じ長さの文字列に置換 | なし(一方向) |
secrets.yml
Section titled “secrets.yml”YAMLでカスタムシークレットエントリを定義します。2つの場所がチェックされます:
| レベル | パス | 用途 |
|---|---|---|
| グローバル | ~/.xcsh/agent/secrets.yml | すべてのプロジェクト共通のシークレット |
| プロジェクト | <cwd>/.xcsh/secrets.yml | プロジェクト固有のシークレット |
プロジェクトエントリは、content が一致するグローバルエントリを上書きします。
配列の各エントリには以下のフィールドがあります:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
type | "plain" または "regex" | はい | マッチ戦略 |
content | string | はい | シークレット値(plain)または正規表現パターン(regex) |
mode | "obfuscate" または "replace" | いいえ | デフォルト:"obfuscate" |
replacement | string | いいえ | カスタム置換文字列(replaceモードのみ) |
flags | string | いいえ | 正規表現フラグ(regexタイプのみ) |
プレーンシークレット
Section titled “プレーンシークレット”# 特定のAPIキーを難読化(デフォルトモード)- type: plain content: sk-proj-abc123def456
# データベースパスワードを固定文字列に置換- type: plain content: hunter2 mode: replace replacement: "********"正規表現シークレット
Section titled “正規表現シークレット”# AWS形式のキーをすべて難読化- type: regex content: "AKIA[0-9A-Z]{16}"
# 明示的なフラグによる大文字小文字を区別しないマッチ- type: regex content: "api[_-]?key\\s*=\\s*\\w+" flags: "i"
# 正規表現リテラル構文(パターンとフラグを1つの文字列で指定)- type: regex content: "/bearer\\s+[a-zA-Z0-9._~+\\/=-]+/i"正規表現エントリは常にグローバルにスキャンされます(g フラグは自動的に適用されます)。正規表現リテラル構文 /pattern/flags は、content + flags を別々に指定する代替手段としてサポートされています。パターン内のエスケープされたスラッシュ(\\/)は正しく処理されます。
replaceモードと正規表現の組み合わせ
Section titled “replaceモードと正規表現の組み合わせ”# 接続文字列を一方向で置換(不可逆)- type: regex content: "postgres://[^\\s]+" mode: replace replacement: "postgres://***"環境変数検出との相互作用
Section titled “環境変数検出との相互作用”環境変数は常に最初に収集されます。ファイルで定義されたエントリはその後に追加されるため、ファイルエントリは環境変数にないシークレット(設定ファイル、ハードコードされた値など)もカバーできます。同じ値が両方に存在する場合、ファイルエントリのモードが優先されます。
主要ファイル
Section titled “主要ファイル”src/secrets/index.ts— 読み込み、マージ、環境変数収集src/secrets/obfuscator.ts—SecretObfuscatorクラス、プレースホルダー生成、メッセージ難読化src/secrets/regex.ts— 正規表現リテラルの解析とコンパイルsrc/config/settings-schema.ts—secrets.enabled設定の定義