0

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() で何が問題になったかについてのエラー/デバッグ情報を取得することは可能ですか?

4

1 に答える 1

0

悲しいことに、そのコードは失われたため、確実に確認することはできませんが、問題はおそらく 2 つの場所にありました - データの転送/受信と、QCA::Initializer の呼び出しが多すぎることです。

メインにQCA::Initializerを設定し、データ交換コードを[再]書き込んだ後、動作します。エラーが発生した場合のチェック方法がわからないのはまだ悲しいので、知っている人はこれらの知識を共有してください。

于 2012-11-06T11:39:29.023 に答える