#constant-time #utilities #crypto

no-std subtle-ng

纯Rust特质和工具,用于恒定时间加密实现

3个稳定版本

使用旧Rust 2015

2.5.0 2021年9月16日
2.4.1 2021年1月28日
2.4.0 2021年1月14日

#739 in 密码学

Download history 56289/week @ 2024-03-14 60412/week @ 2024-03-21 56266/week @ 2024-03-28 61522/week @ 2024-04-04 60244/week @ 2024-04-11 58972/week @ 2024-04-18 51807/week @ 2024-04-25 51299/week @ 2024-05-02 51397/week @ 2024-05-09 50835/week @ 2024-05-16 62047/week @ 2024-05-23 61255/week @ 2024-05-30 53506/week @ 2024-06-06 57987/week @ 2024-06-13 59068/week @ 2024-06-20 44598/week @ 2024-06-27

226,212 每月下载量
用于 249 个crate(8 直接使用)

BSD-3-Clause

30KB
377

subtle-ng

纯Rust特质和工具,用于恒定时间加密实现。

它包含一个Choice类型,以及一组使用Choice而不是bool来执行的特质,这些特质旨在恒定时间内执行。`Choice`类型是围绕一个存储0或1的u8的包装器。

subtle-ng = "2.5"

要切换到以前的subtle crate而不更改您的代码,请使用以下方法

subtle = { package = "subtle-ng", version = "2.4" }

这个crate在新的包名下继续了subtle系列。遗憾的是,前一个crate的维护者悄悄移除了所有其他共同维护者,并夺取了对`dalek-cryptography` GitHub组织以及`subtle`和`curve25519-dalek` crate的控制。

这个crate代表了一种“尽力而为”的尝试,因为旁路攻击最终是部署的加密系统(包括其运行的硬件)的一个属性,而不仅仅是软件。

特质是通过位操作实现的,并且只要a)位操作是恒定时间的,并且b)位操作不被识别为条件赋值并优化回分支,就应该在恒定时间内执行。

为了让编译器识别位操作表示条件赋值,它需要知道用于生成位掩码的值实际上是一个布尔i1而不是一个i8字节值。为了防止这种细化,这个crate试图通过通过一个不可靠的读取传递来隐藏`Choice`的内部u8的值。有关更多信息,请参阅下面的“关于”部分。

版本在2.2之前推荐使用nightly功能来启用优化屏障;在版本2.2及以上不再需要。

注意:subtle 包包含在调试构建过程中检查不变性的 debug_assert。这些不变性检查涉及依赖秘密的分枝,并且在发布模式下编译时不存在。此包旨在以发布模式使用。

文档

文档可在此处找到。

最低支持的 Rust 版本

Rust 1.54 或更高版本。

最低支持的 Rust 版本未来可能会更改,但将以小版本号的增加来完成。

关于

这个库旨在成为 Go 的 crypto/subtle 模块的 Rust 等价物。

impl From for Choice 中的优化屏障基于 Tim Maclean 对 rust-timing-shield 的工作,该工作试图为防止 Rust 代码中的软件侧信道提供一个更全面的解决方案。

subtle 由 isis agora lovecruft 和 Henry de Valence 编写。

警告

此代码是一个低级库,旨在用于实现加密协议的特定用例。它代表了一种尽力保护某些软件侧信道的尝试。由于侧信道抵抗不是软件本身的属性,而是软件与硬件的结合,因此这种努力在本质上是有局限的。

自行承担风险使用

无运行时依赖