使用旧的 Rust 2015
0.1.1 |
|
---|---|
0.1.0 |
|
#71 in #constant-time
34KB
375 行
subtle
用于常数时间加密实现的纯Rust特性和工具。
它包含一个 Choice
类型,以及一系列使用 Choice
而不是 bool
的特性,旨在以常数时间执行。 Choice
类型是一个围绕 u8
的包装器,它包含一个 0
或 1
。
subtle = "2.4"
由于旁路通道最终是部署的加密系统(包括其运行的硬件)的一个属性,而不仅仅是软件,因此这个crate表示了一个“尽力而为”的尝试。
这些特性使用位操作实现,并且只要 a) 位操作是常数时间的,b) 位操作没有被识别为条件赋值并优化回分支,就应该以常数时间执行。
为了使编译器识别位操作代表条件赋值,它需要知道用于生成位掩码的值实际上是一个布尔 i1
而不是一个 i8
字节值。为了防止这种优化,这个crate试图通过传递一个易失性读取来隐藏 Choice
的内部 u8
的值。有关更多信息,请参阅下面的 关于 部分。
低于 2.2
版本推荐使用 nightly
功能来启用优化屏障;在 2.2
及更高版本中不再需要。
注意:subtle
包包含在调试构建期间检查不变性的 debug_assert
。这些不变性检查涉及秘密相关的分支,并且在发布模式下编译时不存在。此包旨在以发布模式使用。
文档
文档可在此处找到:https://docs.rs/subtle。
最低支持的 Rust 版本
Rust 1.41 或更高。
最低支持的 Rust 版本可能会在未来更改,但将以小版本号升级的方式进行。
关于
此库旨在成为 Go 的 crypto/subtle
模块的 Rust 等价物。
impl From<u8> for Choice
中的优化屏障是基于 Tim Maclean 在 rust-timing-shield 上的工作,该工作试图为 Rust 代码中防止软件旁路提供更全面的方法。
subtle
由 isis agora lovecruft 和 Henry de Valence 编写。
警告
此代码是一个低级库,旨在用于实现加密协议的特定用例。它代表了保护某些软件旁路的最佳尝试。因为旁路抵抗力不是软件本身的一个属性,而是软件与硬件结合的一个属性,因此任何此类努力在本质上都是有限的。
自行承担风险使用
依赖关系
~4MB
~85K SLoC