私は次のことをしようとしています:
ECC を使用して標準の Rijndael キーを生成するソフトウェアがあります ( AES ではありません...違いがあります: AES は 128、192、および 256 ビットのキー サイズのみをサポートしますが、Rijndael はもともと 160 および 224 ビットをサポートしていました。これは、ソフトウェアを見たときに最初に私を悩ませました.)私は、それが次のことを行うと判断することができました:
いくつかのモードがありますが、最も弱いモードでは、ECC secp160r1 を使用して 160 ビット キーを生成します (したがって、Rijndael で AES ではありません)。「公開」値を取得し、自分のソフトウェアで秘密鍵を使用することができました。また、openssl 呼び出しを使用して、同じ鍵を生成し、復号化する必要があるデータを復号化することができました。
最高の (最強/最も難しい) モードでは、ほぼ同じことを行いますが、ECC sect571k1 を使用してキーを生成し、Rijndael 256 ビット キー用に生成した 72 バイトのうち最初の 32 バイトのみを使用します。 (この場合、AES256 と言えます)。
ただし、別のモードでは、同じことを行うように見えますが、以前と同じことをしようとすると、同じ共有秘密を取得できません。
アリスとボブの標準的な定義を使用する場合:
da = Alice's secret key
db = Bob's secret key
Qa = Alice's public key
Qb = Bob's public key
S = Shared secret
私は持っている:
daQb --> The public value sent from Alice.
db --> My "secret" key.
Qb --> My "public" key.
Sc --> The "correct" shared secret as computed by above program
Qb と daQb が sect283k1 曲線上にあることを確認しました。私がsect283r1を使用すると、物事は失敗し、私のポイントはOpenssl EC_POINT、EC_KEY、EC_GROUP関数を使用してその曲線に登録されません(私は今コードを投稿しますが、私の前にそれを持っていません.ここに投稿してみます)。私が言ったように、他の 2 つのモードを再現することができましたが、適切に動作しているようです。ただし、このモードでは、キーを計算すると、Sw --> MY プログラムによって計算された「間違った」共有シークレットが得られます。
だから、私の質問はこれです: 間違ったデータベースを使用しているかどうかを潜在的に判断するのに十分な情報がありますか? 他の2つのケースでは、データベースを取得でき、正常に動作するため、そうではないと思います。残念ながら、私はそのプログラムのソース コードを持っていません。元のツールで生成されたデータを操作できるツールを作成しようとしています。
Qb を逆にしてデータを daQb で乗算しようと考えましたが、実際に行うことは da を取得することだけであり、興味深いことですが、db を決定する必要がある共有秘密鍵でそれを使用できる方法にはつながりません。 、私の仕事をチェックします。
私が考えたもう1つのことは、おそらくsect283k1に似た曲線が使用されたが、sect283k1ではなかったということです(つまり、おそらくいくつかの異なるG?その曲線で別のジェネレーターを使用できるかどうかはわかりませんが、私は考えませんでした曲線ごとにジェネレーターは 1 つしかありませんでしたが、それは間違っている可能性があり、別のジェネレーターでは異なる結果が生成される可能性があります (つまり、正しい結果)。
いずれにせよ、おそらく他のプログラムが使用しているのと同じデータを使用して、同じ間違ったキーデータを生成するためだけにいくつかのことを試しました。EC の数学の知識がはるかに優れている人がいるかもしれません (ほとんどの場合、私自身よりも優れていますが、私が欠けているものを見つけるのを手伝ってくれる人を望んでいます)。他のツールが取得するもの。
残念ながら、Rijndael キーが設定される直前で停止して、設定される内容を確認できます。キーのその部分を見つけて、ECDH_compute_key 操作から得られた元のデータを確認できます (これは基本的に、daQb と db の間の EC_POINT_mul のように見えます (Diffie-Hellman キー交換について十分に知っていれば...これを確認しました)とにかくいくつかのopenssl呼び出しを使用して)、他にもいくつか知っていますが、操作に何が起こったのかを確認するのに役立つBignum / ECコードを見つけることができません。 .
助けてくれる人に感謝します。