具有低熵散列的XORed CSPRNG字节的熵是多少?

时间:2018-04-27 03:46:24

标签: cryptography entropy

假设我从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()

1 个答案:

答案 0 :(得分:2)

您正在描述一次性垫。如果密钥流:CSPRNG的输出是完全随机的,那么密文也将无法与随机区分开来。

当然,CSPRNG的输出完全随机。但是,如果CSPRNG具有足够的熵,那么您将获得与流密码相同的安全性,它模拟一次性密码。

因此,只要CSPRNG没有进入先前遇到的状态,输出(mixed)将与CSPRNG一样随机。基本上只有在熵源失败时才会发生这种情况。