java - 使用 Bouncy CaSTLe 获取椭圆曲线的 X 坐标

标签 java cryptography bouncycastle

我尝试计算椭圆曲线 F2m (m = 163) 的 x 坐标的 Tr(x) 运算。为此,我使用了相应类型的“Bouncy CaSTLe”。我的椭圆曲线的轨迹等于 0 或 1,我的代码如下:

public int CalculateTrace_Test(byte[] array)
{
    int m = 163;            
    BigInteger two = new BigInteger("2", 10);
    BigInteger x = new BigInteger(array);
    BigInteger xi = x;
    BigInteger temp = x;
    for (int i = 1; i < m; i++)
    {
        var next = xi.ModPow(two.Pow(i), fx);
        temp = temp.Xor(next);
    }

    return temp.IntValue;
}

这里的 fx 是由不可约多项式 f(x) = x^163+x^7+x^6+x^3 + 1 形成的整数。

所以我的问题是它不起作用,结果,我什么都有,但没有 1 或 0。谁能告诉我跟踪的实现有什么问题吗?

最佳答案

看起来您没有正确地在 GF(2m) 中进行域运算。支持正确字段运算的类在包中 org.bouncycastle.math.ec .看看ECFieldElement.F2mECCurve.F2m .此外,对于对应于 SECT163 缩减多项式的特定情况,类 SecT163FieldElement可能特别有用。

这里有一些代码直接从类org.bouncycastle.math.ec.tools.TraceOptimizer复制而来.代码假定有限域具有特征 2。

private static int calculateTrace(ECFieldElement fe) {
    int m = fe.getFieldSize();
    ECFieldElement tr = fe;
    for (int i = 1; i < m; ++i) {
        fe = fe.square();
        tr = tr.add(fe);
    }
    BigInteger b = tr.toBigInteger();
    if (b.bitLength() > 1) {
        throw new IllegalStateException();
    }
    return b.intValue();

关于java - 使用 Bouncy CaSTLe 获取椭圆曲线的 X 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53501466/

相关文章:

java - 带有 block 的独特面板组合 -- Java 代码

java - Android RSA 和 node.js RSA 加密/解密

java - 密码加密

c# - RSA SHA256 签名生成和验证

java - 获取X509证书的指纹

java - 如何在两个线程中打印句子?

Java EE 依赖注入(inject)什么时候使用?

cryptography - EC公钥是否有标准化的固定长度编码?

java - 如何使用java在SSL密码套件中使用ChaCha密码

java - Build.Gradle Error (22,0) 找不到方法 chandroid()