Pemberian Suara Online yang Adil: Mitos atau Realitas?

Halo, Habr! Nama saya Ivan, saya sedang mengembangkan layanan pemungutan suara online WE.Vote berdasarkan platform blockchain Waves Enterprise. Ide pemungutan suara online telah lama diterapkan oleh perusahaan yang berbeda, tetapi dalam kasus "tanggung jawab yang meningkat", mereka masih menggunakan kertas lama yang bagus. Mari kita lihat bagaimana e-voting dapat bersaing dengannya di bawah kondisi yang paling ketat.





Ide voting online bukanlah hal baru. Layanan bermunculan, tetapi pemungutan suara tatap muka tradisional di surat suara masih menjadi cara paling umum untuk membuat keputusan kolektif yang penting. Misalnya dalam pemilu nasional dengan jutaan surat suara, ribuan TPS, pemantau dan relawan. Atau pada rapat pemegang saham perusahaan besar, di mana bahkan pada tahap pemberitahuan rapat yang akan datang, Anda perlu mengirimkan gerobak surat terdaftar dan memastikan bahwa surat tersebut telah diterima. Atau pada rapat umum pemilik rumah, di mana Anda harus menangkap momen ketika masing-masing penyewa tidak sedang bekerja, tidak sedang berlibur atau di dacha, untuk berkeliling di semua apartemen dengan kuesioner. Ya, "kertas" itu panjang dan mahal. Namun terlepas dari semua kerugian dari pemungutan suara kertas,ini terus digunakan secara aktif - sebagian karena inersia peraturan perundang-undangan, dan, mungkin, sebagian besar karena kepercayaan pada keandalan prosedur tradisional yang sudah mapan.





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





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





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





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





, , «»? , ?  .





, , — / , , , .  - :





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





, . , , .





. . , , , .





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





Buletin Matriks Pertanyaan dan Jawaban

,  ,  « » . , .





Menghitung hasil dienkripsi

, . . « » — , !





, -.  ,     . , :





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