具有低熵散列的异或 CSPRNG 字节的熵是多少?
What is the entropy of XORed CSPRNG bytes with low entropy hash?
假设我从 CSPRNG 中取出 256 位,并假设它是完美的 256 位熵。叫这个兰特。
然后假设我采用ASCII文本“密码”的sha256。调用此哈希。
现在我们对 rand 和 hash 进行 XOR。称之为混合。
mixed的熵比rand小吗?
如果有,有没有计算它的熵的公式?
以下示例:作为 rand 和 weak_hash
函数的混合熵是多少
#!/usr/bin/python3
import hashlib, os
def main():
rand = int(os.urandom(32).hex(),16)
weak_hash = int(hashlib.sha256(b'password').digest().hex(),16)
mixed = ("%064x" % (rand ^ weak_hash))
print(mixed)
main()
您描述的是一次一密本。如果密钥流:CSPRNG 的输出是完全随机的,那么密文也将与随机文本无法区分。
CSPRNG 的输出当然不是完全随机的。但是,如果 CSPRNG 的种子足够大,那么您将拥有与模拟一次一密的流密码相同的安全性。
所以输出 (mixed
) 将与 CSPRNG 一样随机,只要 CSPRNG 没有进入之前遇到的状态。基本上只有在熵源失败时才会发生这种情况。
假设我从 CSPRNG 中取出 256 位,并假设它是完美的 256 位熵。叫这个兰特。
然后假设我采用ASCII文本“密码”的sha256。调用此哈希。
现在我们对 rand 和 hash 进行 XOR。称之为混合。
mixed的熵比rand小吗?
如果有,有没有计算它的熵的公式?
以下示例:作为 rand 和 weak_hash
函数的混合熵是多少#!/usr/bin/python3
import hashlib, os
def main():
rand = int(os.urandom(32).hex(),16)
weak_hash = int(hashlib.sha256(b'password').digest().hex(),16)
mixed = ("%064x" % (rand ^ weak_hash))
print(mixed)
main()
您描述的是一次一密本。如果密钥流:CSPRNG 的输出是完全随机的,那么密文也将与随机文本无法区分。
CSPRNG 的输出当然不是完全随机的。但是,如果 CSPRNG 的种子足够大,那么您将拥有与模拟一次一密的流密码相同的安全性。
所以输出 (mixed
) 将与 CSPRNG 一样随机,只要 CSPRNG 没有进入之前遇到的状态。基本上只有在熵源失败时才会发生这种情况。