4 个版本 (2 个重大变更)
0.3.1 | 2024 年 6 月 4 日 |
---|---|
0.3.0 | 2024 年 5 月 25 日 |
0.2.0 | 2024 年 4 月 18 日 |
0.1.0 | 2024 年 2 月 28 日 |
#2567 在 魔法豆
每月 197 次下载
120KB
2K SLoC
协议
爱丽丝和鲍勃通过相互发送三条消息来建立连接,以生成多个共享密钥。爱丽丝通过在典型的比特币曲线 secp256k1
上生成公钥/私钥对来开始连接。爱丽丝被称为 发起者。她将公钥编码为 Elligator Swift 格式(64 字节),可选地用一些随机垃圾字节填充,并将消息发送给鲍勃。鲍勃被称为 响应者,解码 Elligator Swift 公钥,并自己生成一个临时的公钥/私钥对。使用他的公钥和私钥,以及爱丽丝的公钥,鲍勃执行椭圆曲线迪菲-赫尔曼算法的变体来生成共享密钥。从这个共享密钥中,鲍勃使用 HKDF 算法生成多个密钥和一个会话 ID。接下来,鲍勃创建垃圾数据,并发送他的公钥、垃圾数据、使用垃圾数据加密的数据包和一个版本协商给爱丽丝。使用鲍勃的公钥,爱丽丝生成共享密钥,并确保鲍勃发送给她的解密数据包已通过垃圾数据验证。最后,爱丽丝发送一个“垃圾终止符”和她自己的垃圾数据加密的数据包,这样鲍勃就可以验证她推导出的正确密钥,并且可以解码她的消息。现在,爱丽丝和鲍勃可以在比特币 P2P 协议上自由交换加密消息。
接口
该库公开了两个核心结构,即 Handshake
和 PacketHandler
。握手用于生成一个数据包处理器,并在上述对等体之间执行一个半往返操作。成功的握手将生成一个用于加密和解密通道操作的数据包处理器。
这两个结构都设计为具有裸 no_std
和“无I/O”接口,以使它们尽可能与应用程序运行时无关。
特性标志
alloc
-- 提供内存分配相关的特性。std
-- 包含alloc
内存分配特性,以及额外的标准库依赖项,用于I/O和随机数生成器。
ChaCha20Poly1305
BIP324选择在内部使用ChaCha20Poly1305认证加密带附加数据(AEAD)算法。这是ChaCha20流加密和Poly1305消息认证码(MAC)的组合。在此上下文中,“认证”指的是加密消息的完整性,而不是通信双方的身份。
Poly1305是一种专用MAC,与像使用SHA256的HMAC这样的现有哈希方案不同,它利用现有的哈希方案来构建消息认证码。专用设计引入了新的复杂性,但也允许提高性能。
ChaCha20和Poly1305都在此crate中实现,以将依赖项保持到最小。
开发
实现通过了BIP324参考向量以及多个额外库测试的测试。
依赖项
~8MB
~98K SLoC