Tietoja nimettömyydestä tilipohjaisissa lohkoketjuissa

Olemme olleet kiinnostuneita kryptovaluuttojen nimettömyydestä jo pitkään ja yritämme seurata teknologian kehitystä tällä alueella. Artikkeleissamme olemme jo keskustelleet yksityiskohtaisesti toimintaperiaatteista luottamuksellisia liiketoimia Monerossa ja myös toteutettu vertaileva katsaus tällä alalla olemassa olevaa teknologiaa. Kuitenkin kaikki nykyiset nimettömät kryptovaluutat perustuvat Bitcoinin - Unspent Transaction Output (jäljempänä UTXO) - ehdottamaan tietomalliin. Tilipohjaisille lohkoketjuille, kuten Ethereum, olemassa olevat ratkaisut anonymiteetin ja luottamuksellisuuden toteuttamiseen (esim. Mobius tai aztec) yritti jäljitellä UTXO-mallia älykkäissä sopimuksissa.

Helmikuussa 2019 ryhmä Stanfordin yliopiston ja Visa Researchin tutkijoita vapautettiin esipainettu "Zether: Kohti yksityisyyttä älykkäiden sopimusten maailmassa." Kirjoittajat ehdottivat ensimmäisenä lähestymistapaa anonymiteetin varmistamiseen tilipohjaisissa lohkoketjuissa ja esittelivät kaksi versiota älykkäästä sopimuksesta: luottamuksellisille (saldojen ja siirtosummien piilottaminen) ja anonyymeille (vastaanottajan ja lähettäjän piilottaminen). Pidämme ehdotettua tekniikkaa mielenkiintoisena ja haluaisimme jakaa sen suunnittelun sekä keskustella siitä, miksi anonymiteettiongelmaa tilipohjaisissa lohkoketjuissa pidetään erittäin vaikeana ja onnistuivatko kirjoittajat ratkaisemaan sen kokonaan.

Tietoa näiden tietomallien rakenteesta

UTXO-mallissa tapahtuma koostuu "syötteistä" ja "lähdöistä". Suora analogi "tuotoksille" ovat lompakossasi olevat laskut: jokaisella "ulostulolla" on jokin nimellisarvo. Kun maksat jollekulle (muodostat tapahtuman), käytät yhden tai useamman "tulon", jolloin niistä tulee tapahtuman "syötteitä", ja lohkoketju merkitsee ne käytetyiksi. Tässä tapauksessa maksusi vastaanottaja (tai sinä itse, jos tarvitset muutosta) vastaanottaa äskettäin luodut "ulostulot". Tämä voidaan esittää kaavamaisesti seuraavasti:

Tietoja nimettömyydestä tilipohjaisissa lohkoketjuissa

Tilipohjaiset lohkoketjut ovat rakenteeltaan samanlaisia ​​kuin pankkitilisi. Ne käsittelevät vain tililläsi olevaa summaa ja siirtosummaa. Kun siirrät jonkin summan tililtäsi, et polta mitään "lähtöjä", verkon ei tarvitse muistaa, mitkä kolikot on käytetty ja mitkä eivät. Yksinkertaisimmassa tapauksessa tapahtuman vahvistus tarkoittaa lähettäjän allekirjoituksen ja hänen saldonsa tarkistamista:

Tietoja nimettömyydestä tilipohjaisissa lohkoketjuissa

Teknologian analyysi

Seuraavaksi puhumme siitä, kuinka Zether piilottaa tapahtuman summan, vastaanottajan ja lähettäjän. Kun kuvailemme sen toiminnan periaatteita, huomaamme erot luottamuksellisessa ja nimettömässä versiossa. Koska tilipohjaisissa lohkoketjuissa on paljon helpompi varmistaa luottamuksellisuus, jotkin anonymisoinnin asettamat rajoitukset eivät ole merkityksellisiä tekniikan luottamukselliselle versiolle.

Saldojen ja siirtosummien piilottaminen

Zetherin saldojen ja summien salaamiseen käytetään salausjärjestelmää El Gamal. Se toimii seuraavasti. Kun Alice haluaa lähettää Bobin b kolikot osoitteen mukaan (sen julkinen avain) Y, hän valitsee satunnaisen luvun r ja salaa summan:

Tietoja nimettömyydestä tilipohjaisissa lohkoketjuissa
missä C - salattu määrä, D - tämän määrän tulkitsemiseen tarvittava apuarvo, G - kiinteä piste elliptisellä käyrällä, kun kerrotaan salaisella avaimella, saadaan julkinen avain.

Kun Bob saa nämä arvot, hän yksinkertaisesti lisää ne salattuun saldoonsa samalla tavalla, minkä vuoksi tämä menetelmä on kätevä.

Samalla tavalla Alice vähentää saldostaan ​​samat arvot, vain kuin Y käyttää julkista avaimesi.

Vastaanottajan ja lähettäjän piilottaminen

"Tulosteiden" sekoittaminen UTXO:ssa juontaa juurensa kryptovaluuttojen alkuaikaan ja auttaa piilottamaan lähettäjän. Tätä varten lähettäjä itse kerää siirtoa tehdessään satunnaisia ​​"lähtöjä" lohkoketjuun ja sekoittaa ne omiinsa. Seuraavaksi hän allekirjoittaa "tulosteet" rengasallekirjoituksella - salausmekanismilla, jonka avulla hän voi vakuuttaa varmentajan siitä, että lähettäjän kolikot ovat mukana "tulosteiden" joukossa. Itse sekoitettuja kolikoita ei tietenkään käytetä.

Emme kuitenkaan voi luoda vääriä tulosteita vastaanottajan piilottamiseksi. Siksi UTXO:ssa jokaisella "ulostulolla" on oma yksilöllinen osoite, ja se on kryptografisesti linkitetty näiden kolikoiden vastaanottajan osoitteeseen. Tällä hetkellä ei ole mahdollista tunnistaa yksilöllisen lähtöosoitteen ja vastaanottajan osoitteen välistä suhdetta ilman sen salaisia ​​avaimia.

Tilipohjaisessa mallissa emme voi käyttää kertaluontoisia osoitteita (muuten se on jo poistumismalli). Siksi vastaanottaja ja lähettäjä on sekoitettava lohkoketjun muiden tilien joukkoon. Tässä tapauksessa sekatileiltä veloitetaan salattu 0 kolikkoa (tai 0 lisätään, jos vastaanottaja on sekoitettu), muuttamatta niiden todellista saldoa.

Koska sekä lähettäjällä että vastaanottajalla on aina pysyvä osoite, tulee samoihin osoitteisiin siirrettäessä käyttää samoja ryhmiä sekoittamiseen. Tätä on helpompi tarkastella esimerkin avulla.

Oletetaan, että Alice päättää lahjoittaa Bobin hyväntekeväisyyteen, mutta haluaa, että siirto pysyy nimettömänä ulkopuoliselle tarkkailijalle. Naamioituakseen lähettäjäkenttään hän syöttää myös Adamin ja Adelen tilit. Ja piilottaaksesi Bobin, lisää Benin ja Billin tilit vastaanottajakenttään. Tehdessään seuraavan panoksen Alice päätti kirjoittaa Alexin ja Amandan viereensä ja Bruce ja Benjenin Bobin viereen. Tässä tapauksessa lohkoketjua analysoitaessa näissä kahdessa tapahtumassa on vain yksi risteävä osallistujapari - Alice ja Bob, joka poistaa nämä tapahtumat anonymisoimalla.

Tietoja nimettömyydestä tilipohjaisissa lohkoketjuissa

Transaktiokilpailut

Kuten olemme jo maininneet, piilottaakseen saldosi tilipohjaisissa järjestelmissä käyttäjä salaa saldonsa ja siirtosummansa. Samalla hänen on todistettava, että hänen tilinsä saldo ei ole negatiivinen. Ongelmana on, että tapahtumaa luodessaan käyttäjä rakentaa todisteen nykyisestä tilinsä tilasta. Mitä tapahtuu, jos Bob lähettää tapahtuman Alicelle, ja se hyväksytään ennen kuin Alicen lähettämä tapahtuma? Silloin Alicen kauppa katsotaan pätemättömäksi, koska saldotodistus laadittiin ennen kuin Bobin kauppa hyväksyttiin.

Tietoja nimettömyydestä tilipohjaisissa lohkoketjuissa

Ensimmäinen tällaisessa tilanteessa tehty päätös on jäädyttää tili, kunnes tapahtuma on suoritettu. Mutta tämä lähestymistapa ei sovellu, koska sen lisäksi, että tällaisen ongelman ratkaiseminen hajautetussa järjestelmässä on monimutkainen, nimettömässä järjestelmässä ei ole selvää, kenen tili estetään.

Tämän ongelman ratkaisemiseksi tekniikka erottaa saapuvat ja lähtevät tapahtumat: menoilla on välitön vaikutus taseeseen, kun taas tuloilla on viivästynyt vaikutus. Tätä varten otetaan käyttöön "aikakauden" käsite - ryhmä kiinteän kokoisia lohkoja. Nykyinen "aikakausi" määritetään jakamalla lohkon korkeus ryhmän koolla. Tapahtumaa käsitellessään verkko päivittää välittömästi lähettäjän saldon ja tallentaa vastaanottajan varat varastosäiliöön. Kertyneet varat ovat maksunsaajan käytettävissä vasta, kun uusi "aikakausi" alkaa.

Tämän seurauksena käyttäjä voi lähettää tapahtumia riippumatta siitä, kuinka usein varoja vastaanotetaan (tietysti sikäli kuin hänen saldonsa sallii). Epookin koko määräytyy sen perusteella, kuinka nopeasti lohkot etenevät verkon läpi ja kuinka nopeasti tapahtuma saapuu lohkoon.

Tämä ratkaisu toimii hyvin luottamuksellisissa siirroissa, mutta anonyymeissä tapahtumissa, kuten myöhemmin näemme, se aiheuttaa vakavia ongelmia.

Suojaus toistohyökkäyksiä vastaan

Tilipohjaisissa lohkoketjuissa jokainen tapahtuma allekirjoitetaan lähettäjän yksityisellä avaimella, mikä vakuuttaa varmentajan siitä, että tapahtumaa ei ole muokattu ja että sen on luonut tämän avaimen omistaja. Mutta entä jos siirtokanavaa kuunnellut hyökkääjä sieppaa tämän viestin ja lähettää täsmälleen saman toisen? Todentaja tarkistaa tapahtuman allekirjoituksen ja on vakuuttunut sen tekijöistä, ja verkko kirjaa uudelleen saman summan lähettäjän saldosta.

Tätä hyökkäystä kutsutaan toistohyökkäykseksi. UTXO-mallissa tällaiset hyökkäykset eivät ole merkityksellisiä, koska hyökkääjä yrittää käyttää käytettyjä ulostuloja, mikä itsessään ei ole kelvollinen ja verkko hylkää sen.

Tämän estämiseksi tapahtumaan rakennetaan satunnaisia ​​tietoja sisältävä kenttä, jota kutsutaan nonce- tai yksinkertaisesti "suolaksi". Kun lähetät tapahtuman uudelleen suolalla, todentaja tarkistaa, onko noncea käytetty aiemmin, ja jos ei, hän pitää tapahtumaa kelvollisena. Jotta lohkoketjuun ei tallennettaisi koko käyttäjän nonces-historiaa, se asetetaan yleensä ensimmäisessä tapahtumassa nollaksi ja sitä lisätään sitten yhdellä. Verkko voi vain tarkistaa, että uuden tapahtuman nonce eroaa edellisestä yksitellen.

Nimettömässä siirtojärjestelmässä syntyy ongelma transaktioiden nopeuksien validoinnissa. Emme voi nimenomaisesti sitoa noncea lähettäjän osoitteeseen, koska tämä luonnollisesti tekee siirron nimettömäksi. Emme myöskään voi lisätä yhtä kaikkien osallistuvien tilien nonces-arvoihin, koska tämä voi olla ristiriidassa muiden käsiteltävien siirtojen kanssa.

Zetherin kirjoittajat ehdottavat noncen luomista kryptografisesti "aikakaudesta" riippuen. Esimerkiksi:

Tietoja nimettömyydestä tilipohjaisissa lohkoketjuissa
Täällä x on lähettäjän salainen avain ja Gepoch — lisägeneraattori aikakaudelle, joka saadaan tiivistämällä merkkijono muotoa Zether +. Nyt ongelma näyttää olevan ratkaistu - emme paljasta lähettäjän välinpitämättömyyttä emmekä puutu asiaan osallistumattomien osallistujien välinpitämättömyyksiin. Mutta tämä lähestymistapa asettaa vakavan rajoituksen: yksi tili voi lähettää enintään yhden tapahtuman "aikakautena". Tämä ongelma on valitettavasti edelleen ratkaisematta ja tekee tällä hetkellä Zetherin anonyymistä versiosta tuskin sopivan käytettäväksi.

Nollatiedon monimutkaisuus

UTXO:ssa lähettäjän on todistettava verkolle, että hän ei kuluta negatiivista summaa, muuten on mahdollista luoda tyhjästä uusia kolikoita (miksi tämä on mahdollista, kirjoitimme yhdessä edellisistä artikkelit). Ja allekirjoita myös "syötteet" rengasallekirjoituksella todistaaksesi, että sekoitettujen kolikoiden joukossa on varoja, jotka kuuluvat hänelle.

Tilipohjaisen lohkoketjun nimettömässä versiossa todistuslausekkeet ovat paljon monimutkaisempia. Lähettäjä todistaa, että:

  1. Lähetetty summa on positiivinen;
  2. Saldo ei ole negatiivinen;
  3. Lähettäjä salasi siirtosummat oikein (mukaan lukien nolla);
  4. Saldon saldo muuttuu vain lähettäjän ja vastaanottajan osalta;
  5. Lähettäjä omistaa tilinsä yksityisen avaimen ja hän on itse asiassa lähettäjien luettelossa (osallistuneiden joukossa);
  6. Tapahtumassa käytetty Nonce on muodostettu oikein.

Tällaista monimutkaista todistusta varten kirjoittajat käyttävät seosta luodinkestävä (yksi kirjoittajista muuten osallistui sen luomiseen) ja Sigma protokolla, joita kutsutaan Sigma-luodeiksi. Tällaisen lausunnon muodollinen todistaminen on melko vaikea tehtävä, ja se rajoittaa suuresti niiden ihmisten määrää, jotka haluavat ottaa teknologian käyttöön.

Tulos?

Mielestämme Zetherin sitä osaa, joka tuo yksityisyyttä tilipohjaisiin lohkoketjuihin, voidaan käyttää juuri nyt. Mutta tällä hetkellä tekniikan anonyymi versio asettaa vakavia rajoituksia sen käytölle ja sen monimutkaisuuteen sen toteuttamiselle. Ei kuitenkaan pidä vähätellä sitä, että kirjoittajat julkaisivat sen vasta muutama kuukausi sitten, ja ehkä joku muu löytää ratkaisun nykyisiin ongelmiin. Loppujen lopuksi tiedettä tehdään näin.

Lähde: will.com

Lisää kommentti