Taggat med: SHA-256

Kryptografiska valutor & Bitcoin

Kanske har du läst om Bitcoin i tidningen någon gång, om att priset går upp eller ner. Men vad är egentligen en kryptografisk valuta? Hur kan den fungera och vad skiljer den från traditionella valutor som kronor, dollar och euro?

För att svara på den fråga behöver vi först fundera på av vad en valuta är och varför de flesta valutor för det mesta går att använda för att betala för varor och tjänster. Den typiska valutan för hundra år sedan var utgiven av en centralbank som garanterade att en viss mängd av valutan gick att växla mot en given mängd av en ädel metall, till exempel guld. Centralbankens jobb är att trycka sedlar och mynt som är svåra att förfalska och att se till att det finns tillräckligt med guld i kassavalven för att alla som vill växla skall kunna få motsvarande guld.

Ett sådant system av pengar har ett stort värde för ett samhälle, eftersom det möjliggör mer komplicerad handel än byteshandel. Det visar sig också att så länge alla litar på att riksbanken inte tillverkar massor med nya sedlar och mynt så att valutan minskar dramatiskt i värde så går det att klara sig utan kopplingen till ädla metaller. Så fungerar valutor idag.

Men måste en valuta ha en centralbank? Inte nödvändigtvis. Om de går att hitta ett annat sätt att garantera att det bara finns en viss specifik mängd av något så skulle detta något också kunna användas som valuta. Något som det var lätt att känna igen och lätt att skicka från en köpare till en säljare. Med utgångspunkt i dessa kriterier skapades Bitcoin utifrån det radikala antagandet att matematik och datorers beräkningskapacitet kan användas för att skapa ett system som uppfyller kriterierna för att kunna fungera som en valuta.

Bitcoin använder två kryptografiska mekanismer: kontrollsummor och kryptografisk signatur. Dessa utgör tillsammans grundbultarna i ett komplett system för en alternativ valuta.

Kryptografisk signatur

Den som tar emot eller sänder en bitcoin behöver en adress. En adress är en publik del av BitCoinett asymmetriskt nyckelpar. Den som skapade adressen har även den andra delen, en hemlig nyckel och med hjälp av denna kan ägaren signera en ny transaktion som skickar bitcoin-värdet vidare till någon annans adress. Signaturen kan sedan verifieras med en dator som matematiskt bevisar att någon med tillgång till rätt hemlig nyckel skapade transaktionen.

Blockkedjan och gruvdrift

Att kunna skapa matematiskt säkrade transaktioner som bevisar Anna skickat en bitcoin till Berit är har visserligen sina poänger, men innan det finns ett otvetydigt sätt att avgöra att Anna har en bitcoin att skicka så är systemet som helhet lite begränsat. Det är här blockkedjan kommer in. Blockkedjan är en publikt tillgänglig länkad lista över alla giltiga transaktioner i systemet. Ungefär var tionde minut läggs ett nytt block till listan. Blocket innehåller information om en massa bitcoin-transaktioner mellan olika adresser men även en notering om några helt nya bitcoins som skapats. Det är det ända sättet att skapa bitcoins.

Vad är det så som gör att inte vem som helst när som helst kan skapa ett nytt block och lägga till listan i den process som kallas gruvdrift eller mining på engelska? Det beror på att varje block måste ha en kryptografisk kontrollsumma av typen SHA-256 med vissa speciella egenskaper. Att hitta en kontrollsumma med rätt egenskaper (den måste börja med väldigt många nollor) kräver väldigt många försök. Runt om i världen står det datorer med specialbyggda kretsar som prövar och prövar tills de hittar en kontrollsumma som uppfyller kriterierna.

Med hjälp av blockkedjan, som i dagsläget är några gigabyte stor, kan en bitcoin-klient avgöra vilka adresser som har ett saldo som ännu inte är spenderat. Den som vill skicka bitcoin till någon skapar en singerad transaktion som för över en specifik mängd bitcoin från en adress med ett saldo till en mottagaradress. Transaktionen skickas sedan till nätverket av datorer som ägnar sig åt gruvdrift och letar efter nästa block till kedjan. När transaktionen väl kommer med i ett block och fogas till kedjan går den att lita på för mottagaren.

Copyright © 2014 Noa Resare

Licensed via Creative Commons CC-By 4.0.

Bild med kryptovalutor är CC-BY 4.0 kryptera.se

Så knäcker du BitCoin

BitCoin är byggt med hjälp av ett antal olika algoritmer. Dessa algoritmer är skapade för att försvåra det som kallas för BitCoin-mining samt så används dem även för verifiering av BitCoins. Eventuella sårbarheter skulle ej resultera i att det går att skapa fiktiva pengar eftersom detta ligger i den decentraliserade strukturen (peer-to-peer).

De algoritmer som används är SHA-256 samt  RIPEMD-160 men även elliptiska kurvor (EC DSA) och mer specifikt secp256k1. Secp256k1 kommer från den öppna standarden SEC2 (läs även här).

När någon ska överföra BitCoins till en annan person så används ECDSA:

Alice signerar transaktionen med sin privata nyckel och publicerar denna signatur för andra på  Bitcoin-nätverket att kontrollera med sin publika nyckel

Dock så signeras enbart en hash av meddelandet pg.a. prestanda. För denna hash så används SHA-256 på följande sätt:

template<typename T1>
inline uint256 Hash(const T1 pbegin, const T1 pend)
{
    static unsigned char pblank[1];
    uint256 hash1;
    SHA256((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1);
    uint256 hash2;
    SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2);
    return hash2;
}

Ungefär som PGP så använder Bitcoin publika och privata -nyckelpar för att göra signaturer, men också för att publicera ett fingeravtryck vilket eg. är en RIPEMD-160-hash som gört det möjligt att skicka BitCoins till någon. BitCoin är ännu relativt otestat och svagheter eller implementationsbrister uppdagats kontinuerligt i BitCoin och här kan du läsa om en intressant uppdatering.

Så om du vill knäcka BitCoin så är det förfarande som skapar nya BitCoins det lättaste sättet i dagsläget. Ett antal metoder har publicerats och här hittar du en.

Uppdatering: Finurligt sätt att använda JavaScript för att låta webb-besökare söka efter BitCoins. Om Aftonbladet.se eller en annan stor sajt lägger in denna JavaScript-kod så kommer de att vinna lotteriet.