3 个版本
0.1.2 | 2023 年 6 月 12 日 |
---|---|
0.1.1 | 2023 年 6 月 4 日 |
0.1.0 | 2023 年 5 月 30 日 |
#2528 in 加密学
每月 22 次下载
用于 2 crates
140KB
2.5K SLoC
rs_keccak_nbits
rs_keccak_nbits
是一个 Rust 包,实现了 Keccak 可扩展输出函数 (XOF),提供可变长度的哈希输出。该基于置换的函数旨在与 Rust 的 libcore 兼容,在 #![no_std]
环境中使用,使其能够作为一个独立的包用于专用用例,并在 #![no_std]
、#![no_alloc]
环境中运行,使其适用于无法进行动态内存分配的系统。
此 Keccak 实现不符合联邦信息处理标准 (FIPS) 出版物 202[^1]。rs_keccak_nbits
包旨在主要用于学术目的和在一致性是主要要求的场景中。
此实现能够表示任何其他 Keccak 置换,包括 RustyShield 中存在的其他置换。
尽管不符合 FIPS 标准,但 Keccak 函数在以下学术或一致性驱动场景中是合适的
- 研究需要可变安全位的数字签名。
- 研究和理解需要不同安全位数的系统和协议中的加密散列函数。
- 分析需要不同安全位数的认证方法。
- 探索输出长度不固定的应用。
除了这些具体建议,Keccak 还可以在以下方面找到应用:
- 在分布式系统中生成唯一标识符[^2]。
- 在 Merkle 树中进行数据完整性检查[^3]。
- 当需要抗碰撞性时,基于散列的消息认证码 (HMACs) [^4]。
- 密钥派生函数或在生成随机数[^5]中。
考虑到您的整体学术目标或对一致性的需求,应仔细考虑这些要点。
要访问广泛的加密函数,可以使用 rs_keccak_nbits
作为 rs_shield
库捆绑包的一部分。
如何使用
以下是使用 rs_keccak_nbits
在您的 Rust 项目中使用的步骤
-
请将以下行添加到您的
Cargo.toml
文件中的[dependencies]
部分rs_keccak_nbits = "0.1.*"
请将
"0.1"
替换为您打算使用的版本号。 -
在您的代码中使用
rs_keccak_nbits
模块提供的函数。以下是从字符串创建 Keccak 散列的示例use rs_keccak_nbits::{HasherContext, KeccakHasher}; // In this example it is representing a 200bit state, with 20bytes of rate, and 20bytes output let mut n_bit_keccak_hasher = NBitKeccakHasher::<u8, 20, 20>::default(); 4usize.hash(&mut n_bit_keccak_hasher); let i = n_bit_keccak_hasher.finish(); assert_eq!(result, 0xEB31065163D8823); let output = HasherContext::finish(& mut n_bit_keccak_hasher); println!("{:x}", output);
更多信息
有关 rs_keccak_nbits
的更详细探索、其他可用加密函数的概述以及更广泛的 rs_shield
项目的介绍,请参阅 crates.io 上的 RustyShield 项目页面。
贡献
鼓励潜在的贡献者查阅我们 GitHub 页面上的 贡献指南。
许可
本项目受 GPL-2.0-only 许可。
参考
[^1]: 美国国家标准与技术研究院。 (2015)。 SHA-3 标准:基于置换的哈希和可扩展输出函数。 FIPS PUB 202 [^2]: Linus Torvalds。 (2005)。 Git:一个分布式版本控制系统。 软件:实践与经验,41(1),79-88。 DOI:10.1002/spe.1006 [^3]: Merkle, R. C. (1988)。基于常规加密函数的数字签名。 链接 [^4]: Krawczyk, H.,Bellare, M.,& Canetti, R. (1997)。HMAC:基于密钥的哈希消息认证。 RFC 2104 [^5]: 美国国家标准与技术研究院。 (2012)。通过提取-扩展推荐密钥派生。 SP 800-56C
注意:这些参考是根据截至 2023 年 5 月 17 日的最佳知识提供的。