Siirry suoraan sisältöön

Mitä nonce tarkoittaa kryptossa? Selkeä selitys

Table of Contents

Lohkoketjuteknologian sanasto sisältää monia teknisiä käsitteitä, joista yksi keskeisimmistä on nonce. Sana on lyhenne englannin ilmaisusta ”number used once”, eli kertaalleen käytettävä luku.

Nonce on pieni mutta tärkeä osa kryptovaluuttojen toimintaa: sillä on keskeinen rooli erityisesti Proof of Work -louhinnassa, jota myös Litecoin käyttää. Tässä artikkelissa käydään selkeästi läpi, mitä nonce tarkoittaa, miten se ohjaa louhintaa, mikä on transaktiononce ja miten sen avulla voi jopa korjata jumiutuneen siirron.

Mikä on nonce?

Nonce on luku, jota käytetään kryptografisessa laskennassa. Lohkoketjussa tieto tallennetaan lohkoihin, jotka linkitetään toisiinsa tiivisteellä eli hash-arvolla. Jotta uusi lohko voidaan lisätä ketjuun, sen hash-arvon on täytettävä tietyt matemaattiset ehdot.

Koska lohkon transaktiotiedot ja edellisen lohkon hash ovat kiinteitä, louhija tarvitsee yhden vapaasti muutettavan muuttujan, jolla hän voi vaikuttaa lohkon lopulliseen hash-arvoon. Tämä muuttuja on nonce.

On tärkeää tietää heti alussa, että ”nonce” tarkoittaa kryptossa kahta hieman eri asiaa: louhintanoncea (Proof of Work) ja transaktiononcea (esimerkiksi Ethereumissa). Käsittelemme molemmat.

Kaksi eri noncea

Sana ”nonce” tarkoittaa kryptossa kahta eri asiaa eri yhteyksissä.

OminaisuusLouhintanonceTransaktiononce
MissäProof of Work (esim. Litecoin, Bitcoin)Tilipohjaiset ketjut (esim. Ethereum)
TehtäväRatkaista lohkon hash-arvoitusMäärittää siirtojen järjestys
LuonneEtsitään kokeilemalla (brute force)Kasvaa yhdellä joka siirrolla
EstääLohkon väärentämisenSaman siirron toiston (replay)

Louhintanonce ja hash-funktiot

Lohkoketjun turvallisuus perustuu hash-funktioiden ominaisuuksiin: sama syöte tuottaa aina saman tuloksen, mutta syötteen pienikin muutos vaihtaa lopputuloksen täysin. Tätä kutsutaan lumivyöry- eli avalanche-efektiksi.

Jos lohkon nonce on ”1”, hash on aivan erilainen kuin jos noncena on ”2”. Louhija ei voi laskea takaperin, mikä luku tuottaisi halutun tuloksen, vaan hänen on kokeiltava lukuja yksitellen. Juuri tämä tekee louhinnasta työlästä.

Miten nonce ohjaa louhintaa?

Proof of Work -verkkojen, kuten Litecoinin ja Bitcoinin, louhinta perustuu matemaattiseen kilpailuun. Louhijat validoivat odottavat transaktiot, paketoivat ne lohkoksi ja etsivät noncea, joka tuottaa verkon vaatimukset täyttävän hash-arvon.

Verkko asettaa vaikeustason (difficulty) ja siihen liittyvän tavoitteen (target). Käytännössä louhijan löytämän hash-arvon on oltava numeerisesti pienempi kuin tavoite – mitä pienempi tavoite, sitä enemmän nollia hashin alussa vaaditaan ja sitä vaikeampi ratkaisu on löytää.

Kaksi eri noncea

Sana ”nonce” tarkoittaa kryptossa kahta eri asiaa eri yhteyksissä.

OminaisuusLouhintanonceTransaktiononce
MissäProof of Work (esim. Litecoin, Bitcoin)Tilipohjaiset ketjut (esim. Ethereum)
TehtäväRatkaista lohkon hash-arvoitusMäärittää siirtojen järjestys
LuonneEtsitään kokeilemalla (brute force)Kasvaa yhdellä joka siirrolla
EstääLohkon väärentämisenSaman siirron toiston (replay)

Voit lukea louhinnasta käytännössä oppaastamme Litecoin louhinta sekä artikkelista näin louhit Litecoinia.

Kun 32-bittinen nonce loppuu kesken

Bitcoinin lohkon otsikossa nonce on 32-bittinen kenttä, eli se voi saada arvoja välillä 0 ja noin 4,29 miljardia. Nykyisillä tehokkailla ASIC-laitteilla tämä määrä käydään läpi hyvin nopeasti.

Kun mikään näistä arvoista ei tuota kelvollista hashia, louhijat hyödyntävät niin sanottua extra nonce -kenttää, joka sijaitsee lohkon coinbase-transaktiossa (ensimmäinen transaktio, jossa lohkopalkkio luodaan). Extra noncen muuttaminen muuttaa lohkon Merkle-juurta, mikä avaa tavallisen noncen selattavaksi taas alusta.

Vaikeustaso ja lohkoaika

Verkon vaikeustaso säädetään automaattisesti, jotta uuden lohkon löytämiseen kuluu keskimäärin vakioaika riippumatta louhijoiden määrästä. Esimerkiksi Bitcoin-verkossa vaikeustaso säädetään noin kahden viikon (2016 lohkon) välein, tavoitteena noin 10 minuutin lohkoaika.

Oikean noncen löytäminen vaatii valtavasti työtä, mutta sen oikeellisuuden tarkistaminen on erittäin nopeaa: muiden solmujen tarvitsee vain ajaa ilmoitettu nonce lohkodataa vasten ja todeta, että hash täyttää ehdon. Tämä epäsymmetria – vaikea löytää, helppo tarkistaa – on Proof of Workin ydin.

Löydetty nonce toimii todisteena tehdystä työstä: solmujen ei tarvitse luottaa louhijaan, vaan pelkkä matemaattinen tarkistus riittää.

Transaktiononce Ethereumissa

Vaikka nonce liitetään usein louhintaan, sillä on toinen, yhtä tärkeä rooli tilipohjaisissa ketjuissa kuten Ethereumissa. Ethereum on siirtynyt Proof of Stakeen, joten se ei käytä louhintanoncea – mutta jokaisella lompakko-osoitteella on oma transaktiononce.

Osoitteen nonce kertoo, kuinka monta transaktiota kyseisestä lompakosta on lähetetty. Ensimmäisen siirron nonce on 0, seuraavan 1 ja niin edelleen. Luku on julkinen ja kasvaa yhdellä jokaisen vahvistetun siirron jälkeen. Verkko käsittelee siirrot tiukassa numerojärjestyksessä.

Miten nonce estää uusintahyökkäyksen?

Transaktiononce estää niin sanotun uusintahyökkäyksen (replay attack). Jokainen siirto sisältää lompakon senhetkisen nonce-luvun, ja allekirjoitus kattaa myös tämän luvun. Kun siirto on kertaalleen käsitelty, lompakon nonce on jo siirtynyt seuraavaan arvoon, joten sama allekirjoitettu siirto ei kelpaa uudelleen – solmut hylkäävät sen automaattisesti.

Käytännön hyöty: jumiutuneen siirron korjaaminen

Transaktiononce voi tulla tavalliselle käyttäjälle tutuksi, kun siirto jää ”pending”-tilaan. Tämä johtuu usein liian matalasta siirtomaksusta (gas fee), jolloin validaattorit priorisoivat muita. Koska siirrot käsitellään numerojärjestyksessä, yksikin jumiutunut siirto voi estää sitä seuraavat.

Ratkaisu on korvata jumiutunut siirto uudella, joka käyttää täsmälleen samaa nonce-lukua mutta korkeampaa siirtomaksua. Kun uusi siirto vahvistetaan, sama nonce-paikka täyttyy ja alkuperäinen, liian halpa siirto poistuu verkon muistista (mempool).

Käytännössä: etsi jumiutuneen siirron nonce lohkoketjuselaimesta (esim. Etherscan), luo lompakossa (esim. MetaMask) uusi siirto samalla noncella ja korkeammalla maksulla, ja lähetä se. Samaa logiikkaa voi käyttää myös siirron peruuttamiseen lähettämällä itselleen nollasiirron samalla noncella – kunhan alkuperäistä siirtoa ei ole vielä vahvistettu lohkoon.

Nonce laajemmin kryptografiassa

Lohkoketjujen ulkopuolellakin nonce on tärkeä. Kun tietoa salataan, satunnainen nonce varmistaa, että kahdesta samasta viestistä syntyy kaksi erilaista salattua merkkijonoa. Tämä estää hyökkääjää tunnistamasta toistuvia kuvioita.

Samaa periaatetta käytetään esimerkiksi TLS- ja HTTPS-yhteyksissä: kun selain ja palvelin muodostavat suojatun yhteyden, molemminpuoliset nonce-luvut suojaavat istuntoa kaappaukselta. Nonce on siis yleinen kryptografinen työkalu, ei pelkästään lohkoketjuihin liittyvä.

Yhteenveto

Nonce on yksi lohkoketjuteknologian keskeisistä rakennuspalikoista. Se tarkoittaa kertaalleen käytettävää lukua, jolla on kaksi eri roolia: louhintanonce ratkaisee Proof of Work -louhinnan matemaattisen arvoituksen, ja transaktiononce määrittää siirtojen järjestyksen sekä estää uusintahyökkäykset.

Louhijalle nonce on avain lohkopalkkioon, ja tavalliselle käyttäjälle transaktiononcen ymmärtäminen voi olla hyödyllistä esimerkiksi jumiutuneen siirron korjaamisessa. Kyseessä on hyvä esimerkki siitä, miten yksinkertainen matemaattinen muuttuja ratkaisee monimutkaisia tietoturvakysymyksiä.


Huomautus: Tämä artikkeli on yleisluontoinen tekninen selitys eikä sisällä sijoitusneuvontaa. Lohkoketjujen tekniset yksityiskohdat voivat vaihdella verkoittain.


Usein kysytyt kysymykset

Mitä nonce tarkoittaa kryptossa?

Nonce (”number used once”) on kertaalleen käytettävä luku. Lohkoketjussa sillä on kaksi roolia: louhintanonce ratkaisee Proof of Work -arvoituksen, ja transaktiononce määrittää siirtojen järjestyksen.

Miksi louhijat tarvitsevat noncea?

Nonce on lohkon otsikon ainoa vapaasti muutettava kenttä. Muuttamalla sitä louhija saa lohkosta uusia hash-arvoja, kunnes löytyy sellainen, joka täyttää verkon vaikeustason vaatimukset.

Mikä on louhintanoncen ja transaktiononcen ero?

Louhintanonce on Proof of Work -louhinnassa etsitty luku, jolla ratkaistaan lohkon hash-arvoitus. Transaktiononce on lompakko-osoitteen lähettämien siirtojen juokseva numero, joka määrittää käsittelyjärjestyksen ja estää uusintahyökkäykset.

Kuinka suuri Bitcoinin nonce on?

Bitcoinin lohkon otsikossa nonce on 32-bittinen, eli noin 4,29 miljardia mahdollista arvoa. Kun nämä loppuvat, louhijat muuttavat coinbase-transaktion extra nonce -kenttää saadakseen lisää vaihtoehtoja.

Miten korjaan jumiutuneen siirron noncen avulla?

Lähetä uusi siirto käyttäen täsmälleen samaa nonce-lukua kuin jumiutuneessa siirrossa, mutta korkeammalla siirtomaksulla. Verkko käsittelee kalliimman siirron, ja vanha poistuu automaattisesti.

Voiko oikean noncen laskea etukäteen?

Ei voi. Hash-funktion tulosta ei voi laskea takaperin, joten ainoa tapa löytää louhintanonce on kokeilla lukuja järjestelmällisesti (brute force). Tarkistaminen sen sijaan on nopeaa.

Käyttävätkö Proof of Stake -verkot louhintanoncea?

Eivät. Proof of Stake -verkoissa ei ole louhintakilpailua, joten louhintanoncea ei tarvita. Transaktiononcet ovat kuitenkin edelleen käytössä siirtojen järjestyksen ja uusintahyökkäysten hallintaan.