2018 г. Живеем в бъдещето. Можем да поръчаме пица, да гледаме как се прави и да гледаме как се доставя до нашата къща. Така че защо не можем да гласуваме онлайн?

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

Вероятно знаете, че компютрите работят на двоични, 1 и 0. А писането в двоичен файл е трудно - всъщност толкова трудно, че всъщност никой не иска да го прави. Дори и да успеете да го направите, това, което създавате, е само един брой числа и ще бъде много трудно за всеки - включително за вас след няколко седмици, след като забрави написаното - да разбере какъв е вашият код всъщност има.

Така че вместо това ние, компютърните учени, измислихме „машинни езици“. Това са абстракции, които променят двоичния код в нещо, което е поне малко по-близо до езиците, които хората говорят. Те все още са основни, но са стъпка в правилната посока Езиците на машините се базират на и обвързани с хардуера на всяка машина, за която са проектирани. Така че, докато не можете да кажете нещо лесно като „добавете 10 и 20 заедно и отпечатайте този резултат на екрана“, можете да кажете „поставете стойността 10 в регистър един, поставете стойността 20 в регистър два, въведете и тези два регистъра в добавете един и поставете изхода в регистър три и отпечатайте съдържанието на регистър три на екрана. ”Езикът на машината се превежда след това - това се нарича“ компилиран ”- в двоичните 1 и 0, необходими за действително стартиране на вашия компютър ,

Тук има очевидни недостатъци: Трябва да сте запознати с хардуера на компютъра си, за да пишете на машинен език, а архитектурата на всеки компютър е малко по-различна. Плюс това, трябва изрично да посочите всяка стъпка от процеса. Това е болка Но горната страна е, че когато гледате програма, написана на машинен език по пътя, случващото се е много по-ясно - особено в сравнение с гледането на безкраен поток от 1 и 0 в двоичен.

Без значение какво пишете, вие се доверявате на компилатора, за да превърне точно това, което сте написали, в двоичен код. Ако исках да се забъркам с вашите резултати, всичко, което трябва да направя, е да се забърквам с вашия компилатор.

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

Докато всички тези езици на програмиране използват различни подходи към решаването на този проблем, те споделят една и съща цел: да направят компютърен код по-лесен за четене, което го прави по-лесно за разбиране и по-лесно за поддържане. Днес езиците за програмиране правят печатането на резултата от 10 + 20 толкова просто, колкото писането на това:

печат 10 + 20

Открихте ли причината да не се доверите на който и да е компютър?

Ще ви намекна: Той е в съставителя.

Без значение какво пишете, вие се доверявате на компилатора, за да превърне точно това, което сте написали, в двоичен код. Ако исках да се забъркам с вашите резултати, всичко, което трябва да направя, е да се забърквам с вашия компилатор.

Например, ако промених командата „print“, така че тя винаги добавя 1 към числата, които сте й дали, програмата ви няма да работи правилно - въпреки че сте я програмирали правилно. Никога няма да намерите бъда, само ако погледнете изходния си код, защото там не е проблемът. Той е скрит в компилатора.

Този пример е основен и вие ще го откриете доста бързо, защото програмата ви очевидно би била нарушена. Но какво да направя, ако направя нещо по-фино? Какво става, ако вместо да се забъркам с командата „print“, промених компилатора, така че всеки път, когато открие код, включващ пароли, го направи така, че паролата „ryaniscool“ също да работи?

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

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

Очевидно това е проблем. И може да си помислите: „Но компилаторите са компютърни програми като всеки друг. Бих могъл да погледна изходния код на моя компилатор, за да се уверя, че няма злонамерен код там. Всичко, което трябва да направя, е да намеря частта, която говори за добавяне на „ryaniscool“ като парола, извадете го и ще се оправя. Така ли е? "

И бихте могли. Освен, както казахте, компилаторите са компютърни програми като всички други. А това означава, че самите те са съставени.

Ето всичко, което трябва да направя, за да го използвам:

Етап 1

Както преди, аз бих написал код, който добавя „ryaniscool“ като валидна парола към всичко, което компилира, и го поставя в компилатора. В този момент добавям задната врата към всичко, което компилаторът компилира, но ще ме хвана, ако някой погледне източника на моя компилатор. Така че продължавам към стъпка 2.

Стъпка 2

Пиша код за компилатора, който открива кога се компилира и когато това се случи, той добавя в кода за стъпка 1 в компилатора. Сега, когато компилирам компилатора, той прави нова версия на себе си, която ще добави в инструкциите на компилатора как да вмъкнете паролата „ryaniscool“ всеки път, когато компилаторът бъде преустроен. И за да покрия моите песни, всичко, което трябва да направя, е да премахна злонамерените инструкции от източника на компилатора и съм свършил.

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

Единственият начин да откриете тази грешка е да преминете сами над бинарния код - задача, която започва трудно и става буквално невъзможна, тъй като програмите стават по-сложни. Пълните произведения на Уилям Шекспир влизат под 6 мегабайта. Само за браузъра Firefox са необходими 200 мегабайта, за да го инсталирате и това е само една програма на вашия компютър. Няма жив човек, който да е чел всичките 200 мегабайта от този код. Дори не е написано на език, предназначен за хората да четат.

Защо използваме тези кошмарни машини?

Нищо от това не е ново. През 1984 г. Кен Томпсън - човекът, който проектира и внедри Unix, родоначалникът на операционните системи, на които работят повечето компютри и телефони - представи документ, наречен „Размисли за доверието в доверие“ и стигна до това заключение:

Моралът е очевиден. Не можете да се доверите на код, който не сте създали напълно сами ... Никаква проверка на нивото на източника или проверка няма да ви предпази от използване на ненадежден код.

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

И все пак ние се доверяваме на компютрите с всякакви неща. И така, какво дава? Защо използваме тези кошмарни машини?

Е, за едно нещо, компютрите са наистина забавни и удобни. И те са практични по много начини. Освен това хакването на компилатора може да бъде сложно да се извади на практика: Ще ви трябва време и мотивация, за да насочите някого. Истината е, че има много случаи, в които нямате нужда от абсолютно доверие в компютъра си: В края на краищата не е краят на света, ако някой хакне и види пицата ми да бъде доставена. Никой не се интересува достатъчно, за да се опита да го счупи.

Но гласуването не е един от тези случаи.

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

Гласуването е случай, при който резултатът от хак може да има огромни последици. Гласуването също е сравнително лесно да се насочи (знаете кога и къде ще се случи) и има много силна мотивация да промените резултата. Колкото по-лесно можех да добавя, че паролата за „ryaniscool“, можех да променя командата „добавяне“, така че при събирането на гласове да добавя допълнително за партията по мой избор.

Колко трябва да добавя? Честно казано, в този момент зависи изцяло от мен. Оттук идва и този извод: онлайн гласуването никога няма да бъде безопасно. Компютърното гласуване никога няма да бъде безопасно.

Единственият безопасен начин за гласуване с компютър е този, при който хартиен бюлетин се отпечатва пред избирателя, одобрява се и след това се съхранява в урна. По този начин, ако някой смята, че компютърните системи са били компрометирани - ако изобщо има причина да подозира, че някой е добавил гласовете неправилно - тогава има хартиена следа. С други думи, компютърното събиране на гласовете е удобство, нищо повече. Реалният вот, истинската сила, все още се крие в бюлетината.

Без тази хартиена следа остава да се доверите на компютъра.

И никой никога не трябва да се доверява на компютър.

актуализации:

Имаше някои повтарящи се теми в дискусията около това есе, така че реших, че ще ги включа тук във формат Q + A! Есето по-горе не е променено, но мислех, че по-долу може да е полезно, ако искате да направите още едно четене по този въпрос!

В: Какво искаш да кажеш с компютърно гласуване?

О: Говоря за система, в която гласувате изключително на компютър: не се генерира следа от хартия. В този случай компютърът е органът за това, което сте гласували: няма друг източник, който можете да проверите отново.

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

Въпрос: Не може ли това да бъде поправено, като дадем на всеки, който гласува секретен код или някакъв ключ, или може би бихме могли биометрично да сканираме техните очи или пръстови отпечатъци или нещо подобно? Или какво ще стане, ако подкрепихме гласовете някъде в интернет на втората, в която са направени?

О: Не. Кодовете и ключовете могат да бъдат прихващани или дублирани и всеки биометричен скенер ще бъде компютър, уязвим за същите проблеми, обсъдени тук. И всяка мрежова система - в която компютърът споделя, че гласува, за да я „подкрепи“ някъде другаде - отново зависи от това да не бъде подправена. Извинете.

В: Добре, но може би бихме могли да тестваме програмите си и да видим дали компилираният ни код действа по различен начин от това, което очакваме?

О: Това не работи поради няколко причини. Сигурно в моя пример „променете стойността на това, което добавя 10 + 20“, което ще бъде лесно да се тества и да се уловят всички промени. Но дори и да сте мислили да тествате това на първо място - и защо бихте го направили? - това все още не решава проблема. Моят злонамерен код може да открие кога се тества и да не прави нищо лошо, като става активен само когато не търсите.

Звучи като scifi, нали?

Е, това вече е направено: при скандала с вредните емисии на Volkswagen през 2015 г. бордовите компютри на колата откриха кога се тестват емисиите им и течеха в екологосъобразен режим с ниска мощност и преминаха в режим на замърсяване с висока мощност, когато тестът приключи , Компютрите откриха, когато тестваха, действаха по най-добрия начин на поведение и след това спряха, когато тестът приключи. Този скандал струва на Фолксваген 18,32 милиарда долара, за да се поправи, между другото, без да се включва и глобата от 2,8 милиарда долара, която са платили.

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

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

О: Не, вие абсолютно трябва да гласувате. Целта на вмешателството в избори е да ви обезличи. Ако не гласувате, вие се лишавате от отговорност вече със 100% ефективност. Гласувайте и след това направете това, което трябва да направите, за да гарантирате, че никога повече няма да използвате компютърно гласуване.

В: Това означава ли, че не трябва да се доверяваме на компютри за нищо?

О: В абсолютен смисъл: да. Не трябва да имате 100% вяра в която и да е компютърна система. Но това очевидно не е практично и в повечето случаи не е нужно да имате 100% вяра в компютър. Един от малкото случаи, в които вие бихте гласували. Следващият въпрос се занимава с това по-подробно.

В: Хайде. Ние правим банкиране онлайн, милиарди долари се движат цифрово всеки ден, а вие дори написахте това на компютър. Сигурно сте алармен и / или лицемерен?

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

Но няма как да се коригират провалени избори след факта.

Всичко е въпрос на компромис: публикуването на този онлайн беше удобно и го направих, знаейки, че думите ми могат да бъдат променени. Има риск, който могат да бъдат, но в крайна сметка това не е краят на света. Ниските залози и ползите превишават недостатъците. По подобен начин правя банкиране онлайн - защото това е също така удобно и съм готов да направя компромиси, защото знам, че докато има шанс моите данни и / или пари да бъдат откраднати, се чувствам сравнително сигурен, че банката ще го покрие. И да, използвам компютри, за да изпратя на приятели 10 долара, за да им ги върна за вечеря, но го правя, защото залозите са толкова ниски. Това е само 10 долара

Залогът не е малък, що се отнася до гласуването.

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

Въпрос: Какво ще кажете за blockchain? Трябва да споменете blockchain. Това е нова технология, която не е съществувала през 1984 г. и която определено може да реши този проблем.

A: Nope, nope, nope. Извинете. Иска ми се и той да работи.

В: Не знаете за какво говорите и кой ви направи авторитет? Защо трябва да ти се доверявам?

О: Както казвам в есето, това не са моите блестящи оригинални идеи. По принцип префразирам това, което Кен Томпсън спори през 1984 г. в своите размисли за доверие на доверие. Аргументът на Кен всъщност е по-силен: неговият пример е програмата за вход, аналог на която се използва във всеки компютър. Просто говоря за гласуване Книгата на Кен стои като основна книга в областта на компютърните науки повече от 30 години, но не е добре позната извън кръговете на компютърните науки. Ето защо исках да напиша това есе.

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

В: Добре, сигурно, че това е доста смело, но всичко това е хипотетично. Използваме компютри за управление на ядрени реактори, за плач на глас. Ако нещата не бяха безопасни, щяхме да знаем за това.

О: Атака, много подобна на обсъжданата тук - в която са били скрити доказателствата за нападението - е извършена в реалния живот само преди няколко години, с червея Stuxnut през 2010 г. И това нападна - познахте - ядрени центрофуги ,

Тези атаки вече се случват. Опа.

Въпрос: Компютърното гласуване може да е лошо, но хартиените бюлетини също могат да се променят. И те не са перфектни.

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

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

И на всичкото отгоре има един прост факт: програмистите не са перфектни. Дори ако атаката в това есе не се използва, това не означава, че компютърната ви система за гласуване е защитена. По дяволите, Google - който мисля, че всички можем да се съгласим да наеме някои много умни хора - имат бонус система, в която те плащат пари в брой, ако им помогнеш да намерят бъгове в собствения си софтуер, защото не могат да гарантират, че не са направили грешки.

Софтуерното програмиране е трудно. Компютрите са твърди. Дори блестящ, добронамерен софтуерен разработчик може да направи една грешка, която отваря цял софтуерен стек за проникване. Грешката Heartbleed беше въведена случайно през 2011 г. - в софтуер с отворен код, който на теория всеки на планетата можеше да разгледа, разгледа и открие - но той не беше открит до 2014 г., при който 17% от сървърите в интернет сега бяха уязвими.

Това стана случайно. Представете си какво може да направи някой, ако се опитваше.

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

Въпрос: Има ли подходящ xkcd?

О: Винаги има подходящ xkcd.