Tai 2018 m. Mes gyvename ateityje. Mes galime užsisakyti picą, žiūrėti, kaip ji pagaminta, ir stebėti, kaip ji bus pristatyta į namus. Taigi kodėl negalime balsuoti internetu?

Pradėkime nuo to, kas yra programavimo kalbos ir kodėl jos mums reikalingos. Netrukus pamatysite, kodėl niekada neturėtumėte norėti balsuoti internetu (ir kodėl niekada nenorite kompiuterio, esančio šalia jūsų, kai balsuojate).

Turbūt žinote, kad kompiuteriai veikia dvejetainiais, 1 ir 0 s. O rašyti dvejetainiu būdu yra sunku - iš tikrųjų taip sunku, kad iš esmės niekas nenori to daryti. Net jei jums pavyks tai padaryti, tai, ką gaminate, yra tik daugybė skaičių ir kiekvienam, įskaitant jus per kelias savaites, kai pamiršite, ką parašėte, bus labai sunku išsiaiškinti, koks yra jūsų kodas iš tikrųjų daro.

Taigi mes, kompiuterių mokslininkai, išradome „mašinų kalbas“. Tai yra abstrakcijos, pakeičiančios dvejetainį kodą į tai, kas bent šiek tiek artimesnis kalboms, kuriomis žmonės kalba. Jie vis dar yra pagrindiniai, tačiau jie yra žingsnis teisinga linkme. Mašinų kalbos grindžiamos ir yra susietos su bet kokio kompiuterio, kuriam jie yra sukurti, aparatine įranga. Taigi, nors jūs negalite pasakyti kažko lengvo, pvz., „Sudėkite 10 ir 20 kartu ir atsispausdinkite rezultatą ekrane“, galite pasakyti: „įdėkite vertę 10 į pirmąjį registrą, įdėkite vertę 20 į antrą registrą, padėkite abu šiuos registrus į Padėkite vieną, pridėkite išvestį trečiame registre ir atspausdinkite trečiojo registro turinį į ekraną. “Tada mašina kalba išverčiama - tai vadinama„ sukompiliuota “- dvejetainiuose 1 ir 0, reikalinguose faktiškai paleisti jūsų kompiuteryje. .

Čia yra akivaizdžių trūkumų: rašydami mašinine kalba turite žinoti savo kompiuterio aparatinę įrangą, o kiekvieno kompiuterio architektūra šiek tiek skiriasi. Be to, jūs turite aiškiai nurodyti kiekvieną proceso žingsnį. Tai skausmas. Tačiau aukščiausia pusė yra ta, kad kai žiūrite programą, parašytą mašinų kalba, pakeliui, tai, kas vyksta, yra daug aiškiau - ypač palyginti su tuo, kad žiūrite į begalinį 1s ir 0s srautą dvejetainiuose elementuose.

Nesvarbu, ką rašote, jūs tikite, kad kompiliatorius tiksliai pavers jūsų parašytą dvejetainiu kodu. Jei norėčiau suklaidinti jūsų rezultatus, viskas, ką turėčiau padaryti, yra sumaištys su jūsų sudarytoju.

Kitas žingsnis yra atskirti aparatinę įrangą, todėl jums iš tikrųjų nereikia žinoti tokių dalykų kaip „pridėtojai“ ir „registrai“. Jei sukursite pakankamai protingą kompiliatorių, galėsite sukurti nuo mašinų nepriklausomas programavimo kalbas, pateikdami abstraktesnes instrukcijas, kuriomis būtų galima lengvai valdyti tokius dalykus, kaip „sudėti 10 ir 20 kartu ir atsispausdinti rezultatą ekrane“. Tada jūs turėtumėte pasikliauti sudarytoju, kad jis išverstų į mašinų kalbą, o tada į dvejetainę kalbą.

Nors visos šios programavimo kalbos, spręsdamos šią problemą, naudojasi skirtingais būdais, jos siekia to paties tikslo: palengvinti kompiuterio kodo skaitymą žmonėms, todėl jį lengviau suprasti ir prižiūrėti. Programavimo kalbomis šiandien spausdinti 10 + 20 rezultatą yra taip paprasta, kaip rašyti taip:

spausdinti 10 + 20

Ar pastebėjote priežastį, kodėl negalite pasitikėti jokiu kompiuteriu?

Pateiksiu jums užuominą: tai yra kompiliatoriuje.

Nesvarbu, ką rašote, jūs tikite, kad kompiliatorius tiksliai pavers jūsų parašytą dvejetainiu kodu. Jei norėčiau suklaidinti jūsų rezultatus, viskas, ką turėčiau padaryti, yra sumaištys su jūsų sudarytoju.

Pvz., Jei pakeisčiau komandą „spausdinti“, kad ji visada pridėtų 1 prie jūsų duotų skaičių, jūsų programa nebus tinkamai paleista, net jei jūs ją tinkamai užprogramavote. Niekada nerasite nesklandumų vien pažvelgę ​​į savo išeities kodą, nes čia ne tas gedimas. Jis paslėptas kompiliatoriuje.

Šis pavyzdys yra paprastas ir jūs gana greitai jį aptikote, nes jūsų programa akivaizdžiai nutrūktų. O kas, jei aš padaryčiau ką nors subtilesnio? Kas būtų, jei, užuot klaidinęs komandą „spausdinti“, pakeičiau kompiliatorių, kad aptikęs kodą, kuriame buvo slaptažodžiai, jis taip ir padarė, kad slaptažodis „ryaniscool“ taip pat veiktų?

Tai nėra pasaulio pabaiga, jei kas nors įsilaužia ir mato, kad mano pica pristatoma. Niekas nerūpi, kad bandytų tai sulaužyti. Tačiau balsavimas nėra vienas iš tų atvejų.

Jei aš tai padaryčiau, turėčiau tai, kas vadinama „užpakalinėmis durimis“ į kiekvieną kompiuterio programą, kurią kuriate su mano kompiliatoriumi. Kitaip tariant, jūs galite užrakinti visas jūsų norimas duris, tačiau tai nesvarbu, nes aš turiu slaptas duris, apie kurias niekas nežino. Nesvarbu, ką rašote, kad ir koks saugus jūsų slaptažodžio kodas, mano „ryaniscool“ slaptažodis taip pat veiks - ir to net nežinosite.

Akivaizdu, kad tai yra problema. Ir jūs galite pagalvoti: „Bet kompiliatoriai yra kompiuterinės programos, kaip ir bet kuri kita. Galėčiau pažvelgti į savo kompiliatoriaus išeities kodą ir įsitikinti, kad ten nėra kenksmingo kodo. Viskas, ką turėčiau padaryti, tai surasti tą dalį, kurioje pasakojama apie „ryaniscool“ pridėjimą kaip slaptažodį, išimti ir man viskas bus gerai. Ar taip?

Ir galėtum. Išskyrus, kaip jūs sakėte, kompiliatoriai yra kompiuterinės programos, kaip ir bet kuri kita. Ir tai reiškia, kad jie patys yra sudaryti.

Štai viskas, ką turėčiau padaryti, kad galėčiau tuo pasinaudoti:

1 žingsnis

Kaip ir anksčiau, aš rašyčiau kodą, kuris prideda „ryaniscool“ kaip teisingą slaptažodį viskam, ką jis sukompiliuotų, ir įdėčiau jį į kompiliatorių. Šiuo metu pridedu galines duris bet kuriai kompiliatoriaus kompiliacijai, bet susipainioju, jei kas nors pažvelgs į mano kompiliatoriaus šaltinį. Taigi pereinu prie 2 žingsnio.

2 žingsnis

Aš rašau kodą kompiliatoriui, kuris nustato, kada jis pats susideda, o kai tai atsitinka, jis prideda 1 žingsnio kodą į kompiliatorių. Dabar, kai komponuoju kompiliatorių, jis sukuria naują versiją, į kurią kompiliatorius prideda instrukcijas, kaip įterpti „ryaniscool“ slaptažodį, kai kompiliatorius atstatomas. Ir kad padaryčiau savo takelius, viskas, ką turėčiau padaryti, yra pašalinti kenkėjiškas instrukcijas iš kompiliatoriaus šaltinio, ir aš tai padariau.

Kai tik kompiliatorius bus atstatytas, jis bus sukurtas taip, kad jame būtų instrukcijos, kaip pridėti mano galines duris. Kai tik tas kompiliatorius sukuria ką nors kitą, jis vykdys šias instrukcijas ir mano durys bus pastatytos tiesiai į vidų. Bet kuriame šaltinyje, kuris jį atskleis, nebus palikta nė vienos kenksmingo kodo eilutės.

Vienintelis būdas aptikti šią klaidą yra pats pereiti dvejetainį kodą - užduotis, kuri prasideda sunkiai ir tampa tiesiog neįmanoma, nes programos tampa sudėtingesnės. Pilni Williamo Shakespeare'o darbai pateikiami iki 6 megabaitų. Vien tik „Firefox“ naršyklei reikia 200 megabaitų, kad ją įdiegtumėte. Tai tik viena programa jūsų kompiuteryje. Nėra nė vieno gyvo žmogaus, kuris būtų perskaitęs visus 200 megabaitų to kodo. Jis net nėra parašytas kalba, sukurta žmonėms skaityti.

Kodėl mes naudojame šias košmariškas mašinas?

Nei vienas iš jų nėra naujas. 1984 m. Kenas Thompsonas - žmogus, kuris suprojektavo ir įdiegė „Unix“ - operacinių sistemų, kuriomis naudojasi dauguma kompiuterių ir telefonų, pradininką - pristatė darbą pavadinimu „Reflections on Trusting Trust“ ir priėjo prie šios išvados:

Moralas yra akivaizdus. Negalite patikėti kodu, kurį sukūrėte ne pats ... Nei vienas šaltinio lygio patikrinimas ar tikrinimas neapsaugos jus nuo nepatikimo kodo naudojimo.

Kenas, „visiškai susikurdamas save“, reiškia ne tik programą, kurią parašėte, bet ir tą, kuriai parašėte visą krūvą: viską iki kompiliatoriaus. Labai nedaugelis žmonių turi laiko, įgūdžių ir pinigų, kad nuo pat pradžių sukurtų kompiuterį, įskaitant visą jame esančią programinę įrangą. Atrodytų, kad tai kulka į galvą, kad kompiuteriais gali pasitikėti bet kuo.

Ir vis dėlto kompiuteriais mes pasitikime visokiais dalykais. Taigi, kas duoda? Kodėl mes naudojame šias košmariškas mašinas?

Na, viena vertus, kompiuteriai yra tikrai linksmi ir patogūs. Jie yra praktiški įvairiais būdais. Be to, kompiliatorių nulaužimas gali būti sudėtingas, norint praktiškai atsisakyti: jums reikia laiko ir motyvacijos nukreipti į ką nors. Tiesa yra tokia, kad daugeliu atvejų nereikia visiškai pasitikėti savo kompiuteriu: juk kažkas nesibaigia, jei kas nors įsilaužia ir mato, kad mano pica pristatoma. Niekas nerūpi, kad bandytų tai sulaužyti.

Tačiau balsavimas nėra vienas iš tų atvejų.

Vienintelis saugus būdas balsuoti kompiuteriu yra toks, kai popierinis balsavimo biuletenis atspausdinamas rinkėjo akivaizdoje, patvirtinamas ir laikomas rinkimų dėžutėje.

Balsavimas yra atvejis, kai įsilaužimo rezultatas gali turėti didžiulį poveikį. Taip pat palyginti lengva balsuoti (jūs žinote, kada ir kur tai įvyks), todėl yra labai stipri motyvacija pakeisti rezultatą. Kaip lengvai galėjau pridėti „ryaniscool“ slaptažodį, galėjau pakeisti komandą „pridėti“ taip, kad, balsuojant, balsai būtų papildomi mano pasirinkta partija.

Kiek turėčiau pridėti? Sąžiningai, šiuo metu tai visiškai priklauso nuo manęs. Taigi ši išvada: balsavimas internetu niekada nebus saugus. Balsavimas kompiuteriu niekada nebus saugus.

Vienintelis saugus būdas balsuoti kompiuteriu yra toks, kai popierinis balsavimo biuletenis atspausdinamas rinkėjo akivaizdoje, patvirtinamas ir laikomas rinkimų dėžutėje. Tokiu būdu, jei kas nors mano, kad kompiuterinėms sistemoms kilo pavojus - jei iš viso yra pagrindo įtarti, kad kažkas netinkamai pridėjo balsus -, tai yra popierinis takas. Kitaip tariant, kompiuteris, sudedantis balsus, yra patogumas, nieko daugiau. Tikrasis balsavimas, tikroji galia vis dar slypi popieriniame balsavime.

Neturėdami šio popieriaus takelio, galėsite pasitikėti kompiuteriu.

Ir niekas niekada neturėtų pasitikėti kompiuteriu.

ATNAUJINIMAI:

Diskusijoje apie šį rašinį buvo keletas pasikartojančių temų, todėl maniau, kad įtrauksiu jas čia į Q + A formatą! Aukščiau esė nepakeista, bet aš maniau, kad žemiau esanti informacija gali būti naudinga, jei norėtumėte daugiau perskaityti šia tema!

Kl .: ką jūs turite omenyje kompiuteriniu balsavimu?

A: Aš kalbu apie sistemą, kurioje jūs išimtinai balsuojate kompiuteriu: popieriaus pėdsakai nesukuriami. Tokiu atveju kompiuteris yra institucija, už kurią balsavote: nėra jokio kito šaltinio, kurį galėtumėte dar kartą patikrinti.

Etinis ir saugesnis būdas naudoti kompiuterius balsuojant yra naudoti juos ne kaip autoritetą, o kaip patogumą. Jei balsuosite popieriniame balsavime ir kompiuteris nuskaitys tai, kad būtų pridėtas rezultatas, galite jaustis saugiau, nes jei kas nors nutinka, vis tiek yra fizinis popieriaus takas. Jei balsuosite kompiuteriu, bet tada išspausdins popierinį balsavimo biuletenį, kurį turite patvirtinti kaip teisingą, prieš įrašydami savo balsavimą, taip pat galite jaustis saugesnis, nes abiem atvejais kompiuteris yra jūsų patogumas. Problemos kyla tada, kai kompiuteris tampa autoritetu.

Kl .: Ar to negalima išspręsti suteikiant kiekvienam balsuojančiam asmeniui slaptą kodą ar kažkokį raktą, o gal galėtume biometriškai nuskaityti jų akis ar pirštų atspaudus ar ką nors kita? Ar kas būtų, jei mes balsuotume kažkur internete balsuodami po antrojo balsavimo?

A: Ne. Kodai ir raktai gali būti perimami ar dubliuojami, o bet koks biometrinis skaitytuvas būtų kompiuteris, pažeidžiamas tų pačių čia aptariamų problemų. Bet kokia tinkle sujungta sistema - kai kompiuteris dalijasi balsu, kad ji būtų kuriama kur nors kitur - vėlgi priklauso nuo to, ar ji nepažeista. Atsiprašau.

Kl .: Gerai, bet gal mes galime išbandyti savo programas ir išsiaiškinti, ar mūsų sudarytas kodas veikia kitaip, nei tikimės?

Ats .: Tai neveikia dėl kelių priežasčių. Be abejo, mano pavyzdyje „pakeiskite 10 + 20 vertės pridedamą vertę“, tai būtų lengva išbandyti ir užfiksuoti bet kokius pakeitimus. Bet net jei galvojate išbandyti tai pirmiausia - ir kodėl gi jūs? - tai vis tiek neišsprendžia problemos. Mano kenkėjiškas kodas gali aptikti, kai jis yra išbandytas, ir padaryti nieko blogo, suaktyvėti tik tada, kai neieškote.

Skamba scifi, tiesa?

Na, tai jau padaryta: 2015 m. „Volkswagen“ išmetamųjų teršalų skandalo metu automobilio borto kompiuteriai aptiko, kai buvo bandomos jų išmetamos dujos, važiavo mažos galios aplinkai nekenksmingu režimu, o bandymo metu perėjo į didelės galios teršimo režimą. . Kompiuteriai, aptikti, kai jie buvo testuojami, elgėsi geriausiai, o tada, kai baigėsi testas, sustojo. Šis skandalas „Volkswagen“ kainavo 18,32 milijardo dolerių, beje, kad neįtvirtintų jų sumokėtos 2,8 milijardo dolerių baudos.

Vienintelė priežastis, kodėl „Volkswagen“ taip pasielgs, yra ta, kad jiems tai būtų pelninga, ir jie manė, kad jie nebus sugauti. Tos pačios paskatos galioja ir rinkimuose.

Kl .: Jei esu priverstas balsuoti kompiuteriu, ar tai reiškia, kad neturėčiau balsuoti?

A: Ne, vis tiek turėtumėte balsuoti. Pasikišimo į rinkimus tikslas yra atsisakyti jūsų teisių. Jei nebalsuojate, jau atleidžiate nuo mokesčio, naudodamiesi visu 100% efektyvumu. Eikite balsuoti, o po to darykite tai, ką turite padaryti, kad niekada daugiau nebegalėtumėte naudotis kompiuteriniu balsavimu.

Kl .: Ar tai reiškia, kad neturėtume niekuo pasitikėti kompiuteriais?

A: Absoliučia prasme: taip. Neturėtumėte 100% tikėti jokia kompiuterine sistema. Bet tai akivaizdžiai nėra praktiška ir daugeliu atvejų nereikia 100 proc. Tikėti kompiuteriu. Vienas iš nedaugelio atvejų, kai norėtumėte balsuoti. Kitas klausimas nagrinėjamas išsamiau.

Klausimas: Eime. Mes užsiimame bankininkyste internetu, milijardai dolerių kiekvieną dieną juda skaitmeniniu būdu, o jūs netgi tai rašėte kompiuteryje. Ar tikrai esate nerimą keliantis ir (arba) veidmainis?

A: Čia iškyla absoliutaus pasitikėjimo idėja. Aš visiškai nepasitikiu kompiuteriais, bet darau banką internetu. Bet taip yra todėl, kad jei kažkas nutiks ne taip, bankas gali tai sutvarkyti vėliau. Jūs naudojate kreditinę kortelę, žinodami, kad yra tikimybė, kad jūsų informacija gali būti pavogta. Bet jei taip atsitiks, pasitikite, kad kredito kortelių įmonė ją ištaisys. Jie taip ir padarys, nes pelnas, kurį jie gauna iš jūsų naudodamiesi savo kortele kasdien, padengia apgaulės ir sugadintos programinės įrangos išlaidas.

Bet nėra galimybės ištaisyti įvykusių rinkimų po fakto.

Visa tai yra kompromiso dalykas: paskelbti šią informaciją internete buvo patogu, ir aš tai padariau žinodama, kad mano žodžiai gali būti pakeisti. Kyla rizika, kad jie gali būti, bet galų gale tai nėra pasaulio pabaiga. Maži įnašai, o nauda viršija pranašumus. Aš taip pat darau bankininkystę internetu - kadangi tai taip pat patogu, todėl noriu padaryti kompromisą, nes žinau, kad nors yra tikimybė, kad mano duomenys ir (arba) pinigai gali būti pavogti, aš jaučiuosi gana tikras, kad bankas juos padengs. Taip, aš naudoju kompiuterius, kad nusiųstu draugams 10 USD, kad sumokėčiau jiems už vakarienę, bet aš tai darau, nes tik tiek mažai kainuoja. Tai tik 10 USD.

Balsavimo metu statymai nėra žemi.

Ir rinkimų sistema - demokratija - nėra tas dalykas, dėl kurio norite kompromituoti.

Klausimas: O kaip „blockchain“? Turėtumėte paminėti „grandininę grandinę“. Tai nauja technologija, kurios nebuvo 1984 m. Ir kuri tikrai galėtų išspręsti šią problemą.

A: Ne, ne, ne. Atsiprašau. Linkiu, kad ji taip pat veiktų.

Kl: jūs nežinote, apie ką jūs kalbate, ir kas jus pavertė autoritetu? Kodėl turėčiau tavimi pasitikėti?

A: Kaip aš sakau esė, tai nėra mano puikios idėjos. Iš esmės perfrazavau tai, ką Kenas Thompsonas teigė 1984 m., Savo knygoje „Reflections on Trusting Trust“. Keno argumentas iš tikrųjų yra stipresnis: jo pavyzdys yra prisijungimo programa, kurios analogas naudojamas beveik kiekviename kompiuteryje. Aš kalbu tik apie balsavimą. Keno dokumentas jau 30 metų yra pagrindinis kompiuterių mokslo leidinys, tačiau jis nėra gerai žinomas išorės kompiuterių srityse. Štai kodėl aš norėjau parašyti šią esė.

(Tarp kitko, yra būdas ištaisyti Keno iškeltas ir perfrazuotas problemas: kodą galėtum sudėti du kartus, vieną kartą naudodamas naują kompiliatorių ir vieną kartą su gerai žinomu kompiliatoriumi. Jei palyginsite du išėjimus, o jie yra Be to, jūs žinote, kad jūsų sudarytojas yra geras. Tai, be abejo, kelia klausimą, iš kur jūs galėtumėte gauti tą žinomą, gerą kompiliatorių - štai doktorantūros darbas šia tema).

Klausimas: Gerai, tikrai tai gana bloga, bet visa tai hipotetinė. Mes naudojame kompiuterius, norėdami valdyti branduolinius reaktorius, garsiai šaukti. Jei viskas nebuvo saugu, mes apie tai žinotume.

A: Labai panaši į čia aptartą ataką, kurioje buvo paslėpti užpuolimo įrodymai, realiame gyvenime buvo padaryta vos prieš kelerius metus, su „Stuxnut“ kirminu 2010 m. .

Šios atakos jau vyksta. Oi.

Kl .: Kompiuterinis balsavimas gali būti blogas, bet jūs galite pakeisti ir popierinius balsavimo biuletenius. Jie taip pat nėra tobuli.

A: Visiškai. Tačiau popieriniai balsavimo biuleteniai turi keletą didžiulių pranašumų: jų pranašumai yra gerai suprantami (niekas nerašo didelių esė apie tai, kodėl jūsų popieriumi negalima pasitikėti), o jų pažeidžiamumas apsiriboja fizine prieiga.

Jei noriu suklaidinti rinkimus popieriniame balsavimo biuletenyje, aš turiu arba pavogti balsavimo biuletenius, arba pakeisti balsavimo biuletenius, arba užpildyti balsavimo biuletenius - bet kokiu atveju man reikia fizinės prieigos prie tos balsavimo dėžės. Ir tai riboja žalos, kurią gali padaryti blogas aktorius, dydį. Nuobodus paauglys, esantis pusė pasaulio, negali išrūsti popieriuje iš savo rūsio. To negalima pasakyti apie kompiuterinį balsavimą.

Ir visa tai yra paprastas faktas: programuotojai nėra tobuli. Net jei ataka šioje esė nėra naudojama, tai nereiškia, kad jūsų kompiuterio balsavimo sistema yra saugi. Heck, „Google“ - kuris, manau, kad mes visi galime susitarti pasamdyti labai protingų žmonių - turi atlaidų sistemą, kurioje jie moka jums grynųjų pinigus, jei padėsite jiems rasti klaidų savo programinėje įrangoje, nes jie negali garantuoti, kad nepadarė klaidų.

Programinės įrangos programavimas yra sunkus. Kompiuteriai yra sunkūs. Net puikus, geranoriškas programinės įrangos kūrėjas gali padaryti vieną klaidą, atveriančią visą programinės įrangos krūvą įsilaužimui. „Heartbleed“ klaida buvo atsitiktinai pristatyta 2011 m. - naudojant atvirojo kodo programinę įrangą, kurią teoriškai bet kuris planetos asmuo galėjo apžiūrėti, ištirti ir aptikti, tačiau ji nebuvo rasta iki 2014 m., Kurioje 17% interneto serverių dabar buvo pažeidžiami.

Tai buvo padaryta atsitiktinai. Įsivaizduokite, ką kažkas gali padaryti, jei bandytų.

Žiūrėk, aš žinau, kad sunku girdėti, kad balsavimas kompiuteriu yra blogas. Labai sunku įsivaizduoti, kaip lauke, fizinėje erdvėje, kai taip lengva įsivaizduoti, kad per savo pietų pertrauką balsuosite tik dėl telefono telefono programos ir galėsite ją padaryti. Tačiau svarbiau nei tai, kad rinkimai yra patogūs, ar jie tikslūs, ir nors balsuoti kompiuteriu tikrai būtų patogu, tikiuosi, kad įsitikinau, jog neturėtumėte patikėti, kad jie bus tikslūs.

Kl: Ar yra atitinkamas xkcd?

A: Visada yra atitinkamas xkcd.