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 在 加密学
每月下载1,069次
用于 3 crates
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_sha1
crate的步骤
-
在
Cargo.toml
的[dependencies]
部分添加以下行rs_sha1 = "0.1.*"
-
在您的代码中使用
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日的最佳知识提供的。