我有程序通过Diffie-Helman算法交换会话密钥,或几乎交换。所有操作都是2个类:一个接收数据并计算私钥,将其设置为第二类,其中在接收DH的公共部分后计算symetric密钥。 程序正在使用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()为true)。 设置值并且交换正确(远程部分公钥按原样接收), m_localKey.isNull()和pk.isNull()返回正确的值(false)。
奇怪的是,当我运行测试时,它的工作原理。测试使用相同的顺序操作只需在一个类中创建私钥,但获取对称密钥的逻辑是相同的,并且用于此的类是相同的。
我的问题是为什么它在测试和单独的程序中表现不同。是否可以从QCA :: DHPrivateKey获取有关deriveKey()出错的任何错误/调试信息?
答案 0 :(得分:0)
可悲的是,代码丢失了,所以无法确定,但问题可能是在2个地方 - 传输/接收数据和太多的QCA :: Initializer调用。
在主要和[重新]写入数据交换代码中设置QCA :: Initializer后,它可以工作。 我仍然很难过,如果发生这种情况,我不知道如何检查错误,所以如果有人知道请分享这些知识。