我正在实施 Schnorr 识别协议。我有一个来自“应用密码学手册”示例 10.37 的示例。没有一件事,一切都有效。
(p = 48731, q = 433, B = 11444) - public params.
v = 7355 - public Key.
a = 357 - privateKey.
t = 8 - identification certanity,
协议操作
A choses r = 274 and sends to B x = B^r mod p = 37123.
B sends to A e ( 1 <=e <= 2^t), e = 129.
A sends to B y = (ae + r) mod q. - this doesn't work. should be 255.
B comutes z = ((B^y)(V^e)) mod p. if z == x then identity is ok.
所以,我对 (ae + r) mod q 有问题,应该是 255,我有 429。代码:
BigInteger ae = a.multiply(e);
ae = ae.mod(q);
y = ae.add(r);
y = y.mod(q);
结果 y = 429 如果我计算
BigInteger ae = a.multiply(e);
y = ae.add(r);
y = y.mod(q);
结果是一样的。
请帮我。谢谢。