본문 바로가기

더불어민주당의 모바일 경선, "공정성"은 "투명성"과 비례한다.

728x90
반응형

강원도 사람들에게 2011년은 의미가 있다. 도정에 관심 없는 사람들에게는 별 의미 없겠지만, 최문순 도지사가 강원도 재정을 투명하게 공개하면서 강원도가 얼마나 위험한 경영난에 빠져 있는지 알 게 됐다. 우리가 평창 동계올림픽에 환호하고 있을 때 강원도개발공사는 하루 1억에 가까운 이자가 쌓여가고 있던 것이다. 강원도 최대 리조트인 알펜시아 분양도 순조로워 보였으나 안을 들여다 보니 모든 것이 부실덩어리고 비리 온상이었다. 

그렇게 최문순 지사의 투명 경영으로 강원도개발공사도 정상으로 회복되어 가는 듯 했으나 언제부턴가 다시 과거처럼 강원도 경영에 비밀이 많아지더니 결국엔 최순실이 터졌다. 최순실이 터지기 전까지 우리는 평창올림픽 준비에 문제가 없다고 믿었다. 무엇이든 투명하지 못한 운영은 결국 화를 부르게 되어 있다.


비밀작전 수행하 듯 치루는 민주당의 비공개 모바일 경선, 축제를 망치다.
민주당의 모바일 경선은 2007년, 2012년에도 있었다. 2007년 첫 도입 됐을 때는 국민의 참정권을 확대 보장하기 위해 도입 된 신 기술 정도로만 인식했다. 그때도 경선 조작에 대한 의혹은 있었지만 전자 장치는 원래 완벽하지 못하고 정치라는 게 늘 소란스러운 것이기에 정치소음 정도로 여기고 넘겼다.

2012년에는 손학규 의원이 적극적으로 부정 선거 의혹을 제기 하였으나, 알다시피 손학규 의원은 민주당에서 세력이 없었다. 지금 국민의당에서도 거의 존재감을 보이지 못하고 있는 것처럼 그의 의혹 제기는 큰 힘을 받지 못했다. 나 역시 문재인 열성 지지였기 때문에 손학규의 의혹 제기는 당내 분란만 초래한다고 여겼다.

이번 2017년 민주당 모바일 경선을 지켜 보면서 과거 2007년과 2012년의 경선 관련 기사들을 찾아 보게 됐다. 그때는 보이지 않던 게 지금은 보인다. 실상을 보고 나니 ARS 투표라는 건 라디오 경품 이벤트 SMS 투표 보다도 문제가 많다.

2017년 민주당 모바일 경선은 민간 업체에 위탁 관리하고 있는데 이 업체에 대한 정보가 전혀 없다. 몇 개의 업체에서 관리하고 있는지도 유권자는 알 수 없다. 또, 선거인단 모집 과정에서 인증번호를 발행하는 데, 인증번호는 투표에 직접 사용되지 않고 개인 식별 능력이 없는 임시 부호에 지나지 않는데 이걸 폐기하지 않고 DB에 저장 해 두었다는 건 그것이 다른 의도로 사용 될 수 있는 전혀 무의미하지 않은 숫자라는 걸 의미한다. 상식적으로 본인인증을 위해 발행한 임시 인증번호는 최대 3분 이상이 지나면 폐기하는 게 상식이다. 폐기할 정보를 굳이 유지비 들여가며 DB에 저장할 이유가 없다.

투표 결과에 대한 피드백이 없다는 건 유권자 기만이며 가장 의심스러운 부분이다.
겨울철 자동차 배터리 방전으로 ○○화재에 ARS 접수해 본 사람은 잘 알고 있다. ARS로 서비스 접수를 마치면 곧바로 접수 상태를 SMS로 알려준다. 그리고 잠시 후 담당 기사로 부터 전화가 걸려온다. 모바일 투표 한 유권자 중에서 내가 투표한 결과를 SMS로 안내 받은 사람이 없다. 만약 회사에서 이런 피드백 시스템을 설계하지 않았다면 굉장한 아마추어이며 민주당 선관위에서 이런 피드백 금지를 요구했다면 뭔가 검은 의도가 있는 것이다. 유권자는 본인이 몇 번에 투표했는지 알 수 없게 하라?

jtbc의 팩트체크는 팩트가 아니다
며칠 전 jtbc 팩트체크에서 호남 10만 무효표를 다뤘다. 그건 팩트체크가 아니라 민주당 선관위 의견을 대변하는 정도다.

이론적으로는 그렇다. 사진에서처럼 5번의 전화를 걸어주고 또 다음 날 거는 전화로 또 투표할 기회를 주기 때문에 투표를 하지 않을 수 없는 시스템이라는 게 jtbc와 민주당의 설명이다. 이 시스템에 오류 없이 잘 돌아간다면 10만 무효표는 기권표가 맞다고 할 수 있다. 그런데 선거인다 모집 과정과 경선 투표 과정에서 발생하는 그 많은 오류를 보고도 이 시스템을 믿으라고?

jtbc 팩트체크에서는 민주당 선관위의 주장에 대해서는 잘 설명했지만 정작 유권자의 제보는 반영하지 않았다.

무효표가 발생할 수 있는 사례들이다.
사례1) 투표 중 별다른 안내 없이 전화가 중도에 끊겨버림 (트위터 이런 사례가 제보 됨)
사례2) 1번 후보가 호명되자 나도 모르게 1번을 미리 눌러버림 (기존 민간 기업 ARS에 익숙한 유권자의 실수)
사례3) 전화가 걸려오지 않음.
사례4) 거는 전화로 전화 할 때 통화량이 많아 연결이 되지 않음. (실제로 밤 10시까지 시도 했지만 연결 되지 않아 투표를 하지 못한 유권자의 제보가 있음)
사례5) 시스템 오류 및 조작 가능성

사실 이것보다 더 많을 수 있다. 내가 트위터에서 본 사례들은 이정도 이다. 유권자의 의견을 반영하지 않은 jtbc 팩트체크는 그냥 민주당을 대변한 수준이었다.

만약 유권자의 전화기 다이얼 조작 미숙으로 투표가 제대로 이루어지지 않았다면 다시 전화를 걸어 5번의 기회 중 남은 투표 기회를 보장해 주었어야 하지만 민주당은 유권자의 참정권을 보장해 주는 거에 지나칠 정도로 소극적이다.


내가 투표한 결과를 확인 할 수 없는 모바일 투표, 그건 조작의 빌미를 준다
2017년 민주당 모바일 경선은 민주당 선관위에서 자체 시행하고 있으며 민간 업체가 그것을 대행하고 있다. 그렇다면 여기서 의문이 드는게, 민주당 경선을 담당하고 있는 그 민간 업체는 도덕적으로 완벽한 곳인가?

어제 연합뉴스 기사를 보면 민주당에서는 안내멘트에 오류는 있지만 결과에 문제 없다는 결론을 내렸다. 프로그래머의 입장에서 봤을 때 안내멘트에 문제가 있으면 그 시스템 전체에 문제가 있다는 것이다. 4바퀴로 굴러가는 자동차 바퀴 하나가 펑크 났는데 그 차가 달리는데 문제 없다며 계속 도로를 달리게 할 수 있을까?

시스템은 여러 개의 UNIT으로 이루어 지는데 UNIT의 일부 프로세스에 오류가 생긴 걸 보고도 별거 아니라고 넘길 수 있는 사람은 절대 전산직 그만두고 장사같은 거 해야 한다.

ARS 구조는 사실 이것보다는 훨씬 복잡하지만 간단하게 함축하자면 이런 정도로 구축된다. (여담이지만 작년 석사논문 주제를 ARS 투표로 할 걸 아쉬움이 남는다) 이미 기성 제품들이 많이 출시되고 있기 때문에 돈만 넉넉하다면 이런 시스템을 구축하는 건 어렵지 않다. 서비스를 차별화 할 수 있는 방법은 S/W다.

우리가 눈여겨 볼 것은 본인확인 절차부터 Database에 자료를 기록하는 과정이다. 이 과정은 S/W가 관여하기 때문에 보안이 가장 필요한 부분이다. 무결성 확인 후 DB에 투표 결과를 기록하는 과정에서 과연 내가 입력한 번호가 제대로 반영 되었을까? 유권자의 불안은 지금 그것이다. n번이 입력 된 숫자는 N% 확률로 무효처리하는 게 불가능하지 않다는 걸 유권자는 알아야 한다.

VoteNumber <= n
RND <= rand(100)
if(VoteNumber != X AND RND < N) VoteNumber <= X
/* 이건 언제까지나 본인의 상상이며 가상이다.
이런일이 실제로 벌어지면 범죄에 해당한다 */


<투표 결과를 바로 SMS로 안내 했어야 했다>


SMS 서버는 ARS 시스템과 독립적으로 구축 되어야 한다. 모든 Databse는 사용자에 따라 접근 권한을 달리 부여 할 수 있다. SMS 서버는 DB 조작을 할 수 없고 정보를 읽어오는 권한만 갖게 된다. 만약 이것이 지켜지지 않을 때 SMS 서버가 악성코드에 감염 되었다면 DB 서버는 공격 대상이 된다.

유권자에게 SMS 피드백을 주면 많은 의혹들이 해소된다
처음에는 투표 완료한 유권자에게 SMS 안내가 따로 발송되지 않았다는 제보를 보고는 왜 SMS 서버를 운영하지 않을까 생각했는데, 선거인단 등록 당시 등록 완료 SMS 안내를 해주기 때문에 SMS 서버를 운용 안 하는 건 아니다.

DB에는 유권자 정보와 투표 방법, 투표 결과에 대한 정보가 담겨 있고 SMS 서버는 DB에서 유권자 이름, 전화번호, 투표 결과를 받아 올 수 있다. 따라서 다음과 같은 SMS 안내를 해 줘야 정상이다.

"홍길동님께서는 더불어민주당 모바일 경선 투표에 1번 이재명 후보에게 투표 하셨습니다"

물론 210만개가 넘는 SMS을 발송하려면 비용이 들겠지만, 유권자의 의혹을 해소하기 위해서는 이런 안전 장치는 필요하다. 이런 절차가 제대로 갖춰지지 않는다면 다음 대선에서도 똑같은 부정 의혹들이 계속 발생 할 수 밖에 없다.

투표 결과 안내멘트가 다르다는 건 시스템에 오류가 있다는 것
위의 그림에서 "무결성 확인" 부분이다. 본인확인이 끝난 투표 결과를 DB에 기록하기 전에 투표를 완료 했는지, 또는 5회 이상 전화를 거부했던 유권자가 맞는지 등을 비교한다.

무결성 검토를 진행하는 과정에서 이미 투표가 완료 된 유권자에게는 ARS 시스템을 통해 해당 메시지를 안내하게 되는데 이 과정에 오류가 있다는 것이다.

DB가 짝수, 홀수로 나늬어졌다고 했을 때 예상 구조는 이렇다. 빨간색 테두리 영역은 S/W 부분이다. 트위터  반응은 끝자리 홀수 번호에 대해서 멘트 오류가 있다고 하는데 DB 자체에 레코드가 삭제 되었거나 무결성 확인 과정에서 S/W 오류가 있다고 예측 할 수 있다.

본인은 네트워크 전문가가 아니라서 네트워크 오류에 대해서는 언급할 수 없다. 다만 합리적 의심을 해보자면 DB 스키마를 조작하는 S/W에 문제가 있다고 의심 할 수 있다. 이 구조도는 짝수, 홀수 관리 주체가 분리 됐다고 봤을 때 해당하므로 만약 한 업체에서 DB를 모두 관리하고 있다면 더 심각한 S/W 결함을 의심 할 수 있다.

투표 결과 확인 절차에서 오류가 있다면, 투표 결과 반영에 대한 의심은 더 커진다
민주당 선관위에서는 따로 투표 결과를 확인 할 수 있는 서비스를 제공하지 않고 있다. 궁여지책으로 전화를 걸어 투표 결과를 알아보고 있는데 그마저도 오류가 있다. 민주당 해명은 절차에 문제가 있지만 결과에는 문제가 없다라는 식이다. 다시 말하지만 절차상 오류가 있는데 결과가 정확하다면 그건 우연에 의한 것이기 때문에 그 전산 시스템은 사용 불가다. 위에 구조도에서 어느 한 곳에서 오류가 발생하더라도 이 시스템 전체는 사용해서는 안된다.

지극히 개인적으로, 보안 전문가였던 안철수씨가 민주당 경선 후보였다면 이 문제가 그냥 넘어 갈 수 있었을까 생각해 본다.


정리
확실한 건 이 ARS 투표 시스템에는 오류가 발견됐다. 민주당 선관위가 해명으로 인정 했듯이 절차상에 문제가 있다. 절차상에 문제가 있지만 결과에는 이상 없다는 건, 술은 마셨지만 음주운전은 아니라는 말장난에 불과하다.

유권자의 의혹을 해소하기 위해 내가 생각하는 가장 확실한 방법은 유권자에게 SMS로 투표 결과를 발송하는 것이 첫번째이고, 각 캠프에 똑같은 DB를 제공해서 득표 수를 캠프에서 확인 할 수 있도록 하는 것이다.

이름 

지역 

전번 

발신횟수 

수신시간

투표번호 

투표날짜 

투표시간 

 

 홍*동

경기성남 

010**45**34 

 

170401 

 130418

 

DB를 이렇게 추려서 캠프에 넘겨주면 적어도 유권자는 전화기에 남아 있는 투표 시간과 전화번호 일부, 지역 등의 정보로도 자기 투표 결과를 확인 할 수 있다.

728x90
반응형