mcpField
A
axiom-security

axiom-security

github.com/charleswiltgenセキュリティ1.2k1.2k 回インストール今日更新
リポジトリ

axiom-security について

axiom-security は、Apple プラットフォームのアプリ開発者向けに、キーチェーン、暗号化、パスキー、アプリの完全性、ファイル保護、エージェントのセキュリティ、コード署名を扱うスキルです。各課題に応じた資料や自動スキャンへ案内します。

主な機能

  1. 01キーチェーンでの認証情報保存ガイド
  2. 02CryptoKit の暗号化と署名リファレンス
  3. 03パスキー実装ガイド
  4. 04アプリ完全性とエージェントのセキュリティ
  5. 05ファイル保護とコード署名
  6. 06自動セキュリティ監査への案内

活用シーン

  1. 01API トークンのキーチェーン保存
  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

詳細

セキュリティと認証情報

キーチェーン、暗号化、パスキー、アプリの整合性、エージェント型/AI 機能のセキュリティ、ファイル保護、コード署名に関する作業では、必ずこのスキルを使用してください。

Axiom エージェントを起動できませんか? このルーターがエージェントに案内した場合は、その手順をその場で実行してください。MCP 経由では、axiom_get_agent が手順を返します。それ以外の場合は、以下のファイルを読み取ってください。必要なのはファイルの検索と読み取りだけです。

ここで利用可能:skills/security-privacy-scanner.md。

その他のエージェントについては、MCP 経由で axiom_get_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、errSecInteractionNotAllowedskills/keychain-diag.md を参照
データの暗号化、ペイロードへの署名、鍵管理skills/cryptokit.md を参照
ハッシュ関数、HMAC、AES-GCM、ChaChaPoly、ECDSA、EdDSA、鍵共有skills/cryptokit-ref.md を参照
パスキーによるサインイン、WebAuthn、ASAuthorizationControllerskills/passkeys.md を参照
認証情報プロバイダー OS27 のワンタイムコード自動入力skills/passkeys.md を参照(検証コードの配信)
アプリの整合性検証、DCAppAttestService、不正利用指標skills/app-attest.md を参照
プロンプトインジェクション、AI エージェント/エージェント型機能の保護、ツールの確認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. エージェント型/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(エージェント)

競合時の使い分け

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)

重要なパターン

キーチェーン(skills/keychain.md):

  • SecItem のメンタルモデル:一意性の制約、データ保護クラス
  • 生体認証アクセス制御(Face ID/Touch ID)
  • アプリと拡張機能間でのキーチェーン共有
  • バックグラウンドアクセスでの注意点、Mac のキーチェーンとの違い
  • 機密データを UserDefaults/@AppStorage から移行する方法

キーチェーン API(skills/keychain-ref.md):

  • SecItemAdd/CopyMatching/Update/Delete のシグネチャ
  • アイテムクラスの属性、一意性制約のルール
  • kSecAttrAccessible のレベルとそれぞれが適用される状況
  • アクセス制御フラグ、生体認証との連携
  • エラーコードの完全なリファレンス

キーチェーンの診断(skills/keychain-diag.md):

  • 想定外の一意性制約が原因の errSecDuplicateItem
  • アイテムが存在するのに発生する errSecItemNotFound(クエリの不一致)
  • バックグラウンドコンテキストでの errSecInteractionNotAllowed
  • アクセスグループとエンタイトルメントの不一致
  • アプリのアップデート後にアイテムが消える問題

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 のクロスプラットフォーム互換性

パスキー(skills/passkeys.md):

  • ASAuthorizationController の登録およびアサーションのフロー
  • AutoFill によるリクエスト支援(QuickType バーとの連携)
  • 既存ユーザーのパスキーへの自動アップグレード(iOS 18 以降)
  • 認証情報を組み合わせたリクエスト(パスキー+パスワード+Apple でサインイン)
  • WebAuthn の関連ドメイン設定

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

  • DCAppAttestService のアテステーションおよびアサーションのフロー
  • アテステーションオブジェクトのサーバー側での検証
  • 第 27 サイクルからの macOS 対応+改ざんシグナル(拡張機能、キーアクセス制御)
  • 調査シグナルとしての不正行為メトリック
  • デバイスごとの DeviceCheck 2 ビット状態
  • 大規模なインストールベース向けの段階的なロールアウト戦略
  • 非対応デバイスを適切に処理する方法

エージェント型セキュリティ(skills/agentic-security.md):

  • エージェント型機能の脅威モデリング(間接的なプロンプトインジェクション、Lethal Trifecta)
  • 決定論的な緩和策と確率論的な緩和策(編集、スポットライト、確認、ロック解除のゲート制御)
  • Foundation Models のライフサイクル修飾子(.onToolCall による確認、.historyTransform)
  • App Intents の authenticationPolicy とスキーマのリスクメタデータ

ファイル保護(skills/file-protection-ref.md):

  • NSFileProtection のレベル(complete、completeUnlessOpen、afterFirstUnlock、none)
  • デバイスのパスコードに紐づくハードウェアアクセラレーション暗号化
  • バックグラウンドでのファイルアクセス要件
  • キーチェーンとファイル保護の比較

コード署名(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 でのキーチェーンの問題(キーチェーンのロック、errSecInternalComponent)
  • アーカイブ/エクスポートの失敗(エクスポート方法の誤り、証明書の種類の誤り)

コード署名 CLI(skills/code-signing-ref.md):

  • プロファイルの確認に使う security find-identity、security cms -D
  • エンタイトルメントの抽出に使う codesign -d --entitlements
  • 証明書の種類、有効期間、アカウントごとの上限
  • fastlane match のコマンドとキーチェーンの管理

自動スキャン

セキュリティ監査 → security-privacy-scanner エージェントを起動します(ハードコードされた認証情報、安全でないトークン保存、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 で両方を説明しています。
"パスキーはまだ新しい。パスワードで十分"パスキーはフィッシングに強く、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

ユーザー:「キーチェーンへの保存時に errSecDuplicateItem が発生する」 → 読み込むもの:skills/keychain-diag.md

ユーザー:「SecItem の属性定数を教えてください」 → 読み込むもの:skills/keychain-ref.md

ユーザー:「AES でユーザーデータを暗号化するには?」 → 読み込むもの:skills/cryptokit.md

ユーザー:「ECDSA 署名の CryptoKit API を教えてください」 → 読み込むもの:skills/cryptokit-ref.md

ユーザー:「アプリにパスキーサインインを追加するには?」 → 読み込むもの:skills/passkeys.md

ユーザー:「アプリが改ざんされていないことを確認するには?」 → 読み込むもの:skills/app-attest.md

ユーザー:「アプリの AI エージェントをプロンプトインジェクションから保護するには?」 → 読み込むもの: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 エージェント

コメント