3个稳定版本
使用旧Rust 2015
2.5.0 | 2021年9月16日 |
---|---|
2.4.1 | 2021年1月28日 |
2.4.0 | 2021年1月14日 |
#739 in 密码学
226,212 每月下载量
用于 249 个crate(8 直接使用)
30KB
377 行
subtle-ng
纯Rust特质和工具,用于恒定时间加密实现。
它包含一个Choice
类型,以及一组使用Choice
而不是bool
来执行的特质,这些特质旨在恒定时间内执行。`Choice
`类型是围绕一个存储0或1的u8
的包装器。
subtle-ng = "2.5"
要切换到以前的subtle
crate而不更改您的代码,请使用以下方法
subtle = { package = "subtle-ng", version = "2.4" }
这个crate在新的包名下继续了subtle
系列。遗憾的是,前一个crate的维护者悄悄移除了所有其他共同维护者,并夺取了对`dalek-cryptography` GitHub组织以及`subtle`和`curve25519-dalek` crate的控制。
这个crate代表了一种“尽力而为”的尝试,因为旁路攻击最终是部署的加密系统(包括其运行的硬件)的一个属性,而不仅仅是软件。
特质是通过位操作实现的,并且只要a)位操作是恒定时间的,并且b)位操作不被识别为条件赋值并优化回分支,就应该在恒定时间内执行。
为了让编译器识别位操作表示条件赋值,它需要知道用于生成位掩码的值实际上是一个布尔i1
而不是一个i8
字节值。为了防止这种细化,这个crate试图通过通过一个不可靠的读取传递来隐藏`Choice
`的内部u8
的值。有关更多信息,请参阅下面的“关于”部分。
版本在2.2
之前推荐使用nightly
功能来启用优化屏障;在版本2.2
及以上不再需要。
注意:subtle
包包含在调试构建过程中检查不变性的 debug_assert
。这些不变性检查涉及依赖秘密的分枝,并且在发布模式下编译时不存在。此包旨在以发布模式使用。
文档
文档可在此处找到。
最低支持的 Rust 版本
Rust 1.54 或更高版本。
最低支持的 Rust 版本未来可能会更改,但将以小版本号的增加来完成。
关于
这个库旨在成为 Go 的 crypto/subtle
模块的 Rust 等价物。
impl From
中的优化屏障基于 Tim Maclean 对 rust-timing-shield
的工作,该工作试图为防止 Rust 代码中的软件侧信道提供一个更全面的解决方案。
subtle
由 isis agora lovecruft 和 Henry de Valence 编写。
警告
此代码是一个低级库,旨在用于实现加密协议的特定用例。它代表了一种尽力保护某些软件侧信道的尝试。由于侧信道抵抗不是软件本身的属性,而是软件与硬件的结合,因此这种努力在本质上是有局限的。
自行承担风险使用