#hash #hashing #security #cryptography #variables #hasher #shake128

rs_shake128

rs_shake128 是 SHAKE128 密码散列算法的 Rust 实现,是更大项目 rs_shield 的一部分。此软件包以独立的方式提供 SHAKE128 散列功能,非常适合只需要 SHAKE128 的情况。对于那些寻求完整加密功能集的人来说,此算法也包含在更广泛的 rs_shield 库捆绑包中。 rs_shake128 和更大项目专注于性能、安全性和开放性,并致力于持续维护和改进。

3个版本

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

#2390算法

39 每月下载量
2 crates 中使用

GPL-2.0-only

135KB
2.5K SLoC

rs_shake128

rs_shake128 是一个 Rust crate,实现了 SHAKE128 可扩展输出函数 (XOF)。此基于置换的函数设计用于与 Rust 的 libcore 在 #![no_std] 环境中兼容,允许它作为一个独立的 crate 用于特殊用例,也可以在 #![no_std]#![no_alloc] 环境中运行,使其适用于无法进行动态内存分配的系统。

此 SHAKE128 实现符合联邦信息处理标准 (FIPS) 出版物 202[^1]。根据国家标准与技术研究院 (NIST) 的指南,SHAKE128 建议用于各种用例

“SHAKE128 和 SHAKE256 是可扩展输出函数 (XOF),可以输出可变长度的哈希,被批准用于所有可以使用可变长度输出的哈希函数的应用。”

根据此建议,NIST 的建议意味着 SHAKE128 适用于以下环境

  • 需要可变位数安全性的数字签名。
  • 需要可变位数安全性的系统和协议中的密码散列函数。
  • 需要可变位数安全性的认证方法。
  • 输出长度不固定的应用场景。

除了这些具体建议之外,SHAKE128 还可以应用于以下场景:

  • 分布式系统中唯一标识符的生成[^2]。
  • Merkle 树中的数据完整性检查[^4]。
  • 当需要抗碰撞性时,基于哈希的消息认证码 (HMACs)[^3]。
  • 密钥派生函数或在随机数生成中[^6]。

鉴于您的整体安全目标和风险承受能力,应仔细考虑这些点。

为了访问广泛的加密函数,可以使用 rs_shake128 作为 rs_shield 库捆绑包的一部分。

如何使用

以下是在您的 Rust 项目中使用 rs_shake128 crate 的步骤

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

    rs_shake128 = "0.1.*"
    
  2. 在您的代码中使用 rs_shake128 模块提供的函数。以下是从字符串创建 SHAKE128 哈希的示例

    use rs_shake128::{HasherContext, Shake128Hasher};
    
    let mut sha512_256hasher = Shake128Hasher::<20>::default();
    sha512_256hasher.write(b"your string here");
    
    let u64result = sha512_256hasher.finish();
    let bytes_result = HasherContext::finish(&mut sha512_256hasher);
    assert_eq!(u64result, 0x9105E04821D530DE);
    assert_eq!(format!("{bytes_result:02x}"), "9105e04821d530de80ff68fac42a0fe164c744dd");
    assert_eq!(format!("{bytes_result:02X}"), "9105E04821D530DE80FF68FAC42A0FE164C744DD");
    assert_eq!(
        bytes_result,
        [
            0x91, 0x05, 0xE0, 0x48, 0x21, 0xD5, 0x30, 0xDE, 0x80, 0xFF, 0x68, 0xFA, 0xC4, 0x2A, 0x0F, 0xE1, 0x64, 0xC7,
            0x44, 0xDD
        ]
    )
    

更多信息

有关对 rs_shake128 的更详细探索、其他可用加密函数的概述以及更广泛的 rs_shield 项目的介绍,请参阅 crates.io 上的 RustyShield 项目页面RustyShield project page on crates.io

贡献

鼓励潜在的贡献者查阅我们 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]: Krawczyk, H.,Bellare, M.,& Canetti, R. (1997). HMAC:基于密钥的哈希消息认证. RFC 2104

[^4]: Merkle, R. C. (1988). 基于传统加密函数的数字签名. Link

[^6]: 美国国家标准与技术研究院. (2012). 通过提取-扩展推荐密钥派生. SP 800-56C


注意:参考文献是根据截至 2023 年 5 月 17 日的最佳知识提供的。

依赖关系