subtle

用于恒定时间密码学实现的纯 Rust 特性和工具。
它由一个 Choice 类型以及一组使用 Choice
代替 bool 的特性组成,这些特性旨在以恒定时间执行。 Choice
类型是一个封装了 u8 的包装器,其中包含一个 0 或 1。
subtle = "2.6"
本 crate 代表一种“尽力而为”的尝试,因为侧信道最终是已部署的密码系统的属性, 包括其运行的硬件,而不仅仅是软件。
这些 trait 使用位运算实现,并且应当以恒定时间执行,前提是 a) 位运算是恒定时间的, 并且 b) 位运算不被识别为条件赋值, 从而被优化回分支。
为了让编译器识别出位运算代表条件赋值,
它需要知道用于生成位掩码的值
实际上是一个布尔值 i1,而不是一个 i8 字节值。为了防止
这种细化,该 crate 试图通过通过易失性读取来隐藏 Choice 的
内部 u8 的值。有关更多信息,请参阅
下面的 About 部分。
1.51 或更高版本的 Rust 支持 const generics。您可以启用
const-generics 特性,以便为数组 [T; N] 实现 subtle trait。
在 2.2 之前的版本建议使用 nightly 特性来启用
优化屏障;在 2.2 及更高版本中不需要此特性。
注意:subtle crate 包含 debug_assert,用于在
调试构建期间检查不变量。这些不变量检查涉及依赖于秘密的分支,
并且在以 release 模式编译时不存在。本 crate 旨在
以 release 模式使用。
Documentation
文档可在 here 获取。
Minimum Supported Rust Version
Rust 1.41 或更高版本。
最低支持的 Rust 版本未来可能会更改,但将通过次版本号升级来实现。
关于
本库旨在成为 Go 的 crypto/subtle 模块的 Rust 等价物。
impl From<u8> for Choice 中旧版本的优化屏障基于 Tim Maclean 的 关于 rust-timing-shield 的工作,
该工作试图为在 Rust 代码中防止软件侧信道提供更全面的方案。
从版本 2.2 开始,它基于 Diane Hosfelt 和 Amber Sprenkels 关于
“Rust 中的秘密类型”的工作。
subtle 由 isis agora lovecruft 和 Henry de Valence 编写。
警告
本代码是一个低级库,旨在用于实现加密协议的特定用例。 它代表了对抗某些软件侧信道的尽力尝试。 由于侧信道抗性不是软件单独的属性,而是软件与硬件共同具备的属性,因此任何此类努力从根本上都是有限的。
风险自负