1

私は CryptoPP をいじっていますが、この特定の質問に対する答えが見つかりません。これがサンプルソースコードです(部分的)

    AutoSeededRandomPool prng;

//Generate a private key
ECDSA<ECP, CryptoPP::SHA256>::PrivateKey privateKey;
privateKey.Initialize(prng, CryptoPP::ASN1::secp256r1());

// Generate publicKey
ECDSA<ECP, CryptoPP::SHA256>::PublicKey publicKey;
privateKey.MakePublicKey(publicKey);

// Extract Component values
Integer p   = privateKey.GetGroupParameters().GetCurve().GetField().GetModulus();
Integer a   = privateKey.GetGroupParameters().GetCurve().GetA();
Integer b   = privateKey.GetGroupParameters().GetCurve().GetB();
Integer Gx  = privateKey.GetGroupParameters().GetSubgroupGenerator().x;
Integer Gy  = privateKey.GetGroupParameters().GetSubgroupGenerator().y;
Integer n   = privateKey.GetGroupParameters().GetSubgroupOrder();
Integer h   = privateKey.GetGroupParameters().GetCofactor();
Integer Qx  = publicKey.GetPublicElement().x;
Integer Qy  = publicKey.GetPublicElement().y;
Integer x   = privateKey.GetPrivateExponent();

// Construct Point elelemt;
ECP curve(p,a,b);
ECP::Point G(Gx,Gy);
ECP::Point Q(Qx,Qy);

//Build publicKey using elements (no point compression)
ECDSA<ECP, CryptoPP::SHA256>::PublicKey GeneratedPublicKey;
GeneratedPublicKey.Initialize(curve,G,n,Q);
assert(GeneratedPublicKey.Validate(prng, 3));

//Build publicKey using elements (with point compression)?

このようにして、コンポーネント値を使用して publicKey を生成できます。ただし、ポイント圧縮で動作させることができません。つまり、Qy 値がありません。それを行う方法はありますか? Initialize メソッドには 2 つのオーバーロードがありますが、いずれもポイント圧縮の状況には対応していません。

私の質問は、「PublicKey.Initialize(curve,G,n,Q)」の Crypto++ に固有のものです。現在のプロジェクトでは publicKey 全体を転送できないため、ドメイン パラメータをインデックス値として指定する必要があり、Qx 値のみを転送できます。したがって、「PublicKey.Initialize(curve,G,n,Q)」のようなものを使用して publicKey を初期化する必要がありますが、ポイント圧縮に関するそのような初期化 API が見つかりません。

というわけで、これは「ポイント圧縮のやり方」ではなく、「Qy 値を持たずに公開鍵を初期化する方法はありますか?」ということです。

4

2 に答える 2

1

x値のみを使用してECDSA publicKeyを構築する方法(ポイント圧縮)?

xプライベート指数です。公開鍵は曲線上の点です。また、プライベート指数は使用しません。

公開鍵を取得するには: 秘密指数を取得し、基点をそれまで上げます。つまり、Q = G^x.

秘密鍵または復号化子に秘密指数を設定する場合は、ドメイン パラメータ (DL_GroupParameters_EC< ECP >またはDL_GroupParameters_EC< EC2M >) を設定してから を呼び出しますSetPrivateExponent(x);


送信者から圧縮された y 値を回復するにはどうすればよいですか?で以前の質問を確認しましたか? ? コミュニティは時間を割いて回答とサンプル コードを提供しましたが、あなたは承認もフォローアップもしませんでした。

私はowlsteadがここでそれを最もよく言ったと思います:

あなたが回答を受け入れたくない、またはフォローアップさえしたくないのに、なぜ私たちはあなたに回答したいと思いますか? あなたの質問は大丈夫ですが、コミュニティに対するあなたの扱い方はひどいものです。

于 2014-01-15T06:21:34.400 に答える