Защо електронното гласуване е възможно но непрактично

Отново преди изборите се повдигна темата за електронно гласуване и такова по пощата. Една моя кратка публикация по темата предизвика спорове, и няколко човека ми казаха, че „публикацията са общи приказки без детайли“. Добре, ето ви детайлите. Тук ще говоря за електронното гласуване, за гласуването по пощата ви препоръчвам ето този доклад на департамента по правосъдие на USA (линк).

Основната ми теза е:
Електронното гласуване е технически възможно, но непрактично, скъпо, сложно и опасно

Нека за да започнем с изискванията на една система за гласуване. Най-общо те са:

  • Всеки да може да гласува не повече от един път
  • Вотът трябва да е анонимен и това трябва да се гарантира
  • Никой по никакъв начин да не може да промени вече подаден глас
  • Никой да не може да гласува с чужда идентичност
  • Никой да не може да гласува с несъществуваща идентичност
  • Всеки имащ желанието трябва да може да упражни правото си на глас
  • Резултата да може да се одитира по различни механизми за да гарантира доверие на цялостния процес

Има и няколко други изисквания, но с цел този пост да не стане прекалено обемист, ще опростя задачата.

Нека да започнем с проблем номер едно – идентификация на потребителя. Как точно електронно ще установим кое е лицето, което ще гласува? Методите използвани от повечето електронни системи като поща/телефонен номер и парола са абсолютно непрактични, по простата причина, че тези данни НЕ са сигурни. Също така съществува проблема, че всички тези хора, желаещи да гласуват трябва да се „регистрират“ в тази система. А какво ще стане, ако някой започне да регистрира хора, чийто данни е придобил по множество начини, и направи хиляди акаунти на истински лица, с истински данни, без знанието на тези лица, и в последствие да гласува вместо тях? Намирането на подобни данни е доста по-лесно отколкото мислите. Въвеждането на телефон за двуфакторна верификация би затруднило до известна степен евентуалния процес на регистрация (крадене) на профили, но не би го спрял.

Когато отидете в банка тя изисква физическо присъствие и валиден официален документ за да ви идентифицира, след което верифицира и телефонът ви, след което вече знае, че вие сте това лице, след което получавате достъп до дигиталната им система.

Тоест, ако ще се използва такава версия на идентификация, единственият практичен вариант е хората желаещи да гласуват електронно, физически да се верифицират в някой държавен офис. Сами може да се досетите, че това е известно неудобство и доста комплексна организация.

Искам да вметна нещо много важно, изборният процес трябва да НЕ оставя място за съмнение в неговата коректност. Няма по-лошо развитие от това да има избори, които оставят недоказуеми съмнения. Това позволява предявяването на недоказуеми претенции от страна на много играчи, най-вече загубилите, което води след себе си цяла поредица от негативи. Ако се докаже, че има измама, тогава е ясно, ако се докаже, че са честни, тогава е ясно, но ако има съмнения, тогава е страшно. Вижте какво стана в USA на последните избори, съмненията за измами ги докараха до ръба на гражданска война.

По тази причина всички процедури при електронното гласуване трябва са по-стриктни от, да кажем, регистрация в социална мрежа или онлайн магазин.

Друга вариант за идентификация е личните карти да имат криптографски чип и/или биометрия, и използвайки ги (заедно с криптографията асоциирана с тях) да се извърши идентификацията. Това е най-практичният метод до момента, технически възможен, тестван и използван. Причината защо този тип лични карти са ефективни е силата на криптографския чип в тях. За момента не съществува практичен механизъм за фалшифициране на дигитален подпис от подобен криптографски чип. Може би ако някой направи ефективен квантов компютър нещата ще са по-различни, но криптографите вече имат решения които ще издържат и атака на квантов компютър. Естония използва подобен механизъм в тяхното електронно управление, той е доказано работещ и множество експерти по света са на мнението, че това е ефективен начин.

Добре, ще си кажете, значи постепенно подменяме личните карти с такива като на Естония и сме готови, нали? Не точно. Електронното гласуване е сложен многопластов процес. Личните карти с криптография решават един проблем, но отварят друг (за него по-надолу).

Вторият проблем произлиза от нуждата тези данни да бъдат записани някъде, за да може да се видят и одитират резултатите. Тук има два подхода. При първият се използва централизирана система, при втория системата е дистрибутирана.

Ако се използва централизирана система, тогава слагаме всички яйца в една кошница. Ако тази централна система бъде компрометирана, целия процес пропада. А как може да се компрометира? Има множество начини. Единият е DDoS атака. Имайте предвид, че тази система е публична, за да може всеки с да я използва. Ако някой започне да праща огромен трафик към тази централна публична система, сървърите ще се претоварят и хората няма да може да гласуват. Изпълнението на подобна атака е лесно, а защитата от нея е адски трудно, особено ако атаката е изпълнена „професионално. Едно решение би било да се ограничи достъпа само до хора на територията на България, но това елиминира сънародниците ни в другите държави, което определено не е желателно.

Но дори и да не е DDoS атака, как гарантирате, че данните в базата не са модифицирани от някой администратор, хакер или друг подобен играч? Това е доста сериозен технически проблем, на който до известна степен са намерени решения, но не и такива които да ГАРАНТИРАТ, че не може да стане. Ограничаване на достъпа до машините, използването на правилната криптография и подобни, може да намалят риска, но всичко е на едно място. Една полу успешна атака и всичко приключва. Колко банки се хакват, дори и държавни организации и институти от най-висок клас на сигурност биват компрометирани по един или друг начин. Мислите, че американските служби и организации нямат техническия капацитет да се предпазят? Имат го, и въпреки всичко цялата им ядрена програма бе открадната, и не знаят как. Сноудън и WikiLeaks, дори и журналистически разследвания успяват по един или друг начин да компрометират едни от най-защитените системи. Ами атаката през Solar Wind, която стана наскоро. Ако целта си заслужава, методи ще се намерят.

Тук има много важна гледна точка. Компрометирането на избори не значи само подмяна на вот. Сриването на системата и/или внасянето на огромни съмнения за истинността на резултата са също толкова желани ефекти от някой „играчи“.

При класическото гласуване бюлетините са в секциите, там се броят, изпращат се протоколи, а бюлетините се пазят при нужда от одит. За да компрометирате по ефективен начин класически избори изисква комплексна организация в множество секции, много хора, много движещи се части и най-вече остават следи. Компрометирането на 300 гласа (принципно) не оказва голямо влияние, при активно гласуване. За да изпълни по-мащабна измама, ви трябват повече секции. Конкурентите, журналистите, наблюдателите… може да видят нещо и да подадат сигнал. Нали знаете мъдрата приказка – двама са чета, трима са чета с предател.

Добре, нека да направим системата дистрибутирана?Дистрибутираните системи са по-устойчиви на DDoS атаки, и в зависимост как са изградени може даже да дадат добри гаранции за валидност на данните, нали?
Ами дистрибутираните системи са си цяла наука, те решават една серия от проблеми, но водят след себе си други. Повечето от вас сигурно не са чували CAP теоремата. Накратко, тя казва, че ако искаме една система да има:

  • Consistency – консистентност
  • Availability – наличност
  • Partition tolerance – системата работи дори и между нодовете да има сривове

може да изберем само 2 от 3-те, не може да имаме и трите. Пълното разбиране на следствията от тази теорема изискват човек да е интимно запознат с дистрибутираните системи, но ще се опитам да ви дам няколко опростени примера, за да може и незапознатите да добият представа.

Да приемем, че вие гласувате (чрез web страница или приложение). Вашата заявка ще бъде изпратена, най-вероятно на произволен принцип, към една от многото дистрибутирани системи. Там тя се обработва, проверява и записва. Добре, а какво ще стане, ако две или повече части от тази дистрибутирана система (така наречените nodes) получат едновременно заявки за гласуване от един и същи човек но с различен вот? Кой е верният? И двата ли се отхвърлят, или се приема само единият. Ако е само единият, кой е верният? А ако се отхвърлят този човек вече гласувал ли е, или не е?

А ако по някаква причина връзката между няколко nodes се загуби, да кажем за 20 секунди, и едната част на системата обработи 1000 гласа, и после се опита да се синхронизира с другите части, и се установи, че 300 от тези хора вече са гласували (по каквато и да е причина, атака, мрежови проблеми…) в другата част? Това се нарича Split Brain, и е кошмар.

Сега очаквам хората да започнат да коментират как имаме алгоритми като PoW, PoET,DAG, и най-вече Raft, но всички те отново следват CAP теоремата и са част от така наречения „Проблем на византийският генерал“ (Byzantine Generals Problem)

Ама чакай малко, сега ще кажете, ще сложим една Kafka (или подобна алтернатива), ще ги наредим на опашката, и ще ги обработваме в последствие, нали? А какво правим с Double spending problem ще попитам аз? Какво правим ако опашката стигне до конфликт? Електронното гласуване е процес в който всяко едно действие има страничен ефект към цялата система. Или чакаме страничния ефект да се дистрибутира (бавна система), или измисляме механизъм за възстановяване от конфликт, което не ми е ясно как ще стане по разумен начин.

Отново припомням, че основна изискване на системата е да дава гаранции. При одит на конфликти или не дай си боже split brain, всеки може да отправя претенции за некоректност.

Един практичен подход е няколко дистрибутирани системи, на отделни физически места, да верифицират всеки вот паралелно и независимо, и да приемат само тези които са проверени от над половината от nodes. Това ще повиши доверието на системата, но увеличава сложността съществено.

Искам да бъда максимално обективен,въпреки всички негативи за дистрибутираните системи в контекста на електронно гласуване, които описах до сега, при правилна архитектура и криптографска идентификация на лицата, тази система МОЖЕ да се направи да работи по задоволителен начин. Трудно, сложно, но МОЖЕ.

Значи нямаме проблем, сменяме личните карти, вдигаме читава дистрибутирана система, молим се да няма DDoS и сме готови, нали?

А как точно се гарантира, че кода, приложенията и инфраструктурата са коректни. Кой ще ги одитира, кой ще ги хоства, коя е тази доверена страна?

Отново има множество решения, издаване на QR код (или подобен) който показва за кого сте гласували (анонимно), пускане на системата с отворен код, създаване на паралелна система в която хората може да си качат вече генерирания QR код, и от там, използвайки статистика и анализ да се правят изводи с голяма увереност (приемайки, че достатъчно хора си качат QR кодовете), checksums на кода в runtime и много други. Има решения, но всяко едно от тях въвежда комплексност. А простия извод от теория на системите е, че колкото по-сложна е една система, толкова по-вероятно и лесно е тя да се счупи.

А какво правим с огромната част от населението, което няма необходимите технически умения, да упражни своят глас. Възрастни хора, хора в места без интернет и подобни. Конституционно право е всеки с право да гласува, да му бъде осигурена възможността да гласува.

Ами тогава ще имаме и електронно и класическо, нали?

Какво правим с глас подаден електронно, и такъв подаден на хартиена бюлетина от един и същи човек. Засичането на подобна ситуация е доста трудоемка задача, това значи, че всеки един от списъците трябва да се дигитализира, и да се сравни с данните от електронната система. И ако се намерят подобни съвпадения каква е процедурата? И двата гласа се премахват? Да де, ама за този човек се знае, че е гласувал, но не и за кого е гласувал с хартиената бюлетина. Тогава се премахва електронния вот, нали? Да де, но ако системата гарантира анонимност не се знае този човек за кого е гласувал, знае се само, че е гласувал. И това отново ще извади огромни съмнения.

Тогава нека да го направим така, хората предварително заявяват, че ще гласуват електронно, техните имена се вадят от избирателните списъци за класическото гласуване и проблема е решен, нали?

Този процес е доста деликатен, избирателните списъци винаги са обект на критика. Принципно може да стане, но е още един допълнителен сложен процес.

Тогава трябва да се помисли за варианта при който лице е заявило, че ще гласува електронно, но по някаква причина не може, или се отказва, и иска да гласува с хартиена бюлетина. По конституция той има това право, не може да му се откаже. Което значи, че трябва процедура по добавяне на хора в списъците. Още една допълнителна сложност и потенциално поле за атака.

Както казах, електронното гласуване е многопластов сложен процес, а някой от проблемите даже не са технически.

Решаването на нетехнически проблем с технически средства често води до провал.

Да адресираме проблема с купеният вот. Зная, че електронното гласуване няма за цел да се бори с купен и корпоративен вот, но тази практика съществува, и трябва да бъде разгледана.

В момента за да се купи вот процедурата е комплексна. Трябва да се намерят хората, да се закарат до урните, по някакъв начин трябва те (гласуващите) да докажат, че са гласували за когото им е казано, и чак тогава да си получат парите.

Това е сложен и дълъг процес, защото е географски и времево ограничен. Хора от Пловдив не може да гласуват в София (поне не масово). Има движение, някой неща се виждат, и отново журналисти, конкуренция, наблюдатели може да забележат и алармират за подобни действия. Но най-вече, това трябва да стане едновременно на много места в държавата. Комплексността по организацията се увеличава съществено с мащаба.

При електронно гласуване, понеже географското ограничение отпада, целия процес по купуване на гласове ще стане абсолютно кошмарен, и няма ефективни методи да се пресече (освен ако населението не е на 100% отговорно и образовано….)

Някой „дилър“ минава и събира личните карти на лицата, ако приемем, че имаме криптографски лични карти, сяда си на компютъра и почва да гласува с тях. Може даже да е на връх Мусала, и да го направи. Как ще го засечете и предотвратите?

Ами може би ако много гласове дойдат от един и същи IP адрес?

Рутирането на трафика през различни IP-та е тривиално. Но не това е проблема. Как се дефинира много? Ами какво правим с интернет доставчици, които прекарват целия си трафик през 2-3 IP-та, честа практика в по-малките градове. А какво правим с мобилните оператори 3G,4G,5G, те работят точно така, телефонът ви няма директен публичен IP адрес. А ако някой реши да гласува от офиса, и там са 200 човека през 2-3 IP адреса? А ако няколко семейства споделят един WiFi, отново честа практика. Не е практичен механизъм

Добре, ами ако има изпращане на SMS код на телефона, тогава този който е взел личните карти няма да може да гласува, нали? Ами не, ако този който си продава гласа иска да си вземе парите, просто ще препрати SMS кода през Viber, или там каквото и да е, и проблема е решен.

Но има и още по-лесен начин, гласуващия изпраща снимка на екрана (или самия QR код) на търговеца, и така верифицира за кого е гласувал, и си получава парите. Става твърде твърде лесно. И в момента в който няколко човека се „похвалят“ по социалните мрежи какво са направили, веднага ще изскочат съмненията и претенции и последващите негативи.

Трябва да разберете, че електронното гласуване ще стане катализатор за безочливо, масово, поголовно купуване на гласове. Ще го засили още повече, и то няма да може да бъде доказано, но ще остави съмнения, големи съмнения. Лице от Лондон или Ротердам ще може да си продаде гласа със същата лекота както лице тук, в България.

Вижте, купуването на гласове е реалност с която трябва да се съобразим, не може да я замитаме под килима. Сегашния индиректен механизъм за ограничаването на тази практика е нуждата от комплексна организация произлизаща от необходимостта от физическо присъствие на точно определено физическо място.

Електронното гласуване е прекрасна илюстрация на идеята за „Златният чук“. Може да направите чук от чисто, 24 каратово злато, но няма да е евтин, нито пък много полезен (златото е меко). По-добре е да направите железен чук. По същата логика базирана на аргументите по-горе, твърдя, че електронното гласуване (направено както трябва) е ненужно скъпо, сложно, непрактично, а има по-ефективни подходи (за тях по-надолу).

Вижте, много по-ефективно ще бъде да се направят повече урни (особено извън България), да се улесни достъпа на хората до процеса за физическо подаване на глас, отколкото да си правим експерименти.

Аз все още не съм получил адекватен отговор защо електронното гласуване е по-добро от класическото? Основните неща които чувам са, че:

  • Хората извън страната може да гласуват масово
  • Било по-лесно
  • Било по-сигурно

Хората извън страната може да настояват за отваряне на повече секции. И на мен не ми харесва, че в държава като Германия, сигурно с над 200 000 българи има 2-3 секции (не съм сигурен за точната бройка на секциите, но със сигурност са твърде малко)

А кое е трудното на сегашното гласуване? Че трябва да минете 1-2 километра, да попълните 1 лист хартия и да си тръгнете? Разбирам, че поръчването на пица с едно натискане на бутон е желано, че с една гласова команда си пускате любима песен или филм, но хайде да не приравняваме гласуване с поръчка на пица.

Дали е по-сигурно зависи от дефиницията за сигурност. Няма абсолютна сигурност, винаги има компромис между ниво на желана сигурност, практичност и цена.

И понеже аз мразя хора които само критикуват, без да предлагат решения и алтернативи, ето какво е моето предложение:

Хартиените бюлетини се заместват с 100% машинно гласуване. Човек трябва да отиде физически до самите машини, но броенето, протоколите и всички последващи дейности са дигитализирани. Това при следните напълно изпълними условия:

  • Машините НЕ са свързани с никаква мрежа по никакъв начин по време на гласуването
  • Софтуера на машините може да се одитира от независими експерти преди и по време на гласуването. Има ефективни технически средства това да се направи
  • Машините са собственост на България, а не под наем
  • Осигуряването на достатъчно от тези машини за хора извън територията на България
  • Разписките издадени от машините да НЕ съдържат информация за кого е гласувано, но да съдържат криптографски материал, който може да верифицира вота. Идеята е запазване на анонимността на вота, както и невъзможността на лицето да докаже пред други за кого е гласувало.
  • Премахване на номерата на бюлетините, всеки човек вижда произволна подредба на кандидатите – всеки път различно подреден списък

Този подход е абсолютно изпълним, дава много по-висока сигурност в целия процес от хартиеното или електронно гласуване, относително евтин за реализация, достъпен за всеки човек способен да чете, и най-вече, премахва много операции, извършвани от хора в процеса, което води до предотвратяване на неволни или нарочни грешки. Също така с този подход може да имаме настина силен механизъм за верификация на истинността на вота. Ако аз имах властта да решавам, това е механизма който бих избрал.

Но ако влезем в хипотетичната ситуация, че трябва да се направи електронно, то най-правилният начин е да:

  • се използват лични карти с биометрия за идентификация
  • системата да е дистрибутирана и да работи в паралелен режим като всеки node верифицира независимо данните, и в последствие мнозинството от nodes определя резултата на конкретния глас.
  • някой от тези дистрибутирани nodes, но по-малко от 51% от тях да се контролират от независими организации (не говорим за блокчейн)
  • кода да е възможен за одит, както и по време на самия процес на гласуване. Възможно е, но е пипкаво и сложно.
  • цялостната криптография да бъде верифицирана от независими експерти преди вота
  • публичните ключове да бъдат достъпни за всеки няколко часа преди вота
  • дигитализиране на изборните списъци и използването на дигиталната версия, в реално време, с интернет свързаност, при гласуване с хартиена бюлетина (или с машина)
  • Издадените разписки (QR код и подобни) да не съдържат данни кой, за кого или кога точно е гласувал, но да съдържат криптографски материали верифициращи вота. Тази верификация трябва да може да се прави от независима външна система базирана на публичните ключове.
  • Премахване на номерата на в бюлетините. Реда на кандидатите в списъка показван в web страницата или приложението да бъде абсолютно произволен за всеки един човек и всяка една импресия.
  • адекватни мерки за защита от DDoS. Има практични решения, но отново скъпи и комплексни.

Изпълнението на подобно задание би отнело минимум 2 години на над 60 човека, включително множество външни одитори, огромно количество интеграции, и мащабна логистика по синхронизиране на действията между държавната администрация и частни компании и организации.

В заключение, смятам, че проблемите на електронно гласуване са повече от предимствата. Съществуват по-ефективни, практични и евтини подходи, които водят до същите желани предимства като превенция срещу измами, достъпност и леснота на използване.

Вашият коментар