AMAZINGINDEX.COM 日报快照
57.7
VOL. 2026.05
2026.05.30
← 返回 2026.05.30 日报
日报快照 · Daily Snapshot
NO. 013

Bijou64 编码:安全修 bug 附赠 3 倍性能

#ARTICLE HackerNews 2026.05.30
推荐指数 65.0 NO. 013 · 2026.05.30
发布2026/05/29Score175Comments63

Ink & Switch 为 CRDT 同步协议设计了一种新的 varint 编码 bijou64,原本只为消除签名验证中的歧义表示漏洞,意外发现比 LEB128 快数倍。对需要高频序列化整数的基础设施开发者,这是一个可直接替换的优化点。

Bijou64 编码:安全修 bug 附赠 3 倍性能

LEB128 和 Protocol Buffers 的 varint 长期统治这个领域,但它们的非规范表示(同一个数有多种编码方式)是安全审计里的经典陷阱,Google 的 protobuf 团队也为此头疼过。bijou64 的巧妙之处在于用固定 3-bit 长度前缀替代了 LEB128 的逐字节 continuation bit,解码时可以直接跳转而不用循环解析。

如果你的项目在用 protobuf、Cap'n Proto 或自研二进制协议,且整数序列化是热点,可以考虑把 varint 层替换成 bijou64。不过要注意它目前只针对 64-bit 有符号整数优化,32-bit 或浮点场景不适用。

意见分歧 62 条评论

核心争论:安全规范性与编码效率的权衡:非唯一编码是攻击面还是可忽略的边界情况

RedShift1

This seems quite convoluted just to avoid the "0 can be represented in more than one way" problem.

nine_k

It allows finding out the length (and allocating memory) after reading the first byte.

ahoka

I think it's neat.

替代方案: LEB128canonical LEB128DWARFCBORmulticodec
查看原文 →