Firma del cerchio

La firma dell'anello (in inglese  : Ring Signature ), chiamata anche firma dell'anello, è un metodo crittografico che consente a una persona di firmare un messaggio o un documento elettronicamente anonimo per conto di un "cerchio". I membri di questa cerchia sono scelti dall'autore della firma e non sono necessariamente informati del loro coinvolgimento nella creazione della firma elettronica . L'unico vincolo è che devono avere tutti una chiave crittografica pubblica.

La firma del cerchio ha dato origine a una derivata: la firma del cerchio della soglia , dove la firma è iniziata da un numero predefinito di membri del cerchio.

Principio

Come indica il titolo dell'articolo in cui viene descritto per la prima volta, How to Leak a Secret , lo scopo principale di questa firma è consentire la fuga di informazioni .

Questo articolo fornisce l'esempio di un membro di un gabinetto ministeriale che desidera fornire a un giornalista informazioni sul primo ministro. Ovviamente non vuole divulgare la sua identità, ma vuole che il giornalista sappia che la fuga di notizie arriva dal gabinetto e non da un burlone. La firma del cerchio gli consente quindi di firmare come membro del gabinetto ministeriale, e non come persona fisica, senza che i suoi colleghi ne siano a conoscenza, o chiunque possa rintracciarlo, a differenza della firma di gruppo che impone la collaborazione dei membri inclusi nel firma e la possibilità per una persona determinata in fase di inizializzazione di conoscere l'identità del firmatario.

Un altro utilizzo proposto in questo articolo è quello che permette di generare una firma che avrà valore solo per il destinatario. Pertanto la fonte invia un documento firmato utilizzando una firma circolare che comprende la sua chiave e quella del destinatario. Quest'ultimo, sapendo di non averlo prodotto, ha quindi la prova che il messaggio proviene effettivamente dalla fonte. Ma se mostra il documento a una terza parte, quest'ultima non può essere sicura che il messaggio non sia un falso, creato dal destinatario.

Definizione

Una firma ad anello è definita come i dati di quattro algoritmi, alcuni simili a quelli di una firma digitale : ( Init , Gen , Sign , Verify ). Funzionano come segue:

Questi algoritmi vanno di pari passo con le nozioni di sicurezza associate, che sono la correzione della firma , che specifica che se una firma viene generata onestamente, sarà sempre accettata. La non falsificabilità , che richiede senza avere una chiave privata associata a uno degli elementi dell'insieme R , è possibile progettare una firma valida e l' anonimato , che dice che è impossibile collegare una firma al suo firmatario.

Lo schema di Rivest, Shamir e Tauman

In questa parte viene fornita una descrizione dello schema proposto da Rivest, Shamir e Tauman .

In questo diagramma, l'utente genera una firma σ per il messaggio M da firmare, un pericolo v, la sua coppia di chiavi pubblica / privata e le chiavi pubbliche degli altri membri del cerchio R = ( pk i ) i ∈ [1; n] . Inoltre, questo schema dipende da uno schema di crittografia ( Enc , Dec ).

Gli utenti possono quindi verificare questa firma utilizzando σ, M , ve tutte le chiavi pubbliche coinvolte nel processo di creazione.

Firma

Il firmatario genera un hash σ del messaggio M e quindi sceglie un nonce v 0 . Per ogni chiave pubblica pk i ∈ R diversa dalla propria, il firmatario sceglie un valore x i in modo casuale, il cifrario con la chiave pubblica pk i ed esegue una disgiunzione esclusiva del risultato con il valore v prima di applicare una permutazione simmetrica E σ a il risultato, che darà un nuovo valore "  v i  ".

Che dà iterativamente: v i  : = E σ ( Enc pk i ( x i ) ⊕ v i-1 )

La manipolazione viene riavviata con le altre chiavi pubbliche.

Alla fine, otteniamo un valore v = v n . Cerchiamo quindi il valore y che, inserito o escluso con v trovato e permutato con E σ , permette di trovare v 0 . In altre parole v 0 = E σ ( y ⊕ v ). Infine, utilizziamo la chiave privata per trovare l'antecedente di y mediante la crittografia, ovvero x = Dec sk ( y ).

Infine la firma restituita sarà Σ = (v, (x i ) i )

Verifica

Il destinatario rifà i calcoli v i = E σ (f (x i ) ⊕ v i + 1 ) per tutte le chiavi pubbliche della firma e verifica che alla fine trovi l'originale v.

La dimensione della segnatura è lineare in N, che corrisponde alla dimensione del cerchio, perché è necessario specificare i pericoli x i utilizzati da ciascun partecipante.

Verifica teorica

Di seguito è riportato un proof of concept implementato in Python o Python3 dal documento originale, utilizzando RSA come un sistema crittografico asimmetrico. Il cerchio contiene quattro membri.

Codificato import os, hashlib, random, functools, Crypto.PublicKey.RSA class ring: def __init__(self, k, l=2048): self.k, self.l, self.n, self.q = k, l, len(k), 1 << l - 1 def sign(self, m, z): self.permut(m) s, u = [None]*self.n, random.randint(0, self.q) c = v = self.E(u) for i in list(range(z+1, self.n)) + list(range(z)): s[i] = random.randint(0, self.q) v = self.E(v^self.g(s[i], self.k[i].e, self.k[i].n)) if (i+1) % self.n == 0: c = v s[z] = self.g(v^u, self.k[z].d, self.k[z].n) return [c, ] + s def verify(self, m, X): self.permut(m) y = [self.g(X[i+1], self.k[i].e, self.k[i].n) for i in range(len(X)-1)] return functools.reduce(lambda x, i:self.E(x^y[i]), range(self.n), X[0]) == X[0] def permut(self, m): self.p = int(hashlib.sha1(m.encode('utf8')).hexdigest(), 16) def E(self, x): return int(hashlib.sha1(('%s%s'% (x, self.p)).encode('utf8')).hexdigest(), 16) def g(self, x, e, n): q, r = divmod(x, n) return q*n + pow(r, e, n) if (q+1)*n <= (1<<self.l)-1 else x if __name__ == '__main__': size, msg1, msg2 = 4, 'hello', 'world!' r = ring([Crypto.PublicKey.RSA.generate(2048, os.urandom) for x in range(size)]) for i in range(size): s1, s2 = r.sign(msg1, i), r.sign(msg2, i) assert r.verify(msg1, s1) and r.verify(msg2, s2) and not r.verify(msg1, s2)  

Altri schemi

Successivamente sono stati progettati altri schemi, tra cui quello di Dodis, Kiayias, Nicolosi e Shoup, che propone uno schema con firme di dimensione costante nel numero di utenti che utilizzano accumulatori e lo schema di autenticazione Fiat . Un'altra versione, nel modello standard , avente una dimensione che aumenta al crescere della radice quadrata del numero di utenti ( O (√N) ) è stata proposta da Chandran, Groth e Sahai.

Criptovalute

La tecnologia Cryptonote utilizza le firme del cerchio. E 'utilizzato in cripto-valute come Monero, o Bytecoin DarkNote.

Il principio della firma dell'anello è stato portato anche a ShadowCash, una criptovaluta ispirata a Bitcoin .

Note e riferimenti

  1. Rivest, Shamir e Tauman 2001 .
  2. Bender, Katz e Morselli 2006 .
  3. Dodis et al. 2004 .
  4. Chandran, Groth e Sahai 2007 .
  5. (en)  Cryptonote
  6. Shadowcash .

Bibliografia

  • [Bender, Katz e Morselli 2006] (en) Adam Bender, Jonathan Katz e Ruggero Morselli, "  Firme ad anello: definizioni più forti e costruzioni senza oracoli casuali  " , TCC ,2006, p.  60-79
  • [Chandran, Groth e Sahai 2007] (en) Nishanth Chandran, Jens Groth e Amit Sahai  (en) , "  Ring signatures of sub-linear size without random oracles  " , Automata, Languages, Programming ,2007
  • [Dodis, Kiayias, Nicolosi e Shoup 2004] (en) Yevgeniy Dodis, Aggelos Kiayias, Antonio Nicolosi e Victor Shoup , "  Anonymous Identification in ad-hoc Groups  " , Eurocrypt , lNCS, vol.  3027,2004
  • [Rivest, Shamir e Tauman 2001] (en) Ronald Rivest , Adi Shamir e Yael Tauman , "  How to Leak a Secret  " , Asiacrypt , lNCS,2001, p.  552-565 ( leggi online [PDF] )
  • (en) Rynomster e Tecnovert, "  Shadow: contanti elettronico distribuito anonimo a conoscenza zero tramite firme tracciabili  " [PDF]

link esterno

  • Pierre-Louis Cayrel, Ottimizzazione dei crittosistemi basati sui codici di correzione degli errori (Tesi di dottorato) ( leggi online ) , cap.  6 ("firma del cerchio alla soglia, presentazione della firma del cerchio").