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);
結果は同じです。
私を助けてください。ありがとう。