Cuntinuemu a nostra seria nantu à u blockchain di Monero, è l'articulu di l'oghje si focalizeghja nantu à u protocolu RingCT (Ring Confidential Transactions), chì introduce transazzione cunfidenziale è novi firmati di ring. Sfurtunatamente, ci hè pocu infurmazione nantu à Internet nantu à u funziunamentu di u funziunamentu, è avemu pruvatu à cumpensà sta lacuna.
Avemu da parlà di cumu a reta oculta quantità di trasferimentu chì utilizanu stu protokollu, perchè anu abbandunatu e firmate di l'anellu di criptonote classicu, è cumu sta tecnulugia hà da sviluppà più.
Siccomu stu protokollu hè una di e tecnulugii più cumplessi in Monero, u lettore hà bisognu di una cunniscenza basica di u disignu di questa catena di bloccu è di una cunniscenza passa di a criptografia di curva ellittica (per rinfriscà sta cunniscenza, pudete leghje i primi capituli di u nostru articulu precedente circa
protocolu RingCT
Unu di i pussibuli attacchi à e valute cryptonote hè l'analisi di blockchain basatu nantu à a cunniscenza di a quantità è u tempu di a transazzione mandata. Questu permette
Hè da nutà chì l'idea di ammuccià quantità ùn hè micca nova. U sviluppatore di Bitcoin Core, Greg Maxwell, hè statu unu di i primi à discrive in u so
Frà l'altri cose, u protokollu aiuta à caccià i prublemi cù u mischju di u polu - outputs di una piccula quantità (di solitu ricevutu in forma di cambiamentu da e transacciones), chì creanu più prublemi di ciò chì valenu.
In ghjennaghju 2017, una furchetta dura di a reta di Monero hà fattu, chì permette l'usu facultativu di transazzione cunfidenziale. E digià in settembre di u stessu annu, cù a versione 6 hard fork, tali transazzione sò diventate l'unicu permessu in a reta.
RingCT usa parechji meccanismi à una volta: firma di gruppu anonimu spontanea cunnessa multistrati (Firma di Gruppu Anonima Spontaneous Linkable Multilayered, in seguitu chjamata MLSAG), un schema d'impegnu (Impegni Pedersen) è prove di gamma (questu termini ùn hà micca una traduzzione stabilita in russo) .
U protocolu RingCT introduce dui tipi di transazzione anonima: simplicità è piena. A billetera genera u primu quandu una transazzione usa più di un input, u sicondu - in a situazione opposta. Differiscenu in a validazione di quantità di transazzione è i dati firmati cù una firma MLSAG (parleremu più nantu à questu quì sottu). Inoltre, transazzione di tipu pienu pò esse generatu cù qualsiasi quantità di inputs, ùn ci hè micca una diferenza fundamentale. In u libru
Signature MLSAG
Ricordemu ciò chì sò l'inputs di transazzione firmati. Ogni transazzione spende è genera qualchi fondi. A generazione di fondi si faci da a creazione di outputs di transazzione (una analogia diretta hè fattura), è l'output chì a transazzione spende (dopu à tuttu, in a vita reale spendemu billette) diventa l'input (attenzione, hè assai faciule d'esse cunfusu). quì).
Un input riferenzi multiplici outputs, ma spende solu unu, cusì creendu un "fumu" per rende difficiule di analizà a storia di a traduzzione. Se una transazzione hà più di un input, allora una tale struttura pò esse rapprisintata cum'è una matrice, induve e fila sò l'inputs è i culonni sò i outputs misti. Per pruvà à a reta chì a transazzione spende esattamente i so outputs (cunnosce i so chjavi sicreti), l'inputs sò firmati cù una firma d'anellu. Una tale firma guarantisci chì u firmante sapia i chjavi sicreti per tutti l'elementi di qualsiasi colonna.
E transazzione cunfidenziale ùn utilizanu più i classici
Sò chjamati multilayer perchè firmanu parechji inputs à una volta, ognunu di i quali hè mischju cù parechji altri, vale à dì una matrice hè firmata, è micca una fila. Comu vedemu più tardi, questu aiuta à salvà a dimensione di a firma.
Fighjemu cumu si forma una firma d'anellu, usendu l'esempiu di una transazzione chì spende 2 outputs reali è usa m - 1 casuale da u blockchain per mischjà. Denotemu i chjavi publichi di i outputs chì spendemu cum'è
, è l'imaghjini chjave per elli in cunseguenza: Cusì, avemu una matrice di taglia 2 x m. Prima, avemu bisognu di calculà e cusì chjamate sfide per ogni paru di outputs:
Cuminciamu i calculi cù l'outputs, chì passemu cù e so chjave pubbliche:è numeri casualiIn u risultatu, avemu i seguenti valori:
, chì avemu usatu per calculà sfida
u prossimu paru di outputs (per fà più faciule per capiscenu ciò chì sustituiscemu induve, avemu evidenziatu questi valori in diversi culori). Tutti i valori seguenti sò calculati in un cercolu cù e formule date in a prima illustrazione. L'ultima cosa da calculà hè a sfida per un paru di outputs reali.
Comu pudemu vede, tutte e culonne eccettu quella chì cuntene outputs reali utilizanu numeri generati aleatoriamente. di π- culonna avemu ancu bisognu di elli. Trasformemuin s:
A firma stessa hè una tupla di tutti sti valori:
Questa data hè dopu scritta in una transazzione.
Comu pudemu vede, MLSAG cuntene solu una sfida c0, chì permette di salvà a dimensione di a firma (chì hè digià bisognu di assai spaziu). In più, ogni inspectore, utilizendu i dati, restaurà i valori c1,…, cm è verifica chì. Cusì, u nostru anellu hè chjusu è a firma hè stata verificata.
Per e transazzione RingCT di u tipu sanu, una linea più hè aghjuntu à a matrice cù outputs mixte, ma parlemu quì sottu.
L'impegni di Pedersen
L'impegni di Monero sò usati per ammuccià e quantità di trasferimenti è utilizate l'opzione più cumuna - impegni Pedersen. A propositu, un fattu interessante - à u principiu, i sviluppatori prupunenu di ammuccià e quantità per u mischju ordinariu, vale à dì, aghjunghjenu outputs per quantità arbitrarie per intruduce l'incertezza, ma dopu anu cambiatu à l'impegni (ùn hè micca un fattu chì anu salvatu nantu à). a dimensione di a transazzione, cum'è avemu da vede quì sottu).
In generale, l'impegnu s'assumiglia cusì:
Induve C - u significatu di l'impegnu stessu, a - quantità nascosta, H hè un puntu fissu nantu à a curva ellittica (generatore addiziale), è x - una sorta di maschera arbitraria, un fattore di ocultazione generatu aleatoriamente. A mascara hè necessariu quì per chì un terzu ùn pò micca solu guessà u valore di l'impegnu.
Quandu una nova pruduzzione hè generata, a billetera calcula l'impegnu per questu, è quandu si spende, piglia o u valore calculatu durante a generazione o ricalculate, secondu u tipu di transazzione.
RingCT simplice
In u casu di transazzione RingCT simplici, per assicurà chì a transazzione hà creatu outputs in una quantità uguale à a quantità di inputs (ùn hà micca pruduciutu soldi fora di l'aria), hè necessariu chì a summa di l'impegni di u primu è u sicondu. quelli sò listessi, vale à dì:
Cummissioni di impegni u cunsidereghjanu un pocu sfarente - senza una maschera:
induve a - a quantità di a cumissioni, hè dispunibule publicamente.
Stu approcciu ci permette di dimustrà à u partitu di fiducia chì usemu i stessi quantità senza divulgà.
Per fà e cose più chjaru, fighjemu un esempiu. Diciamu chì una transazzione spende dui outputs (chì significa chì diventanu input) di 10 è 5 XMR è genera trè outputs per valore 12 XMR: 3, 4 è 5 XMR. À u listessu tempu, paga una cumissioni di 3 XMR. Cusì, a quantità di soldi spentu più a quantità generata è a cumissioni hè uguali à 15 XMR. Pruvemu di calculà l'impegni è fighjemu a diffarenza in i so quantità (ricurdate di a matematica):
Quì vedemu chì per l'equazioni per cunverge, avemu bisognu di e sume di e maschere di input è output per esse listessi. Per fà questu, a billetera genera aleatoriamente x1, y1, y2 è y3, è u restu x2 calcula cusì:
Utilizendu queste maschere, pudemu dimustrà à qualsiasi verificatore chì ùn generemu micca più fondi di quelli chì spendemu, senza divulgà a quantità. Originale, nò?
RingCT pienu
In tutte e transazzioni RingCT, cuntrollà i quantità di trasferimentu hè un pocu più intricatu. In queste transazzione, a billetera ùn recalculate l'impegni per l'inputs, ma usa quelli calculati quandu sò stati generati. In questu casu, duvemu assume chì ùn averemu più a diffarenza in i sume uguali à cero, ma invece:
hè z - differenza trà maschere di input è output. Se avemu cunsideratu zG cum'è una chjave publica (chì hè de facto), allora z hè a chjave privata. Cusì, sapemu i chjavi publichi è privati currispondenti. Cù sta dati in manu, pudemu usà in a firma di l'anellu MLSAG cù e chjavi pubbliche di i outputs mischiati:
Cusì, una firma d'anellu validu assicurarà chì sapemu tutte e chjave private di una di e culonne, è pudemu cunnosce solu a chjave privata in l'ultima fila se a transazzione ùn genera micca più fondi di ciò chì spende. A propositu, eccu a risposta à a quistione "perchè a diffarenza in i quantità di impegni ùn porta micca à zero" - se zG = 0, allora espansione a colonna cù outputs reali.
Cumu u destinatariu di i fondi sapi quantu soldi hè statu mandatu à ellu? Tuttu hè simplice quì - u mittente di a transazzione è i chjavi di scambià di u destinatariu utilizendu u protocolu Diffie-Hellman, utilizendu a chjave di transazzione è a chjave di vista di u destinatariu è calculate u sicretu spartutu. U mittente scrive dati nantu à e quantità di output, criptate cù questa chjave sparta, in campi speciali di a transazzione.
Prove di gamma
Chì succede se utilizate un numeru negativu cum'è a quantità in impegni? Questu pò purtà à a generazione di muniti supplementari! Stu risultatu hè inaccettabile, cusì avemu bisognu di guarantiscia chì e quantità chì usemu ùn sò micca negativi (senza divulgà queste quantità, sicuru, altrimenti ci hè tantu travagliu è tuttu in vain). In altri palori, avemu da pruvà chì a somma hè in l'intervallu [0, 2n - 1].
Per fà questu, a summa di ogni output hè divisa in numeri binari è l'impegnu hè calculatu per ogni cifru separatamente. Hè megliu per vede cumu questu succede cù un esempiu.
Assumimu chì i nostri quantità sò chjuchi è si mette in 4 bits (in pratica questu hè 64 bits), è creamu un output vale 5 XMR. Calculemu l'impegni per ogni categuria è l'impegnu tutale per l'intera quantità:
Dopu, ogni impegnu hè mischju cù un surrogate (Ci-2iH) è hè firmatu in coppie cù a firma di l'anellu Borromeo (una altra firma di l'anellu), pruposta da Greg Maxwell in u 2015 (pudete leghje più nantu à questu).
Pigliatu inseme, questu hè chjamatu prova di gamma è vi permette di assicurà chì l'impegni utilizanu quantità in u range [0, 2n - 1].
Chi c'è vicinu?
In l'implementazione attuale, e prove di gamma occupanu assai spaziu - 6176 bytes per output. Questu porta à transazzione più grande è dunque tariffi più alti. Per riduce a dimensione di una transazzione Monero, i sviluppatori introducenu bulletproofs invece di e firme Borromeo - un mecanismu di prova di gamma senza impegni bitwise.
Fate e vostre dumande, suggerisce temi per novi articuli nantu à tecnulugii in u campu di criptocurrency, è ancu abbonate à u nostru gruppu in
Source: www.habr.com