#hashing #hash #cryptography #hasher #security #context #shake256

rs_shake256

rs_shake256 是 SHAKE256 密码散列算法的 Rust 实现,是更大项目 rs_shield 的一部分。此包以独立的方式提供 SHAKE256 散列功能,适用于只需要 SHAKE256 的情况。对于那些寻求全面密码函数集的用户,此算法也包含在更广泛的 rs_shield 库捆绑包中。rs_shake256 和更大项目的重点是性能、安全性和开放性,并致力于持续维护和改进。

3 个版本

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

#2178算法

33 每月下载次数
2 crates 中使用

GPL-2.0-only

135KB
2.5K SLoC

rs_shake256

rs_shake256 是一个 Rust crate,实现了 SHAKE256 可扩展输出函数 (XOF)。这个基于置换的函数旨在与 Rust 的 libcore 兼容,在 #![no_std] 环境中使用,允许它作为一个独立 crate 用于特定用例,并在 #![no_std]#![no_alloc] 环境中运行,使其适用于动态内存分配不可行的系统。

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

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

鉴于这一建议,NIST 的建议意味着 SHAKE256 适用于以下环境

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

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

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

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

为了访问一系列全面的加密函数,可以使用rs_shake256作为rs_shield库捆绑包的一部分。

如何使用

以下是在Rust项目中使用rs_shake256crate的步骤

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

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

    use rs_shake256::{HasherContext, Shake256Hasher};
    
    let mut sha512_256hasher = Shake256Hasher::<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, 0x97E1C052B5574F11);
    assert_eq!(format!("{bytes_result:02x}"), "97e1c052b5574f117b3fb13f26865fb4eec4a473");
    assert_eq!(format!("{bytes_result:02X}"), "97E1C052B5574F117B3FB13F26865FB4EEC4A473");
    assert_eq!(
        bytes_result,
        [
            0x97, 0xE1, 0xC0, 0x52, 0xB5, 0x57, 0x4F, 0x11, 0x7B, 0x3F, 0xB1, 0x3F, 0x26, 0x86, 0x5F, 0xB4, 0xEE, 0xC4,
            0xA4, 0x73
        ]
    )
    

更多信息

有关对rs_shake256的更详细探索、其他可用加密函数的概述以及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]: Krawczyk, H.,Bellare, M.,& Canetti, R.。 (1997)。 HMAC:基于密钥的哈希消息认证。 RFC 2104

[^4]: Merkle, R. C.。 (1988)。 基于常规加密函数的数字签名。 链接

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


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

依赖关系