ZTXBAS
面向现代应用的抗钓鱼生物识别认证
作为独立产品,ZTXBAS 是一个免费的自托管生物识别认证服务器,适合希望在自己的应用中加入生物识别认证的开发者。运行一个容器,让示例应用连接到它,再使用 ZTXBAS 移动应用扫描二维码,即可获得可用的抗钓鱼生物识别登录,无需 CoreZT 账号、许可证服务器或回传依赖。
ZTXBAS 也可作为 ZTXGate 内的一项授权功能提供。在这种模式下,它以库的形式紧密集成,无需单独部署 ZTXBAS 服务器。集成功能可用于联网、本地部署、混合以及完全隔离的 ZTXGate 部署。
传统 MFA 的问题
- SMS 验证码可能通过 SIM 卡交换攻击被截获。
- TOTP 令牌可能被实时钓鱼代理捕获。
- 推送通知可能遭遇 MFA 疲劳攻击。
- 硬件令牌成本较高,也容易遗失。
传统 MFA 是为另一个时代设计的。现代钓鱼攻击可以实时运行,并即时中继凭据和验证码。
ZTXBAS 的工作方式
ZTXBAS 将生物识别验证与加密的**来源绑定(origin binding)**相结合——每个认证请求都绑定到您的应用来源,因此在 phishing.example.com 上窃取的批准无法重放到 app.example.com。

认证流程
- 用户在您的应用中发起登录。
- 应用使用用户标识符和来源调用
POST /v1/auth/challenge。 - ZTXBAS 根据为应用注册的来源验证该来源,并将挑战推送到用户手机。
- 用户通过 Face ID / Touch ID / 指纹批准请求。
- 应用轮询
GET /v1/auth/status/{id},或接收已签名的 webhook。成功后,应用获得一个与用户和来源绑定的短期 ES256 JWT 身份断言。 - 应用使用
/.well-known/jwks.json中的公共 JWKS 验证 JWT,并创建自己的会话。
JWT 是安全边界——RP 无需仅依赖传输层本身来建立信任。
为什么 ZTXBAS 具备抗钓鱼能力
- 来源绑定。 每个挑战都绑定到已注册来源;移动应用会在用户批准前显示该来源。
- 设备绑定密钥。 私钥保存在 Secure Enclave / TEE 中,生物识别模板不会离开设备。
- 无共享密钥。 没有可被截获、钓鱼或重放的共享秘密,只有短期签名断言。
您将获得什么
ZTXBAS 服务器
单一容器。使用 SQLite(WAL)存储,无需部署其他组件。
- HMAC-SHA256 签名 API——约十几个端点
- 已签名 JWT 身份断言 + 公共 JWKS
- 带 HMAC 签名载荷和重试机制的 webhook
- 内置管理控制台(应用、用户、来源、实时挑战)
- 结构化 JSON 日志、按应用限流
- 生产环境使用 HTTPS;开发环境允许在
127.0.0.1上使用 HTTP
分发方式:
- GitHub Container Registry 上的 OCI 镜像:
ghcr.io/corezt/ztxbas - GitHub Releases 页面上的静态 Linux 二进制文件(amd64、arm64)
ZTXBAS 移动应用
ZTXBAS 和 ZTXGate 使用同一个移动应用——以后升级服务器时无需更换手机端应用。
- iOS — Face ID / Touch ID、Secure Enclave 密钥存储、iOS 14+ App Store
- Android — 指纹 / 人脸、硬件支持的 keystore、Android 8+ Google Play
SDK
官方 SDK 可处理 HMAC 签名、轮询和 JWT 验证:
- Go —
github.com/corezt/ztxbas/sdk-go - Node / TypeScript —
@corezt/ztxbas - Python —
corezt-ztxbas
ZTXBAS 与 ZTXGate
独立 ZTXBAS 与集成在 ZTXGate 中的 ZTXBAS 使用相同的移动认证器,但部署模式不同。
| 使用模式 | 独立 ZTXBAS | ZTXGate 中的 ZTXBAS |
|---|---|---|
| 主要用途 | 为您自己的应用添加生物识别认证 | 在 ZTXGate 访问策略中执行增强型生物识别认证 |
| 定价模式 | 免费独立产品 | ZTXGate 授权功能 |
| 服务器部署 | 单独的 ZTXBAS 服务器/容器 | 无需单独的 ZTXBAS 服务器;以库形式紧密集成 |
| 联网部署 | 支持 | 支持 |
| 隔离部署 | 支持 | 支持 |
| 移动应用 | ZTXBAS 移动应用 | 同一个 ZTXBAS 移动应用 |
如果您要直接在应用中集成生物识别认证,请使用独立 ZTXBAS。如果您正在使用 ZTXGate,则授权的集成功能属于 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;仅在 loopback 上允许 HTTP
- HMAC-SHA256 请求签名,采用时序安全比较
- JWT 签名密钥在首次运行时自动生成,文件权限模式为 0600
- 管理控制台:PBKDF2-HMAC-SHA256 密码哈希(60 万次迭代)、会话 Cookie,可选使用 ZTXBAS 自身提供生物识别保护
- SQLite 使用 WAL 模式,文件权限模式为 0600
- 日志中不记录秘密信息;结构化 JSON 输出到 stdout
- 公共端点按应用限流,管理端按 IP 限流
完整信息请参阅加固指南。
独立产品定价
独立 ZTXBAS 免费提供。可下载的二进制文件和容器镜像通过 GitHub 提供,并受 CoreZT EULA 约束。独立产品无需 CoreZT 账号、遥测或许可证服务器。
集成在 ZTXGate 中的 ZTXBAS 功能则作为 ZTXGate 部署模式的一部分进行授权。
常见问题
如果用户丢失手机怎么办?
通过 DELETE /v1/users/{id}(或管理控制台)注销用户——该设备的密钥会立即失效。随后通过您的账户恢复流程,在新设备上重新注册用户。
独立 ZTXBAS 可以离线运行吗?
可以。独立 ZTXBAS 是自托管的,可运行在隔离网络中。注册邮件需要 SMTP,因此隔离部署可以使用内部邮件中继。集成在 ZTXGate 中的授权 ZTXBAS 功能同样可用于隔离的 ZTXGate 部署,并且无需单独的 ZTXBAS 服务器。
ZTXBAS 与 passkey / WebAuthn 有何区别?
两者都具备抗钓鱼能力。当客户端是您可控的浏览器时,passkey 原生集成于浏览器,非常适合使用。ZTXBAS 则采用由服务器协调的推送流程,可用于任何客户端(移动应用、CLI、服务到服务),并向服务器端提供统一的已签名 JWT。二者可以互补:浏览器登录使用 passkey,增强认证、移动或非浏览器流程使用 ZTXBAS。
ZTXBAS 是否获得 FIDO 认证?
没有。ZTXBAS 使用类似的密码学原语(设备端 ECDSA、传输中的 HMAC、向 RP 提供 JWT),但并未获得 FIDO 认证。
什么时候应该改用 ZTXGate?
独立 ZTXBAS 以每个实例支持一个应用为主要模型,采用自托管方式并提供本地管理控制台。如果您需要多租户、管理员 RBAC 与 SSO、SCIM、设备姿态集成、SIEM 导出,或面向整个网络的访问执行(VPN / RDP / SSH / 传统应用),则应使用 ZTXGate。当 ZTXBAS 与 ZTXGate 一起授权时,它以库的形式集成,而不是作为单独的 ZTXBAS 服务器部署。
开始使用
由 CoreZT 提供 · 如需网络范围的零信任访问,请了解 ZTXGate →