2012-05-17 5 views
1

나는 수십 명의 회원이있는 그룹에 가입했습니다. 저는 빠른 웹 투표 시스템을 작성했으며, "보안"요소를 추가하고 싶습니다. 나는 가능한 한 맨손으로 노력하고 있습니다. 내가 한 일은 유권자별로 데이터베이스에 저장 한 투표를 할 때 사용자가 비밀 문자열 (예 : GUID)을 입력해야한다는 것입니다.익명 ㅡ 온라인 투표 시스템

비밀을 사용자에게 배포하는 가장 안전한 방법은 데이터베이스에 비밀 문자열 문자열을 만들어 인쇄하고 회의에 가져오고 사람들이 비밀을 그려야한다는 것입니다. 그런 식으로 나는 두 가지 주요 이점을 얻는다 고 믿는다 : (1) 나는 투표 시스템의 저자로서 어떤 사람이 투표했는지를 확인할 수 없다. 유효한 비밀이 선험적으로 알려지기 때문에 "누구든지"누구도 가거나 투표를 할 수 없습니다.

물리적으로 존재하는 모자이크 프로세스를 가상적으로 에뮬레이트하고 위에 요약 된 주요 이점을 손상시키지 않는 건전한 방법이 있습니까? 어쩌면 할 수없고 어떤 시점에서 신뢰가 있어야합니다. 그렇지 않으면 누군가가 비밀을 "끌기"위해 물리적 인 존재를 주장해야합니다 (개인적인 비밀이 주어진 개인을 기록합니다).

누군가가 자신의 비밀을 잃었다 고 주장하는 경우 어떻게 해야할지 잘 모릅니다. 왜냐하면 그들이 부정직하고 단순히 새로운 비밀을 그려야하기 때문에 효과적으로 두 표를 던질 수 있기 때문입니다. "잃어버린"비밀이 무엇인지에 대한 흔적이 없었다면 나는 그와 관련된 투표를 삭제할 수 없었습니다.

내가있는 곳은 근본적으로 사람들이 모든 투표에 대해 새로운 비밀을 끌어 내고 실제 존재를 통해 비밀을 배포하도록하는 것입니다. 위에 설명 된 것과 동일한 이점을 달성하기위한보다 우아하고 자동화 된 수단이 아직 있습니까?

+1

이 현재 구성표는 사용자의 암호 설정 작업을 처리하는 코드를 작성하지 않고도 추가 이점이없는 사용자/패스의 실제 버전입니다. 더 우아한 사람은 정규 사용자/패스 체계 일 것입니다. – Cheekysoft

+0

@Cheekysoft 나는 투표가 사용자에게 추적 가능하기를 원하지 않지만 사용자가 투표를 변경할 수 있기를 바란다. 요약 된 계획은 "로그인"을 피할 수있다. 투표의 익명 성. – vicatcu

+0

완전히 익명의 투표 메커니즘을 원한다는 것을 나타 내기 위해 질문을 조정하는 것이 좋습니다. 무작위로 반복하지만 타협하면 사용자를 상대로 각 투표를 일시적으로 기록하여 관계를 제거하고 더 이상 마음을 바꿀 수 없게하는 "잠김"을 수행 할 수 있습니다. – Cheekysoft

답변

3

이것은 어려운 문제입니다. 좋은 전자 투표 시스템은 일반적으로 어려운 문제입니다. 그들에 관한 많은 문헌이 있습니다. 시작하기 좋은 곳은 David Chaum :-)로 찾을 수있는 모든 문서를 읽는 것입니다.

비밀 투표 요구 사항을 처리하고 있습니다.

귀하의 시스템에는 중요한 제한 사항이 있습니다. 귀하가 직접 지적했듯이, 나는 훨씬 더 잘할 수 있다고 생각하지 않습니다.

문제는 선거 당국이 누구에게 누가 기밀을 가지고 있는지 알 수 없기 때문에 기밀 정보 (토큰)를 유권자에게 배포하는 것입니다. 그리고 모든 유권자는이를으로 믿을 수 있습니다. 그 마지막 부분이 문제입니다. 유권자들이 당신이 속임수가 아니라는 사실을 목격하고 입증 할 수 있기 때문에 (모자를 쓰는대로 비밀을 보면서) 모자 수집 프로토콜을 가진 실제 회의가 그 일을합니다. 내가 원격 위치에있을 수있게 해주는 프로토콜을 상상할 수는 없으며 같은 일을한다. 예를 들어 비밀을 만들어 내고 제 3 자에게 넘기면 그들을 제치고 유권자에게 넘겨 줄 수 있습니다.하지만 모두가 제 3자를 신뢰해야합니다. 또 다른 예를 들어, 익명의 이메일 주소를 통해 비밀을 배포 할 수는 있지만 승인 된 유권자 만 비밀을 보장 할 수는 없습니다. 나는 여기서 해결책을 찾지 못한다. 모자를 쓰는 사람이 첫 번째 선택에서 마지막 선택까지 계속 지켜지지 않는 한 모자 프로토콜조차도 취약합니다.

어쨌든 당신이 직접 만나기 때문에, 동시에 투표를하는 것이 어떻습니까? (이의 제기 : 투표 시간보다 투표보다 먼저 만나는 것이 더 편리 할 수 ​​있습니다 ...)

토큰을 잃어버린 유권자에 관한 최소한의 부분은 대답하기 쉽습니다. 당신은 그들에게 새로운 비밀을 줄 수는 없습니다. 그들에게 너무 나빴어.

덧붙여 말하자면, 투표자 검증 가능성에 대한 다른 요구 사항이 있습니다.

시스템에서 기본적인 투표자 검증은 매우 쉽습니다. 선거 후에 모든 토큰과 해당 표를 게시하기 만하면됩니다. 그러나 이것은 유권자가 자신의 투표가 다른 사람에게 무엇인지 증명할 수있게 해줍니다. (유권자를 공유하거나 선거 전에 제로 지식 약속을함으로써) 유권자의 강요를 방지하고 투표 구매).

+0

네, 이것은 본질적으로 복잡합니다. 유감스럽게도 여러분은 옳습니다. 회의의 맥락 밖에서 투표가 이루어지기를 바라는 이유는 내 시스템이 유권자가 새로운 옵션을 추가하고 옵션이 진화함에 따라 투표를 변경할 수있게 해주기 때문입니다. 실시간으로 다루기가 쉽지 않다. 회의에서의 창의성은 시간이 지날수록 줄어 듭니다. – vicatcu

+0

나는 모든 사람이 재사용 할 수있는 비밀을 발급 받고 적어도 하나의 회의에 참석해야한다는 것을 알고 있습니다. 나는 투표 한 모든 사람들이 자신들의 비밀이 공개 된 득표표 목록에 포함되어 있다는 것을 증명하지 않는 한, 투표 된 모든 비밀이 "명백한 광경"으로 전달되었다는 의심의 여지를 결코 없앨 수 없을 것입니다. 모든 사람들은 데이터베이스에서 투표를 조작하지 않는다는 사실을 모두 믿어 줘야합니다. ......... 이것은 재결합입니다. – vicatcu

-2

사이트를 방문 할 때 고유 한 ID가있는 쿠키를 버립니다. 그러나 쿠키를 지우면 토스트가됩니다.

+0

이 솔루션을 사용하면 웹 사이트 운영자가 각 쿠키가 발급 된 사람을 알고 있고 기록 할 수 있으므로 비밀 투표 요구 사항에 위배됩니다. – Celada

+0

@Celada : 꼭 그런 것은 아닙니다. 그가 투표 한 신분증이 그가 ID의 소유자가 누구인지 아는 것은 아니다는 것을 그가 알고 있다는 사실. –

+0

질문에서 인용 : "아닙니다"누구든지 "가서 투표를 할 수 있습니다." 즉, 토큰을 발급하기 전에 투표가 허용 된 그룹의 구성원 인 사용자를 식별하고 인증해야합니다. – Celada

0

해결책은 투표가 열리면 각 사용자에게 임의의 키를 보내는 것을 자동화하는 서버 측 서비스를 구축하는 것일 수 있습니다. 이는 일반적으로 URL에 매개 변수가있는 링크로 수행됩니다. 그런 식으로 그들이 사이트에 갈 때 그것은 익명이다, 그러나 모두에는 투표하는 열쇠가 있어야한다. 키는 주제와 사용자가 생성 한 무작위 키를 결합하여 쉽게 복제 할 수 없으며 키는 서버 측에 저장되므로 유효성 검증을 위해 한 번만 사용됩니다. 한 번에이 방법을 사용하여 폴링 시스템을 만들었습니다.

+1

시스템이 전자 메일로 키를 보내는 경우 장면 뒤에있는 시스템이 전자 메일로 키를 상호 연관시키는 것은 의심의 여지가 없습니다. 전자 메일 주소 ... – vicatcu

+0

의심의 여지가 없지만 전자 메일 주소와 연결할 필요는 없습니다. 이것은 매우 회의적인 그룹처럼 들립니다. 불행히도 이것을 실제로 할 수있는 방법은 100 % 무작위이며 신뢰할 수있는 방법이 아닙니다.전자 메일을 사용하면 실제로 주어진 주제를 통해 진행 상황을 추적하고 옵션이 변경됨에 따라 전자 메일을 사용하는 것이 가장 좋은 방법입니다. –