Jäljittyvä anonyymi bittikäteinen (4) [ < Erikoisia proto... < Kryptoprotoko... ]

Vaikka setelit ovat anonyymeja, suuret määrät sellaisia eivät aina ole (paitsi täydellisesti väärennetyt). Tämä on tarkoituksenmukaista, jotta voidaan torjua rikoksella hankitun rahan pesemistä. Myös lahjonnan ja kiristyksen torjunnassa voi olla hyötyä, jos rahan liikkeitä voidaan jäljittää. Anonyymin bittikäteisen perusmallissa on liikaa anonymiteettia aivan tekniseltäkin kannalta. Siinä joku voi ehtiä käyttää saman bittisetelin useampaan kertaan jäämättä kiinni. Seuraavassa protokollassa saavutetaan lisäksi se, että pankki saa selville, kumpi on syyllinen, maksaja vain maksun vastaanottaja, jos nostoa yritetään toistamiseen samalla setelillä.

Perusmalli on entinen, eli maksaja laatii setelin, maksumääräyksen, ja saa sille sokean allekirjoituksen. Nyt setelillä on aiempaa mutkikkaampi rakenne ja järjestelmä sisältää moninkertaista toisteisuutta kahdessa ulottuvuudessa.

Ensinnäkin pankki sitouttaa laatijan tekemään vain oikeanlaisia seteleitä valitsemalla allekirjoitettavakseen lukuisista vaihtoehtoisista seteleistä vain yhden, johon pankki luottaa sen ansiosta, että kaikki muut ovat olleet kunnossa.

Toinen moninkertaisuus on siinä, että seteliin on talletettu laatijan yksilöivä tunnus useaan kertaan. Jokainen tunnus on jaettu kahteen satunnaiseen puolikkaaseen ja laatija sitoutunut bit-commitment-menettelyllä kumpaankin. Myyjä vaatii satunnaishaasteella jokaisesta tunnuksesta toisen puolikkaan. Jos asiakas yrittää kahdesti maksaa samalla setelillä, hän tulee suurella todennäköisyydellä antaneeksi jostain tunnuksesta molemmat puolikkaat ja pankki pystyy sitten laskemaan nämä yhteen. Harjoitus. Miten tässä generoitaviin bittiseteleihin voisi liittää "parasta-ennen-päiväyksen"?

  1. P valmistaa n kpl nimettömiä maksumääräyksiä tietylle kiinteälle summalle (n on luokkaa 100). Jokainen määräys sisältää myös
    • satunnaisen yksikäsitteisyysluvun (unicity number) X ja
    • n paria yksilöintilukuja (Y1,Z1), ...(Yn,Zn). Kukin pari (Y,Z) on muodostettu seuraavasti P:n yksilöintiin tarvittavasta bittijonosta I (identity string):
      1. P halkaisee salaisuuden I:n, esim. valitsemalla I:n mittaisen satunnaisen bittijonon Y' ja laskemalla Z' = I XOR Y'.
      2. P sitoutuu bittijonoihin Y' ja Z' eli muodostaa niistä bit-commitment-viestit Y ja Z, jotka esim. yksisuuntaista funktiota h käyttäen voisivat olla Y = h(r1, r2, Y'), r1   ja   Z = h(r3, r4, Z'), r3.
  2. P sokaisee maksumääräykset sokeutustekijöillä ja antaa ne pankille.
  3. Pankki pyytää P:tä purkamaan sokaisun (n-1):stä pankin satunnaisesti valitsemasta määräyksestä ja avaamaan myös niiden yksilöintitiedot. Pankki todentaa, että ne on muodostettu oikein: rahamäärä on kaikissa sama, yksikäsitteisyysluku eri ja yksilöintitieto kaikissa sellainen, kuin pankki on edellyttänyt.
  4. Jos pankki päätyi uskomaan, että P ei huijaa, pankki allekirjoittaa jäljelle jääneen määräyksen, palauttaa sen P:lle ja vähentää vastaavan summan tämän tililtä.
  5. P purkaa sokaisun ja lähettää määräyksen maksuksi myyjälle.
  6. Myyjä tarkastaa, että määräyksessä on pankin allekirjoitus.
  7. Myyjä lähettää P:lle n:n mittaisen satunnaisen bittijonon.
  8. P lähettää myyjälle maksumääräyksen kunkin yksilöintiparin ensimmäisen tai toisen puolikkaan avattuna, siis Y':n tai Z':n - sen mukaan onko bittijonossa 0 vai 1.
  9. Myyjä toimittaa maksumääräyksen pankkiin, mukaanlukien vaiheessa 8 saamansa tiedot.
  10. Pankki tarkastaa allekirjoituksensa ja sen, ettei tietokannassa ole yksikäsitteisyyslukua. Jos maksumääräys läpäisee nämä tarkastukset, pankki hyvittää myyjän tiliä asianmukaisella summalla ja tallettaa yksikäsitteisyysluvun ja yksilöintitiedon puolikkaat tietokantaan.
  11. Mikäli yksikäsitteisyysluku löytyy tietokannasta, pankki ei hyväksy maksumääräystä, vaan vertaa saamiaan yksilöintitiedon puolikkaita niihin, jotka ovat tietokannassa:
    • Jos ne ovat samat, pankki tietää, että myyjä on tallettanut saman maksumääräyksen aiemminkin.
    • Jos ne ovat erilaiset, pankki tietää, että P on maksanut uudestaan samalla maksumääräyksellä. Erityisesti vaihe 7-8 on tapahtunut kaksi kertaa ja bittijonot ovat olleet jossain kohden erilaiset. Siinä kohdassa pankilla on sekä Y' että Z', joten pankki tietää, kuka P oli.
Vastaus harjoitukseen on ilmeinen. Päiväys on vastaavanlainen tieto kuin setelin arvo, joten se voidaan ottaa osaksi maksumääräystä. Yksinkertaisempaankin bittikäteisen järjestelmään on mahdollista kytkeä päiväys, mutta se asettuu mukaan matematiikkaan "puolisokean" allekirjoituksen avulla.

Kuten alussa jo todettiin, on poliittisia syitä kehittää sellaisia järjestelmiä, joissa anonymiteetti voidaan erikoistilanteissa purkaa. Yksi ehdotus tällaiseksi järjestelmäksi on "Digital payment systems with passive anonymity-revoking trustees" (J. Camenisch, U. Maurer, M. Stadler, 1997, [linkit eri tiedostomuotoihin]). Siinä luotetut osapuolet eivät ole tekemisissä tilinavauksen eivätkä maksutapahtuman kanssa (joka voi olla on- tai off-line). He astuvat kuvaan vasta, jos perusteltu epäilys herää. Tämäkin järjestelmä perustuu diskreetin logaritmin vaikeuteen.