Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PRG实现 #184

Closed
PrimumMobile opened this issue Jan 3, 2024 · 4 comments
Closed

PRG实现 #184

PrimumMobile opened this issue Jan 3, 2024 · 4 comments

Comments

@PrimumMobile
Copy link
Contributor

PrimumMobile commented Jan 3, 2024

  1. 给定一个连续且长为2^128的PRG输出序列,PRG后续输出可以预测吗?
  2. 给定某一时刻PRG的内部状态,可以生成之前的序列吗?
@Jamie-Cui
Copy link
Collaborator

Jamie-Cui commented Jan 3, 2024

EDIT: Sorry 刚才看错了,第二个是可以的,这是我们为了 spu 上可以通过比较少量的通信使不同参与方可以获取到相同随机数的一种 trick,如果严格遵循 NIST 标准的话应该是无法达到的

++++++

  1. yacl/crypto/tools/prg.h 只是理论工具封装,不是严格意义上的 DRBG,我理解你指的 unpredictability 应该 DRBG 标准里面定义的,这里的 prg 不推荐当作可靠的随机数生成器来使用
  2. yacl/crypto/utils/drbg/ 里面封装了 openssl3 实现的 ctr, hash, hmac 三种复合标准的不同的 drbg 实现,应该满足你提到的两种性质

@PrimumMobile
Copy link
Contributor Author

第一个感觉也是可以的,PRG实现貌似是对counter进行AES加密,counter是一个uint128_t类型的,溢出之后会重新变成0,而AES ECB模式在明文相同时,密文也相同。所以理论上在2^128个连续输出之后所有的输出都可以预测,但是实际中谁会执行2^128次。

@Jamie-Cui
Copy link
Collaborator

Jamie-Cui commented Jan 3, 2024

第一个感觉也是可以的,PRG实现貌似是对counter进行AES加密,counter是一个uint128_t类型的,溢出之后会重新变成0,而AES ECB模式在明文相同时,密文也相同。所以理论上在2^128个连续输出之后所有的输出都可以预测,但是实际中谁会执行2^128次。

是的,所以在一般使用场景下不建议(直接)使用 yacl 的 prg,除非用户很清楚自己在做什么

@Jamie-Cui
Copy link
Collaborator

我先关闭这个 issue 了~ 如果有后续问题可以在这里继续留言,thx

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants