Bijou64 编码:安全修 bug 附赠 3 倍性能
推荐指数 65.0 NO. 013 · 2026.05.30
发布2026/05/29Score175Comments63
为什么值得看
Ink & Switch 为 CRDT 同步协议设计了一种新的 varint 编码 bijou64,原本只为消除签名验证中的歧义表示漏洞,意外发现比 LEB128 快数倍。对需要高频序列化整数的基础设施开发者,这是一个可直接替换的优化点。
媒体预览
编辑判断
LEB128 和 Protocol Buffers 的 varint 长期统治这个领域,但它们的非规范表示(同一个数有多种编码方式)是安全审计里的经典陷阱,Google 的 protobuf 团队也为此头疼过。bijou64 的巧妙之处在于用固定 3-bit 长度前缀替代了 LEB128 的逐字节 continuation bit,解码时可以直接跳转而不用循环解析。
如果你的项目在用 protobuf、Cap'n Proto 或自研二进制协议,且整数序列化是热点,可以考虑把 varint 层替换成 bijou64。不过要注意它目前只针对 64-bit 有符号整数优化,32-bit 或浮点场景不适用。
社区反馈
意见分歧 62 条评论
核心争论:安全规范性与编码效率的权衡:非唯一编码是攻击面还是可忽略的边界情况
This seems quite convoluted just to avoid the "0 can be represented in more than one way" problem.
It allows finding out the length (and allocating memory) after reading the first byte.
I think it's neat.