Podpis kruhu

Podpis kroužek (v angličtině  : Ring Signature ), také volal kruh podpis je šifrovací metoda, která umožňuje osoba, která má podepsat elektronicky anonymní zprávy nebo dokumentu jménem „kruhu“. Členy tohoto kruhu vybírá autor podpisu a nemusí být nutně informováni o jejich zapojení do vytváření elektronického podpisu . Jediným omezením je, že všichni musí mít veřejný kryptografický klíč.

Z podpisu kruhu vznikla derivace: prahový podpis kruhu , kde je podpis iniciován předdefinovaným počtem členů kruhu.

Zásada

Jak naznačuje název článku, kde je poprvé popsán, Jak uniknout tajemství , primárním účelem tohoto podpisu je umožnit únik informací .

V tomto článku je uveden příklad člena ministerského kabinetu, který chce novinářovi poskytnout informace o předsedovi vlády. Zjevně nechce prozradit svou identitu, ale chce, aby novinář věděl, že únik pochází z kabinetu, a nikoli od žolíka. Podpis kruhu mu tak umožňuje podepisovat jako člen ministerského kabinetu, a nikoli jako jednotlivec, aniž by si toho byli vědomi jeho kolegové nebo kdokoli ho mohl vystopovat, na rozdíl od skupinového podpisu, který ukládá spolupráci členů zahrnutých do podpis a možnost osoby určené při inicializaci znát totožnost podepsaného.

Další použití navržené v tomto článku spočívá v tom, že umožňuje generovat podpis, který bude mít hodnotu pouze pro příjemce. Zdroj tedy odešle dokument podepsaný pomocí kruhového podpisu, který obsahuje jeho klíč a klíč příjemce. Ten, který věděl, že jej nepředložil, má tedy důkaz, že zpráva skutečně pochází ze zdroje. Pokud však dokument předloží třetí straně, nemůže si být jistá, že zpráva není falešná a vytvořená příjemcem.

Definice

Kruhový podpis je definován jako data čtyř algoritmů, z nichž některé jsou podobné digitálním podpisům : ( Init , Gen , Sign , Verify ). Fungují následovně:

Tyto algoritmy jdou ruku v ruce s přidruženými pojmy zabezpečení, kterými jsou korekce podpisu , která určuje, že pokud je podpis poctivě generován, bude vždy přijat. Non-falsifiability , což vyžaduje, aniž by soukromý klíč spojený s jedním z prvků množiny R , je možné navrhnout platný podpis a anonymitu , která říká, že je nemožné spojit podpis její signatáře.

Schéma Rivest, Shamir a Tauman

V této části je uveden popis schématu navrženého Rivestem, Shamirem a Taumanem .

V tomto diagramu uživatel generuje podpis σ pro zprávu M, která má být podepsána, hazard v, jeho pár soukromých / veřejných klíčů a veřejné klíče ostatních členů kruhu R = ( pk i ) i ∈ [1; n] . Kromě toho toto schéma závisí na schématu šifrování ( Enc , Dec ).

Uživatelé tak mohou ověřit tento podpis pomocí σ, M , v a všech veřejných klíčů zapojených do procesu vytváření.

Podpis

Podepisovatel vygeneruje hash σ zprávy M a poté zvolí nonce v 0 . Pro každý veřejný klíč pk i ∈ R jiný než jeho vlastní si signatář náhodně vybere hodnotu x i , šifru s veřejným klíčem pk i a provede exkluzivní disjunkci výsledku s hodnotou v před použitím symetrické permutace E σ na výsledek, který dá novou hodnotu „  v i  “.

Který iterativně dává: v i  : = E σ ( Enc pk i ( x i ) ⊕ v i-1 )

Manipulace se znovu zahájí s ostatními veřejnými klíči.

Na konci skončíme s hodnotou v = v n . Poté hledáme hodnotu y, která, vložená nebo exkluzivní s v nalezeným a permutovaným s E σ , umožňuje najít v 0 . Jinými slovy v 0 = E σ ( y ⊕ v ). Nakonec použijeme soukromý klíč k nalezení předchůdce y šifrováním, to znamená x = Dec sk ( y ).

Nakonec bude vrácený podpis Σ = (v, (x i ) i )

Ověření

Příjemce provede nové výpočty v i = E σ (f (x i ) ⊕ v i + 1 ) pro všechny veřejné klíče podpisu a zkontroluje, zda na konci najde původní v.

Velikost podpisu je lineární v N, což odpovídá velikosti kruhu, protože je nutné určit nebezpečí x i použitá každým účastníkem.

Ověření konceptu

Níže je ukázka konceptu implementovaného v Pythonu nebo Pythonu3 z původního článku, používajícího RSA jako asymetrický kryptosystém. Kruh obsahuje čtyři členy.

Kódováno 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)  

Další schémata

Následně byla navržena další schémata, včetně schémat Dodis, Kiayias, Nicolosi a Shoup, která navrhuje schéma s podpisy konstantní velikosti v počtu uživatelů používajících akumulátory a ověřovací schéma Fiat . Chandran, Groth a Sahai navrhli další verzi standardního modelu , která má velikost, která se zvyšuje s druhou odmocninou počtu uživatelů ( O (√N) ).

Kryptoměny

Technologie Cryptonote používá kruhové podpisy. To je použito v krypto-měny jako Monero nebo Bytecoin DarkNote.

Princip kroužek podpisu byla také přináší ShadowCash, s kryptoměna inspirovaný Bitcoin .

Poznámky a odkazy

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

Bibliografie

  • [Bender, Katz a Morselli 2006] (en) Adam Bender, Jonathan Katz a Ruggero Morselli, „  Prstencové podpisy: silnější definice a konstrukce bez náhodných věštců  “ , TCC ,2006, str.  60-79
  • [Chandran, Groth a Sahai 2007] (en) Nishanth Chandran, Jens Groth a Amit Sahai  (en) , „  Prstencové podpisy sublineární velikosti bez náhodných věštců  “ , automaty, jazyky, programování ,2007
  • [Dodis, Kiayias, Nicolosi a Shoup 2004] (en) Yevgeniy Dodis, Aggelos Kiayias, Antonio Nicolosi a Victor Shoup , „  Anonymní identifikace ve skupinách ad hoc  “ , Eurocrypt , lNCS, sv.  3027,2004
  • [Rivest, Shamir and Tauman 2001] (en) Ronald Rivest , Adi Shamir a Yael Tauman , „  How to Leak a Secret  “ , Asiacrypt , lNCS,2001, str.  552-565 ( číst online [PDF] )
  • (en) Rynomster a Tecnovert, „  Shadow: Anonymní distribuovaná elektronická hotovost s nulovými znalostmi prostřednictvím sledovatelných prstenových podpisů  “ [PDF]

externí odkazy

  • Pierre-Louis Cayrel, Optimalizace kryptosystémů na základě kódů pro opravu chyb (disertační práce) ( číst online ) , kap.  6 („podpis kruhu na prahu, prezentace podpisu kruhu“).