假设我从CSPRNG获取256位并假设它是完全256位的熵。叫这个兰特。
然后让我说我把ASCII文本“密码”的sha256。叫这个哈希。
现在我们XOR rand和hash。称之为混合。
混合的熵是否比兰特的熵小?
如果有,是否有计算其熵的公式?
下面的例子:作为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()
答案 0 :(得分:2)
您正在描述一次性垫。如果密钥流:CSPRNG的输出是完全随机的,那么密文也将无法与随机区分开来。
当然,CSPRNG的输出不完全随机。但是,如果CSPRNG具有足够的熵,那么您将获得与流密码相同的安全性,它模拟一次性密码。
因此,只要CSPRNG没有进入先前遇到的状态,输出(mixed
)将与CSPRNG一样随机。基本上只有在熵源失败时才会发生这种情况。