2018 년입니다. 우리는 미래에 살고 있습니다. 우리는 피자를 주문하고, 만드는 것을보고, 우리 집에 배달되는 것을 볼 수 있습니다. 그렇다면 왜 온라인으로 투표 할 수 없습니까?

프로그래밍 언어가 무엇인지, 왜 우리가 필요한지에 대한 배경 지식부터 시작하겠습니다. 곧 온라인 투표를하지 말아야 할 이유와 투표를 할 때 가까운 곳에서 컴퓨터를 원하지 않는 이유를 알게 될 것입니다.

컴퓨터가 이진, 1과 0에서 실행되는 것을 알고있을 것입니다. 그리고 이진법으로 작성하는 것은 어렵습니다. 사실, 기본적으로 아무도 그것을 원하지 않습니다. 성공적으로 작업을 수행하더라도 생성하는 작업은 많은 숫자 일 뿐이며 작성한 코드를 잊어 버린 후 몇 주 동안 사용자를 포함하여 코드를 파악하기가 매우 어려울 수 있습니다. 실제로 않습니다.

대신에 우리 컴퓨터 과학자들은“기계 언어”를 발명했습니다. 이것은 이진 코드를 인간이 말하는 언어에 조금 더 가까운 것으로 바꾸는 추상화입니다. 여전히 기본이지만 올바른 방향으로 나아가는 단계입니다. 기계 언어는 모든 기계의 하드웨어를 기반으로하며 그와 관련이 있습니다. 따라서 "10과 20을 더한 다음 화면에 결과를 인쇄하십시오"와 같은 쉬운 말을 할 수 없지만 "값 10을 레지스터 1에 배치하고 값 20을 레지스터 2에 배치하고 두 레지스터를 모두 공급하십시오"라고 말할 수 있습니다. 가산기 1을 추가하고 출력을 레지스터 3에 넣고 레지스터 3의 내용을 화면에 인쇄합니다.”기계 언어는 컴퓨터에서 실제로 실행하는 데 필요한 이진 1과 0으로 변환됩니다 ( "컴파일"이라고 함). .

여기에는 명백한 단점이 있습니다. 기계어로 작성하려면 컴퓨터의 하드웨어에 익숙해야하며 모든 컴퓨터의 아키텍처는 약간 다릅니다. 또한 프로세스의 모든 단계를 명시 적으로 지정해야합니다. 아파요 그러나 기계 언어로 작성된 프로그램을 살펴보면 진행 상황이 훨씬 명확합니다. 특히 이진수로 끝없는 1과 0의 스트림을 보는 것과 비교할 때 더욱 그렇습니다.

무엇을 작성하든, 이진 코드로 작성한 내용을 정확하게 변환하기 위해 컴파일러를 신뢰합니다. 결과를 엉망으로 만들고 싶다면 컴파일러와 엉망입니다.

다음 단계는 하드웨어를 추상화하는 것이므로 실제로 "adders"및 "registers"와 같은 위치를 알 필요가 없습니다. 똑똑한 충분한 컴파일러를 구축하면 기계 독립적 인 프로그래밍 언어를 설계 할 수 있습니다. "10과 20을 더한 다음 화면에 결과를 인쇄하십시오"와 같은 것들을 쉽게 처리 할 수있는보다 추상적 인 지침이 있습니다. 그런 다음 컴파일러를 사용하여 기계 언어로 번역 한 다음 이진으로 번역합니다.

이러한 모든 프로그래밍 언어는이 문제를 해결하기 위해 서로 다른 접근 방식을 취하지 만, 동일한 목표를 공유합니다. 사람이 컴퓨터 코드를보다 쉽게 ​​읽을 수 있도록하여 이해하기 쉽고 유지 관리하기가 더 쉽습니다. 오늘날 프로그래밍 언어는 다음과 같이 간단하게 10 + 20의 결과를 인쇄합니다.

10 + 20 인쇄

컴퓨터를 신뢰할 수없는 이유를 발견 했습니까?

힌트를 드리겠습니다 : 컴파일러 안에 있습니다.

무엇을 작성하든, 이진 코드로 작성한 내용을 정확하게 변환하기 위해 컴파일러를 신뢰합니다. 결과를 엉망으로 만들고 싶다면 컴파일러와 엉망입니다.

예를 들어,“인쇄”명령을 변경하여 입력 한 숫자에 항상 1을 추가하면 프로그램을 올바르게 프로그래밍하더라도 프로그램이 제대로 실행되지 않습니다. 결함이있는 곳이 아니기 때문에 소스 코드를 보면 결함을 찾을 수 없습니다. 컴파일러에 숨겨져 있습니다.

이 예제는 기본이며 프로그램이 손상되었을 수 있으므로 매우 빨리 감지 할 수 있습니다. 하지만 더 미묘한 일을하면 “print”명령을 사용하는 대신 암호와 관련된 코드를 감지 할 때마다 암호“ryaniscool”도 작동하도록 컴파일러를 변경 한 경우 어떻게됩니까?

누군가가 해킹하여 내 피자가 배달되는 것을 보는 것이 세상의 끝이 아닙니다. 아무도 그것을 깨뜨 리려고 충분히 신경 쓰지 않습니다. 그러나 투표는 그러한 경우 중 하나가 아닙니다.

그렇게하면 컴파일러로 구축 한 모든 컴퓨터 프로그램에 "백도어 (back door)"라는 이름이 붙습니다. 다시 말해, 당신이 원하는 모든 정문을 잠글 수 있지만, 아무도 모르는 비밀 문이 있기 때문에 중요하지 않습니다. 당신이 무엇을 작성하든, 암호 코드가 아무리 안전하더라도, "ryaniscool"의 암호도 작동 할 것입니다.

분명히 이것은 문제입니다. “하지만 컴파일러는 다른 컴퓨터 프로그램과 같은 컴퓨터 프로그램입니다. 컴파일러의 소스 코드를보고 악성 코드가 없는지 확인할 수 있습니다. ‘ryaniscool’을 비밀번호로 추가하는 방법에 대해 이야기하는 부분 만 찾아 내면됩니다. 권리?"

그리고 당신은 할 수 있습니다. 당신이 말했듯이 컴파일러는 다른 컴퓨터 프로그램과 같습니다. 그리고 그것은 그들 스스로 컴파일되었음을 의미합니다.

이를 악용하기 위해해야 ​​할 일은 다음과 같습니다.

1 단계

이전과 마찬가지로 컴파일 할 때 "ryaniscool"을 유효한 암호로 추가하고이를 컴파일러에 넣는 코드를 작성했습니다. 이 시점에서 컴파일러가 컴파일하는 모든 것에 백도어를 추가하고 있지만 누군가 내 컴파일러의 소스를 보면 잡힐 것입니다. 2 단계로 넘어갑니다.

2 단계

컴파일러 자체를 컴파일하는시기를 감지하는 컴파일러 용 코드를 작성하고이 경우 컴파일러가 1 단계 코드를 컴파일러에 추가합니다. 이제 컴파일러를 컴파일 할 때 컴파일러가 다시 빌드 될 때마다 "ryaniscool"암호를 삽입하는 방법에 대한 컴파일러 지침을 추가 할 수있는 새로운 버전의 컴파일러가 만들어졌습니다. 내 트랙을 다루려면 컴파일러 소스에서 악의적 인 지침을 제거하기 만하면됩니다.

컴파일러가 재 빌드 될 때마다 내 백도어를 추가하기위한 지시 사항을 포함하도록 자체 빌드됩니다. 해당 컴파일러가 다른 것을 구축 할 때마다 해당 지침을 따르고 백도어를 바로 구축합니다. 소스 코드에는 한 줄의 악성 코드가 남아 있지 않습니다.

이 버그를 탐지 할 수있는 유일한 방법은 바이너리 코드를 직접 살펴 보는 것입니다. 프로그램은 점점 복잡해지면서 완전히 시작되어 문자 그대로 불가능합니다. 윌리엄 셰익스피어의 전체 작품은 6 메가 바이트 미만으로 제공됩니다. Firefox 브라우저만으로는 설치하기 위해 200MB가 필요하며 이는 컴퓨터에서 하나의 프로그램 일뿐입니다. 200MB의 코드를 모두 읽은 사람은 아직 없습니다. 인간이 읽을 수있는 언어로 쓰여지지 않았습니다.

우리는 왜이 악몽 기계를 사용합니까?

이 중 새로운 것은 없습니다. 1984 년, 대부분의 컴퓨터와 전화가 운영되는 운영 체제의 대표자 인 Unix를 디자인하고 구현 한 Ken Thompson은“신뢰에 대한 반사”라는 논문을 발표했으며 다음과 같은 결론에 도달했습니다.

도덕은 분명하다. 자신을 완전히 만들지 않은 코드는 신뢰할 수 없습니다 ... 소스 수준의 검증이나 정밀 조사를 통해 신뢰할 수없는 코드를 사용하지 못하도록 보호 할 수 있습니다.

"완전히 자신을 창조"한다는 것은 Ken이 작성한 프로그램을 의미하는 것이 아니라 컴파일러에 이르기까지 전체 스택을 작성한 프로그램을 의미합니다. 컴퓨터의 모든 소프트웨어를 포함하여 처음부터 컴퓨터를 구축 할 시간, 기술 및 돈을 가진 사람은 거의 없습니다. 이것은 무엇이든 컴퓨터를 신뢰하는 데있어 가장 중요한 요소 인 것 같습니다.

그러나 우리는 모든 종류의 것들을 가진 컴퓨터를 신뢰합니다. 그래서 무엇을 제공합니까? 우리는 왜이 악몽 기계를 사용합니까?

우선, 컴퓨터는 정말 재미 있고 편리합니다. 그리고 그들은 많은 방법으로 실용적입니다. 게다가 컴파일러 해킹은 실제로 까다로울 수 있습니다. 누군가를 타겟팅하려면 시간과 동기가 필요합니다. 진실은 컴퓨터를 절대적으로 신뢰하지 않아도되는 경우가 많다는 것입니다. 결국 누군가가 해킹하여 피자가 배달되는 것을 보는 것은 세상의 끝이 아닙니다. 아무도 그것을 깨뜨 리려고 충분히 신경 쓰지 않습니다.

그러나 투표는 그러한 경우 중 하나가 아닙니다.

컴퓨터와 투표하는 유일한 안전한 방법은 유권자를 위해 종이 투표지를 인쇄하여 승인 한 다음 투표함에 보관하는 것입니다.

투표는 해킹의 결과가 큰 영향을 미칠 수있는 경우입니다. 투표는 상대적으로 타겟팅하기 쉬우 며 (언제 어디서 언제 진행 될지 알 수 있음) 결과를 변경하려는 동기는 매우 강력합니다. “ryaniscool”암호를 쉽게 추가 할 수있는 것처럼,“add”명령을 변경하여 투표권을 행사할 때 선택한 당사자를 위해 추가 정보를 추가 할 수있었습니다.

얼마나 추가해야합니까? 솔직히이 시점에서 그것은 전적으로 나에게 달려 있습니다. 따라서이 결론은 온라인 투표가 결코 안전하지 않을 것입니다. 컴퓨터 투표는 안전하지 않습니다.

컴퓨터와 투표하는 유일한 안전한 방법은 유권자를 위해 종이 투표지를 인쇄하여 승인 한 다음 투표함에 보관하는 것입니다. 이렇게하면 누군가 컴퓨터 시스템이 손상되었다고 생각하는 경우 (누군가가 표를 부적절하게 추가 한 것으로 의심 될만한 이유가있는 경우)에는 종이 흔적이 있습니다. 다시 말해, 투표를 합산하는 컴퓨터는 더 이상 편리하지 않습니다. 실제 투표, 실제 권한은 여전히 ​​투표 용지에 있습니다.

이 문서가 없으면 컴퓨터를 신뢰하게됩니다.

그리고 아무도 컴퓨터를 신뢰해서는 안됩니다.

업데이트 :

이 에세이와 관련된 토론에서 되풀이되는 주제가 있었으므로 여기에 Q + A 형식으로 통합 할 것이라고 생각했습니다. 위의 에세이는 변경되지 않았지만이 주제에 대해 더 자세히 읽고 싶다면 아래가 유용 할 것이라고 생각했습니다.

Q : 컴퓨터 투표는 무엇을 의미합니까?

A : 컴퓨터에서 독점적으로 투표하는 시스템에 대해 이야기하고 있습니다. 용지 추적이 생성되지 않습니다. 이 경우 컴퓨터가 투표 대상에 대한 권한을 갖습니다. 다시 확인할 수있는 다른 출처는 없습니다.

투표에서 컴퓨터를 사용하는 윤리적이고 안전한 방법은 컴퓨터를 권위가 아니라 편의로 사용하는 것입니다. 종이 투표지에 투표하고 컴퓨터가 그 결과를 추가하기 위해 스캔 한 경우 더 안전하다고 느낄 수 있습니다. 문제가 발생해도 여전히 물리적 인 종이 흔적이 있기 때문입니다. 컴퓨터에서 투표하지만 투표가 기록되기 전에 정확한 것으로 확인해야하는 투표 용지를 인쇄하면 두 가지 상황 모두에서 컴퓨터가 편리하기 때문에 더 안전하다고 느낄 수 있습니다. 컴퓨터가 문제가 발생하는 권한이되는시기입니다.

Q : 비밀 코드 나 일종의 열쇠를 투표하는 사람마다 각자의 눈이나 지문 등을 생체 적으로 스캔하여 해결할 수 없습니까? 아니면 두 번째로 인터넷에서 투표를했을 경우 어떻게됩니까?

A : 아닙니다. 코드와 키는 가로 채거나 복제 될 수 있으며, 생체 인식 스캐너는 여기에서 논의 된 것과 동일한 문제에 취약한 컴퓨터 일 것입니다. 그리고 컴퓨터가 다른 곳에서“백업”하기 위해 투표를 공유하는 모든 네트워크 시스템은 다시 변조되지 않는 시스템에 의존합니다. 죄송합니다.

Q : 그래도 프로그램을 테스트하고 컴파일 된 코드가 예상 한 것과 다르게 작동하는지 확인할 수 있습니까?

A : 몇 가지 이유로 작동하지 않습니다. 물론,“10 + 20이 합산하는 것의 가치를 바꾸십시오”예에서, 그것은 쉽게 테스트하고 변경 사항을 포착 할 수 있습니다. 그러나 처음부터 그것을 시험해 보려고했는데 왜 그런가? 그래도 문제가 해결되지 않습니다. 내 악성 코드는 테스트중인시기를 감지하고 나쁘지 않은 것으로 감지하지 않을 때만 활성화됩니다.

공상 과학 같은데?

이미 완료되었습니다 : 2015 폭스 바겐 배출 스캔들에서 자동차의 온보드 컴퓨터는 배기 가스가 테스트 될 때 감지되어 저전력 환경 친화적 모드로 실행되었으며 테스트가 끝나면 고전력 오염 모드로 전환되었습니다. . 컴퓨터는 테스트 할 때 감지하고 최상의 동작을 수행 한 다음 테스트가 끝나면 중지되었습니다. 이 스캔들은 폭스 바겐이 지불 한 미화 28 억 달러의 벌금을 포함하지 않는 데 183 억 3 천만 달러가 들었다.

폭스 바겐이 처음부터 이것을하는 유일한 이유는 그것이 수익성이 있고 그들이 잡히지 않을 것이라고 생각했기 때문입니다. 선거에도 동일한 인센티브가 적용됩니다.

Q : 컴퓨터에서 투표를해야만 투표를해서는 안됩니까?

A : 아닙니다. 어쨌든 절대적으로 투표해야합니다. 선거에서 방해의 목적은 당신을 탈퇴시키는 것입니다. 투표하지 않으면 이미 100 % 효율성으로 자신을 해산 한 것입니다. 투표를하고 나서 컴퓨터 투표를 다시 사용할 필요가 없도록하기 위해 필요한 조치를 취하십시오.

Q : 컴퓨터를 신뢰해서는 안된다는 의미입니까?

A : 절대적인 의미에서 : 그렇습니다. 컴퓨터 시스템을 100 % 신뢰해서는 안됩니다. 그러나 그것은 실용적이지 않으며 대부분의 경우 컴퓨터에 100 % 믿음을 가질 필요는 없습니다. 투표를하는 몇 안되는 경우 중 하나입니다. 다음 질문은 이에 대해 더 자세히 설명합니다.

Q : 어서. 우리는 온라인 뱅킹을하고 매일 수십억 달러를 디지털 방식으로 움직이며 컴퓨터에도이를 썼습니다. 확실히 당신은 경보적이고 위선적입니까?

A : 절대 신뢰라는 개념이 시작됩니다. 컴퓨터를 절대 신뢰하지는 않지만 온라인으로 은행을 운영합니다. 그러나 문제가 발생하면 은행에서 나중에 문제를 해결할 수 있기 때문입니다. 신용 카드를 사용하면 정보를 도난 당할 가능성이 있다는 사실을 알고 있지만 신용 카드 회사가이를 해결할 것이라고 확신합니다. 그리고 그들은 – 매일 매일 카드를 사용함으로써 얻는 이익이 사기와 깨진 소프트웨어에 대한 비용을 보상하기 때문에 가능합니다.

그러나 사실 이후에 부러진 선거를 바로 잡을 방법은 없습니다.

이 모든 것은 타협의 문제입니다. 온라인으로 게시하는 것이 편리했으며 내 말이 변경 될 수 있다는 것을 알았습니다. 위험이있을 수 있지만 결국은 세상의 끝이 아닙니다. 낮은 지분과 이익은 단점보다 중요합니다. 마찬가지로 온라인 뱅킹도 편리합니다. 또한 데이터 및 / 또는 돈을 도난 당할 가능성이 있지만 은행이이를 처리 할 것이라고 확신하기 때문에 타협 할 의향이 있습니다. 그리고 네, 컴퓨터를 사용하여 친구에게 10 달러를 보내 저녁 식사를 위해 상환했지만, 스테이크가 너무 낮아서 그렇게합니다. 10 달러 밖에 안 돼요

투표와 관련해서는 스테이크가 적지 않습니다.

그리고 선거 제도 (민주주의)는 당신이 타협하고자하는 것이 아닙니다.

Q : 블록 체인은 어떻습니까? 블록 체인에 대해 언급 했어야했는데, 1984 년에는 존재하지 않았으며이 문제를 확실히 해결할 수있는 새로운 기술입니다.

A : 아뇨, 아뇨. 죄송합니다. 나는 그것이 효과가 있었으면 좋겠다.

Q : 무슨 말을하는지, 누가 자신을 권위자로 삼았는지 모르겠습니까? 왜 널 믿어야합니까?

A : 에세이에서 말했듯이 이것들은 저의 훌륭한 독창적 인 아이디어가 아닙니다. 저는 기본적으로 Ken Thompson이 Trusting Trusting Trust 논문에 1984 년에 주장한 내용을 다시 말하고 있습니다. Ken의 주장은 실제로 더 강력합니다. 그의 예제는 거의 모든 컴퓨터에서 사용되는 유사 프로그램 인 로그인 프로그램입니다. 나는 단지 투표에 대해 이야기하고 있습니다. Ken의 논문은 30 년 이상 컴퓨터 과학에서 중요한 논문으로 사용되었지만 외부의 컴퓨터 과학 분야에서는 잘 알려져 있지 않습니다. 그래서이 글을 쓰고 싶었습니다.

(우연히도 Ken이 제기하고 문제를 해결하는 방법이 있습니다. 새 컴파일러로 한 번, 잘 알려진 컴파일러로 한 번 코드를 두 번 컴파일 할 수 있습니다. 두 출력을 비교하면 물론, 당신은 컴파일러가 좋다는 것을 알고 있습니다. 물론 이것은 잘 알려진 컴파일러를 어디에서 얻을 수 있는지에 대한 질문을 제기합니다. 여기에는 그 주제에 관한 박사 학위 논문이 있습니다).

Q : 좋아, 이건 확실히 dour이지만 이것은 모두 가정적인 것입니다. 우리는 큰 소리로 외치기 위해 컴퓨터를 사용하여 원자로를 제어합니다. 상황이 안전하지 않다면 알게 될 것입니다.

A : 공격의 증거가 숨겨져있는 여기에서 논의 된 것과 매우 유사한 공격이 불과 몇 년 전에 실생활에서 이루어졌으며, 2010 년 Stuxnut 웜이 그 공격을 받았습니다. .

이러한 공격은 이미 일어나고 있습니다. 으악.

Q : 컴퓨터 투표는 좋지 않지만 용지 투표도 변경 될 수 있습니다. 그들은 완벽하지도 않습니다.

A : 물론입니다. 그러나 종이 투표 용지는 몇 가지 큰 장점이 있습니다. 단점은 잘 이해되고 있으며 (아무도 종이를 신뢰할 수없는 이유에 대한 큰 수필을 작성하는 사람은 없음) 취약점은 물리적 액세스로 제한됩니다.

투표 용지 선거를 엉망으로 만들려면 투표 용지를 훔치거나 투표 용지를 변경하거나 투표 용지를 넣어야합니다. 투표 용지에 물리적으로 접근해야합니다. 그리고 그것은 악의적 인 행위자가 할 수있는 피해의 양을 제한합니다. 세계 절반의 지루한 십대는 지하실에서 종이 투표를 할 수 없습니다. 컴퓨터 투표에서도 마찬가지입니다.

그리고 무엇보다도 프로그래머가 완벽하지 않다는 간단한 사실이 있습니다. 이 에세이의 공격을 사용하지 않더라도 컴퓨터 투표 시스템이 안전하다는 의미는 아닙니다. 우리 모두 매우 영리한 사람들을 고용하는 데 동의 할 수있는 Google은 자신의 소프트웨어에서 버그를 찾도록 도와 주면 돈을 지불하는 현상금 시스템을 가지고 있습니다. 실수.

소프트웨어 프로그래밍이 어렵습니다. 컴퓨터는 어렵다. 훌륭하고 선의의 소프트웨어 개발자조차도 전체 소프트웨어 스택을 침입하는 단일 실수를 저지를 수 있습니다. Heartbleed 버그는 2011 년 우연히 소개되었습니다. 오픈 소스 소프트웨어는 이론 상으로는 지구상의 모든 사람이보고 조사하고 탐지 할 수 있었지만 2014 년까지는 인터넷 서버의 17 %가 발견되지 않았습니다. 지금은 취약했다.

그것은 우연히 이루어졌습니다. 누군가가 노력하고 있다면 무엇을 할 수 있는지 상상해보십시오.

컴퓨터 투표가 나쁘다는 말을 들으면 짜증이 난다. 점심 시간에 휴대 전화의 앱에서 투표하는 것만으로 상상하기가 쉬울 때 실제 공간에서 바깥으로 줄을 서서 끝내야합니다. 그러나 선거가 편리한 것보다 더 중요한 것은 정확하다는 것입니다. 그리고 컴퓨터 투표가 편리 할 것이지만, 저는 여러분이 그 선거가 정확하다는 것을 믿지 말아야한다는 것을 확신 시키 셨기를 바랍니다.

Q : 관련 xkcd가 있습니까?

A : 항상 관련된 xkcd가 있습니다.