メインコンテンツまでスキップ

ZTXBAS:フィッシング耐性のある生体認証

現代のアプリケーション向け生体認証​

スタンドアロンのZTXBASは、開発者が自身のアプリケーションに生体認証を組み込むための、無料のセルフホスト型認証サーバーです。コンテナを一つ起動し、サンプルアプリを接続して、ZTXBASモバイルアプリでQRコードを読み取ると、CoreZTアカウント、ライセンスサーバー、外部へのテレメトリー送信なしでフィッシング耐性のある認証を評価できます。

ZTXGate内では、ZTXBASをライセンス対象の統合機能として利用できます。この場合はライブラリとして密結合され、独立したZTXBASサーバーの導入は不要です。オンライン、オンプレミス、ハイブリッド、完全なエアギャップ環境のZTXGateで動作します。

従来のMFAの課題​

  • SMSコード:SIMスワッピングで盗み取られる可能性があります。
  • TOTPコード:リアルタイムのフィッシングプロキシに転送される可能性があります。
  • プッシュ通知:繰り返し承認を求めるMFA疲労攻撃の標的になります。
  • ハードウェアトークン:追加費用がかかり、紛失する場合があります。

現代のフィッシング攻撃はリアルタイムで認証情報やコードを中継します。認証操作を正しいアプリケーションと暗号学的に結び付けることが重要です。

ZTXBASの仕組み​

ZTXBASは生体認証と暗号学的なオリジンバインディングを組み合わせます。各認証リクエストを正規アプリケーションのオリジンに関連付けるため、phishing.example.comで得た承認をapp.example.comにそのまま再利用することはできません。

ZTXBASの生体認証フロー

認証フロー​

  1. ユーザーがアプリケーションでログインを開始します。
  2. アプリがユーザーIDとオリジンを指定し、POST /v1/auth/challenge を呼び出します。
  3. ZTXBASは登録済みオリジンと照合してチャレンジを検証し、スマートフォンへ送信します。
  4. ユーザーはFace ID、Touch ID、指紋などで承認します。
  5. アプリはGET /v1/auth/status/{id}をポーリングするか署名付きWebhookを受信し、成功時にユーザーとオリジンに結び付いた短寿命のES256 JWT IDアサーションを取得します。
  6. アプリは/.well-known/jwks.jsonの公開JWKSでJWTを検証し、自身のセッションを作成します。

セキュリティ上の境界はJWTの検証です。リライングパーティーは通信経路だけを信頼する必要はありません。

フィッシングに強い理由​

  • オリジンバインディング:登録済みオリジンにチャレンジを結び付け、承認前にアプリでオリジンを表示します。
  • デバイスに紐付く鍵:秘密鍵をSecure EnclaveやTEEに保存します。生体認証テンプレートはデバイス外に出ません。
  • 共有秘密情報に依存しない方式:短寿命の署名付きアサーションで検証し、盗聴・フィッシング・リプレイに対する保護を強化します。

フィッシング耐性のある認証ガイド

提供されるコンポーネント​

ZTXBASサーバー​

単一のコンテナで動作し、データ保存にはSQLite(WAL)を利用します。

  • HMAC-SHA256で署名するAPI(約12エンドポイント)
  • 署名付きJWT IDアサーションと公開JWKS
  • HMAC署名・再試行付きWebhook
  • アプリケーション、ユーザー、オリジン、チャレンジを管理する内蔵コンソール
  • JSON形式の構造化ログとアプリケーションごとのレート制限
  • 本番環境ではHTTPSを使用し、開発時のみ127.0.0.1上でHTTPを許可

配布: GitHub Container RegistryのOCIイメージghcr.io/corezt/ztxbas、およびGitHub ReleasesのLinux静的バイナリ(amd64、arm64)。

ZTXBASモバイルアプリ​

スタンドアロンとZTXGate統合版で同じアプリを使います。サーバーを後から変更してもスマートフォンアプリを入れ替える必要はありません。

  • iOS:Face ID/Touch ID、Secure Enclave、iOS 14以降。 App Store
  • Android:指紋/顔認証、ハードウェア保護されたキーストア、Android 8以降。 Google Play

SDK​

公式SDKはHMAC署名、ポーリング、JWT検証を支援します。

  • Go — github.com/corezt/ztxbas/sdk-go
  • Node / TypeScript — @corezt/ztxbas
  • Python — corezt-ztxbas

ZTXGateでのZTXBAS​

スタンドアロン版とZTXGate統合版では、同じモバイル認証アプリを利用しますが、導入モデルが異なります。

項目スタンドアロンZTXBASZTXGate統合ZTXBAS
主な用途独自アプリへの生体認証追加ZTXGateのアクセスポリシーに基づく追加生体認証
料金無料ZTXGateのライセンス対象機能
サーバー独立したZTXBASサーバー/コンテナ別サーバー不要、ライブラリ統合
オンライン環境対応対応
エアギャップ環境対応対応
モバイルアプリZTXBASアプリ同じZTXBASアプリ

独自アプリに直接組み込むならスタンドアロン版、ZTXGateでのアクセス制御に組み込むならライセンス済みの統合版を使用します。

統合例​

# 認証チャレンジを要求
curl -X POST https://ztxbas.example.com/v1/auth/challenge \
-H "X-Application-ID: app_a1b2c3d4e5" \
-H "X-Signature: <HMAC-SHA256 signature>" \
-H "Content-Type: application/json" \
-d '{
"email": "alice@example.com",
"origin": "https://app.example.com"
}'

# レスポンス
{
"challenge_id": "ch_abc123",
"expires_in": 120,
"origin_display": "Example App",
"origin_url": "https://app.example.com",
"challenge_hmac": "..."
}

SDKを使えば署名を手作業で生成する必要はありません。導入ガイドで実行手順を確認してください。

セキュリティ対策​

  • 本番環境でHTTPSを必須とし、HTTPはループバックだけに制限
  • HMAC-SHA256リクエスト署名とタイミングセーフな比較
  • 初回起動時に自動生成するJWT署名鍵(ファイルモード0600)
  • 管理コンソール:PBKDF2-HMAC-SHA256(60万回)によるパスワードハッシュ、セッションクッキー、任意のZTXBAS生体認証保護
  • SQLite WALモードとファイルモード0600
  • シークレットをログに記録せず、標準出力へ構造化JSONを出力
  • 公開APIではアプリケーション単位、管理画面ではIP単位でレート制限

詳しくはハードニングガイドをご覧ください。

スタンドアロン版の料金​

ZTXBASのスタンドアロン版は無料です。バイナリとコンテナイメージはCoreZT EULAに基づきGitHubで配布されます。CoreZTアカウント、テレメトリー、ライセンスサーバーは不要です。ZTXGateへの統合機能は商用ライセンス対象です。ZTXGateの料金

よくある質問​

スマートフォンを紛失したら?

DELETE /v1/users/{id}または管理画面からユーザー登録を解除すると、そのデバイスの鍵は直ちに無効になります。アカウント回復フローで新しいデバイスを登録してください。

スタンドアロンZTXBASはオフラインで動作しますか?

はい。エアギャップネットワーク内でセルフホストできます。登録メールにはSMTPが必要なので、内部リレーを利用できます。ZTXGate統合版も別サーバーなしで隔離環境に対応します。

パスキー/WebAuthnとの違いは?

どちらもフィッシング耐性があります。パスキーは制御可能なブラウザーログインに便利です。ZTXBASはサーバーを介したプッシュ方式で、モバイル、CLI、サービス間処理にも対応し、サーバー側で利用する署名付きJWTを提供します。両者は補完的です。

ZTXBASはFIDO認証を取得していますか?

いいえ。デバイス側のECDSA、HMAC、JWTなど類似の暗号要素を使用しますが、FIDO認証製品ではありません。

ZTXGateが必要になるのはいつですか?

マルチテナント、管理者RBACとSSO、SCIM、デバイスポスチャー、SIEM、広範なネットワークリソースへのアクセス制御(SSH/RDPなど非Webサービスを含む)が必要ならZTXGateを検討してください。Webアプリ向けのHTTP/HTTPSクライアントレスアクセスもライセンス機能として提供します。

利用を開始する​

CoreZT提供 · ネットワーク全体のゼロトラストにはZTXGateをご覧ください。