首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用块密码作为RNG的最佳方法

使用块密码作为RNG的最佳方法
EN

Cryptography用户
提问于 2016-10-02 13:07:00
回答 1查看 420关注 0票数 2

我正在使用一些块密码(尤其是AES和Threefish )作为RNG,用于并行蒙特卡罗模拟。对于每个密钥,只需对一系列计数器进行加密,就会产生一个足够好的随机流,以满足特定的目的。我不需要CSPRNG。使用这些密码是因为良好的性能(在我的实现中<1 cpb )和易于在并行环境中设置多个流。

对于每个线程,使用一个新密钥的新密码。每个线程都有不同的键。就我的模拟而言,任何两个线程的两个流都是统计独立的,这就足够了。现在,我的问题是,什么是更好的方式种子每一条线。

我正在考虑的第一个问题是简单地用一个计数器作为键播种,所以线程1的键等于1,线程2的键为2。

第二种方法是使用一个看似随机的密钥。例如,假设正在使用的密码是AES256,对于线程1,我用一个零键Threefish256加密值1(256位整数),并将一个“随机”256位数作为AES256密码的密钥。每一个线程都是如此。由于Threefish作为密码也是一种双射,所以没有风险,两个线程具有相同的键,最多为2^256个线程,这远远不够。

两个中哪一个会更好?

编辑我想把它作为评论贴到答案上,但是太长了。

我不太明白的地方是难以分辨的。事实上,在发布这个问题之前,我已经读了几次wiki的文章。请和我一起赤裸。如果我理解正确的话,基本原理是知道没有密钥的密码文本,就不能凭任何优势猜出纯文本。换句话说,给定两个几乎相同的流,或者高度相关的流,并且知道其中一个流的密钥,并不会给猜测另一个流的密钥带来任何好处。然而,我的问题或多或少是相反的。两个不同的键,无论是随机的还是相关的,总是产生两个未经校正的流吗?我的直觉是肯定的,因为有2^k键,而有(2^n)!周期2^n流的排列,其中k是键的位,n是块的位。或者另一种方式是,是否总是这样,对于两个密钥,k1≠k2,密码流显然是不相关的?我理解对于k1 = 1,k2 = 2,等等,应该是这样的,至少如果键的总数不太大的话。但我不确定对于2^n可能的键中的任何两个k1和k2是否是这样的。

EN

回答 1

Cryptography用户

发布于 2016-10-02 13:44:00

如果我们假设您的密码具有IND-CPA属性(在所选明文攻击下不可区分),那么这两种方法都同样好。

然而,只有通过第一种方法才能实现这些值的精确可再生产。

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

https://crypto.stackexchange.com/questions/40387

复制
相关文章

相似问题

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