#hashing #keccak #hash #algorithm #output #length

no-std rs_keccak_nbits

rs_keccak_nbits 是一个可变输出长度的 Keccak 加密哈希算法的 Rust 实现,是更大的 rs_shield 项目的组成部分。此包以独立方式提供 Keccak 哈希功能,非常适合只需要自定义输出长度的 Keccak 的情况。对于那些寻求全面加密函数集的人来说,相同的算法包含在更广泛的 rs_shield 库捆绑包中。 rs_keccak_nbits 和更大的项目的重点是性能、安全性和开放性,并致力于持续维护和改进。

3 个版本

0.1.2 2023 年 6 月 12 日
0.1.1 2023 年 6 月 4 日
0.1.0 2023 年 5 月 30 日

#2528 in 加密学

每月 22 次下载
用于 2 crates

GPL-2.0-only

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 项目中使用的步骤

  1. 请将以下行添加到您的 Cargo.toml 文件中的 [dependencies] 部分

    rs_keccak_nbits = "0.1.*"
    

    请将 "0.1" 替换为您打算使用的版本号。

  2. 在您的代码中使用 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 日的最佳知识提供的。

依赖关系