什么是 Branca 令牌
Branca 令牌是一种轻量级的安全 API 令牌格式,专为“易用+高安全”而设计。它基于 XChaCha20-Poly1305-AEAD 算法,为每一次请求打包「认证+加密」双重保障:
- 认证:确保数据没有被篡改
- 加密:确保 payload 不可见
核心关键词:Branca令牌、API加密、认证加密、XChaCha20-Poly1305、AEAD
设计目标解读
Branca 在创建之初就瞄准三大痛点:
- 安全第一:不牺牲任何密码学强度。
- 上手零门槛:主流语言均可一行引入。
- 体积更小:Base62 编码后同样位数能装更多信息,减少网络开销。
相比 JWT 的四段式结构,它把 Header、Payload、Tag 压缩成 1 → 5 段,长度更短,解析更快。
令牌结构拆解
Branca 令牌是一段连续的 62 进制 字符串,解码后得到二进制数据:
Version | Timestamp | Nonce | Ciphertext | Tag
1B 4B 24B *B 16B
- Version:当前固定为
0xBA,一眼识别 Branca。 - Timestamp:无符号 4 字节 UNIX 时间,支持到 2106 年,自带防重放价值。
- Nonce:192-bit 真随机,「一次一密」杜绝重复使用。
- Ciphertext:任意二进制(JSON / 文本 / MessagePack 皆可)。
- Tag:128-bit Poly1305 认证码,只要任何一位改动都会变成非法令牌。
快速上手:生成与验证
生成令牌(伪代码)
1. 生成 24B 安全随机 nonce
2. 当前 UNIX 时间 → 4B 大端时间戳
3. 构造 Header = Version || Timestamp || Nonce
4. 加密 Payload → Cipher
5. 计算 Poly1305 Tag
6. 拼接后使用 Base62 输出
验证令牌
1. Base62 解码
2. 确认首字节 = 0xBA
3. 分割 Header / Cipher / Tag
4. 使用同一 32B 密钥 + Nonce 解密
5. 验证 Tag,失败即拒绝
示例:Node.js 社区实现
branca包,一行encrypt(payload, key)、decrypt(token, key)即可。
典型应用场景
| 场景 | Branca 关键词痛点解决 |
| — | — |
| 微服务网关 | 轻量级 API 令牌 + 防重放攻击 |
| 一次性下载链接 | 短链接 × 限时有效性 |
| 第三方支付回调 | 防篡改 + 加密流量 |
FAQ(常见问题解答)
Q1:Branca 与 JWT 有何区别?
A:JWT 使用 Base64URL,Payload 不一定加密;Branca 默认加密 + 短 20% 长度,防重放更精准。
Q2:密钥多长才安全?
A:官方要求 256-bit(32B)。低于此值会直接拒绝生成。
Q3:如何优雅轮换密钥?
A:在 payload 里加 kid 字段或使用版本号区分,验证时选择对应密钥即可。
Q4:Branca 支持分片传输吗?
A:不支持。Branca 令牌必须一次性完整传输。
Q5:2038 年时间戳会溢出吗?
A:不会,Branca 采用无符号 32-bit,有效期到 2106 年。
Q6:是否有现成的代码库?
A:官方维护 Go、Python、PHP、JavaScript、C#、Elixir 等 10+ 开源实现,GitHub 搜索「branca」即可。
实战建议
- 密钥管理:存放在专用 KMS 或硬件模块,禁止硬编码。
- Nonce 生成:使用
/dev/urandom或crypto.randomBytes确保真随机。 - 可调过期:在 payload 里单独放
exp字段,验证时与本地策略比对。 - 日志脱敏 :记录令牌哈希尾 4 位即可,保护用户隐私。
结论
Branca 令牌将「现代密码学、小巧体积、开发友好」揉为一体,非常适合对 API加密、令牌认证 有高度要求的场景。无论你是打造高并发网关,还是做一次性安全链路,只要掌握一套统一的 32B 密钥,就能让 Branca 成为系统安全的新基石。