#constant-time #utilities #hold #crypto

无std subtle

用于常时密码实现的纯Rust特性和实用工具

13个稳定版本

2.6.1 2024年6月24日
2.5.0 2023年2月28日
2.4.1 2021年7月13日
2.4.0 2020年12月17日
0.2.0 2017年7月31日

#22 in 密码学

Download history 1269006/week @ 2024-05-04 1368210/week @ 2024-05-11 1359363/week @ 2024-05-18 1329198/week @ 2024-05-25 1505884/week @ 2024-06-01 1468307/week @ 2024-06-08 1509416/week @ 2024-06-15 1641013/week @ 2024-06-22 1530351/week @ 2024-06-29 1631612/week @ 2024-07-06 1596576/week @ 2024-07-13 1710893/week @ 2024-07-20 1715380/week @ 2024-07-27 1699078/week @ 2024-08-03 1793051/week @ 2024-08-10 1468667/week @ 2024-08-17

6,968,284 每月下载量
用于 15,311 个crate (392直接)

BSD-3-Clause

39KB
455

subtle

用于常时密码实现的纯Rust特性和实用工具。

它包含一个 Choice 类型,以及一组使用 Choice 而不是 bool 的特性和集合,旨在常时执行。 Choice 类型是一个围绕 u8 的包装,它包含一个 01

subtle = "2.6"

由于侧信道最终是部署的密码系统(包括其运行的硬件)的特性,而不仅仅是软件的特性,因此这个crate代表了一个“尽力而为”的尝试。

这些特性使用位操作实现,如果a)位操作是常时的,并且b)位操作不被识别为条件赋值并优化回分支,则应常时执行。

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

Rust版本从1.51或更高版本支持const泛型。您可以通过启用 const-generics 功能使 subtle 特性为数组 [T; N] 实现。

低于 2.2 版本的推荐使用 nightly 功能以启用优化屏障;在 2.2 及以上版本中不需要此功能。

注意: subtle 包包含用于在调试构建期间检查不变量的 debug_assert。这些不变量检查涉及秘密相关的分支,并在发布模式下编译时不存在。此包旨在在发布模式下使用。

文档

文档在此处可用:链接

最低支持的 Rust 版本

Rust 1.41 或更高版本。

最低支持的 Rust 版本可能在将来发生变化,但将通过小版本号升级来实现。

关于

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

旧版本的优化屏障 impl From<u8> for Choice 基于Tim Maclean在 rust-timing-shield 上的工作,该工作试图为 Rust 代码中防止软件旁路提供更全面的方法。从版本 2.2 开始,它基于Diane Hosfelt和Amber Sprenkels在 "Secret Types in Rust" 上的工作。

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

警告

此代码是一个底层库,旨在用于实现加密协议的特定用例。它代表了对某些软件旁路保护的最佳努力尝试。因为旁路抵抗不仅仅是软件的属性,而且是软件与硬件的结合,因此此类努力从根本上是有局限性的。

自行承担风险使用

无运行时依赖