За машинното “лъжуване”

В България днес имаме “машинно гласуване”. Аз го наричам “машинно лъжуване”, защото процесът е непрозрачен и липсва какъвто и да е механизъм за прозрачност и контрол. Разбира се, на хартия има механизми, но те са манипулируеми. Парите, потенциално необходими за корумпиране на днешния процес са вероятно по-малко дори от парите, които биха били заделени за купуване на гласове при предишните избори.

Днес познат във Фейсбук ме попита “дали бихте могли (ти и твой екип) да направите независим одит на машините”.

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

Защо нещата са така мога да говоря много, но воден от “бръснача на Окам” мисля, че най-вероятно причината е обикновена некомпетентност:

  • Най-често законите, касаещи избори, се правят спешно, защото изборите чукат на вратата;
  • Не се мисли за осигуряване на справедливи избори, по-скоро се мисли за това как да се нагласи бюрокрацията така, че текущите управляващи да вземат най-много гласове;
  • Основно политици и “изборджии” участват в направата на законите, не експерти, а още по-малко експерти, на които им пука за независими и честни избори. Да, има разни НПО-та. Но по принцип НПО-тата се финансират от грантчета, а доста от грантчетата ги дава държавата, та… знаете кой би ритал срещу ръката, която го храни, нали?

Разбира се, вместо да се говори за това как пазим, можеше съвсем директно да се направи такава архитектура на машинното гласуване, която да гарантира одит от всеки заинтересован: физическо лице, екип, НПО, ако щеш и бай Драган от Долна Малина, стига той да иска да го направи.

Как би изглеждала “на салфетка” една такава архитектура?

На първо място: 100% от софтуерът, който се изпозлва за машинното гласуване, трябаше да бъде публичен и свободен (с отворен код, с напълно свободен лиценз, нещо от рода на MIT/BSD лицензите). Качен в достъпен за всички склад (software repository).

Това би дало възможност всеки заинтересован, от ученика до експерта по киберсигурност, да наблюдава как върви разработката на софтуера. Тестовете на този софтуер също би трябвало да живеят в това repository, по същата причина. Екипът, разработващ софтуера, трябва да бъде задължен да ползва това и само това repository за всичко: за version control на разработката, за управление на проекта (да, задачите и те трябва да са публични) и т.н.

Тази пълна прозрачност би позволила мълниеносна обратна връзка при всеки проблем, забелязан в сорс-кода (това, което в крайна сметка “движи” машината). И този проблем би се оправил ако не на секундата, то в рамките на един разумен срок.

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

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

Ако аз правя такава архитектура, бих се спрял на следните модули, всеки от тях раздробен на услуги (за по-незапознатите, “контейнер” е почти еквивалент на “софтуерна услуга”, работеща върху някакъв виртуализиран хардуер):

  • Модул за машината за гласуване
    • контейнер с backend services, който осигурява работата на машината както независимо (offline), така и свързана в мрежа към централния сървър (online). В момента имаме частен случай на първото
    • контейнер с frontend services, който осигурява общуването на машината с избирателя
    • контейнер с frontend services, който осигурява общуването на машината със СИК (ако има нужда от междинна проверка на каквото и да е)
    • контейнер с backend services за одит, следящ всички работещи услуги и предоставящ услуги за независим одитор
  • Модул за броене на гласовете
    • контейнер с backend services, приемащи протоколите от онлайн машините
    • контейнер с backend services, приемащи протоколите от “флашките” на машините (там, където няма възможност за онлайн връзка)
    • контейнер с backend services за броене на текущите приети протоколи
    • контейнер с frontend services за предоставяне на междинните резултати
    • контейнер с backend services за одит, следящ всички работещи услуги и предоставящ услуги за независим одитор
  • Модул за независим одит
    • контейнер или направо binary, което всеки заинтересован ще може да се построи и с него да извърши одит на машината през специално предназначен USB port;
    • всички гореспоменати контейнери имат отворени услуги, през които ще може да се вземе информация за отпечатъците на всички инсталирани критични системи;
    • също така ще може да одитира и barebone инсталацията на машината – дали отговаря на това, което е указано при подготовката на машините;
    • достатъчно лесни за използване скриптове и binaries (за тези, които не могат сами), чрез които всеки участник в изборния процес да може да си подготви флашка, с която да одитира всяка машина (вкл. и тези, извършващи броенето!);
    • инструкции

Разбира се, може да има още колкото си искате допълнителни “счетоводни” услуги, но това не е предмет на този текст.

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

Всеки един от тези контейнери се създава от сорс-код, който е в склада, за който говоря в точка едно. Всеки един от тези контейнери се подписва от комисията преди деня на изборите. Всеки един от тези контейнери се инсталира на машината от централизиран склад (repository), което се намира под контрол на изпълнителя, но е напълно отворено за всеки, който иска и знае какво да прави с него. В същия софтуерен склад се намират и версиите на ISO-тата, от които се инсталира barebone-a (скелета) на избирателната машина. Всичко това се прави с deployment scripts, които отново са напълно прозрачно видими за всеки (разбира се, не са модифицируеми от всеки!).

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

И накрая, няколко реда за това как може да стане самият независим одит.

  1. По време на процеса на разработка и подготовка на изборите, всеки заинтересован и знаещ човек ще може да види какво “се готви” от изпълнителят на проекта. Колко сорс код е написан, какво върши, колко глупости са направени и колко са оправени.
    • Така всеки заинтересован (а те ще бъдат немалко, гарантирам за това) ще може да даде моментална обратна връзка. Публично. И ще може да му бъде обяснено защо нещо се прави по начина, по който се прави. И изпълнителят няма да може да си затваря очите за очеизвадни проблеми.
  2. В определен срок преди изборния ден сорс кода на всички софтуерни услуги ще бъде утвърден (че това ще е кода, който ще проведе изборите) и ще бъдат построени двоичните файлове (binaries) на услугите, с които ще се проведат изборите. Техният “цифров отпечатък” (SHA-3 ще стигне за тези цели, ако на някой му идва твърде сложно и SHA-2 може да е вариант) се публикува и е видим за всички
    • Държа да отбележа, че това, в някаква форма, се прави и днес. Но днес не е видимо от какъв сорс код е генериран този отпечатък, така че отпечатъкът съвсем спокойно може да е създаден от софтуер, който ние си мислим, че не прави злоупотреби, а който всъщност злоупотребява незабележимо зад гърба ни. Софтуерът се пише от хора. Контролиращите и те са хора. Когато двете групи са предварително известни, злоупотребите са лесни и сравнително евтини.
  3. В изборния ден всяка машина се одитира с флашката за независим одит. По време на изборния ден всеки член на СИК и наблюдател може да повтори този одит. По време на гласуването всеки избирател (може да се измисли някакъв читав лимит, защото одитът безспорно ще изисква време) трябва да може да сложи своята флашка, на която да се генерира лог с отпечатъците от машината и на място (или вкъщи) да се увери, че всичко е наред.
    • Да не говорим, че ако се отворят машините по този начин съм сигурен, че ентусиасти ще направят и флашка, която да свети червено/зелено на място, ако се види проблем с отпечатъците.

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

И накрая ще повторя още веднъж: когато участниците в който и да е процес са предварително ясни и практически несменяеми (програмисти, изпълнител, одитор), само и единствено пълната прозрачност може да гарантира, че тези хора ще си свършат работата, без да робуват на този или онзи партиен или мафиотски интерес – възмездно или без!

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

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

Leave a Reply

Theme: Overlay by Kaira Extra Text