2个稳定版本

1.1.0 2023年3月27日
1.0.0 2023年3月25日

596加密学 中排名

Download history 1021/week @ 2024-04-01 299/week @ 2024-04-08 430/week @ 2024-04-15 236/week @ 2024-04-22 51/week @ 2024-04-29 641/week @ 2024-05-06 359/week @ 2024-05-13 501/week @ 2024-05-20 167/week @ 2024-05-27 343/week @ 2024-06-03 586/week @ 2024-06-10 1232/week @ 2024-06-17 22/week @ 2024-06-24 15/week @ 2024-07-01 75/week @ 2024-07-08 86/week @ 2024-07-15

每月202次下载
用于 mc-oblivious-map

Apache-2.0

19KB
138

mc-rand

Project ChatLicenseArchitecture: anyCrates.ioDocs StatusDependency StatusCodeCov StatusGitHub Workflow StatusContributor Covenant

提供加密随机数生成器(McRng)的平台抽象层。

示例用法

示例用法

use mc_rand::{McRng, RngCore}

pub fn my_func() -> (u64, u64) {
    let mut rng = McRng::default();
    let k0 = rng.next_u64();
    let k1 = rng.next_u64();
    (k0, k1)
}

它做什么

随着Cargo修复了更多错误和添加了更多功能,该项目已经发生了很大变化。

现在,它的作用是

  • 在具有CPU特性 rdrand 的目标上,McRng 解析为 RdRandRng,该解析器使用CPU内建函数直接调用 RDRAND。此实现已由NCC小组审核。
  • 当此功能不存在,但目标架构为 wasm_32 时,McRng 解析为来自rand crate的 OsRng。(这是因为 ThreadRng 在wasm中不可用。)
  • 当这两种情况都不适用时,McRng 解析为 ThreadRng。(ThreadRng 是在主要Rust平台上推荐使用的通用加密随机数生成器。)

在具有 rdrand 的目标上,此crate不包含标准库。在未具有 rdrand 的目标上,将启用 rand/std 功能。

动机

McRng最初创建的原因是MobileCoin在严格的no_std环境中构建SGX enclave软件。根据SGX安全模型,enclaves通常应通过RDRAND从CPU获取随机数,而不是从操作系统获取,因为操作系统在SGX安全模型中是不受信任的。

这产生了以下需求

  • 在enclave实现中需要存在一个解析为RDRAND的RNG。
  • 理想情况下,如果你在x86上工作,同一RNG也应在enclave-impl crate的单元测试构建中工作,无需进一步配置。
  • 一些库旨在同时由服务器中的enclaves和客户端(可能不是x86)使用。例如,“common” crate,它也提供了一个hashmap用于enclaves内和enclaves外,并需要随机数以避免HASH-DOS。
  • 四年前,在resolver = 2创新之前,Cargo会统一构建依赖和目标依赖中的功能,所以如果你的build.rs中拉入了rand,那么你会得到标准库,这使得像rand这样的常用库对我们的enclaves构建变得有毒。

我们希望有一个RNG类型,任何这些用户都可以使用,它将在每个平台上安全并正确地执行,而无需开发者的明确配置或其他劳作。

由于现有的RNG库没有完全提供这一点,我们创建了mc-rand

未来方向

McRng填补了一个没有被OsRngThreadRng或其他流行crate完全填补的空白,并且已经经过多年的生产审计和实战测试。

请放心使用mc-rand,因为它通常都会做正确的事情。

  • 在x86的enclaves实现上工作的时候,这很好,因为你的cargo测试和基准测试将使用与你代码在生产中使用的相同的实现。
  • 在其他目标上,它仍然将使用该平台最普遍推荐的加密RNG。

随着其他感兴趣的目标出现,我们很高兴提高对这些目标的支持。

依赖项

~240–425KB