Bitcoins
Gepost in /Software op 26 November 2013Deze blog is geschreven door Christiaan Schaake
Bitcoin
Bitcoin is een opensource geldsysteem. Het systeem is niet van een bank of land, maar iedereen kan en mag meedoen, overal in de wereld. Bitcoin is ontwikkeld in 2009 en bestaat uit een set aan afspraken hoe een Bitcoin er uit ziet. Om mee te doen hoef je alleen een Bitcoin wallet programma te installeren, je bent dus je eigen bank. Er zijn geen aanmelding criteria en je hoeft nergens lid van te worden.
De eerste Bitcoin is uitgegeven in 2009. Bitcoins worden ‘gemaakt’ door Bitcoin miners. Dit zijn particulieren of bedrijven die middels een Bitcoin mining programma zoeken naar nieuwe Bitcoins. (Zie ook de blog over Bitcoin mining) Afgesproken is dat er nooit meer dan 21 miljoen Bitcoins in omloop gaan komen. Dit doel wordt vermoedelijk rond 2020 gehaald. Een ingebouwd mechanisme zorgt er voor dat Bitcoins geleidelijk worden gevonden zodat de kans voor het vinden van nieuwe Bitcoins eerlijk verdeeld is. Na een x-aantal nieuwe Bitcoins wordt automatisch de moeilijkheid graad van het vinden van nieuwe Bitcoins verhoogd of verlaagd.
Bitcoin wallet
De Bitcoin wallet is een soort digitale portemonnee waarin je je Bitcoins bewaard. Een Bitcoin wallet is een adres in het Bitcoin netwerk. Het netwerk zelf weet immers precies welke Bitcoins er op een wallet adres zijn ontvangen en welke reeds zijn betaald uit dezelfde wallet. De wallet bestaat uit 2 onderdelen. Het publieke deel, een soort bank rekening nummer voor Bitcoins. En een private deel, de bankrekening zelf.

Het figuur (gemaakt op https://www.bitaddress.org) toont een papieren Bitcoin wallet. Het linker deel bevat het publieke deel waarnaar een betaler Bitcoins kan versturen. Het rechter deel is de rekening zelf die ingelezen kan worden in een wallet client. Gebruik dit voorbeeld niet, iedereen kan deze private key inlezen in zijn wallet en dus de waarde in deze wallet uitgeven!
Voor Bitcoin wallet clients zijn er grofweg 2 varianten. Je kunt een eigen wallet client installeren (opensource software), of je kunt een online wallet aanmaken. De Bitcoin wallet software leest de volledige Bitcoin database in, dit neemt ongeveer 15 gigabyte aan ruimte diskruimte in beslag. Bij het opstarten van de wallet client software wordt de database eerst bijgewerkt, dit kan soms minuten duren (eerste keer duurt zelfs een paar uur!).
Een online wallet is overal bereikbaar, maar je vertrouwd wel een ander je Bitcoins toe. Helaas valt Bitcoin niet onder de bescherming van de Nederlandse bank. Is de wallet service weg, ben je ook je Bitcoins kwijt.
Dit geld overigens ook voor je eigen locale wallet client. Ben je je wallet kwijt omdat je harddisk gecrashed is, ben je ook je Bitcoins kwijt. Het beste kun je dan ook je wallet (wallet.dat) veilig kopiëren naar b.v. een usb stick. Een wallet is versleuteld met een wachtwoord, ook hier geldt weer, wachtwoord kwijt = Bitcoins kwijt. Uiteraard zou je ook je wallet private key op een papiertje kunnen schrijven en deze in een kluis bewaren.
Bitcoins die verloren raken, zullen nooit meer gebruikt kunnen worden. Er is niemand die verloren of bevroren Bitcoins kan claimen of vrijgeven.
Netwerk
Het Bitcoin netwerk bestaat uit een groot aantal servers welke een kopie onderhouden van de Bitcoin database. De Bitcoin database bevat alle Bitcoin transacties vanaf het ontstaan van een Bitcoin. De servers kunnen worden gehost door commerciële bedrijven, maar kunnen ook servers zijn bij particulieren. Alle Bitcoin servers communiceren via een zogenaamd point-to-point netwerk. Dit betekend dat een server verbinding maakt met enkele andere servers, deze servers maken weer verbinding met meerdere andere servers. Zo ontstaat een netwerk van aan elkaar verbonden servers. Wanneer één server weg valt maken de andere servers direct weer verbinding met een andere wel actieve server. Een Bitcoin wallet maakt ook connectie met het Bitcoin netwerk door met meerdere servers gelijktijdig een verbinding op te zetten.

Dit mechanisme maakt het Bitcoin netwerk erg stabiel en nagenoeg onfeilbaar. Geen enkel bedrijf of overheid kan het Bitcoin netwerk ‘uit de lucht’ halen.
Adres
Bij het installeren van een wallet wordt automatisch een nieuw uniek adres aangemaakt. Dit is het ‘bankrekening nummer’. Dit adres bevat uit een lange combinatie van cijfers en letters (b.v. 1rYK1YzFGa59pl214149KUF2Za4jAYYTa). Door de opbouw van het adres is het onmogelijk dat iemand anders hetzelfde adres heeft. Een wallet kan meerdere adressen bevatten, zo kun je eenvoudig meerdere rekeningen onderhouden. Het adres zelf is niet gekoppeld aan een naam of echt adres. Dus niemand weet van wie een adres is, tenzij je dit zelf publiceert.
Als je Bitcoins wil betalen geef je je eigen adres, het over te maken aantal Bitcoins en het adres van de ontvanger op.
Transactie
Bij het betalen van Bitcoins wordt er geen directe verbinding gemaakt tussen de wallet van de betaler en ontvanger. In plaats hiervan wordt de transactie verstuurd naar het Bitcoin netwerk. Een transactie bevat uiteraard informatie over de betaler en ontvanger van de Bitcoins. Maar nog belangrijker, welke Bitcoins precies worden uitgewisseld. De transactie bevat namelijk de id’s van de voorgaande transactie waardoor de Bitcoins in de wallet van de betaler zijn gekomen. Deze id’s staan ook in de Bitcoin database. De wallet bevat naast alle Bitcoin servers ook een kopie van de Bitcoin database. De wallet gebruikt de informatie uit de Bitcoin database om een transactie samen te stellen. Alle Bitcoin servers in het Bitcoin netwerk kunnen vervolgens deze transactie verifiëren. Zo wordt gecontroleerd of de betaler wel zijn eigen Bitcoins uitgeeft. De bitcoin database is in te zien op http://blockchain.info.
Meestal wordt er bij een transactie een (vrijwillige) transactie fee betaald. Deze fee wordt verdeeld over de Bitcoin servers die de transactie verifiëren. (Zie ook de blog over Bitcoin mining).
Wanneer de ontvanger van de transactie zijn wallet opent, wordt de Bitcoin database weer bijgewerkt. Zo komt ook de nieuwe transactie welke aan deze wallet is geadresseerd binnen. Niemand kan zien waar een transactie vandaan komt of waar een transactie naar toe gaat. Er worden geen IP-adressen of iets dergelijks bijgehouden.
Bitcoin transacties zijn niet terug te draaien. Eenmaal verstuurd zal de transactie uitgevoerd worden (tenzij de transactie niet te valideren is doordat er onjuiste software wordt gebruikt).
Om nu te voorkomen dat iemand zo maar een wallet kan aanmaken met een adres dat al bestaat, en dus alle transactie welke voor dit adres bestemt zijn in zijn wallet kan krijgen, worden transacties ondertekend met een certificaat.
Ondertekening transacties
Het Bitcoin adres is feitelijk een public key. Een public key is een mathematisch gegenereerde code die gebruikt kan worden om informatie te versleutelen en te ontsleutelen. Een public key kent altijd een private key. Informatie versleuteld met een private key kan alleen met de bijbehorende public key worden ontsleutelt. Dit mechanisme werkt beide kant op, dus informatie versleuteld met een public key kan alleen met de bijbehorende private key worden ontsleutelt.
Door in een Bitcoin transactie de private key van de zender te gebruiken om de transactie te versleutelen kan iedereen met de public key valideren dat de transactie ongewijzigd verstuurd is door de zender. Door verder ook de public key van de ontvanger te gebruiken kan alleen de rechtmatige ontvanger via zijn private key de Bitcoins in de transactie gebruiken.
Dit versleutelings mechanisme gebeurd volledig op de achtergrond door de Bitcoin wallet software. Het is wel belangrijk nooit je private key rond te laten slingeren. Dus bescherm je wallet goed, met een goed wachtwoord en verwijder de wallet software volledig wanneer je je pc weg doet.