Votação online justa: mito ou realidade?

Olá, Habr! Meu nome é Ivan, estou desenvolvendo o serviço de votação online WE.Vote baseado na plataforma blockchain Waves Enterprise. A própria ideia de votação online foi implementada por várias empresas, mas em qualquer caso de "responsabilidade acrescida", elas ainda recorrem ao bom e velho papel. Vamos ver como o voto eletrônico pode competir com ele nas condições mais rigorosas.





A ideia de votação online não é nova. Os serviços estão surgindo, mas a votação tradicional face a face em cédulas de papel ainda é a maneira mais comum de tomar decisões coletivas importantes. Por exemplo, em eleições nacionais com milhões de votos, milhares de assembleias de voto, observadores e voluntários. Ou em assembleias de acionistas de uma grande empresa, onde mesmo na fase de convocação de uma próxima assembleia, é necessário enviar um vagão de cartas registradas e certificar-se de que foram recebidas. Ou nas assembleias gerais de proprietários, onde se tem de captar o momento em que cada um dos inquilinos não está a trabalhar, nem de férias ou na dacha, para percorrer todos os apartamentos com um questionário. Sim, “papel” é longo e caro. Mas apesar de todas as desvantagens da votação no papel,continua a ser ativamente utilizado - em parte devido à inércia da legislação regulamentar e, provavelmente, em maior medida devido à crença na fiabilidade dos procedimentos tradicionais bem estabelecidos.





. - , . «» — , , , -. « », .





- — , -. ? , . , . , , —   .





« », « » - . ? . ?  ,   ( ).  , , ..  : , - . , , .





?  , « » - ? , «» «».    — «» , ? «» , , ?





, , «»? , ?  .





, , — / , , , .  - :





  1. : .





  2. , . , , // .





  3. . —  — , , (, ) , .





  4. , , , « ». , , «» . - , , — , . .





  5. , , , ( ).





  6. .   ,  , , , ... — - .





, - . , , . ,   . , — , . , , ,  .  , — .





.  -  , . .





: , ( ) . , , .





, .     , ,  , .    . , :





  • ;





  • — (e-mail );





  • — , , , ;





  • —  .





: (), : , . , , , . , , , , .





.  , .  .





, . ,    . ... e-mail. . , , . ,  ,  , — .





. , — . , , , . , , .





, , ,    , , ( -).  ,   ( ), ( ).





  «».  «» , , , . , . -, «». , -. , , — : , , , .





, , :





  • immutable- , .





  • , — -«», .





  • . , -, .





, , - . , , ! , . , , .  ( 99.9% ).





, , , , . , , , . , «» . , . - ?





, , ?  . ( , ) , « »? ? . , - ?





  — . , , , . , . - «», . N , , K , K < N.





, . . -, . -, . , . . ... , — . , — , , .





, — — , , . « IP» . , . , , . // , , 5 . . 500 , , .





?





. , , , , . ,    . , - . K N, .





   (MainPubliKey) DKG (distributed key generation) Torben Pryds Pedersen Â«A threshold cryptosystem without a trusted party»,  ( ( ) GF(p)). :  ( ) .





DKG sep256k1 (Bitcoin, Ethereum) SHA-256. , , Ed25519 -26 , . 256- , 512-.





DKG , . «» , -. — . 1 1 , , / (. ), .





   , .





DKG Pedersen 91

:





  1. E (Base) q.





  2. (BaseCommit) , x BaseCommit = x * Base .





  3. (k, n),  n â€”  (DecryptService), ,  k â€”  , . k <= (n+1)/2,  k - 1  â€”  , (MainPubliKey).





0. DecryptService





 n DecryptService  1  n. ,  DecryptService  , K N.





1.





 n DecryptService  (Pub_n)  (priv_n) : j-  : priv_jPub_j,  Pub_j = priv_j * Base ( Base â€” ). Pedersen commitment :





  1. ,  r_j.





  2. ,  _j = r * BaseCommit + Pub_j.





  3. _j  .





 n DecryptService   _j, DecryptService  r_j. DecryptService — Pub_j = _j - r * BaseCommit — Pub (MainPublicKey)  Pub_j.





   , . ...





2.





 j- DecryptService :





  •  k - 1f_j(x) = f_j_0 + f_j_1*x + ... +  f_j_k-1* x^(k-1),  f_j0 = priv_j,  â€”  GF(q),  q â€” .





  •  i-  n : f_j(i) = f_j_0 + f_j_1*i + ... +  f_j_k-1 * i^(k-1).  f_j(i)  (shadow).





  •  f_j(i)   Pub_i  . ,  f_j(i)   priv_i, .. DecryptService  i.





3.





, DecryptService DKG, , . DecryptService  , Base: j- : fj,0 * Base, fj,1 * Base, ... , fj,k-1 * Base, fj,k-1 â€”  k - 1.





 i- DecryptService   f_j(i) ( j  1  n,  i),  n - 1  DKG. i- DecryptService   j:





  1.  f_j(i) * Base





  2. fj,0 * Base, fj.1 * Base, ... , fj,k-1 * Base





  3.  ifj,0 * Base,  i * ( fj,1 * Base), ... , i^(k-1) * ( fj,k-1 * Base)





  4. .





 f_j(i) * Base (  j  i, ), .  j:  f_j(i),  â€” 0.





,  s_i   f_j(i)   j , .





 k ,  s_i * Lagrange(k, i), Lagrange(k, i) â€” , (k)  i, , Pub (MainPublicKey),  â€”  priv_i.





3,     (MainPublicKey), , .     .





«» . , , «» K , . : . ? , .





4.





, M (MainPublicKey):





  1. r R = r * Base.





  2.   = M + r * MainPublicKey.





  3.  â€” (R, C) â€” .





  4.  priv  : priv * R.





  5.  MM = - priv * R.





, (R, C)  priv * R.





(, (k, n) = (3,6)),  s_i * R, , . « ». 3 6  s_i * R  , priv * R. , .





, , . , DecryptService « », , . DecryptService , , , .





 :  (), (DKG), , . , , .





, . , , .





. . , , , .





, , — , , — . , , . . . . — .





Boletim da matriz de perguntas e respostas

,  ,  « » . , .





Resultados de contagem criptografados

, . . « » — , !





, -.  ,     . , :





1: ( R1, 1 ) =( r1 * Base, M1 + r1 * MainPublicKey )





2: ( R2, 2 ) =( r2 * Base, M2 + r2 * MainPublicKey )





: ( R1 + R2, C1 + C2 ) = ( ( r1+r2 ) * Base, M1 + M2 + ( r1 + r2 ) * MainPublicKey )





, (  MainPublicKey = priv * Base):





( M1 + M2 ) = ( C1 + C2 ) – priv * ( R1 + R2 ) = M1 + M2 + ( r1 + r2 ) * MainPublicKey â€“ priv * ( r1 + r2 ) * Base = M1 + M2





- «», - — «».





, , , . , , «». «» .





, , , , — . , . , , , , . . , , .





(ZKP — Zero Knowledge Proofs)

. . « » , , "1" «100500». «–100500» , . , « ».





   , - – . - , (, ) .





ZKP ( ) — « -» «»:





«A» , , «B», . «» «», :





  1. «» «» . «» , «».





  2. «» «» - , , .





  3. «» , «».





, «» , , , , 50/50. , «» , «» , «» . «» , , (, «» ), (, «» ) .





  , . :





ZKP

, , NIZK, , — «0» «1» — , . , «1».  , «1» .





( ) ZKP . , , , , . «1» ZKP . , N, . ZKP [0, 1, 2, 3]. ZKP [3] — .  [1, 2, 3] — 1 3 , .





, « proof» . .





:





(R_1, C_1), Proof_1,







.........................   







(R_M, C_M), Proof_M,







Sum_Proof







, ZKP . ( ), , — .





ZKP

, , , , , , . , . ,  — « ». « »  ,  .





: ,  ,  . , .





:  ,  , «» , , «». «ZK- »,  ZKP Chaum-Pedersen, x A = x * B C = x * D ( A B, C, D —  ).





:





  • ;





  • ;





  • , , .





[ [ 2,5,6 ], [ 3,5,5 ], [ 7,6 ], [ 10,3 ] ].





-

, , , , , . , «» — ; Google Forms :)





— -. , . , , «» . , «»,  — .    «» :  , - .





- . « » ,   ,  : , — . - DKG, .





?

, -. -,  — , DKG. -, - , . «» -.   ,  —  .





— , , , . UX â€” :)  — , ,  , , UX -, , .  , , , . , , : « , , , - ?». , , .





  ,     .  -   , . . ,   - , ..





— , . , . .








All Articles