mcpField
A
axiom-security

axiom-security

github.com/charleswiltgen安全1.2k1.2k 次安装今天更新
代码仓库

关于 axiom-security

axiom-security 面向 Apple 平台应用开发者,涵盖钥匙串、加密、通行密钥、应用完整性、文件保护、Agent 安全和代码签名,并引导至专项资料或自动扫描。

主要功能

  1. 01钥匙串凭据存储指南
  2. 02CryptoKit 加密与签名参考
  3. 03通行密钥实现指南
  4. 04应用完整性与 Agent 安全
  5. 05文件保护与代码签名
  6. 06自动安全审计路由

适用场景

  1. 01将 API 令牌存入钥匙串
  2. 02选择加密或签名 API
  3. 03实现通行密钥登录
  4. 04诊断签名和配置描述文件错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/charleswiltgen/axiom --skill axiom-security

安装后在 Claude Code 中输入/axiom-security确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

skills/
agentic-security.md
app-attest.md
code-signing-diag.md
code-signing-ref.md
code-signing.md
cryptokit-ref.md
cryptokit.md
file-protection-ref.md
keychain-diag.md
keychain-ref.md
keychain.md
passkeys.md
security-privacy-scanner.md

详细介绍

安全与凭据

任何涉及钥匙串、加密、通行密钥、应用完整性、Agentic/AI 功能安全、文件保护或代码签名的工作,都必须使用此技能。

无法启动 Axiom Agent? 如果此路由器指引你使用某个 Agent,请直接按照其中的步骤操作。通过 MCP,axiom_get_agent 会返回该 Agent;在其他环境中,请读取下方的文件,只需搜索和读取文件即可。

此处可用:skills/security-privacy-scanner.md。

对于任何其他 Agent,通过 MCP 使用 axiom_get_agent 也会返回该 Agent;使用 axiom_xclog_*、axiom_xcsym_* 和 axiom_xcprof_* 工具运行其 xclog、xcsym 和 xcprof 步骤。在其他环境中,请在 Axiom 的技能中搜索 skills/<agent>.md;如果没有该文件,请使用本套件的技能自行完成相关工作,并使用 PATH 中的任意 Axiom 工具。

快速参考

症状 / 任务参考
安全存储令牌、密码、API 密钥参见 skills/keychain.md
选择 kSecAttrAccessible 级别、生物识别保护参见 skills/keychain.md
SecItem 函数签名、属性常量参见 skills/keychain-ref.md
errSecDuplicateItem、errSecItemNotFound、errSecInteractionNotAllowed参见 skills/keychain-diag.md
加密数据、签署载荷、密钥管理参见 skills/cryptokit.md
哈希函数、HMAC、AES-GCM、ChaChaPoly、ECDSA、EdDSA、密钥协商参见 skills/cryptokit-ref.md
通行密钥登录、WebAuthn、ASAuthorizationController参见 skills/passkeys.md
凭据提供方 OS27 的一次性验证码自动填充参见 skills/passkeys.md(Delivered Verification Codes)
应用完整性验证、DCAppAttestService、防欺诈指标参见 skills/app-attest.md
提示注入、保护 AI Agent / Agentic 功能、工具确认参见 skills/agentic-security.md
NSFileProtection 级别、静态数据保护参见 skills/file-protection-ref.md
SensitiveContentAnalysis 判定结果绝不能离开设备(不得进入分析系统/审核队列/同步缓存;许可协议 §3.3.3)参见 axiom-vision(skills/vision-ref.md)
证书管理、配置描述文件、CI/CD 签名参见 skills/code-signing.md
未找到证书、配置描述文件不匹配、权限错误参见 skills/code-signing-diag.md
证书 CLI、配置描述文件检查、权限提取参见 skills/code-signing-ref.md
Apple Pay 支付证书 / 通行证类型证书 / Tap to Pay 权限参见 axiom-payments 套件

决策树

digraph security {
    start [label="Security task" shape=ellipse];
    what [label="What do you need?" shape=diamond];

    start -> what;
    what -> "skills/keychain.md" [label="store/retrieve\ncredentials, tokens,\nsecrets"];
    what -> "skills/keychain-ref.md" [label="SecItem API syntax,\nattribute constants,\naccess levels"];
    what -> "skills/keychain-diag.md" [label="keychain errors\n(errSec codes)"];
    what -> "skills/cryptokit.md" [label="encrypt data,\nsign payloads,\nSecure Enclave keys"];
    what -> "skills/cryptokit-ref.md" [label="CryptoKit API\n(AES, ECDSA, HPKE,\npost-quantum)"];
    what -> "skills/passkeys.md" [label="passkey sign-in,\nreplace passwords"];
    what -> "skills/app-attest.md" [label="app integrity,\nfraud prevention"];
    what -> "skills/agentic-security.md" [label="AI agent security,\nprompt injection"];
    what -> "skills/file-protection-ref.md" [label="file encryption,\nNSFileProtection"];
    what -> "skills/code-signing.md" [label="set up signing,\nprofiles, CI/CD"];
    what -> "skills/code-signing-diag.md" [label="signing errors,\nupload rejections"];
    what -> "skills/code-signing-ref.md" [label="CLI commands,\nprofile inspection"];
}
  1. 安全存储令牌、密码、API 密钥?→ skills/keychain.md 1a. 需要 SecItem 函数签名、属性常量?→ skills/keychain-ref.md 1b. 钥匙串错误(errSecDuplicateItem、errSecItemNotFound)?→ skills/keychain-diag.md
  2. 加密数据、签署载荷、管理密钥?→ skills/cryptokit.md 2a. 需要 CryptoKit API 详情(AES-GCM、ECDSA、HPKE、后量子密码)?→ skills/cryptokit-ref.md
  3. 实现通行密钥登录、替代密码?→ skills/passkeys.md
  4. 验证应用完整性、防止欺诈?→ skills/app-attest.md
  5. 保护 Agentic/AI 功能(提示注入、工具确认、锁屏意图)?→ skills/agentic-security.md
  6. 静态文件加密、NSFileProtection 级别?→ skills/file-protection-ref.md
  7. 设置代码签名、管理证书、CI/CD?→ skills/code-signing.md 7a. 代码签名错误排查?→ skills/code-signing-diag.md 7b. 证书 CLI 命令、配置描述文件检查?→ skills/code-signing-ref.md
  8. 签名后构建/上传失败?→ 参见 axiom-build
  9. 准备 App Store 提交?→ /skill axiom-shipping
  10. 隐私清单、跟踪透明度?→ 参见 axiom-integration
  11. 数据持久化(SwiftData、Core Data、存储策略)?→ /skill axiom-data
  12. TLS 配置、网络请求的证书固定?→ /skill axiom-networking
  13. 想要自动化安全扫描?→ security-privacy-scanner(Agent)

冲突处理

security 与 axiom-build:当构建因签名错误而失败时:

  • 代码签名错误(证书、配置文件、授权)→ 使用 security
  • 环境问题(Xcode 版本、模拟器、Derived Data)→ 使用 axiom-build
  • 如果不确定,请检查错误消息:CODESIGN、ITMS-90xxx、errSec → 使用 security

security 与 shipping:准备提交 App Store 时:

  • 隐私清单、提交检查清单、拒绝原因 → 使用 shipping
  • 用于分发的代码签名、证书管理 → 使用 security

security 与 axiom-data:存储敏感数据时:

  • 令牌、密码、API 密钥 → 使用 security(钥匙串)
  • 用户偏好设置、非敏感设置 → 使用 axiom-data(UserDefaults/SwiftData)
  • 数据库文件的文件加密级别 → 使用 security(file-protection-ref)
  • SQLite 专用数据保护(.db/-wal/-shm 三件套、设备锁定时的小组件访问)→ 参见 axiom-data (skills/grdb-app-groups.md) §4

security 与 axiom-networking:保护网络通信时:

  • TLS 配置、证书固定 → 使用 axiom-networking
  • 对 API 请求签名、加密负载 → 使用 security(CryptoKit)

关键模式

Keychain(skills/keychain.md):

  • SecItem 心智模型:唯一性约束、数据保护类别
  • 生物识别访问控制(Face ID / Touch ID)
  • App 与扩展之间的 Keychain 共享
  • 后台访问陷阱、Mac Keychain 差异
  • 将敏感数据从 UserDefaults/@AppStorage 迁移过来

Keychain API(skills/keychain-ref.md):

  • SecItemAdd/CopyMatching/Update/Delete 签名
  • 项目类别属性、唯一性约束规则
  • kSecAttrAccessible 级别及其适用场景
  • 访问控制标志、生物识别集成
  • 完整错误代码参考

Keychain 诊断(skills/keychain-diag.md):

  • 因意外的唯一性约束导致 errSecDuplicateItem
  • 项目实际存在却提示 errSecItemNotFound(查询不匹配)
  • 在后台上下文中出现 errSecInteractionNotAllowed
  • 访问组和授权不匹配
  • App 更新后项目消失

CryptoKit(skills/cryptokit.md):

  • AES-GCM 和 ChaChaPoly 认证加密
  • ECDSA/EdDSA 数字签名
  • Secure Enclave 硬件支持的密钥
  • 用于端到端加密的密钥协商(ECDH)
  • 面向现代非对称加密的 HPKE
  • 后量子算法(ML-KEM、ML-DSA)
  • CommonCrypto 迁移路径

CryptoKit API(skills/cryptokit-ref.md):

  • 哈希函数(SHA-256/384/512、SHA-3)、HMAC
  • 对称加密(AES-GCM、ChaChaPoly)
  • 非对称签名(P256、P384、P521、Curve25519、Ed25519)
  • 密钥协商、密钥派生(HKDF)
  • Secure Enclave 密钥的创建和使用
  • Swift Crypto 跨平台对等支持

Passkeys(skills/passkeys.md):

  • ASAuthorizationController 注册和断言流程
  • AutoFill 辅助请求(QuickType 栏集成)
  • 为现有用户自动升级 Passkey(iOS 18+)
  • 组合凭据请求(Passkey + 密码 + 使用 Apple 登录)
  • WebAuthn 的关联域配置

App Attest(skills/app-attest.md):

  • DCAppAttestService 证明和断言流程
  • 在服务端验证证明对象
  • 从第 27 个周期开始支持 macOS + 防篡改信号(扩展、密钥访问控制)
  • 将欺诈指标作为调查信号
  • 每台设备 2 位状态的 DeviceCheck
  • 面向大量安装用户的渐进式推出策略
  • 妥善处理不受支持的设备

Agentic Security(skills/agentic-security.md):

  • 对 Agentic 功能进行威胁建模(间接提示词注入、致命三重奏)
  • 确定性与概率性缓解措施(脱敏、重点标记、确认、解锁门控)
  • Foundation Models 生命周期修饰符(.onToolCall 确认、.historyTransform)
  • App Intents authenticationPolicy 和架构风险元数据

文件保护(skills/file-protection-ref.md):

  • NSFileProtection 级别(complete、completeUnlessOpen、afterFirstUnlock、none)
  • 与设备密码关联的硬件加速加密
  • 后台文件访问要求
  • Keychain 与文件保护对比

代码签名(skills/code-signing.md):

  • 自动签名与手动签名的权衡
  • 跨团队管理证书和配置描述文件
  • 使用 fastlane match 在团队范围内共享证书
  • CI/CD 签名设置(GitHub Actions、Xcode Cloud)
  • 分发构建准备(App Store、TestFlight、Ad Hoc)

代码签名诊断(skills/code-signing-diag.md):

  • 证书问题(过期、缺失、类型错误、已撤销)
  • 配置描述文件问题(过期、缺少证书、App ID 错误)
  • 授权不匹配(Xcode 中启用了功能,但配置描述文件中没有)
  • CI 中的 Keychain 问题(Keychain 已锁定、errSecInternalComponent)
  • 归档/导出失败(导出方式错误、证书类型错误)

代码签名命令行工具(skills/code-signing-ref.md):

  • 使用 security find-identity、security cms -D 检查配置描述文件
  • 使用 codesign -d --entitlements 提取授权
  • 证书类型、有效期、每个账户的限制
  • fastlane match 命令和 Keychain 管理

自动扫描

安全审计 → 启动 security-privacy-scanner Agent(扫描硬编码凭据、不安全的令牌存储、Privacy Manifest 覆盖缺口、ATS 违规、缺失的 ATT 描述、缺失的出口合规信息、薄弱的 Keychain ACL,以及复合拒绝风险;并将安全态势评为 HARDENED/GAPS/VULNERABLE)

反合理化

想法现实
"我先把令牌存到 UserDefaults 里"任何具有文件访问权限的进程都能读取 UserDefaults 的 plist 文件。用 Keychain 只需 10 行代码。skills/keychain.md 展示了这种模式。
"我的应用不需要加密"只要你在静态存储中保存任何用户数据,iOS 文件保护就是现成可用的。skills/file-protection-ref.md 介绍了各种保护级别。
"CommonCrypto 用起来没问题,不必迁移"CommonCrypto 是 C API,需要手动管理内存,也不提供编译时安全保障。CryptoKit 可防止缓冲区溢出和密钥误用。
"我就用自动签名"自动签名在 CI、团队规模扩大或功能变更导致问题之前都能正常工作。趁还不需要之前,先了解手动签名。skills/code-signing.md 介绍了两种方式。
"Passkey 还太新,密码够用了"Passkey 能抵御网络钓鱼,并从 iOS 16 起受支持。迁移方案支持两者同时使用。skills/passkeys.md 展示了组合流程。
"我重新生成所有证书就能解决这个问题"重新生成会撤销现有证书,并导致每位队友的构建失败。先诊断问题。skills/code-signing-diag.md 提供了诊断流程。
"App Attest 对我的应用来说太过了"如果你的应用有任何由服务器验证的购买、促销或竞争性功能,被篡改的客户端就会利用它。skills/app-attest.md 介绍了渐进式部署。
"我会在加密包装器上使用 @unchecked Sendable"在安全代码中向编译器隐瞒线程安全问题,就会导致数据损坏。参见 axiom-concurrency,了解安全模式。
"kSecAttrAccessibleAlways 没问题"自 iOS 12 起已弃用。即使设备处于锁定状态,项目仍可访问,而且备份时不会加密。至少应使用 kSecAttrAccessibleAfterFirstUnlock。
"提示词注入不会影响我们这个小 AI 功能"任何传入模型的外部内容(例如日历邀请或动态帖子)都是攻击面,而模型会选择执行哪些操作。skills/agentic-security.md 介绍了威胁模型和确定性缓解措施。

示例调用

用户:"如何安全地存储身份验证令牌?" → 阅读:skills/keychain.md

用户:"保存到 keychain 时出现 errSecDuplicateItem" → 阅读:skills/keychain-diag.md

用户:"SecItem 属性常量有哪些?" → 阅读:skills/keychain-ref.md

用户:"如何用 AES 加密用户数据?" → 阅读:skills/cryptokit.md

用户:"CryptoKit 的 ECDSA 签名 API 是什么?" → 阅读:skills/cryptokit-ref.md

用户:"如何在应用中添加 passkey 登录?" → 阅读:skills/passkeys.md

用户:"如何验证我的应用没有被篡改?" → 阅读:skills/app-attest.md

用户:"如何保护应用的 AI Agent 免受提示词注入?" → 阅读:skills/agentic-security.md

用户:"我的 Siri 意图应该能否在锁屏界面使用?" → 阅读:skills/agentic-security.md

用户:"我应该使用哪种 NSFileProtection 级别?" → 阅读:skills/file-protection-ref.md

用户:"构建失败,并显示 'No signing certificate found'" → 阅读:skills/code-signing-diag.md

用户:"如何为 CI 配置 fastlane match?" → 阅读:skills/code-signing.md

用户:"如何检查配置描述文件?" → 阅读:skills/code-signing-ref.md

用户:"扫描我的代码,查找安全问题" → 调用:security-privacy-scanner Agent

评论

支持 Markdown