gpt4 book ai didi

java - 使用 AES 实现伪随机生成器

转载 作者:行者123 更新时间:2023-12-02 03:50:56 31 4
gpt4 key购买 nike

“伪随机生成器 (PRG) 是一种确定性算法,它采用一个短的均匀分布字符串(称为种子),并输出一个较长的字符串,该字符串无法与该长度的均匀分布字符串有效区分。” [1 ]

据我了解,我们可以使用流密码创建伪随机生成器。例如,SCAPI ,一种安全多方计算 API,在 following example 中使用 RC4创建固定字节数的输出(检查out.length):

//Create secret key and out byte array
...

//Create prg using the PrgFactory
PseudorandomGenerator prg = PrgFactory.getInstance().getObject("RC4");
SecretKey secretKey = prg.generateKey(256); //256 is the key size in bits.

//set the key
Prg.setKey(secretKey);

//get PRG bytes. The caller is responsible for allocating the out array.
//The result will be put in the out array.
prg.getPRGBytes(out.length, out);
事实上,伪随机生成器在某些加密协议(protocol)(即 this protocol )中特别有用,在这些协议(protocol)中我们需要快速创建字节的伪随机输出,通常大小非常大。

我实际上已经实现了this协议(protocol)使用上面所示的 PRG 部分的 SCAPI 片段。然而,作者并没有使用 RC4 作为 PRG,而是在 CTR 模式下使用 AES128。这是有道理的,因为已知 RC4 已损坏,并且 AES can be easily used as stream cipher

我想以与上面代码片段相同的方式在 CTR 中使用 AES 实现伪随机生成器,但我无法这样做。我的问题是在CTR中没有使用AES,网上有无数的例子。我的问题是 out.length 部分。 我不知道如何使用 AES 实现 PRG ( or any other cipher for that matter ) 以一种可以选择输出字节的确切数量的方式,如上面的示例。我怎样才能做到这一点?

在有人提到哈希函数可以完成相同的工作之前:确实,这基本上是一个哈希函数,但这个特定协议(protocol)的问题是我们需要非常大的输出(即 32MB),其中哈希函数通常具有固定输出(192、256、512 位)。

最后,这个问题与this不重复。一是因为后者是关于在 Python 中实现任何类型的 PRG,而后者是关于在 Java 中实现基于 AES_CTR 的 PRG。

一些有用的链接:

最佳答案

在 CTR 模式下,您只需在最后一个计数器上切断 block 加密中不需要的字节(从右侧)。您还可以通过对正确数量 (out.length) 的零值字节执行 AES-CTR 来创建 key 流。

关于java - 使用 AES 实现伪随机生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35874780/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com