0

我正在尝试为一个项目创建一个简单的 DS,其中公钥是 q(随机 224 位 int)、p(随机 2048 位 int)和 ag,这样: pow(g,q,p) == 1. 使用函数生成签名后:

def SignGen(message, q, p, g, alpha):
    h = int(hashlib.sha3_256(message).hexdigest(),16) % q
    k = random.randint(1,q-2) % (p-1)
    r = pow(g,k,p) % q
    s = ((alpha*r) - (k*h)) % q
    return s,r

并验证

def SignVer(message, s, r, q, p, g, beta):#beta is pow(g,alpha,p) where secret alpha = random.randrange(1,q-1)
    h = int(hashlib.sha3_256(message).hexdigest(),16) % q
    v,y = egcd(h,q) #egcd to find h*v = 1 % q
    z1 = ((s*v) % q)
    z2 = ((r*v) % q)
    u = (pow(g, -z1, p) * pow(beta, z2, p)) % q

    if u == r: #U IS NEVER EQUAL TO R
        return 0
    else :
        return -1

总是返回 -1,在打印各种结果时,我看到 u 和 r 值永远不会相同,因此无法创建正确的符号元组。

4

0 回答 0