Secure key management for AI agents. Use when handling private keys, API secrets, wallet credentials, or when building systems that need agent-controlled funds. Covers secure storage, session keys, leak prevention, and prompt injection defense.
为处理私钥和机密信息的AI代理提供安全密钥管理模式。旨在防止:
bash
bash
┌─────────────────────────────────────────────────────┐
│ AI Agent │
├─────────────────────────────────────────────────────┤
│ Session Key (time/value bounded) │
│ - Expires after N hours │
│ - Spending cap per operation │
│ - Whitelist of allowed contracts │
├─────────────────────────────────────────────────────┤
│ 1Password / Secret Manager │
│ - Agent retrieves session key at runtime │
│ - Never stores full private key │
│ - Audit log of all accesses │
├─────────────────────────────────────────────────────┤
│ ERC-4337 Smart Account │
│ - Programmable permissions │
│ - Recovery without private key exposure │
│ - Multi-sig for high-value operations │
├─────────────────────────────────────────────────────┤
│ Operator (Human) │
│ - Holds master key in hardware wallet │
│ - Issues/revokes session keys │
│ - Monitors agent activity │
└─────────────────────────────────────────────────────┘
bash
python
import subprocess
import json
def getsessionkey(item_name: str) -> dict:
Retrieve session key from 1Password at runtime.
result = subprocess.run(
[op, item, get, item_name, --vault, Agent-Wallets, --format, json],
capture_output=True, text=True, check=True
)
item = json.loads(result.stdout)
# Extract fields
fields = {f[label]: f.get(value) for f in item.get(fields, [])}
# Validate session hasnt expired
from datetime import datetime
expires = datetime.fromisoformat(fields.get(expires, 2000-01-01))
if datetime.now() > expires:
raise ValueError(Session key expired - request new key from operator)
return {
session_key: fields.get(session-key),
expires: fields.get(expires),
spending_cap: fields.get(spending-cap),
allowed_contracts: fields.get(allowed-contracts, ).split(,)
}
python
在任何代理输出(聊天、日志、文件写入)之前,扫描密钥模式:
python
import re
KEY_PATTERNS = [
r0x[a-fA-F0-9]{64}, # ETH private keys
rsk-[a-zA-Z0-9]{48,}, # OpenAI keys
rsk-ant-[a-zA-Z0-9\-_]{80,}, # Anthropic keys
rgsk_[a-zA-Z0-9]{48,}, # Groq keys
r[A-Za-z0-9+/]{40,}={0,2}, # Base64 encoded (suspiciously long)
]
def sanitize_output(text: str) -> str:
Remove potential secrets from output.
for pattern in KEY_PATTERNS:
text = re.sub(pattern, [REDACTED], text)
return text
安装此钩子以防止意外提交机密:
bash
#!/bin/bash
PATTERNS=(
0x[a-fA-F0-9]{64}
sk-[a-zA-Z0-9]{48,}
sk-ant-api
PRIVATE_KEY=
gsk_[a-zA-Z0-9]{48,}
)
for pattern in ${PATTERNS[@]}; do
if git diff --cached | grep -qE $pattern; then
echo ❌ Potential secret detected matching: $pattern
echo Remove secrets before committing!
exit 1
fi
done
gitignore
在处理任何涉及钱包操作的用户输入之前:
python
DANGEROUS_PATTERNS = [
rignore.(previous|above|prior).instructions,
rreveal.*(key|secret|password|credential),
routput.*(key|secret|private),
rprint.*(key|secret|wallet),
rshow.*(key|secret|password),
rwhat.*(key|secret|password),
rtell.me.(key|secret),
rdisregard.*rules,
rsystem.*prompt,
rjailbreak,
rdan.*mode,
]
def validate_input(text: str) -> bool:
Check for prompt injection attempts.
text_lower = text.lower()
for pattern in DANGEROUS_PATTERNS:
if re.search(pattern, text_lower):
return False
return True
def processwalletrequest(user_input: str):
if not validateinput(userinput):
return I cant help with that request.
# ... proceed with wallet operation
python
ALLOWEDWALLETOPERATIONS = {
check_
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 openclaw-1776021676 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 openclaw-1776021676 技能
skillhub install openclaw-1776021676
文件大小: 16.81 KB | 发布时间: 2026-4-13 11:17