Diffie-Helmanアルゴリズムを介してセッションキーを交換するプログラム、またはほとんど交換するプログラムがあります。すべてのアクションは 2 つのクラスです。1 つはデータを受信して秘密鍵を計算し、それを 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() は true)。値を設定して交換正解(リモート部公開鍵をそのまま受け取る)、m_localKey.isNull()、pk.isNull()は正しい値(false)を返す。
奇妙な部分は、テストを実行すると機能することです。テストでは、秘密鍵が 1 つのクラスで作成されるだけで同じ順序の操作を使用しますが、対称鍵を取得するロジックは同じであり、それに使用されるクラスも同じです。
私の質問は、テスト プログラムと個別のプログラムで異なる動作をする理由です。また、QCA::DHPrivateKey から、deliverKey() で何が問題になったかについてのエラー/デバッグ情報を取得することは可能ですか?