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.
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.
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.
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.
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 )
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.
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)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.
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 .