Usare la blockchain per registrare voti.

Da qualche settimana sta girando l’idea di registrare voti su una blockchain, come elemnto di sicurezza.

Qualche giorno fa, con un amico italiano che si occupa di AI in California e che era venuto a trovarmi, abbiamo discusso del seguente problema: se esprimo un voto, come posso essere certo che il mio voto effettivamente sia contato in modo corretto ?

Con le urne di carta, ne sono ragionevolmente certo perchè sono io stesso a compilare la scheda, ad infilare la scheda nell’urna e perchè posso restare a sorvegliare che l’urna non venga manomessa fino al conteggio (o direttamente guardando dalla porta o tramite delle persone di fiducia ovvero i cosidetti delegati di lista che presidiano fino allo spoglio finale).

Se voto con un computer, sorge la domanda: come posso sapere che ciò che viene registrato nel DB sia effettivamente ciò che io ho pigiato ? Il software potrebbe essere stato alterato. Controllare i codici sorgenti non aiuta un granchè. In primo luogo non è alla portata di tutti, in secondo luogo il software difficilmente e’ comprensibile (cfr. obfuscated c code contest) ed infine, come posso essere certo che il software non sia stato alterato in memoria durante il tempo delle votazioni (ed eventualmente poi ripristinato) ? Esistono dei meccanismi per assverare ciò, è un po’ una frontiera della ricerca in crittografia, e comunque alla fine ti devi fidare dei pochi iniziati in grado di verificare.

Ecco allora una prima idea di usare la blockchain: un registro pubblico immutabile in cui c’è espresso il mio voto in chiaro (cosi’ tutti lo possono contare) ed associato ad esso c’e’ il mio identificatore criptato con una chiave che solo io ho, cosi’ solo io posso sapere che sono io ad avere espresso quel voto e posso verificarlo.

In effetti cosi’ non è sufficiente. Basterebbe aspettare e vedere cosa si scrive subito dopo che ho votato, per sapere come ho votato. Problema che si può risolvere per esempio aggiungendo una cifratura anche della mia preferenza con una chiave che  sia possibile usare solo dopo la chiusura delle urne.

Però così ho un altro problema. Se io posso verificare dopo la chiusura delle urne se il mio voto è registrato in modo corretto, posso farlo anche di fronte al mafioso di turno che mi dà 20 euro per il mio voto.

In generale, il problema della verifica del voto così espresso non si risolve senza introdurre altri punti di vulnerabilita’ in un sistema o di una terza parte di cui fidarsi. Ovvero, registrare autonomamente il voto in modo tale da consentirmi autonomamente di verificarlo ex post, senza introdurre punti di possibile vulnerabilità,  mi abilita il voto di scambio.

Ora immaginiamo che si faccia un sistema di consultazione online che venga usato per deliberare in merito ad un determinato investimento, ad esempio un porto. Immaginiamo poi si scopra che in quell’investimento per quel porto c’erano delle cointeressenze mafiose. (ad esempio le cronache giudiziarie recenti raccontano di  presunti fatti legati alla decisione  di fare o meno lo stadio nuovo per la Roma).

Cosa si potrebbe dire in merito al fatto di avere preso una tale decisione con un sistema che consenta il voto di scambio ?

Se non si introduce questa possibilità di verifica, e quindi ci si deve fidare del software in esecuzione, cosa si potrebbe dire in merito al fatto di avere preso una tale decisione su un sistema gestito da Tizio ?

Fidarsi ciecamente di Tizio ? Potrebbe dimostrare che il software in esecuzione in quel momento fosse quello effettivamente pubblicato su github ? E’ unpunto molto complesso.

In una decisione del genere, in cui si salvino contemporaneamente capra e cavoli ( verificabilità, certificabilità, non vendibilità) l’automatismo della decisione trasferisce immediatamente una dose di criticità sui creatori del software o sui gestori del sistema.

La filiera di segretezza (rispetto ad altri)/ verificabilità (da parte di chi vota)/non vendibilità (a terzi)/responsabilità (di chi gestisce il sistema) è tutt’altro che banale..

Questa era la conclusione della chiaccherata…

If you like this post, please consider sharing it.

12 thoughts on “Usare la blockchain per registrare voti.”

  1. Si puo’ fare senza introdurre ulteriori vulnerabilita’, ne particolari complessita’. Occorre combinare crittografia omomorfica e chiavi composite.

    La prima serve a rendere illegibile la ricevuta di voto contenente il voto, nel momento in cui voti e sei protetto da occhi indiscreti. Le seconde servono ad assicurarsi che per mettere in chiaro il voto cifrato in precedenza, ti servano 2 o piu’ chiavi, es: il mafioso non ti puo’ torturare per avere prova della tua fedelta’, perche’ tu, anche volendo, non potresti fornirgliela pur avendo in mano la versione crittografata del tuo voto e una delle due o piu’ chiavi necessarie.

    E il voto puo’ essere verificato in qualunque momento senza necessita’ di decifrarlo, perche’ la caratteristica della crittografia omomorfica e’ la capacita’ di effettuare operazioni matematiche senza conoscere i numeri da sommare/sottrarre/etc.
    In sostanza per verificare autonomamente il voto ti basterebbe prendere una macchinetta da 5 euro, infilarci dentro tutte le ricevute di voto (o rastrellarle dalla blockchain) e veder comparire la classifica.
    Nelle liste del Partito Pirata scrissi che era meglio avere delle ricevute cartacee, stampate su una sorta di rullino di carta tipo quello per le vecchie calcolatrici da scrivania; ma anche la blockchain dovrebbe essere adeguata. All’epoca non avevo idea si potesse fare qualcosa del genere.

    La carta serve perche’ nella peggiore delle ipotesi (ie: guerra, catastrofe naturale, meteorite che cade sulla terra, archeologi che non sanno come erano fatti i nostri computer primitivi, psicopolizia che perseguita chi vuole ricontare i voti), i conti si possono fare a mano. Con carta e penna.

    Un paio di persone probabilmente finirebbero torturate perche’ il mafioso non crederebbe che non possono decifrare il proprio voto; e’ gia’ successo che un magistrato mettesse in galera gente che non voleva/poteva fornire le chiavi per accedere a contenuti che il magistrato voleva analizzare. Non deve per forza essere un mafioso. A me un magistrato ha letteralmente RUBATO tutto il mio materiale informatico, dopodiche’ insabbiato il processo, e io per non perdere i miei dati (dato che le procedure prevedevano la cancellazione delle prove dopo l’uso) ho dovuto spargerli ai 4 angoli del globo (con tutte le conseguenze che questo comporta: al momento il mio dominio di allora e’ registrato presso societa’ panamense, e il suo contenuto e’ scritto in thailandese… dopo che io ho vissuto in TH per 5 anni e sono saltati fuori i Panama Papers).
    Questo ufficialmente era per rispettare le vittime; ma in realta’ serviva a rendere impunibili gli errori giudiziari (perche’ dopo che son passati i carabinieri non hai piu’ le prove per denunciarli). A 10 anni dal fatto sto ancora aspettando che mi restituiscano i miei oggetti (oramai obsoleti) e mi ripaghino dei danni.
    Ma comunque non appena si sparge la voce che il titolare del voto non puo’ decifrare, anche mafiosi e magistrati smetterebbero di torturare le persone.

    Questa roba l’ho documentata ampiamente nelle liste del Parito Pirata circa 10 anni fa. Poi ripetuta varie volte sul mio account G+ mentre ero in esilio in Asia. Ma chiaramente nel frattempo abbiamo ottenuto solo il Tagliando di Qualita’ per evitare la Scheda Ballerina. Tant’e’ che non voto 🙂
    Tanto i voti non li contano nemmeno; gli basta chiedere a Facebook di profilare gli utenti e restituirgli l’equivalente moderno dei sondaggi televisivi dell’epoca Berlusconi, dopodiche’ pubblicare quei sondaggi come esito di voto. E nessuno sarebbe in grado di smentirli; anche visto e considerato che le schede dopo il conteggio vengono letteralmente abbandonate alla merce’ di chiunque, quindi sarebbe improprio ricontarle.

    1. Stefano Quintarelli

      in un caso devi coinvolgere un altro di cui fidarti. se vedi tutti i voti, non puoi sapere che il tuo sia registrato correttamente. se lo puoi verificare dopo il voto, puoi fare quella verifica davanti al mafioso e vendere il voto.

    2. Certo che devi coinvolgere altri. Altri, non altro. Piu’ sono, meglio e’. Come coinvolgerli dipende da alcune scelte che si possono fare in fase progettuale.

      Esempio: puoi utilizzare le chiavi degli altri 4-5 che sono dentro le altre cabine di voto con te nello stesso momento: una volta composto il gruppo di voto sufficiente, si collegano via cavo le 4-5 macchinette personali di voto per lo scambio reciproco delle chiavi di cifratura, quando la propria macchina da’ led verde per ricezione chiavi si disconnettono, e poi si entra a votare. E sono chiavi non scelte; difficile cioe’ che qualcuno possa manipolare l’ordine di arrivo al seggio; piu’ e’ grande la dimensione del gruppo di voto, meno e’ probabile che qualcuno riesca a mandare dentro le proprie persone, e nell’ordine giusto.
      Questo aiuta anche ad evitare che i voti siano spiati nel momento del voto, perche’ verrebbero aggregati in modo p2p prima di essere consegnati all’urna; l’urna riceverebbe 5-6 voti gia’ aggregati, rendendo impossibile sapere (anche avendo tutte le chiavi e avendo corrotto il gestore dell’urna, carabinieri compresi) chi ha votato cosa. Ovviamente implica che occorre far attendere il primo che arriva, fino a che non ci siano altri 4-5 pronti a votare; dopodiche’ mandarli nella cabina tutti insieme. E per evitare di far aspettare troppo i primi arrivati, si puo’ attendere un timeout massimo e dopodiche’ mandare dentro un numero di scrutatori sufficienti, che producono dei voti di riempimento (tanto il voto e’ cifrato, quindi l’urna riceve comunque 5-6 voti indistinguibili) che impiegano chiavi prodotte ad-hoc che permetteranno di scartare tutti i voti di riempimento DOPO l’avvenuta aggregazione finale. Possono anche utilizzare le proprie chiavi personali; tanto la loro identita’ di scrutatori e’ registrata al ministero, quindi e’ facile scartare i loro voti (e poi farli votare con la carta e penna). I gruppi possono anche essere fatti dinamicamente: prima di uscire da casa mandi un sms “Arrivo tra 10 minuti”, e una macchinetta che svolge analoga funzione di prenotazione puo’ essere messa sul cancello esterno dell’edificio, cosi’ il sistema ti mette in coda; in base alla lunghezza della coda il gruppo di voto si allarga o si rimpicciolisce. Poi, se trovi traffico e ci metti 20 minuti anziche’ 10, oppure ti fermi sul cancello a salutare una persona che non vedevi da tanto tempo, o a fumare una sigaretta, o a chiedere una informazione ai carabinieri … qualcuno ti passa avanti … introducendo errore negli eventuali calcoli del mafioso che e’ li’ fuori a cercare di comporre un gruppo di voto a lui congeniale. Basta che mentre i suoi picciotti si appropinquano all’urna arrivi di corsa un ragazzo che va di fretta e li superi tutti, per fargli saltare i calcoli che aveva fatto. Se il carabiniere vede 5 persone, nonno e donna incinta compresi, che scattano a correre non appena vedono il ragazzo che corre, e ingaggiano una finale olimpionica sul vialetto della scuola elementare… qualcosa non va. Senza contare che, una volta arrivati li’, potrebbero scoprire che la dimensione del gruppo di voto e’ appena stata aumentata perche’ sono arrivati 20 sms di prenotazione tutti insieme.
      Questa dinamicita’ sarebbe basata su regole prefissate (ie: il presidente del seggio non puo’ alterarle in favore del mafioso) e renderebbe ancora piu’ difficile manipolare la fase iniziale di voto perche’ nessuno sa esattamente quante persone deve mandare dentro, in quale momento.

      Ma tutti questi elementi (ie: presenza di un seggio, sms di prenotazione, esistenza di scrutatori nel seggio, ecc) non sono strettamente necessari.

      Il meccanismo esatto lo si produce metodicamente in fase di analisi del sistema; qui su due piedi non vale la pena. Ma il concetto e’ che (a) non e’ mai necessario decifrare il voto perche’ usi crittografia omomorfica; (b) piu’ persone sono necessarie a decifrare il voto; (c) una delle due puo’ essere eventualmente scartata in favore dell’altra, per esemplificare il sistema nell’ultimo round di analisi.
      La cosa che molti matematici/sviluppatori in genere sbagliano, e’ considerare SOLO cio’ che avviene dentro la macchina; e quindi complicare il sistema con sistemi informatici estremamente complicati.

  2. Gabriele Turchi

    Non sarebbe sufficiente un meccanismo di firma digitale per cui io posso essere certo che il mio voto è stato registrato correttamente, ma senza poterne vedere il valore?

    1. Gabriele Turchi

      Premetto che non ci ho speso molto tempo e neuroni, potrei prendere una grande cantonata. E’ un approccio “tecnico”, ma se fosse ragionevole a renderlo accessibile ci si potrebbe pensare dopo…
      Dopo aver votato potrebbe comparire sullo schermo l’insieme delle informazioni che andranno a generare un hash, ovviamente incluso il voto, per esempio la data e ora esatta, e magari un testo casuale (o perfino una password definita dall’elettore) per perturbare l’hash.
      E l’hash calcolato. Se l’hash è standard, chiunque potrebbe ricalcolarlo per verificarne la correttezza. Quindi, a posteriori il votante potrebbe verificare che il suo voto fosse presente nel sistema come lui lo ha espresso.
      Certo, questo non garantisce che il voto sia stato conteggiato correttamente (ma questo vale anche per le attuali schede elettorali).
      Si potrebbe anche associare al proprio hash il voto criptato, con una chiave ovviamente non in possesso dell’elettore, che quindi possa essere decrittato ove necessario.. Chi ha la chiave (diciamo lo Stato) può decrittare tutti i voti e (ri)conteggiarli, ma non risalire all’elettore (che è solo un hash).

    2. Stefano Quintarelli

      il chiunque ne verifichi la correttezza puo’ fare la sua verifica davanti al mafioso e farsi pagare i 20 euro per il suo voto…

    3. No, non e’ sufficiente: se la macchina/uomo e’ corrotta, puo’ dire a te che e’ stato registrato correttamente e poi cambiarlo in transito verso l’aggregatore che fa la conta generale per notificare l’esito. Come e’ accaduto per esempio nel 2006 (Pisanu padre ministro dell’interno, Pisanu figlio in azienda di raccolta voti elettronici usando chiavete usb che venivano trasportate dai seggi al ministero per la conta).
      Il voto deve essere verificabile ex-post impiegando strumenti automatici diversi da quelli impiegati per votare. Quando vieni ai computer, ci sono problemi vecchi e nuovi da risolvere, es: segretezza (vecchio), “double spending’ (nuovo). In alcune giurisdizioni e’ piu’ semplice perche’, per esempio, il voto e’ palese (ie: non deve essere segreto); ma gli elementi rimanenti fanno si che il problema generale rimane comunque non banale.

      Questo e’ uno dei programmatori delle macchine per votare impiegate in america, che testimonia (quasi 20 anni fa) in aula, di averle programmate appositamente per truccare le elezioni, su richiesta dei committenti delle macchinette:

      https://www.youtube.com/watch?v=YcxGGnmRQAs

      Il magistrato gli chiede anche se potrebbe creare un sistema per tutelare le elezioni, anziche’ truccarle, e il programamtore dice che non e’ possibile (e noi informatici siamo d’accordo con lui): ogni partito dovrebbe fornire programmatori che tutelano la produzione e le operazioni delle macchine.

      Che poi sarebbe il modello in uso presso M5S (Rousseau), e Partito Pirata (LiquidFeedback). E ovviamente e’ implicito in qualunque cosa sia stata prodotta da altri in precedenza: danno per scontato che macchine di voto monitorate da umani (ie: gli scrutatori, e gli incaricati dei partiti a monitorare lo svolgimento delle elezioni nei seggi) siano efficaci.
      Cioe’ all’imprescindibile ‘programmabilita’ della macchina, vengono affiancati degli scrutatori/certificatori della correttezza della macchina. E non funziona, perche’ anche gli esseri umani sono ‘programmabili’ (credenze, mazzette, ecc). E’ vero anche per le procedure pre-esistenti ai computer: carta e matita.
      Fino al secolo scorso era semplicemente impossibile immaginare qualcosa di diverso; nel migliore dei casi potevamo usare un animale per selezionare una pallina tra le molte che escono dal bussolotto… ma era praticamente l’analogo di un RNG (Random Number Generator). Oggi invece abbiamo i computer; basterebbe usarli a dovere.

      Notevole e’ il fatto che nonostante quella testimonianza, hanno continuato ad usare macchine di voto elettroniche (e, orrore, voto per corrispondenza; come da noi per le circoscrizioni estere). Cioe’ pur sapendo della sua manipolabilita’, c’e’ stata la volonta’ di produrre elezioni finte per quasi 20 anni. E’ inquietante.

      Ovviamente da noi non e’ andata meglio. Abbiamo prodotto una sentenza costituzionale che invalida le elezioni dal 2005 in poi, ma sentenza che non ha avuto seguito a parte (a) qualche intervento cosmetico (tagliando di qualita’ anti scheda ballerina) atto a rassicurare senza risolvere, e (b) il solito fenomeno da baraccone (Gen. Antonio Pappalardo).

  3. vi racconto cosa fece l’associazione imolug (www.imolug.org) nel 2015.
    avevamo adottato un metodo di tesseramento basato su x509: ciascun tesserato aveva un suo certificato valido un anno a partire dalla data di sottoscrizione.
    solo con questo certificato valido si poteva entrare nelle zone del sito, anch’esso protetto con x509, dichiarate ad uso dei soci come ad esempio l’elenco dei soci o i verbali delle riunioni.

    partendo da questa base e volendo dare la possibilità di voto solo ai soci attivi creammo il seguente sistema.

    i voti erano tenuti registrati summarizzati e disaccoppiati dal votante nella tabella A
    il voto del socio cifrato “asimmetricamente” tramite il certificato client veniva registrato nella tabella B

    con questa base dati e con questi presupposti:
    solo le persone col certificato valido potevano votare
    solo chi in possesso del certificato client in mano poteva vedere cosa aveva votato precedentemente
    nello stesso contesto avevamo implementato anche il cambio di voto: -1 al candidato precedente e +1 al nuovo

    i certificati tutti emessi da una ca che ci eravamo costruitivi

    cosa ne pensate?

    1. Stefano Quintarelli

      semplice ed elegante. pero’ non risolve il problema del voto di scambio. io con il mio certificato posso andare davanti al mafioso a fargli vedere cosa ho votato e farmi pagare.
      puo’ andare bene in molte occasioni, ma non in voti politici o che determinano direttamente azioni delle amministrazioni pubbliche.

    2. Non puoi utilizzare la tecnologia pre-esistente perche’ e’ stata fatta dando per scontato la solidita’ dell’autorita’ centrale: militari, stato … LUG. X509 non fa eccezione. Nessuno ti garantisce che un consigliere del LUG sia tanto corrotto quanto un presidente del consiglio che finanzia attivamente la mafia, o i generali dei carabinieri che ci si mettono d’accordo mandando a morire i magistrati che indagano.

      Il passo successivo (es: LDAP multipli, OpenID, ecc) e’ stato quello di utilizzare server multipli con dati replicati affidati a diverse entita’; con l’idea di risolvere eventuali incongruita’ caso per caso. Correntemente i DNS, per esempio, sono affidati ai consorzi delle autorita’ territoriali continentali; ed in ognuna di queste sono in essere meccanismi di manipolazione dei DNS decisi da entita’ politiche potenzialmente corrotte. Chiamiamo le manipolazioni cinesi ‘Grande Muraglia Digitale’, ma curiosamente non abbiamo dato un nome a quelle che avvengono nel blocco occidentale. Analogamente a LiquidFeedback del Partito Pirata e successivamente Rousseau del M5S (che non a caso continua a ricevere incessanti critiche sull’assenza di democrazia interna al partito), anch’essi impiegano strumenti obsoleti (es: una batteria di postgresql).

      Distribuire i dati diventa soluzione (parziale) solo quando il numero di sistemi su cui sono distribuiti i dati e’ tale da rendere (quasi) impossibile corrompere tutti i sistemi. Il numero e’ enorme, sarebbe meglio se molti di questi sistemi non fossero in rete (ie: niente radio, ne’ cavi; tu copi a manina su una tastiera cio’ che vedi su un display; fortunatamente gli hash possono essere identificati usando un sottoinsieme di bit), e ovviamente non devono esistere entita’ centrali di alcun tipo (es: Microsoft che produce Windows Update Genuine Advantage Super… che ti aggiorna di soppiatto e forzosamente il software a bordo della macchina). Uno dei problemi che stiamo vivendo e’ la capacita’ del parlamento di mutare i propri regolamenti e tutto il resto: elezioni illegittime dal 2005, ma il parlamento corrotto fa finta di niente. Ma se non e’ il parlamento a prendere atto del giudizio della corte costituzionale, chi cambia il parlamento? In USA hanno le armi per questo… da noi non e’ previsto e la corte costituzionale ha fatto spallucce (con una sentenza in cui in sostanza dice che loro sono autorevoli nei limiti della Costituzione; cio’ che e’ esterno ad essa non li compete piu’ di quanto compete uno qualunque di noi).

      Per questo diventa complicato (oltre al coordinamento tecnologico di questi sistemi) identificare un gruppo di persone che possa eventualmente modificare l’algoritmo DOPO che e’ stato distribuito sui vari sistemi. Il bitcoin, grazie alla prova su strada, ha avuto bisogno di piccole modifiche principalmente atte a velocizzare le transazioni; e questo ha portato a dei fork perche’ non c’era unanimita’ sulle modifiche da apportare. Cosa che per il bitcoin non e’ un grandissimo problema, ma per un sistema amministrativo che si prefigge di essere universale e totale … non e’ ammissibile. Uno stato ha il monopolio della violenza e del giudizio; non e’ un semplice strumento di misura del valore economico. In piu’ ci nasci dentro, e nessuno ti ha mai chiesto se ti va bene.
      Per il LUG andava bene perche’ e’ una associazione volontaria con pochissimi asset economici e men che mai la disponibilita’ di misure penali, ie: nella peggiore delle ipotesi qualcuno si ruba un pacco di dvd vuoti lasciati nella sede che il comune ha dato in concessione all’associazione; e il ladro, se scoperto, si prende una valanga di parolacce e viene bandito dalla comunita’ (senza per questo dover cambiare continente).

      Per cose piu’ impegnative occorre invece procedere con i sistemi distribuiti che milioni di persone diverse, per motivi diversi, cercando di tenere nascosti in quanto dimostrano la fine delle intermediazioni di un qualunque genere (amministrative, finanziarie, commerciali, religiose, ecc). Napster non era importante dal punto di vista tecnologico; era tecnologia nota da 20 anni, e oggi largamente obsoleta. Era importante per la sua diffusione. Skype era distribuito anch’esso e integrava un meccanismo elettivo per i supernodi che dovevano sopperire alle mancanze dei singoli nodi periferici (es: mancanza di banda, mancanza di IP pubblico, ecc), ed era un meccanismo dinamico: quando c’e’ necessita’, si chiede al nodo con piu’ risorse di fare da manager; ma non a caso ha subito una rapida evoluzione in sistema centralizzato amministrativamente (ie: tecnologicamente e’ ancora decentralizzato, ma i supernodi sono gestiti dalla stessa entita’ amministrativa). E comunque l’indisponibilita’ della documentazione del protocollo skype non avrebbe retto molto; security by obscurity in genere dura poco a meno che non inizi a mettere in galera chi fa reverse engineering (come cioe’ e’ accaduto ed e’ ancora illegale in molti paesi del mondo).

      Anche perche’ non ha senso fare altro che non sia un sistema distribuito: i sistemi centralizzati falliscono costantemente da sempre, quelli decentralizzati tendono a diventare centralizzati, ma se dobbiamo produrre un altro sistema, del tutto analogo a quelli pre-esistenti… tanto vale tenersi quello che abbiamo. Perche’ quello nuovo fallirebbe allo stesso modo.
      Da 20 anni la tecnologia e’ al palo perche’ (a) c’e’ una enorme frammentazione dei sistemi distribuiti e (b) quelli di successo, che riescono cioe’ ad aggregare consenso sufficiente ad innescare l’effetto rete, vengono comprati e trasformati (skype), deviati/corrotti (tor), o semplicemente abbattuti (napster).

      Per ‘sistema’ puoi pensare al sistema che vuoi… politica, tecnologia, natura… sono tutti ‘sistemi dinamici’ piu’ o meno caotici, si studiano tutti allo stesso modo, e perfino su un solo cellulare abbiamo una capacita’ di fare FFT abbastanza grande da poterli osservare e manipolare.

      Ma per favore, non pensate ad esemplificazioni; perche’ non ce ne sono. Per lo meno son 15 anni che ci sbatto il grugno e non ne ho trovate. Non puoi pensare di fare l’hash di seed, IP, data, ora, password e numero progressivo, come fai per l’identificazione utente di un sito web.

  4. gabriele renzi

    Ma nell’esercizio non manca la parte del voto multiplo? Forse l’ho mancata io, ma assumendo sia risolta in qualche modo esterno, forse il resto si risolve così, per analogia con la realtà, e confidenza “fino a un certo punto”.

    Si presuppone una funzioncina tipo hash(K, X) che mappa su N valori {SK1, SK2, …, SKN} invertibile dato un valore.
    Che ne so, xor K e X, e presi segmenti di N bit del valore risultante.

    – il votante si presenta al sistema con la sua chiave K (la carta dì identità), e la mescola con la X (un nonce)
    – il sistema (“lo scrutatore”) assegna un set di N subchiavi per votante (“la tessera”). Ovvero, si pescano N valori da un dominio limitato a tot votanti + un buffer. O forse un dominio più piccolo di N è anche meglio.
    – set diversi possono riproporre le stesse subchiavi
    – l’utente usa una singola subchiave per votare aggiungendo il voto firmato con la subchiave scelta

    Il voto è
    – segreto, perché non c’è informazione su chi ha espresso il voto, la chiave privata è stata mescolata con il blocco corrente, che non è sotto il controllo dell’utente, e qualunque utente avrebbe potuto pescare una certa subchiave
    – verificabile dall’utente, perché sa quale subchiave ha usato, con quale nonce e in quale blocco
    – non vendibile _in generale_ perché la stessa subchiave può occorrere in altre transazioni

    Il votante può far vedere il proprio nonce + chiave privata e dire “ho pescato queste N subchiavi e votato al blocco X” ma non può dimostrarlo (ovvero, potrebbe semplicemente aver scelto una subchiave e invertito la funzione usando la sua chiave)

    Questo, assumendo che ci sia almeno un altro voto compatibile con la chiave, che però credo sia una cosa garantibile con una scelta appropriata della funzione, per N votanti.

    Mi scuso se mi sono perso qualcosa, ma è ora di cena e i figli reclamano.

    Oltretutto non son sicuro se sia meglio ri-usare le subchiavi N volte (aumentando la “deniability”).
    Sembra plausibile, ma dieci minuti fa mi sembrava sbagliato per qualche ragione che non ricordo 🙂

Leave a Reply to mfp Cancel Reply

Your email address will not be published. Required fields are marked *