gpt4 book ai didi

c - 使用 AES 作为具有真正随机种子的可移植 RNG?

转载 作者:行者123 更新时间:2023-12-04 10:07:41 25 4
gpt4 key购买 nike

我正在编写一个服务,其中需要跨多个不共享代码库的平台(C 除外)的确定性 RNG。随机数需要正好是 128 位长。给定一个预先协商好的真正随机数,是否可以使用 AES 生成随机数序列?它的工作原理是我将加密种子以获得第一个随机数,加密第一个随机数以获得第二个,等等。

基本上:

rand[0] = truly_random_number;
rand[1] = AES(truly_random_number);
rand[2] = AES(AES(truly_random_number));
rand[n] = AES(AES(AES...AES(truly_random_number...))) //n times

此处 AES 的一个参数定义为纯文本始终为零。

客户端将在通信时共享它们的序列号,因此它们中的任何一个都应该有可能确定性地重建所需的结果。

这是 AES 的正确使用吗?我可以为此使用更快的方法,例如 SHA-256 并截断结果吗?我应该找到一些 RNG 的 C 实现并使用它吗?我倾向于 AES,因为我的目标平台有 AES 加速器,所以速度应该不是什么大问题。

最佳答案

我认为这样做充其量只是一种黑客行为。

AES 是一种加密算法,而不是一种随机数生成算法。我不希望一遍又一遍地应用 AES 来产生不错的随机性。

您提到您担心性能并希望使用 AES 硬件。 AES 硬件加速的原因是 AES 相当复杂。然而,大多数 PRNG 不是;例如,xorshift 只是几个 xor 和 shift 操作。您还将依赖具有 AES 加速器的目标硬件。

从某个地方获取一个像样的 C PRNG 库(它们不难找到),使用您共享的随机数为其播种,然后将其保留。

关于c - 使用 AES 作为具有真正随机种子的可移植 RNG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36950053/

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