1个稳定版本
使用旧的Rust 2015
2.5.0 | 2022年11月29日 |
---|
#2042 in 密码学
34KB
386 行
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编写。
警告
此代码是一个底层库,旨在用于实现加密协议的特定用例。它代表了对防止某些软件侧信道的最佳努力尝试。由于侧信道抵抗力不仅是软件的特性,而且是软件与硬件结合的特性,因此此类努力在本质上是有局限性的。
自行承担风险使用