这种生成对称密钥的技术有什么严重问题吗?

时间:2011-03-28 17:41:37

标签: security encryption cryptography protocols rsa

我正在使用Bruce Schneier和Niels Ferguson的书中借用的技术Practical Cryptography。基本上,它归结为:


鲍勃这样做:

pubk_A = Alice的公钥

entropy =来自加密质量PRNG的字节

encrypted_entropy = RSA_Encrypt pubk_A (熵)

hashed_entropy = SHA2-512 (熵)

encrypt_key BA = hashed_entropy [0:32]
encrypt_nonce BA = hashed_entropy [32:48]
hmac_key BA = hashed_entropy [48:64]

然后,Bob将encrypted_entropy发送给Alice。

然后爱丽丝这样做:

privk_A = Alice的私钥

entropy = RSA_Decrypt privk_A (encrypted_entropy)

hashed_entropy = SHA2-512 (熵)

encrypt_key BA = hashed_entropy [0:32]
encrypt_nonce BA = hashed_entropy [32:48]
hmac_key BA = hashed_entropy [48:64]


这非常适合生成可用于从Bob与Alice通信的密钥。但我需要能在两个方向上使用的按键。我正在考虑以这种方式修改算法:


鲍勃用熵做到了这一点:

pubk_B = Bob的公钥

hashed_entropy BA = SHA2-512 SHA2-256 (pubk_A)+ entropy

encrypt_key BA = hashed_entropy [0:32]
encrypt_nonce BA = hashed_entropy [32:48]
hmac_key BA = hashed_entropy [48:64]

hashed_entropy AB = SHA2-512 SHA2-256 (pubk_B)+ entropy

encrypt_key AB = hashed_entropy [0:32]
encrypt_nonce AB = hashed_entropy [32:48]
hmac_key AB = hashed_entropy [48:64]

Alice通过解密encrypted_entropy获得熵后,可以做同样的事情。


如您所见,现在有两组密钥,一组用于从Bob到Alice的通信,另一组用于从Alice到Bob的通信。

这有什么问题吗?我服用的安全隐患是什么?系统的安全性是否比我只是让一方在nonce中略微调整一样?有没有更好的方法来处理这个问题而不添加往返次数?

1 个答案:

答案 0 :(得分:1)

Alice和Bob都有一个双向通信共享密钥应该没有问题。实际上这很像SSL/TLS's shared master secret。唯一的考虑因素是您不能对任何数据包使用相同的iv+master key组合。这也是must be random

可以对此Schneier / Ferguson协议进行一项改进是使用cmac mode,这将消除对hmac_key的需求。这将减少每个数据包的握手和CPU使用中使用的带宽。

就您的本协议变体而言。您仍然需要依赖传输encrypted_entropy = RSA_Encryptpubk_A(entropy)。这是一个重要的步骤,因为您需要共享密钥。在密钥生成中使用已知值pubk_A困扰着我。请记住,应该假设攻击者知道任何公钥。使用sha256不会使这个值更随机或更难以暴力。因此,攻击者必须进行的猜测数量相当于这三项计算:sha512(sha256(pubk_A)+entropy)sha512(pubk_A+entropy)sha512(entropy)。这意味着这是浪费资源,因为您没有获得优于攻击者的优势。