
Olá, Habr!
Na primeira parte do artigo, discutimos por que pode ser necessário gerar números aleatórios para participantes que não confiam uns nos outros, quais requisitos são apresentados para esses geradores de números aleatórios e consideramos duas abordagens para sua implementação.
, .
, , , . : , , (x, y) , .
, :
( xG, Gx ). -- .
G xG x.
p(x) k-1. , : p(x) k x ( p(x)), p(x) x.
, p(x) G, p(x)G k x, p(x)G x.
, , , .
n , , k , , k-1 , .
p(x) k-1, p(1), p(2), (n- p(n)). , G p(x)G x. p(i) “ ” i- ( i- ), p(i)G “ ” i- ( ). , p(i)G p(i).
, i- – , . , , .
, ? , . h -- . , h seed. h :
H = scalarToPoint(h)
i Hi = p(i)H, , p(i) H. Hi i- , . , , , .
k Hi = p(i)H, Hx = p(x)H x , . H0 = p(0)H, . , p(0), p(0)H – p(x)H, k p(i)H . p(i)H p(0)H.
, : , k-1 , , , k , k seed.
, . , Hi i p(i)H. i- p(i), i- Hi , - Hi Hi, :
Hi, , .
, p(x) k-1 i p(i), . G p(x)G x.
, xi, Xi.
:
i pi(x) k-1. j pi(j), Xj. i- j- pi(j). i pi(j)G j 1 k .
k , . , n . – Z k , (1).
, pi(j) pi(j)G. Z , pi(j) pi(j)G.
j p(j) pi(j) i Z. p(x)G pi(x)G i Z.
, p(x) – k-1, pi(x), – k-1. , , j p(j), p(x) x ≠ j. , , pi(x), j , p(x).
, . 1, 2 4 . 3 .
, , pi(j) pi(j)G. , i pi(j) j, j pi(j), .
, proofi(j), , e, proofi(j) pi(j)G, , e – pi(j), j. , , O(nk) , .
, , pi(j) pi(j)G , pi(j), pi(j)G, , . , pi(G) , , . , , , , , , .
, , . , , , k , , .
H_i
, , Hi, Hi = p(i)H, p(i).
, H, G, p(i)G . p(i) p(i)G G , dlog, , :
dlog(p(i)G, G) = dlog(Hi, H)
p(i). , Schnorr Protocol.
, Hi .
, , , . Hi .
: – H0, p(0)G – , Hi, ,
dlog(p(0)G, G) = dlog(H0, H)
, Schnorr Protocol , p(0), , , , . Hi , H0.
, - , , H0 , ,
H0 × G = p(0)G × H
elliptic curve pairings, . H0 – , , G, H p(0)G. H0 – , seed, , k n . , seed – , H0 – - , .
– NEAR. NEAR – , .
, Rust, .
NEAR, -IDE .
, .
!