2011-07-12 32 views
2

現在、iamは楕円曲線を使用するプロジェクトに取り組んでいます。ポイントが楕円曲線上にあるかどうかを決定するソリューションを私に提供してください。また、楕円曲線上の点を取得する方法楕円曲線点

+1

数学の質問それ以上ではないですか? "ポイントが曲線上にあるかどうかを確認するにはどうすればよいですか?" – Thomas

+0

タグで判断すると、私はOPがhttp://en.wikipedia.org/wiki/Elliptic_curve_cryptographyに関して質問していると思います –

答えて

12

点が楕円曲線上にあるかどうかを確認するのは簡単です。あなたのポイント(x,y)があなたの楕円曲線を定義する方程式:y^2 = x^3 + ax + bを満たしているかどうかをチェックしてください(正しいフィールドで計算を実行することを忘れないでください)。

はBouncyCastleを使用して、あなたはこのようにそれを行うことができます。

ECCurve curve = //... 
ECFieldElement x = //... 
ECFieldElement y = //... 

ECFieldElement a = curve.getA(); 
ECFieldElement b = curve.getB(); 
ECFieldElement lhs = y.multiply(y); 
ECFieldElement rhs = x.multiply(x).multiply(x).add(a.multiply(x)).add(b); 

boolean pointIsOnCurve = lhs.equals(rhs); 

あなたが暗号で質問をタグ付けしているので、私はあなたが有限体上の楕円曲線について尋ねていると仮定します。このカーブには発電機gと注文があります。 ランダムな点を得るには、xの0から(order-1)までのランダムな整数を生成し、x * gを選択します。

あなたはこのようにはBouncyCastleを使用してそれを行うことができます。

X9ECParameters x9 = NISTNamedCurves.getByName("P-224"); // or whatever curve you want to use 
ECPoint g = x9.getG(); 
BigInteger n = x9.getN(); 
int nBitLength = n.bitLength(); 
BigInteger x; 
do 
{ 
    x = new BigInteger(nBitLength, random); 
} 
while (x.equals(ZERO) || (x.compareTo(n) >= 0)); 
ECPoint randomPoint = g.multiply(x); 
+0

弾丸の城を使って楕円曲線上のポイントを得るためのサンプルコードを私に提供してください.... .. –

+0

@ user605343:done –

+5

@Rasmus、あなたはスタックオーバーフローがあるときに教育が必要です。 –

関連する問題