AIエージェントに暗号学的な認可を5分で追加する

Dev.to / 2026/4/23

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical Usage

要点

  • この記事では、APIキーやmTLSはエージェントを認証するものの、スコープ付与や委任チェーンの監査、権限の監査といった適切な「認可」機能が不足していると主張しています。
  • Codios(エージェント間のA2Aセキュリティ層)を紹介し、署名付きの能力(capability)契約に基づくことで、4つの認可要件を約5分で追加できると述べています。
  • デモの構成として、暗号学的アイデンティティ(Ed25519鍵ペア)を持つ2つのAIエージェントを用意し、特定の権限を付与する署名付き契約を発行し、契約をオフラインで検証する保護APIエンドポイントを作る手順を説明します。
  • Node.jsとCodios SDKを使った実装ルートとして、SDKのインストールや、CLIコマンドで鍵ペアを生成して.envに保存する方法などを提示しています。
  • さらに、すべての認可判断について完全な監査ログを生成することを強調し、エージェント間のやり取りにおける認可結果の可視化を可能にします。

AIエージェント同士が呼び出し合っています。APIキー、またはmTLSを使っています。でも、それだけでは不十分ではないかと心配です。

APIキーは認証します。しかし認可はしません。スコープも切りません。委譲チェーンの監査も行いません。

以下のCodiosなら、この4つを5分以内で追加できます。署名付きキャパビリティ契約に基づくA2Aセキュリティ層です。

codios

作成するもの

  • 暗号学的なアイデンティティを持つ2つのエージェント(Ed25519の鍵ペア)
  • 特定の権限を付与する署名付き契約
  • 契約をオフラインで検証する保護されたAPIエンドポイント
  • すべての認可判断の完全な監査ログ

所要時間: 約5分

必要なもの: Node.js と Codiosアカウント(codios.midlantics.comで無料)

ステップ 1: SDKをインストールする

npm install @codios/sdk

ステップ 2: CLIで鍵ペアを生成する(最も簡単)

Codios CLIは鍵ペアを生成し、自動的にそれを.envファイルへ保存できます:

bash
codios keygen --save .env

これにより、あなたの.envファイルにCODIOS_PUBLIC_KEYとCODIOS_PRIVATE_KEYが追記されます。

TypeScriptで手動生成する場合:

import { generateAgentKeyPair } from "@codios/sdk"

const agent = await generateAgentKeyPair()
console.log("DID:", agent.did)
console.log("Public key:", agent.publicKey)
console.log("Private key:", agent.privateKey) // これは安全に保存してください

ステップ 3: ダッシュボードでエージェントを登録する

Codiosダッシュボードにログインします

  1. Agents(エージェント)タブへ移動
  2. Register agent をクリック
  3. 名前を入力(例: "billing-agent")
  4. 任意: キャパビリティを追加(例: transfer, quote)
  5. Public keyは空欄のままにする — Codiosが鍵ペアを生成します
  6. Registerをクリック 重要: プライベートキーは一度だけ表示されます。すぐにコピーして保存してください。復元はできません。

CLIでの代替:

codios register --name billing-agent --public-key $CODIOS_PUBLIC_KEY

ステップ 4: 4ステップのウィザードで契約を発行する

  1. ダッシュボードのContracts(契約)タブへ移動
  2. Connect agentsをクリック
  3. Issuer — リクエストを行うエージェントを選択(または、Codiosがあなたの代わりに署名するようにCodios Platformを選択)
  4. Targets — リクエストを受け取る1つ以上のエージェントを選択(それぞれが独立した契約を受け取ります)
  5. Permissions — 許可するアクションを定義(例: transfer )。期間を設定(1h / 1d / 7d / 30d)し、任意で最大呼び出し回数も指定できます
  6. Review — フローを確認してから、Issue contractをクリック 発行後、各ターゲットのcontract token(契約トークン)が表示されます。それぞれのトークンをコピーしてください。X-Codios-Contractヘッダーとして渡します。

契約ステータス: activeexpired(TTL経過)または revoked(手動で無効化)

ステップ 5: middlewareでサービスを保護する

import express from "express"
import { codiosGuard } from "@codios/sdk"

const app = express()

app.post(
  "/transfer",
  codiosGuard({
    action:      "transfer",     // 契約で許可されたアクションと一致している必要があります
    publicKey:   process.env.SERVICE_AGENT_PUBLIC_KEY,
    gatewayUrl:  "https://codios-api.midlantics.com",
  }),
  (req, res) => {
    // 契約が有効な場合にのみここに到達します
    res.json({ ok: true })
  }
)

app.listen(3000)

ステップ 6: 保護されたサービスを呼び出す

返却形式: {"translated": "翻訳されたHTML"}
const response = await fetch("http://localhost:3000/transfer", {
  method: "POST",
  headers: {
    "Content-Type":      "application/json",
    "X-Codios-Contract": contractToken,  // ステップ4のトークン
  },
  body: JSON.stringify({ amount: 100 }),
})

Step Time
Ed25519署名を検証(オフライン) 約0ms
期限切れ、アクション、max_callsを確認 約0ms
Nonceチェック(Redis SET NX) 約1ms
非同期監査ログの書き込み 非ブロッキング

総オーバーヘッド: 1-2ms

契約が期限切れの場合、呼び出し回数が尽きている場合、またはすでに使用済みの場合 → HTTP 403 または 409。

ダッシュボードで使う機能

Tab What it does
Overview 統計: 登録済みエージェント、有効な契約、監査エントリ(24h)、拒否されたリクエスト
Agents エージェントを登録、DID/公開鍵を表示、ハートビート状態(緑/黄/赤)を確認
Contracts ウィザードで契約を発行、無効化し、ステータスを確認
Audit Log 結果、アクション、エージェントでフィルタ。保持: Free=7日、Starter=30日、Pro=90日
Threat Detection(Pro) 営業時間外のアクセス、アクションのバースト、未知のエージェント、繰り返される拒否をスキャン
Alert Rules(Starter+) 拒否の急増、レート制限超過、エージェント停止に対してメール
API Keys バックエンドサービス用の codios_sk_... キーを作成

次のステップ

  • ハートビートを追加 – エージェントに POST /agents/{id}/heartbeat を毎分呼び出させて、状態を緑に保ちます
  • アラートルールを設定 – 何か問題が起きたときにメール通知を受け取ります
  • 監査ログを確認する – 許可/拒否のすべての判断を見ます
  • Python SDKを試す – FastAPIミドルウェアも利用可能です

APIキーを取得: codios.midlantics.com

完全なドキュメント: codios.midlantics.com/docs

これが重要な理由

APIキーは人間のために設計されています。AIエージェントは別物です — 自律的で、速く、連鎖します。

Codiosは、ホットパスにレイテンシを追加することなく、エージェントに実際に必要なセキュリティモデルを提供します。

codios

返却形式: {"translated": "翻訳されたHTML"}