#constant-time #utilities #crypto #hold

no-std subtle-ml

为常量时间加密实现提供纯Rust特性和工具

1个稳定版本

使用旧的Rust 2015

2.5.0 2022年11月29日

#2042 in 密码学

BSD-3-Clause

34KB
386

subtle

为常量时间加密实现提供纯Rust特性和工具。

它包含一个Choice类型,以及一系列使用Choice而不是bool的特性和工具集合,这些特性和工具旨在以常量时间执行。Choice类型是一个围绕u8的包装器,它持有01

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编写。

警告

此代码是一个底层库,旨在用于实现加密协议的特定用例。它代表了对防止某些软件侧信道的最佳努力尝试。由于侧信道抵抗力不仅是软件的特性,而且是软件与硬件结合的特性,因此此类努力在本质上是有局限性的。

自行承担风险使用

无运行时依赖