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 |
|
#22 in 密码学
6,968,284 每月下载量
用于 15,311 个crate (392直接)
39KB
455 行
subtle
用于常时密码实现的纯Rust特性和实用工具。
它包含一个 Choice
类型,以及一组使用 Choice
而不是 bool
的特性和集合,旨在常时执行。 Choice
类型是一个围绕 u8
的包装,它包含一个 0
或 1
。
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编写。
警告
此代码是一个底层库,旨在用于实现加密协议的特定用例。它代表了对某些软件旁路保护的最佳努力尝试。因为旁路抵抗不仅仅是软件的属性,而且是软件与硬件的结合,因此此类努力从根本上是有局限性的。
自行承担风险使用