非対称暗号化を必要とするプログラムをコーディングしています。私のアプローチは Python の M2Crypto を使用しており、アルゴリズムとして ECDH を選択しました。ただし、受信者の公開鍵のみを必要とする RSA のように手順を単純にしたいとも考えています。ECDH ではありません。その公開鍵は、最初に送信者自身の公開鍵と組み合わせる必要があるようです。したがって、共有秘密が計算され、すべてが完了します。
効率に関係なく、誰かが私にメッセージを送信したい場合、私の EC 公開鍵が公開され、送信者は次のことを行う必要があるため、そのようなソリューションが必要です。
- 自分の EC 秘密鍵を取得する
- この秘密鍵を私の公開鍵と組み合わせて、共有秘密鍵を計算します
- シークレットと AES またはその他の対称暗号を使用してメッセージを暗号化する
- 暗号文と派生した公開鍵 (この秘密鍵から) を送ってください。
しかし、ここに問題があります。どちらかの側が同じ曲線パラメーターに基づいて鍵を生成した場合にのみ、鍵交換が成功することがわかりました。しかし、公開鍵がどの曲線に基づいているかについて追加情報を提供しない限り、これを理解する他の方法はありますか? 公開鍵には以下がロードされます。
M2Crypto.EC.load_pub_key([filename])
EC.EC_pub インスタンスが返されます。この例では、曲線に関する情報がどこかに隠されているはずですが、どこにあるのかわかりません。
私が見逃したもの、または私の解決策が間違っていた、またはもっと簡単にできるかどうか、またはその他の提案を指摘してください。ありがとう。