본문 바로가기

Applied Cryptography

투표와 전자투표

투표가 갖춰야 할 성질

성질 설명
Voter Privacy 투표 내용으로 투표자를 알 수 없어야 한다.
Vote Verifiability 각 투표는 독립적으로 확인 가능해야 하고, 정확히 카운팅 돼야 한다.
  -Universal Verifiability 누구나 투표 결과를 검증할 수 있음.
  -Individual Verifiability 자신의 투표가 결과에 집계 되었는지 확인할 수 있음
Democracy 유권자가 자신의 투표를 정당하게 행사해야 한다. (강압적 기권, 대리 투표 금지)
Robustness 유권자의 해로운 행동을 방지해야한다.
Receipt-freeness 유권자의 투표 내용 자체를 누구도 확인할 수 없어야 함. 투표 거래 방지를 위함
Correctness 투표 집계가 정확해야 한다.
Fairness 투표 집계 전에 자신의 투표를 제외한 어떤 정보도 얻을 수 없어야 한다. (후보별 득표율 등)
Coercion-Resistance 강압자에게 자신의 투표 내용을 증명할 수 없어야 한다.

위 성질들은 의미상 겹치는 것들이 있고 서로 상충되는 내용들도 있다.

 

투표 예시

Voter Privacy, Democracy, Robustness, Receipt-freeness, Coercion-Resistance, Fairness

현재 대통령 선거 방법은 무기명, 비밀, Off-line 투표가 자연스럽게 갖는 성질들을 갖는다. 단, 투표와 개표가 전산화가 되지 않는 이상 "내 표가 결과에 정확히 반영되었음을 확인할 방법"이 없다. 그래서 종종 득표수 조작 논란이 제기되곤 한다. 그래서 우리는 전자투표를 고려하지만... 어려움이 있다.

전자투표의 어려움

전자투표 프로그램과 서버를 누가 개발해야 믿을 수 있을까? 삼성이 만들면 믿을만한가? 국정원이 만들면 믿을만한가? 이 문제는 일단 Blockchain이 해결할 수는 있다. 하지만 또 비슷한 문제가 생긴다. 어떤 블록체인을 쓰면 믿을만한가? 누가 보증할래? 따라서 이 문제가 해결되려면 국가 공인 블록체인이 필요하다고 생각한다.

Individual Verifiability vs Receipt-freeness

개념적으로는 Receipt-freeness와 Individual Verifiability 성질을 동시에 만족시키기가 매우 어렵다고 생각한다.

Individual Verifiability

내가 한 투표가 결과에 반영 되었을까? 어떤 방식으로 반영되었음을 조회할 수 있을까?
여기서 말하는 "조회"는 단순히 웹사이트에서 "OOO 님의 투표가 정상적으로 집계되었습니다" 수준의 조회를 의미하는 것이 아니다. 예를 들어 "내가 제출한 표가 특정 DB에 저장되고, 개표 시 Query 되어 투표 결과에 반영되었음!"을 조회할 수 있어야 한다. 

Receipt-freeness

개표를 위해 내 표를 저장하는 DB에 내가 쿼리해도쿼리 해도 표의 원본 데이터를 주지 말아야 한다는 내용이다. 표 거래의 주체는 "유권자"이므로 내가 낸 표이지만 내가 다시 쿼리 할 수 없어야 한다. 쿼리가 가능하다면, 그 데이터를 후보에게 전송하고 돈을 받거나 하는 표 거래가 가능하다. 그래서 내가 DB에 쿼리 해도 표 Data가 아닌 어떤 "증거"만을 리턴해줘야 한다.

그런데 나는 그 어떤 "증거"만 보고서 "내 표가 잘 집게되었구나~" 확신할 수 있을까?

MindMap

Label?

DB에 저장된 표에 내 ID가 Label 되어 있으면 비밀 투표원칙에 위배되니 Label이 없어야 하지만, 없으면 나도 못 찾으므로 확인을 못한다.

암호화?

다른 방법으로는 표에 Label을 달아 DB에 저장하되, 암호문을 저장할 수는 있다. 하지만 개표시 복호화가 필요하고... 암호화는 도대체 누구의 암호키로 해야 할지 정하기도 애매하다.

동형 암호?

암호화에 동형 암호 알고리즘을 이용하면 복호화하지 않은 암호문 상태로 연산을 할 수 있다. 하지만 마지막엔 복호화를 해야 득표 결과를 얻을 수 있으므로 선관위와 같은 기관이 복호화 키를 들고 있어야 한다. 따라서 선관위의 타락으로 비밀투표 원칙이 깨질 수 있다.

영지식?

영지식 증명이란, 비밀 값을 노출하지 않은체 비밀값의 속성을 증명하는 기법이다. 예를 들어 출생일을 공개하지 않으면서 만 19세 이상임을 증명하는 값을 만들 수 있다는 의미이다. 그런데 이 증명 값은 비밀값을 아는 사람만 만들 수 있다는 점에 주목해야 한다. 결과적으로 득표수를 알아야 득표수 관련 영지식 증명을 만들 수 있음을 의미한다. 그래서 적어도 개표에 관하여 영지식 증명을 사용할 수 없다.

결론?

기술은 어떤 식으로든 준비가 될 것 같다. 전자 투표에 대한 연구는 역사가 깊어서 이 포스트 내용보다 훨씬 성숙하고, 블록체인 유행을 타고 다시 인기 있는 연구 주제가 되었기 때문이다. 하지만 완벽한 기술이 나와도 그것을 믿고 실행할 수 있는 사회적 합의가 쉽지 않다는 것이 메인 이슈일 것이다.