#sha-1 #sha #no-alloc

no-std rs_sha1

rs_sha1是SHA-1加密哈希算法的Rust实现,是更大项目rs_shield的一部分。此包以独立的方式提供SHA-1哈希功能,非常适合仅需要SHA-1的情况。对于寻求全面加密函数集的人来说,该算法也包含在更广泛的rs_shield库捆绑包中。rs_sha1和更大项目的主要目标是性能、安全性和开放性,并致力于持续维护和改进。

4个版本

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

564加密学

Download history 110/week @ 2024-03-14 33/week @ 2024-03-21 34/week @ 2024-03-28 72/week @ 2024-04-04 193/week @ 2024-04-11 199/week @ 2024-04-18 177/week @ 2024-04-25 427/week @ 2024-05-02 85/week @ 2024-05-09 77/week @ 2024-05-16 126/week @ 2024-05-23 247/week @ 2024-05-30 323/week @ 2024-06-06 150/week @ 2024-06-13 282/week @ 2024-06-20 290/week @ 2024-06-27

每月下载1,069
用于 3 crates

GPL-2.0-only

165KB
3K SLoC

rs_sha1

rs_sha1是提供SHA-1加密哈希算法的Rust crate。设计用于与Rust的libcore在#![no_std]上下文中兼容,它作为一个独立的crate用于特定用例,也可以在#![no_std]#![no_alloc]环境中运行,这使得它适用于动态内存分配不可行的系统。

此SHA-1实现符合联邦信息处理标准(FIPS)出版物180-4[^1]。然而,由于SHA-1易受碰撞攻击的性质,国家标准与技术研究院(NIST)不建议用于任何需要碰撞抵抗的应用。这与NIST特别出版物800-107的指导方针一致

"联邦机构应尽快停止在 [...] 需要碰撞抵抗的应用中使用SHA-1,并必须在2010年后使用SHA-2系列的哈希函数。

鉴于上述情况,NIST的建议意味着SHA-1不应在以下环境中使用

  • 需要碰撞抵抗的加密安全应用。
  • 生成数字签名和证书。
  • 新系统和协议中的加密哈希函数。

然而,SHA-1仍可用于非安全关键应用,例如

  • 在软件版本控制系统中生成提交标识符[^2]。
  • 当不需要碰撞抵抗时,计算基于哈希的消息认证码(HMAC)[^3]。
  • Merkle树中的数据完整性检查[^4]。
  • Bloom过滤器中的随机哈希函数[^5]。

请根据您应用程序的整体安全目标和风险承受能力仔细考虑这些观点。

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

如何使用

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

  1. Cargo.toml[dependencies]部分添加以下行

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

    use rs_sha1::{HasherContext, Sha1Hasher};
    
    let mut sha1hasher = Sha1Hasher::default();
    
    sha1hasher.write(b"your string here");
    
    let u64result = sha1hasher.finish();
    let bytes_result = HasherContext::finish(&mut sha1hasher);
    assert_eq!(u64result, 0x7D2C170805790AFA);
    assert_eq!(format!("{bytes_result:02x}"), "7d2c170805790afac408349a9c266a123d1961be");
    assert_eq!(format!("{bytes_result:02X}"), "7D2C170805790AFAC408349A9C266A123D1961BE");
    assert_eq!(
        bytes_result,
        [
            0x7D, 0x2C, 0x17, 0x08, 0x05, 0x79, 0x0A, 0xFA, 0xC4, 0x08, 0x34, 0x9A, 0x9C, 0x26, 0x6A, 0x12, 0x3D, 0x19, 0x61, 0xBE
        ]
    )
    

更多信息

有关对rs_sha1的更详细探索、其他可用的加密函数以及rs_shield项目的介绍,请参阅RustyShield项目页面在crates.io

贡献

潜在的贡献者被鼓励查阅我们GitHub页面上的贡献指南

许可证

本项目采用GPL-2.0-only许可证。

参考文献

[^1]: 国家标准与技术研究院. (2015). 安全散列标准 (SHS). FIPS PUB 180-4

[^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). 基于常规加密函数的数字签名. 链接

[^5]: Bloom, B. H. (1970). 允许错误的哈希编码中的空间/时间权衡. 计算机通信,13(7),422-426. DOI:10.1145/362686.362692


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

依赖项