0

我有程序通过 Diffie-Helman 算法交换会话密钥,或者几乎交换。所有动作都是2类:一类接收数据并计算私钥,设置为第二类,其中对称密钥是在接收到DH的公共部分后计算的。程序正在使用 Qt 和 QCA。私钥存储为小部件类成员:

QCA::DHPrivateKey m_localKey;

在接收到另一方密钥的公共部分(如 QByteArray)后,它会计算对称密钥:

QCA::Initializer init;
QCA::DLGroup group(prime, p);
QCA::SecureArray remoteKey(m_remoteKey);
QCA::DHPublicKey pk(group, remoteKey);
m_sessionKey = m_localKey.deriveKey(pk);

但会话密钥始终为空(m_sessionKey.isEmpty() 和 m_sessionKey.isNull() 为真)。值已设置且交换正确(按原样接收远程部分公钥),m_localKey.isNull() 和 pk.isNull() 返回正确的值 (false)。

奇怪的是,当我运行测试时,它可以工作。测试使用相同的顺序操作,只是在一个类中创建了私钥,但获取对称密钥的逻辑是相同的,用于此的类是相同的。

我的问题是为什么它在测试和单独的程序中表现不同。是否有可能从 QCA::DHPrivateKey 获取任何关于deriveKey() 中出了什么问题的错误/调试信息?

4

1 回答 1

0

遗憾的是,该代码丢失了,因此无法确定,但问题可能出在两个地方 - 传输/接收数据和过多的 QCA::Initializer 调用。

在 main 中设置 QCA::Initializer 并 [re] 编写数据交换代码后,它就可以工作了。仍然很遗憾,我不知道如何检查错误,如果发生这种情况,所以如果有人知道,请分享这些知识。

于 2012-11-06T11:39:29.023 回答