secretflow / yacl

YACL (Yet Another Common crypto library) is a C++ library that contains cryptography, network and io modules which other SecretFlow code depends on.
https://www.secretflow.org.cn/en/docs/yacl/main/
Apache License 2.0
80 stars 65 forks source link

PRG实现 #184

Closed PrimumMobile closed 10 months ago

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

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 commented 11 months ago

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

Jamie-Cui commented 11 months ago

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

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

Jamie-Cui commented 10 months ago

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