#hashing #security #ssl #standard #no-alloc

no-std bin+lib rs_shield

一个全面的 Rust 库,提供包括 SHA 和 Keccak 家族的加密哈希函数以及 HMAC 的稳健和高效实现,适用于 no_std 环境。符合 GPL-2.0-only 许可协议。

3 个版本

0.1.4 2023年6月12日
0.1.3 2023年6月12日
0.1.2 2023年6月12日

#2156 in 密码学

GPL-2.0-only

9.5MB
3.5K SLoC

RustyShield rs_shield

一个受 OpenSSL 启发的基于 Rust 的加密库

Documentation GitHub Workflow Status

愿景

RustyShield 旨在通过提供一个与 Rust 的核心库 完全兼容的 API,实现 Rust 语言的自主性,尽管并非仅限于它。RustyShield 旨在提供一个可靠、用户友好、符合标准且平台无关的加密工具套件。

如何使用

请参阅 实现文档 以获取示例。

针对 NIST 测试向量的测试

RustyShield 中实现的所有 NIST 批准和发布的算法都经过与相应 NIST 测试向量的彻底测试。这种严格的测试保证了实现的正确性和可靠性,为使用 RustyShield 构建的应用程序提供了一个稳健的安全基础。

路线图

  1. RustyShield 的初始目标是把所有 OpenSSL 算法(除了 SSL 和 TLS)移植到 Rust 生态系统。
  2. 移植完成后,RustyShield 将继续扩展并集成更多的加密算法。
  3. 尽管当前的实现不是最快的,但仍有很大的改进空间。一旦 SIMD 模块 稳定,可能会出现性能的显著提升;
  4. rs_shield 最终将提供可选的 CLI 二进制文件,提供校验和、证书生成、随机数生成和其他加密实用工具。

之后,计划实现一些加密货币的哈希算法,如 Equihash以太坊的 Keccak-256 以及其他算法。

为什么是这个项目?

RustyShield 的好处包括

  • 最小依赖和供应链安全:通过仅依赖 Rust 的核心库,RustyShield 最小化了与依赖相关的问题风险,并提供了一个更高的供应链安全级别。只需信任 Rust 核心库团队;
  • alloc外部crate和平台无关性:RustyShield避免了使用alloccrate,使其能够在不假设宿主有堆分配器的情况下运行,并使更多嵌入式应用和内核级使用成为可能。此外,利用Rust的libcore确保跨平台可靠性,减少终端用户的复杂性;
  • 统一的设计模式:通过遵循HashHasherBuildHasher设计模式,用户可以互换地使用任何具有这些特质的算法;
  • 生态系统自给自足:该项目通过依赖自己的实现,通过FFI调用减少对外部变量的依赖,从而加强了Rust生态系统的自给自足能力;

哲学

受Unix哲学的启发,但适应了本项目的目的

  1. 一事一终:每个实现都应该专注于单一职责。如果职责分散,应该创建一个新的crate;
  2. 避免依赖中断:更改实现不应该中断依赖。如果需要新的特质,它们应该对所有项目实现都有益;
  3. 自给自足:实现应该能够仅使用Rust的libcore来运行,并与它向后兼容;
  4. 清晰胜于效率:优先考虑清晰易懂的代码,而不是高度优化但晦涩的解决方案;

支持算法

包括一个库rs_shield,以及一系列针对加密过程各个方面的特定算法crate,例如哈希函数、加密函数和公钥函数;

rs_shield:这是RustyShield项目的主体库crate。目前,它作为一个包装器,提供了将所有底层特定算法crate作为一个依赖项包括进来的便利。这消除了需要单独管理多个依赖项的需要。预计rs_shield的后续版本将超出包装器的功能,并将引入更多直接的功能,包括校验和、证书生成和其他加密工具。

哈希函数:这些是一对一函数,它们接受一个输入(或“消息”)并返回一个固定大小的字节数组。输出,通常称为“摘要”,对每个唯一的输入都是唯一的。从摘要中重新生成原始输入值在实际上是不可行的。RustyShield提供的此类哈希算法的示例包括SHA-1、Keccak和MD5。

加密函数:这些是执行加密和解密的算法,对于确保信息的机密性至关重要。加密函数接受明文输入和密钥以生成密文输出。使用相同的密钥可以反转此过程。RustyShield中提供的加密算法示例包括AES、Blowfish和Camellia。

公钥函数:这些是使用一对密钥进行加密和解密过程的加密算法:一个公开密钥,可以自由共享,和一个私钥,必须保密。发送者使用接收者的公开密钥进行加密,接收者使用他们的私钥进行解密。公钥函数包括加密算法和数字签名算法。RustyShield提供的公钥算法包括RSA、Diffie-Hellman和DSA。

graph LR

    subgraph RustyShield["RustyShield"]
        rs_shield["rs_shield"]
        HashingFunctions["Hashing Functions"]
        Ciphers["Cipher Functions"]
        PublicKey["Public Key Functions"]
    end

    rs_shield -->|Provides| HashingFunctions
    rs_shield -->|Provides| Ciphers
    rs_shield -->|Provides| PublicKey

以下是以格式呈现项目的当前详细状态:[链接到其文档] - [链接到其crates.io页面]。

加密函数 哈希函数 公钥函数
AES - 即将推出 BLAKE2 - 即将推出 DSA - 即将推出
Blowfish - 即将推出 通用Keccak {200, 400, 800, 1600} - rs_keccak_nbits Diffie-Hellman密钥交换 - 即将推出
Camellia - 即将推出 GOST R 34.11-94 - 即将推出 Ed25519 - 即将推出
CAST-128 - 即将推出 HMAC - rs_hmac Ed448 - 即将推出
Chacha20 - 即将推出 MD2 - 即将推出 椭圆曲线 - 即将推出
DES - 即将推出 MD4 - 即将推出 GOST R 34.10-2001 - 即将推出
GOST 28147-89 - 即将推出 MD5 - 即将推出 RSA - 即将推出
IDEA - 即将推出 MDC-2 - 即将推出 SM2 - 即将推出
Poly1305 - 即将推出 RIPEMD-160 - 即将推出 X25519 - 即将推出
RC2 - 即将推出 SHA-1 - rs_sha1 X448 - 即将推出
RC4 - 即将推出 SHA-224 - rs_sha224
RC5 - 即将推出 SHA-256 - rs_sha256
SEED - 即将推出 SHA-384 - rs_sha384
SM4 - 即将推出 SHA-512 - rs_sha512
三重DES - 即将推出 SHA-512/224 - rs_sha512_224
SHA-512/256 - rs_sha512_256
SHA3-224 - rs_sha3_224
SHA3-256 - rs_sha3_256
SHA3-384 - rs_sha3_384
SHA3-512 - rs_sha3_512
SHAKE128 - rs_shake128
SHAKE256 - rs_shake256
SM3 - 即将推出
惠而浦 - 即将推出

贡献

我们非常欢迎来自所有人的贡献。

如果您有一个希望在项目中包含的算法建议,请提出一个提出此建议的问题。

要贡献力量,请遵循贡献指南

行为准则

Rust 社区的每位成员都受到重视,我们希望每个人都能够享受到愉快且充实的学习经历。因此,所有参与者、维护者和贡献者都必须遵守行为准则

许可证

RustyShield 采用 GPL-2.0-only 许可证。

简单来说,这意味着您可以自由使用、修改和分发软件,但任何修改也必须遵守 GPL-2.0-only 许可证。或者,如果更方便的话,对于改进并符合贡献指南的修改,可以将其纳入项目。

依赖项