Hallo Habr! Mein Name ist Ivan. Ich entwickle den Online-Abstimmungsdienst WE.Vote, der auf der Blockchain-Plattform Waves Enterprise basiert. Die Idee des Online-Votings wurde schon lange von verschiedenen Unternehmen umgesetzt, aber in allen FĂ€llen von "erhöhter Verantwortung" greifen sie immer noch auf gutes altes Papier zurĂŒck. Mal sehen, wie E-Voting unter strengsten Bedingungen damit konkurrieren kann.
Die Idee der Online-Abstimmung ist nicht neu. Dienstleistungen entstehen, aber die traditionelle persönliche Abstimmung ĂŒber Papierstimmen ist nach wie vor die hĂ€ufigste Methode, um wichtige kollektive Entscheidungen zu treffen. Zum Beispiel bei nationalen Wahlen mit Millionen von Stimmzetteln, Tausenden von Wahllokalen, Beobachtern und Freiwilligen. Oder bei AktionĂ€rsversammlungen eines groĂen Unternehmens, bei denen Sie bereits in der Phase der Benachrichtigung ĂŒber eine bevorstehende Versammlung einen Wagen mit eingeschriebenen Briefen versenden und sicherstellen mĂŒssen, dass diese eingegangen sind. Oder bei Hauptversammlungen von Hausbesitzern, bei denen Sie den Moment festhalten mĂŒssen, in dem jeder Mieter nicht arbeitet, nicht im Urlaub oder in der Datscha, um alle Wohnungen mit einem Fragebogen zu durchsuchen. Ja, "Papier" ist lang und teuer. Aber trotz aller Nachteile der Papierabstimmung,Es wird weiterhin aktiv eingesetzt - teilweise aufgrund der TrĂ€gheit der Rechtsvorschriften und wahrscheinlich in gröĂerem MaĂe aufgrund des Glaubens an die ZuverlĂ€ssigkeit traditioneller, gut etablierter Verfahren.
. - , . «» â , , , -. « », .
- â , -. ? , . , . , , â .
« », « » - . ? . ? , ( ). , , .. : , - . , , .
? , « » - ? , «» «». â «» , ? «» , , ?
, , «»? , ? .
, , â / , , , . - :
: .
, . , , // .
. â â , , (, ) , .
, , , « ». , , «» . - , , â , . .
, , , ( ).
. , , , , ... â - .
, - . , , . , . , â , . , , , . , â .
. - , . .
: , ( ) . , , .
, . , , , . . , :
;
â (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
:
E (Base) q.
(BaseCommit) , x BaseCommit = x * Base .
(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_j, Pub_j, Pub_j = priv_j * Base ( Base â ). Pedersen commitment :
, r_j.
, _j = r * BaseCommit + Pub_j.
_j .
n DecryptService _j, DecryptService r_j. DecryptService â Pub_j = _j - r * BaseCommit â Pub (MainPublicKey) Pub_j.
, . ...
2.
j- DecryptService :
k - 1: f_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:
f_j(i) * Base
: fj,0 * Base, fj.1 * Base, ... , fj,k-1 * Base
i: fj,0 * Base, i * ( fj,1 * Base), ... , i^(k-1) * ( fj,k-1 * Base)
.
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):
r R = r * Base.
= M + r * MainPublicKey.
â (R, C) â .
priv : priv * R.
M: M = - priv * R.
, (R, C) priv * R.
(, (k, n) = (3,6)), s_i * R, , . « ». 3 6 s_i * R , priv * R. , .
, , . , DecryptService « », , . DecryptService , , , .
: (), (DKG), , . , , .
, . , , .
. . , , , .
, , â , , â . , , . . . . â .
, , « » . , .
, . . « » â , !
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», . «» «», :
«» «» . «» , «».
«» «» - , , .
«» , «».
, «» , , , , 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 -, , . , , , . , , : « , , , - ?». , , .
, . - , . . , - , ..
â , . , . .