É possível gerar números aleatórios se não confiarmos uns nos outros? Parte 2

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) , .

, :

  1. ( xG, Gx ). -- .

  2. 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, :

Diferentes valores de H_1 enviados pelo primeiro participante levam a diferentes H_0 resultantes
H_1, , H_0

Hi, , .

, p(x) k-1 i p(i), . G p(x)G x.

, xi, Xi.

:

  1. i pi(x) k-1. j pi(j), Xj. i- j- pi(j). i pi(j)G j 1 k .

  2. k , . , n . – Z k , (1).

  3. , pi(j) pi(j)G. Z , pi(j) pi(j)G.

  4. 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, , epi(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 .

, .

!




All Articles