axiom-security について
axiom-security は、Apple プラットフォームのアプリ開発者向けに、キーチェーン、暗号化、パスキー、アプリの完全性、ファイル保護、エージェントのセキュリティ、コード署名を扱うスキルです。各課題に応じた資料や自動スキャンへ案内します。
主な機能
- 01キーチェーンでの認証情報保存ガイド
- 02CryptoKit の暗号化と署名リファレンス
- 03パスキー実装ガイド
- 04アプリ完全性とエージェントのセキュリティ
- 05ファイル保護とコード署名
- 06自動セキュリティ監査への案内
活用シーン
- 01API トークンのキーチェーン保存
- 02暗号化または署名 API の選択
- 03パスキーサインインの実装
- 04署名とプロビジョニングエラーの診断
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ charleswiltgen/ axiom --skill axiom-securityインストール後、Claude Code で/axiom-securityを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
skills/agentic-security.mdapp-attest.mdcode-signing-diag.mdcode-signing-ref.mdcode-signing.mdcryptokit-ref.mdcryptokit.mdfile-protection-ref.mdkeychain-diag.mdkeychain-ref.mdkeychain.mdpasskeys.mdsecurity-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、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 を参照(検証コードの配信) |
| アプリの整合性検証、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"];
}
- トークン、パスワード、API キーを安全に保存しますか? →
skills/keychain.md1a. SecItem 関数のシグネチャ、属性定数が必要ですか? →skills/keychain-ref.md1b. キーチェーンのエラー(errSecDuplicateItem、errSecItemNotFound)ですか? →skills/keychain-diag.md - データを暗号化し、ペイロードに署名し、鍵を管理しますか? →
skills/cryptokit.md2a. CryptoKit API の詳細(AES-GCM、ECDSA、HPKE、耐量子暗号)が必要ですか? →skills/cryptokit-ref.md - パスキーによるサインインを実装するか、パスワードを置き換えますか? →
skills/passkeys.md - アプリの整合性を検証し、不正利用を防止しますか? →
skills/app-attest.md - エージェント型/AI 機能(プロンプトインジェクション、ツールの確認、ロック画面のインテント)を保護しますか? →
skills/agentic-security.md - 保存データのファイル暗号化、NSFileProtection のレベルについてですか? →
skills/file-protection-ref.md - コード署名を設定し、証明書や CI/CD を管理しますか? →
skills/code-signing.md7a. コード署名エラーのトラブルシューティングですか? →skills/code-signing-diag.md7b. 証明書 CLI コマンド、プロファイルの検査についてですか? →skills/code-signing-ref.md - 署名後にビルド/アップロードに失敗しますか? → axiom-build を参照
- App Store 提出の準備ですか? →
/skill axiom-shipping - プライバシーマニフェスト、トラッキングの透明性についてですか? → axiom-integration を参照
- データの永続化(SwiftData、Core Data、ストレージ戦略)についてですか? →
/skill axiom-data - ネットワークリクエストの TLS 設定、証明書ピンニングについてですか? →
/skill axiom-networking - セキュリティスキャンを自動化しますか? → 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 エージェント