8 个不稳定版本 (3 个重大更改)
新 0.4.1 | 2024年8月18日 |
---|---|
0.4.0 | 2024年8月18日 |
0.3.0 | 2024年8月3日 |
0.2.0 | 2024年7月29日 |
0.1.3 | 2024年7月22日 |
#1348 在 加密学
每月621次下载
在 sumatradigest 中使用
44KB
731 行
libsumatracrypt-rs
libsumatracrypt-rs
是一个使用纯 Rust 编写的 开源加密库,它设计上严格且本质上是安全的,易于访问,有强大的文档,并提供了高级加密(零知识证明、同态加密、后量子密码学)的扩展,同时保持了一个简单易用的接口。它使用 Sumatracrypt-Standardized-API-Model
提供了一个易于使用的 API 接口,设计上难以出错。它有大量的文档详细说明了某些设计选择,如何在底层工作,以及其他内容。
它目前实现了以下加密协议
公钥加密方案
- 使用 CURVE25519 的椭圆曲线集成加密系统 (ECIES)
- RSA4096-OAEP
数字签名方案
- ED25519
- 基于 Ristretto 压缩 Ed25519 点的 Schnorr
- ED448(尚未实现)
密钥交换
- Curve448 上的 X448
哈希函数(摘要)
- SHA2(SHA2-224、SHA2-256、SHA2-384、SHA2-512)
- BLAKE2B(可变长度,支持密钥哈希)
- BLAKE3
- SHA3(SHA3-224、SHA3-256、SHA3-384、SHA3-512)
- SHAKE256(512位)
加密安全的随机数生成器(CSPRNG)
- 用于获取操作系统加密安全伪随机数生成器(CSPRNG)的跨平台
getrandom()
通用
libsumatracrypt-rs
是
-
易于使用
-
纯 Rust(内存安全)
-
轻量级
-
设计上严格安全,重点放在安全性上(包括侧信道攻击和高级对手)
-
极简主义,依赖关系和可选依赖关系最少
-
有 标准化 API,称为
Sumatracrypt-Standardized-API-Model
-
有大量的文档、社区讨论和深入代码的探讨
-
具有使用 高级加密技术(如零知识证明、同态加密、后量子加密、可验证随机函数、可验证延迟函数)的扩展,并且具有被称为
sumatracryptadvanced-standardized-api
的 标准化API
库用途
对于普通用户
libsumatracrypt-rs
的目的是为更多人提供一个轻量级、纯Rust的加密库,其核心是 安全性(抵御最先进的攻击,如旁路攻击)同时保持 易于访问 和 易于使用的API,即使面对高级攻击者。
它还希望通过简单的API向公众提供更多高级加密算法,如 零知识证明、同态加密 和 后量子加密。
对于开发者
为 libsumatracrypt-rs
开发的未来开发者/贡献者的想法是保持
- 易于使用,具有 简单的接口 和使用
Sumatra-Standardized-API-Model
的 标准化API。 - 轻量级,具有 最少的依赖项(并且这些依赖项将随后进行 审计 和/或 分叉)
- 严格关注安全性(包括针对旁路攻击、时间攻击和高级对手的措施)
- 默认情况下,通过将依赖项 设置为可选 并将其分开到不同的crate中,来 使依赖项可选
- 让普通用户难以 出错(配置错误、处理密钥问题、其他用户配置攻击等)
- 提供 实质性 的文档和深入讨论
- 每个crate中都有 示例
对于开发者(安全性)
它还旨在对抗 旁路攻击 并保持 常量时间。其他安全措施也是可取的。
概述
加密
ECIES (Curve25519)(主要)
在 curve25519-dalek
上实现的 椭圆曲线集成加密方案 (ECIES) 被选为加密的主要选择。
RSA4096-OAEP
RSA4096-OAEP 使用纯Rust的 rsa
crate。它仅生成
PKCS#8 注意:默认使用 LF
(\n
) 以保护隐私,因此没有人能够确定你从哪里生成了密钥。
哈希函数
- SHA2 (SHA224,SHA256,SHA384,SHA512)
- SHA3 (SHA3-224,SHA3-256,SHA3-384,SHA3-512)
- SHAKE256
- BLAKE2B(可变摘要)
- BLAKE3
数字签名
- Schnorr
- ED25519
- RSA4096(待办事项)
已实现的协议列表
加密
- ECIES-Curve25519
- RSA4096-OAEP
ECIES-CURVE25519
- [安全性] 对所有结构体实现
Zeroize/ZeroizeOnDrop
RSA4096
- [编码] 实现PEM(PKCS#8)
数字签名
- 基于 CURVE25519 的 Schnorr 签名
- ED25519
ED25519
ED25519 是一种使用 Curve25519 的加密数字签名算法。
公钥: 32-bytes(256位)
私钥: 32-bytes(256位)
签名: 64字节(512位)
详情
默认情况下,所有密钥都编码为上划线十六进制编码的 String
,其字符数是大小的一半。这意味着公钥是64个字符长,私钥也是64个字符长,签名是128个字符长。
安全性
- [安全性] [密钥生成] 密钥 来自 32-bytes 大小的 操作系统CSPRNG 作为数组。
- [安全性] [Zeroize] 对所有结构体实现
Zeroize/ZeroizeOnDrop
开发者注释
结构体(ED25519PublicKey
、ED25519SecretKey
、ED25519Signature
)以大写十六进制编码的形式存储为String
。
- [安全] 密钥由操作系统的
[u8;32]
|array
形式的32字节(256位)的[CSPRNG]
生成。
待办事项
加密
SumatraEncryptECIES
| 使用纯Rust实现基于Twisted Edwards Curve25519的椭圆曲线集成加密方案(ECIES),采用AES-GCM和HKDF-SHA256。
- 提供强大的安全性保证、快速的速度和小的密钥尺寸。
- 依赖项:使用带有
pure
功能标志的ecies-ed25519
crate。
SumatraRSA4096
| 使用纯Rust实现基于Optimal Asymmetric Encryption Padding (OAEP)的RSA4096。
- 具有强大的安全性,通过经典的、经过良好审查的安全论证来对抗经过良好测试的RSA算法,只提供一种密钥尺寸(最高密钥尺寸,具有最大的安全性)。
- 生成新的RSA4096密钥大约需要3-5分钟。适用于具有经典安全假设的长期密钥。
- 依赖项:使用经过审计的
rsa
crate。
数字签名
SumatraEd25519
| 纯Rust实现的常量时间ED25519签名方案。
Ed25519(查看网站)是一种提供强大安全性、抵抗各种旁路攻击和分支预测的加密数字签名方案。它速度极快,提供
SumatraEd25519
通过广泛使用ed25519-dalek
crate为ED25519签名提供强大的安全性。这些签名通过保持常量时间、实现零化以及降低对旁路攻击的易损性来提供强大的安全性。它使用Curve25519。
常量时间
- Schnorr签名
哈希函数
- SHA2 (SHA224,SHA256,SHA384,SHA512)
依赖项
~61MB
~1.5M SLoC