Dimostrare che un cliente ha inviato una richiesta - sistema di votazione

2

Diciamo che ho creato un sistema di votazione in cui ogni elettore userebbe un'app e voterebbe un candidato. L'app inviava il voto a un server. Il server memorizzerebbe il voto su un DB con l'IP della richiesta.

È possibile implementare qualcosa per garantire un futuro lavoro di revisione / analisi, il mio DB rappresenta richieste reali e non qualcosa è stato forgiato?

La mia idea è che il mio DB dovrebbe essere una prova che ho avuto n voti e sono veri voti, non qualcosa che ho creato io stesso.

  • Ogni IP consentirebbe un singolo voto
  • Non memorizzerò le informazioni personali su DB, l'indirizzo IP e i dati correlati sarebbero l'unica cosa da memorizzare
posta Danilo Gomes 12.10.2018 - 04:52
fonte

4 risposte

2

Le tue specifiche iniziano con:

Each IP would allow a single vote

Non andare oltre. Se puoi controllare un router, ad esempio in un ambiente aziendale, puoi:

  • fa sì che tutte le macchine interne presentino esternamente lo stesso indirizzo (e solo un utente nell'organizzazione può inviare un voto valido)
  • consente all'amministratore del router di inviare un voto valido fingendo uno qualsiasi degli indirizzi della propria organizzazione

E come singola persona, attualmente utilizzo:

  • un computer privato
  • un computer aziendale (presenta solo l'indirizzo IP del firewall aziendale)
  • uno smartphone privato
  • uno smartphone aziendale

Significa che posso inviare 3 voti diversi o 4 in nessuno nella mia organizzazione ha già presentato uno dal suo computer aziendale?

Above riguardava perché penso che la tua idea sia sbagliata . Seguendo parte del mio parere su come costruire un sistema di votazione.

Penso di non essere abbastanza intelligente da inventare da zero ciò che altri hanno costruito nei secoli, quindi cercherò semplicemente di tradurre nel mondo IT come un normale lavoro elettorale.

  • Regola 1: tutti gli elettori sono registrati e la loro identità deve essere controllata prima che un voto sia accettato come valido - smetti di immaginare voti anonimi per un'elezione seria .
  • Regola 2: il contenuto della votazione deve essere tenuto segreto - nessuno, tranne l'elettore stesso, dovrebbe essere in grado di sapere cosa il voto contenesse
  • Regola 3: è possibile sapere chi ha partecipato a un voto - almeno per controllare che i morti non abbiano votato (in alcuni luoghi era comune)
  • Regola 4: l'osservanza delle regole precedenti può essere controllata da persone che rappresentano i vari candidati (un candidato può essere qui un essere umano, uno staff completo o una semplice proposta)

Quelle 4 regole sono osservate per il voto fisico, così come dopo il voto. Per quest'ultimo, un involucro interno (non è possibile identificarlo) contiene il voto e uno esterno porta il nome e il segno manuale dell'elettore. Gli involucri esterni sono aperti solo dalle persone incaricate di controllare la validità del voto.

Nel mondo IT darebbe:

  • ciascun votante dovrebbe essere informato su come votare
  • il sistema dovrebbe essere in grado di identificare ciascun elettore. Il modo aggiornato sarebbe un certificato su una smartcard, ma a seconda dell'importanza / costo, potrebbe essere considerato un nome utente + password
  • il sistema di voto dovrebbe tenere traccia di quale utente ha votato e quando - questo è il registro delle votazioni
  • il sistema di voto dovrebbe incrementare i contatori e non memorizzare voti individuali
  • non deve essere possibile sapere a che ora il contatore ha cambiato valore per impedire la correlazione con il momento in cui qualcuno ha votato (può avere un impatto sul banco di vendita sottostante). È necessario conservare solo il valore finale.
  • i contatori non dovrebbero essere accessibili a nessuno prima della fine delle elezioni, a meno che non si possa dimostrare che non consente di conoscere i voti recenti effettuando il polling dei contatori su brevi intervalli
  • il sistema dovrebbe essere verificato prima e dopo il voto dai candidati o dalle persone che li rappresentano
risposta data 12.10.2018 - 12:33
fonte
1

Risposta breve alla tua domanda, così com'è attualmente: No.

Il motivo:

Each IP would allow a single vote

A causa della traduzione NAT, un singolo indirizzo IP può rappresentare molto più di un singolo utente (un IP pubblico potrebbe puntare a un'intera rete aziendale, per esempio). Inoltre, l'utilizzo di un indirizzo IP per identificare qualcuno non è assolutamente possibile; può essere facilmente modificato, spoofato, ecc., per non parlare del fatto ovvio che diverse persone che vivono allo stesso indirizzo e che magari condividono lo stesso computer ovviamente hanno anche lo stesso indirizzo IP.

Non riesco davvero a vedere come potresti ottenere qualcosa di simile senza includere alcuna forma di registrazione utente / votante, e il problema è ovviamente l'anonimato: come puoi garantire che una persona voti una sola volta, senza memorizzare almeno una minima quantità di informazioni personali?

Nel migliore dei casi, posso immaginare una sorta di soluzione split system, in cui un voto è anonimo, ma in cui è supportato da qualche altro servizio che può garantire l'unicità di ciascun elettore (almeno con un certo grado di fiducia) .

Come idea di base, considera quanto segue:

Creare un sistema di votazione in cui gli utenti anonimi possono accedere utilizzando un token di accesso e registrare un voto che è stato firmato digitalmente utilizzando la crittografia asimmetrica. Tale firma digitale verrebbe eseguita utilizzando una chiave privata che avrebbe una corrispondente chiave pubblica che era esplicitamente collegata al token di accesso degli utenti. Il token stesso sarebbe fornito da un servizio distinto, in modo tale che il sistema di voto stesso sarebbe nettamente separato da qualsiasi cosa contenesse dati personali sugli elettori.

Da questo, un revisore dei conti sarebbe in grado di controllare quanto segue per ciascun voto semplicemente guardando i voti e i token:

  • Il voto è stato eseguito da un utente che trasporta il token di accesso X.
  • Nessun altro voto è stato espresso da un utente che porta quel token specifico.

Ora dovrai eseguire il backup con un servizio di token-provider che può garantire che ciascun token sia stato concesso solo a un singolo individuo (che è idoneo a votare) e che a nessun individuo è stato concesso più di un token singolo (Un auditor vorrebbe probabilmente valutare anche questa parte della soluzione, ma potrebbe farlo pur limitando l'accesso alle informazioni personali sugli elettori).

Quindi, come hai potuto farlo mantenendo al minimo la quantità di dati personali? L'opzione migliore che posso pensare sarebbe un sistema che memorizza un hash (una "impronta digitale" crittografica irreversibile) di qualche identificatore personale, come un numero di previdenza sociale. Questo potrebbe essere usato per verificare che nessun identificatore singolo sia mai usato più di una volta, e tuttavia impedire a qualcuno che ha accesso al database di produrre un elenco completo di tutti coloro che hanno votato (poiché l'elenco conterrà solo valori hash, che sono natura irreversibile).

Ciò che tuttavia non impedisce, è l'enumerazione degli account; verificare se sono registrati individui specifici, purché si disponga già del proprio identificativo (se fossero registrati, quindi provare a registrarsi di nuovo con le proprie credenziali dovrebbe causare un errore o un avvertimento, che confermerebbe l'esistenza del proprio account).

Una soluzione possibile per questo potrebbe essere semplicemente registrare tutti potenziali elettori dall'inizio. In questo modo, la ricerca di un account appartenente a qualcuno che ha votato restituirebbe lo stesso tipo di risultato che cerca qualcuno che non l'ha fatto e la logica basata su token dovrebbe funzionare. Il punto principale è dividere l'identificazione e il voto effettivo in due parti separate e utilizzare la crittografia per garantire il voto, mantenendo al contempo le informazioni personali il più possibile.

Questo è piuttosto concettuale, e ovviamente c'è ancora molto da considerare, ma spero che ti dia qualche idea su cui riflettere nel contesto della tua domanda.

    
risposta data 12.10.2018 - 11:30
fonte
1

TL; DR: Il segreto non è "Chi" ma "Cosa".

Penso che stai prendendo la strada sbagliata. Quello che non vorresti è:

Votes are made by real people.

Non vedo perché non si debbano memorizzare dati personali se ciò può farti raggiungere questo obiettivo. Non c'è problema di avere dati personali su un sistema di voto, quando vado a votare, devo firmare un registro in modo che sappiano che ho votato, e il governo sa molto su di me.

What has to be secret is the vote.

Quindi, per quanto riguarda il voto segreto, puoi memorizzare qualsiasi informazione personale sull'elettore che desideri (e sono d'accordo).

    
risposta data 12.10.2018 - 12:52
fonte
0

No. Non puoi essere sicuro che gli utenti abbiano votato come hanno fatto, a causa della possibilità di malware sul dispositivo di ciascun utente. Potrebbe mentire su chi hai votato e votare per qualcun altro. Diamine, potrebbero non utilizzare nemmeno un browser reale, e non c'è modo di verificarlo dal server.

In breve, puoi contare i voti in entrata in modo sicuro, nessun problema, ma non puoi controllare la validità dell'input, gettando dubbi sui risultati.

    
risposta data 12.10.2018 - 18:58
fonte

Leggi altre domande sui tag