蒙哥马利阶梯算法运行速度比预期的慢

2024-09-29 03:35:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python实现Montgomery梯形图,当我尝试运行它时,它的速度变得非常慢。我做错了什么

def addPoints(xp, zp, xq, zq, xpq, zpq):
    u = (xp + zp) * (xq - zq)
    v = (xp - zp) * (xq + zq)
    w = u + v
    t = u - v
    w = w * w
    t = t * t
    X = w * zpq
    Z = t * xpq
    return X, Z

def duplicatePoint(xp, zp, b):
    u = xp + zp
    v = xp - zp
    u = u * u
    v = v * v
    uv = u - v
    t = b * uv + v
    x2p = u * v
    z2p = uv * t
    return x2p, z2p

def montgomeryLadder(k, px, pz, a24):
    qx, qz = px, pz
    rx, rz = duplicatePoint(px, pz, a24)
    for i in bin(k)[3:]:
        print(i)
        if i == 1:
            qx, qz = addPoints(rx, rz, qx, qz, px, pz)
            rx, rz = duplicatePoint(rx, rz, a24)
        else:
            rx, rz = addPoints(qx, qz, rx, rz, px, pz)
            qx, qz = duplicatePoint(qx, qz, a24)

    return qx, qz

算法如下所示:https://www.iacr.org/archive/ches2006/10/10.pdf

我知道它不应该运行得这么慢,因为它应该是椭圆曲线上点的标量乘法的最快算法之一。我使用的测试用例是: montgomeryLadder(80219347, 3, 2, 5)我100%确信它不应该像这样运行


Tags: returndefrxzpxpqxzqpx