首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rng从操作系统到密码rng的随机性

Rng从操作系统到密码rng的随机性
EN

Stack Overflow用户
提问于 2022-02-09 11:02:37
回答 1查看 334关注 0票数 0

这是一个与密码栈交换中可能发布的内容有很多重叠的问题,但它主要是特定于锈蚀的,因此我在这里发布了它。

因此,我有一个应用程序,需要使用DH键盘。

重要的是,这个项目只是学术性的,这段代码不会在任何prod环境中使用。

我在一个已经使用了一个名为戴立克的机箱的上下文中工作,因此继续使用这个资源来创建键盘是有意义的。

文档化给出了密钥创建的示例:

代码语言:javascript
复制
use rand_core::OsRng;
use x25519_dalek::{EphemeralSecret, PublicKey};

let alice_secret = EphemeralSecret::new(OsRng);
let alice_public = PublicKey::from(&alice_secret);

这是很好和直接向前,我们只是传递一个rng到短暂的秘密,以获得一个秘密密钥,并形成那里得到的PK。

但这就是我开始怀疑的地方。Osrng使用操作系统产生一些随机性。但是核心的文档没有提到它是一个密码安全的CSPRG。

另一方面,我以前使用rand包(它是Stdrng rng )为IV创建随机的数字列表。

代码语言:javascript
复制
use rand::{rngs::StdRng, Rng, SeedableRng,};
use rand_core::{RngCore, OsRng, CryptoRng,};
fn main() {
  let mut rng : StdRng = StdRng::from_entropy();
  let seed = rng.gen::<[u8;32]>();
}

这让我想知道,使用像OSrng这样的裸骨是否可以安全地用于创建键控材料。或者,如果我更愿意为密码中使用的rng而射击。

如果是这样,我应该找到另一个随机性的来源,创造关键的材料,然后我有一个问题,如何做到这一点,在锈病(我是相当新的锈)。

我有点不清楚我应该给出EphemeralSecret上的构造函数是什么类型的EphemeralSecret。它的签名如下:

代码语言:javascript
复制
pub fn new<T: RngCore + CryptoRng>(mut csprng: T) -> Self {

然后,我试图从兰特箱中传入Stdrng

代码语言:javascript
复制
use rand::{rngs::StdRng, Rng, SeedableRng,};
use rand_core::{RngCore, OsRng, CryptoRng,};
fn main() {


  let secretk = EphemeralSecret::new(StdRng);
}

这在消息"expected value, found struct StdRng"中失败了,这对我来说很奇怪,因为OsRng也是一个结构。

我还尝试初始化一个rng并传递它:

代码语言:javascript
复制
  let mut rng : StdRng = StdRng::from_entropy();
  let seed = rng.gen::<[u8;32]>();

  let secretk = EphemeralSecret::new(rng);

因此,第二个问题是,有人知道我是否有办法用x25519_dalek创建关键材料,使用标准rand箱中具有crpytographically安全的随机性源吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-09 12:56:58

OsRng应该是加密安全的。它实现了CryptoRng,这是一个只为加密安全PRNG实现的特性,它由getrandom机箱支持,它总是使用系统的(或者,在WebAssembly情况下,使用环境的) CSPRNG。

对于CSPRNG来说,这总是一个明智的选择,但正如注释中提到的,它并不总是非常快,因为它涉及每个操作的系统调用,而且系统的CSPRNG也并不总是非常快。在这种情况下,您可以使用ThreadRng,它将更快,而且也是加密安全的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71048413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档