2个不稳定版本

0.1.0 2022年5月10日
0.0.0 2021年9月22日

#2954 in 魔法豆

Download history 1249/week @ 2024-03-14 1035/week @ 2024-03-21 453/week @ 2024-03-28 692/week @ 2024-04-04 3484/week @ 2024-04-11 2867/week @ 2024-04-18 2380/week @ 2024-04-25 3857/week @ 2024-05-02 3404/week @ 2024-05-09 6618/week @ 2024-05-16 7661/week @ 2024-05-23 5620/week @ 2024-05-30 2368/week @ 2024-06-06 2211/week @ 2024-06-13 1988/week @ 2024-06-20 1245/week @ 2024-06-27

8,134每月下载量
17个crate中使用(通过zcash_address

MIT/Apache

480KB
5K SLoC

f4jumble

F4Jumble算法的实现,一种无密钥可逆变量宽度的排列。

F4Jumble被Zcash统一地址和统一查看密钥用于防止某些类型的篡改攻击,并在ZIP 316中规定。

许可证

许可协议为以下之一

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,将按上述方式双重许可,不附加任何额外的条款或条件。


lib.rs:

此crate提供了一种将字节切片以可逆方式“打乱”的机制。

许多字节编码,如Base64Bech32,没有“级联”行为:在一个位置更改输入字节对远程位置的字节编码没有影响。如果用户通常通过肉眼检查编码字符串的正确性,他们可能会只检查编码字符串的前几个或最后几个字符。在某些情况下(例如,显示由不受信任的计算机提供的编码字符串的硬件设备),攻击者可能会在不被用户注意的情况下更改编码字符串的一些内部部分,从而对他们有利。

F4Jumble(及其逆函数F4Jumble⁻¹)是长度保持变换,可以用来简单地将级联行为引入现有的编码中。

  • 像往常一样准备原始的message字节。
  • message传递给f4jumblef4jumble_mut以获取乱序字节。
  • 使用编码方案对乱序字节进行编码。

更改message中的任何字节都会导致完全不同的乱序字节序列。具体来说,F4Jumble使用无密钥4轮Feistel构造来近似随机排列。

Diagram of 4-round unkeyed Feistel construction

效率

成本主要由128字节以内消息长度的4个BLAKE2b压缩组成。对于更长的消息,成本增加到128 < lₘ ≤ 192的6个BLAKE2b压缩,例如192 < lₘ ≤ 256的10个BLAKE2b压缩。算法定义的最大成本是lₘ = 4194368时的196608个BLAKE2b压缩。

本库中的实现需要大约lₘ字节加上BLAKE2b哈希状态的大小。可以通过(例如,使用F4Jumble⁻¹)从内存限制较小的设备中三次流式传输乱序编码的d部分来减少这一点。必须保证流过的d值在每次传递中都是相同的,可以使用消息认证码(密钥仅由消费者持有)或抗碰撞哈希函数进行验证。在d的第一个传递之后,实现能够计算y;在第二次传递之后,它能够计算a;第三次允许它计算和增量解析b。在此过程中,最大内存使用量为128字节加上两个BLAKE2b哈希状态。

依赖关系

~240KB