#constant-time #utilities #crypto

已撤回 parity-subtle

用于常数时间加密实现的纯Rust特性和工具

使用旧的 Rust 2015

0.1.1 2021年12月1日
0.1.0 2021年11月28日

#71 in #constant-time


用于 5 个crate (2直接)

BSD-3-Clause

34KB
375

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

警告

此代码是一个低级库,旨在用于实现加密协议的特定用例。它代表了保护某些软件旁路的最佳尝试。因为旁路抵抗力不是软件本身的一个属性,而是软件与硬件结合的一个属性,因此任何此类努力在本质上都是有限的。

自行承担风险使用

依赖关系

~4MB
~85K SLoC